[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Bug#377392: Bug#450432: ... and even more bugs like this?



>>>>> Colin Watson <cjwatson@debian.org> writes:

 >> In a recent thread in debian-devel, it was suggested that lintian
 >> could call man(1) in such a way that the groff(1), called by `man',
 >> will emit warnings for every undefined macro, which is useful in
 >> catching the bugs like this:

 >> .B foo
 >> .  Note: ...

 >> Below is the patch that implements the suggestion.  Since `man'
 >> doesn't allow the `-wmac' option to be passed to `groff' by any
 >> other means, I've had to introduce two new files -- `mdoc.local' and
 >> `man.local' (to override the files in groff/site-tmac/), and the
 >> ${LINTIAN_ROOT}/groff-hack directory to hold them.

 > While I haven't reviewed the code in detail, the general approach
 > seems largely reasonable to me. However, the error the developer sees
 > will just be "manpage-has-errors-from-man", which in fact is no
 > longer really true in this case; you're specifically enabling
 > warnings that man doesn't show.  Perhaps it would be best to turn
 > these warnings from groff into a different lintian warning which can
 > have a more informative description, and ideally a way for the
 > developer to reproduce the problem.

	A helper script, `lintian-man', could be introduced to hide all
	the hackery, and to provide a way for the developer to reproduce
	the problem.  Then, Tag: may be changed to, e. g.,
	`manpage-has-messages-from-lintian-man'.  (Or should this script
	be called `man-lintian'?)

	I still hope that either `groff' or `man' will offer a way to
	specify `-w'-options for `groff' in a more clean way.  The
	helper script could then be modified, or eliminated entirely.

	The patch is as follows.  (TODO: newly introduced lintian-man
	script demands a man page on its own.)  This new version of the
	patch suppresses `.IX'-related warnings.  (TODO: the generator
	is to be fixed.)

--- lintian-1.23.36/checks/manpages	2007-10-16 10:40:04.000000000 +0700
+++ lintian-1.23.36-groff-hack/checks/manpages	2007-11-21 21:16:29.000000000 +0600
@@ -253,10 +253,11 @@
 	# processed properly.  (Yes, there are man pages that include other
 	# pages with .so but aren't simple links; rbash, for instance.)
 	my $cmd;
+	my $man_cmd = "lintian-man -l";
 	if ($file =~ m,^(.*)/(man\d/.*)$,) {
-	    $cmd = "cd unpacked/\Q$1\E && man -l \Q$2\E";
+	    $cmd = "cd unpacked/\Q$1\E && $man_cmd \Q$2\E";
 	} else {
-	    $cmd = "man -l unpacked/\Q$file\E";
+	    $cmd = "$man_cmd unpacked/\Q$file\E";
 	}
 	my $pid = open MANERRS, '-|';
 	if (not defined $pid) {
@@ -282,7 +283,7 @@
 	    }
 	    chomp;
 	    s/^[^:]+://o;
-	    tag "manpage-has-errors-from-man", "$file", "$_";
+	    tag "manpage-has-messages-from-lintian-man", "$file", "$_";
 	    last;
 	}
 	close(MANERRS);
--- lintian-1.23.36/checks/manpages.desc	2007-06-21 15:48:26.000000000 +0700
+++ lintian-1.23.36-groff-hack/checks/manpages.desc	2007-11-21 21:16:26.000000000 +0600
@@ -120,9 +120,12 @@
  Please double-check the manual page and replace the template language
  with specific information about this program.
 
-Tag: manpage-has-errors-from-man
+Tag: manpage-has-messages-from-lintian-man
 Type: warning
-Info: This man page provokes warnings or errors from man.
+Info: This man page provokes warnings or errors from lintian-man.
+ .
+ lintian-man is a helper script which behaves like man, but with Groff
+ warnings (-wman) explicitly enabled.
  .
  "cannot adjust" or "can't break" are trouble with paragraph filling,
  usually related to long lines.  Adjustment can be helped by left
--- lintian-1.23.36/debian/rules	2006-11-19 07:11:32.000000000 +0600
+++ lintian-1.23.36-groff-hack/debian/rules	2007-11-21 21:18:13.000000000 +0600
@@ -43,9 +43,12 @@
 	install -m 755 frontend/lintian $(tmp)/usr/bin/
 	sed -i 's/<VERSION>/$(VER)/' $(tmp)/usr/bin/lintian
 	install -m 755 frontend/lintian-info $(tmp)/usr/bin/
+# helper scripts
+	@echo .... install helper scripts ....
+	install -m 755 frontend/lintian-man $(tmp)/usr/bin/
 # library files
 	@echo .... install library files ....
-	for d in checks collection lib unpack; do \
+	for d in checks collection lib unpack groff-hacks; do \
 	  install -d $(usl)/$$d; \
 	  find $$d -type f ! -path '*/CVS/*' ! -path '*/.svn/*' \
 	  	| xargs -iFILE cp -p FILE $(usl)/$$d/; \
--- lintian-1.23.36/frontend/lintian-man	1970-01-01 07:00:00.000000000 +0700
+++ lintian-1.23.36-groff-hack/frontend/lintian-man	2007-11-21 21:16:48.000000000 +0600
@@ -0,0 +1,5 @@
+#!/bin/sh
+: ${LINTIAN_ROOT:=/usr/share/lintian}
+export \
+    GROFF_TMAC_PATH="${LINTIAN_ROOT}${GROFF_TMAC_PATH:+:}${GROFF_TMAC_PATH}"
+exec man "$@"
--- lintian-1.23.36/groff-hacks/man.local	1970-01-01 07:00:00.000000000 +0700
+++ lintian-1.23.36-groff-hack/groff-hacks/man.local	2007-11-21 21:27:56.000000000 +0600
@@ -0,0 +1,4 @@
+.warn 512
+.mso /usr/share/groff/site-tmac/man.local
+.de IX
+..
--- lintian-1.23.36/groff-hacks/mdoc.local	1970-01-01 07:00:00.000000000 +0700
+++ lintian-1.23.36-groff-hack/groff-hacks/mdoc.local	2007-11-21 21:27:45.000000000 +0600
@@ -0,0 +1,4 @@
+.warn 512
+.mso /usr/share/groff/site-tmac/mdoc.local
+.de IX
+..



Reply to: