Bug#349614: manpage-has-errors-from-man: "No such file or directory" false positives
Package: lintian
Version: 1.23.14
Severity: normal
Tags: patch
Hello,
Some "No such file or directory" false positives are caused by manpages
including other manpages (with the .so request).
When man is used with a local file, the MANPATH is not used, thus the
included man page must be in the path (i.e. with ".so man1/foo.1", the
current directory must contain the man1 directory).
I propose to cd to the right directory before calling man.
Note: I don't know why $file needed to be quoted (\Q$file\E). Please check
if something else needs to be quoted in my patch.
You can test the patch with the bash package.
-- System Information:
Debian Release: testing/unstable
APT prefers unstable
APT policy: (500, 'unstable'), (1, 'experimental')
Architecture: i386 (i686)
Shell: /bin/sh linked to /bin/bash
Kernel: Linux 2.6.14
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8)
Versions of packages lintian depends on:
ii binutils 2.16.1cvs20051214-1 The GNU assembler, linker and bina
ii diffstat 1.41-1 produces graph of changes introduc
ii dpkg-dev 1.13.11.1 package building tools for Debian
ii file 4.15-2 Determines file type using "magic"
ii gettext 0.14.5-2 GNU Internationalization utilities
ii intltool-debian 0.34.1+20050828 Help i18n of RFC822 compliant conf
ii libparse-debianchang 1.0-1 parse Debian changelogs and output
ii man-db 2.4.3-3 The on-line manual pager
ii perl [libdigest-md5- 5.8.7-10 Larry Wall's Practical Extraction
lintian recommends no packages.
-- no debconf information
Thanks in advance,
--
Nekral
diff -rauN ../orig/lintian-1.23.14/checks/manpages ./lintian-1.23.14/checks/manpages
--- ../orig/lintian-1.23.14/checks/manpages 2005-08-12 21:49:07.000000000 +0200
+++ ./lintian-1.23.14/checks/manpages 2006-01-23 23:57:26.000000000 +0100
@@ -240,7 +240,14 @@
}
}
# If it's not a .so link, run it through "man" to check for errors.
- open MANERRS, '-|', "(LANG=C man -l unpacked/\Q$file\E >/dev/null) 2>&1"
+ my $cmd = "LANG=C man -l unpacked/\Q$file\E";
+ if ($file =~ m/^(.*)\/(man\d\/.*)$/) {
+ # Execute man in the directory that contains the manx
+ # directories. Otherwise, files included with .so won't be
+ # found.
+ $cmd = "cd unpacked/$1 && LANG=C man -l $2";
+ }
+ open MANERRS, '-|', "($cmd >/dev/null) 2>&1"
or fail("cannot run man -l: $!");
while (<MANERRS>) {
# ignore progress information from man
Reply to: