3 # Automatically find and install man pages. However, do not install any man
4 # pages listed on the command line.
5 # Also change man pages with .so commands in them into symlinks.
7 # This is a little bit (hah!) DWIMish, but still very handy.
10 use Debian::Debhelper::Dh_Lib;
13 # Check if a file is a man page, for use by File::Find.
17 # Does its filename look like a man page?
18 # .ex files are examples installed by deb-make,
19 # we don't want those, or .in files, which are
20 # from configure, nor do we want CVS .#* files.
21 if (! (-f $_ && /^.*\.[1-9].*$/ && ! /\.(ex|in)$/ && ! /^\.#/)) {
25 # It's not in a tmp directory is it?
26 if ($File::Find::dir=~m:debian/.*tmp.*:) {
29 foreach $dir (@allpackages) {
30 if ($File::Find::dir=~m:debian/\Q$dir\E:) {
35 # And file does think it's a real man page?
36 my $type=`file -z $_`;
37 if ($type !~ m/:.*roff/) {
42 push @manpages,"$File::Find::dir/$_";
45 # Check if a file is a .so man page, for use by File::Find.
49 # The -s test is becuase a .so file tends to be small. We don't want
50 # to open every man page. 1024 is arbitrary.
51 if (! -f $_ || -s $_ > 1024) {
55 # Test first line of file for the .so thing.
59 if ($l=~m/\.so\s+(.*)/) {
61 # This test is here to prevent links like ... man8/../man8/foo.8
62 if (Debian::Debhelper::Dh_Lib::basename($File::Find::dir) eq
63 Debian::Debhelper::Dh_Lib::dirname($solink)) {
64 $solink=Debian::Debhelper::Dh_Lib::basename($solink);
70 push @sofiles,"$File::Find::dir/$_";
71 push @sodests,$solink;
75 foreach $PACKAGE (@{$dh{DOPACKAGES}}) {
76 $TMP=tmpdir($PACKAGE);
78 # Find all filenames that look like man pages.
80 @allpackages=GetPackages('');
81 find(\&find_man,'.'); # populates @manpages
83 foreach $page (@manpages) {
84 $page=~s:^\./::; # just for looks
86 $basename=Debian::Debhelper::Dh_Lib::basename($page);
88 # Skip all files listed on command line.
90 foreach $skip (@ARGV) {
91 # Look at basename of what's on connect line
92 # for backwards compatability.
93 if ($basename eq Debian::Debhelper::Dh_Lib::basename($skip)) {
101 # Handle X man pages specially.
102 if ($basename=~/x$/) {
106 my ($section)=$basename=~m/.*\.([1-9])/;
108 my $destdir="$TMP/usr/$extdir/man/man$section/";
110 # Handle translated man pages.
111 my $instname=$basename;
112 my ($langcode)=$basename=~m/.*\.([a-z][a-z])\.([1-9])/;
113 if (defined $langcode && $langcode ne '') {
114 $destdir="$TMP/usr/$extdir/man/$langcode/man$section/";
115 $instname=~s/\.$langcode\./\./;
118 $destdir=~tr:/:/:s; # just for looks
120 if (! -e "$destdir/$basename" && !-l "$destdir/$basename") {
122 doit "install","-d",$destdir;
124 doit "install","-p","-m644",$page,$destdir.$instname;
129 # Now the .so conversion.
130 @sofiles=@sodests=();
131 foreach $dir (qw{usr/share/man usr/X11R6/man}) {
132 if (-e "$TMP/$dir") {
133 find(\&find_so_man, "$TMP/$dir");
136 foreach $sofile (@sofiles) {
137 my $sodest=shift(@sodests);
138 doit "rm","-f",$sofile;
139 doit "ln","-sf",$sodest,$sofile;