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: