]> git.donarmstrong.com Git - debhelper.git/blobdiff - dh_installman
r1869: * dh_installman: correct mistake that broke translated man page installation
[debhelper.git] / dh_installman
index 41fa6408548d5f455d83e37cf041f663d0eeadc0..6544eae46b68b79401e53babc57fecfb17724028 100755 (executable)
@@ -23,11 +23,11 @@ install them based on the section field in their .TH line. If you have a
 properly formatted .TH line, your man page will be installed into the right
 directory, with the right name (this includes proper handling of pages
 with a subsection, like "3perl", which are placed in man3, and given an
-extention of ".3perl"). If your .TH line is incorrect or missing, the program
-may guess wrong based on the file extention.
+extension of ".3perl"). If your .TH line is incorrect or missing, the program
+may guess wrong based on the file extension.
 
 It also supports translated man pages, by looking for extensions
-like .ll.8 and .ll_LL.8
+like .ll.8 and .ll_LL.8, or by use of the --language switch.
 
 If dh_installman seems to install a man page into the wrong section or with
 the wrong extension, this is because the man page has the wrong section
@@ -36,8 +36,7 @@ dh_installman will follow suit.  See to L<man(7)> for details about the .TH
 section. If dh_installman seems to install a man page into a directory
 like /usr/share/man/pl/man1/, that is because your program has a
 name like "foo.pl", and dh_installman assumes that means it is translated
-into Polish. There is currently no support for resolving this ambiguity;
-programs in debian should proably not have extensions like that anyway.
+into Polish. Use --language=C to avoid this.
 
 Any man page filenames specified as parameters will be installed into the
 first package dh_installman is told to act on. By default, this is the
@@ -60,6 +59,11 @@ is acting on contain ".so" links. If so, it changes them to symlinks.
 Install all files specified by command line parameters in ALL packages
 acted on.
 
+=item B<--language>=ll
+
+Use this to specify that the man pages being acted on are written in the
+specified language.
+
 =item I<manpage ...>
 
 Install these man pages into the first package acted on. (Or in all
@@ -82,6 +86,8 @@ my @sofiles;
 my @sodests;
 
 foreach my $package (@{$dh{DOPACKAGES}}) {
+       next if is_udeb($package);
+
        my $tmp=tmpdir($package);
        my $file=pkgfile($package,"manpages");
        my @manpages;
@@ -114,7 +120,7 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
                        open (IN, $page) or die "$page: $!";
                }
                while (<IN>) {
-                       if (/^\.TH\s+\S+\s+(\d+\S*)\s/) {
+                       if (/^\.TH\s+\S+\s+"?(\d+[^"\s]*)"?/) {
                                $section=$1;
                                last;
                        }
@@ -136,14 +142,24 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
                my ($instname)=$basename=~m/^(.*)\./;
        
                my $destdir="$tmp/usr/share/man/man$realsection/";
-               # Translated man pages are typically specified by adding the
-               # language code to the filename, so detect that and
-               # redirect to appropriate directory, stripping the code.
-               my ($langcode)=$basename=~m/.*\.([a-z][a-z](?:_[A-Z][A-Z])?)\.(?:[1-9]|man)/;
+               my $langcode;
+               if (! defined $dh{LANGUAGE} || ! exists $dh{LANGUAGE}) {
+                       # Translated man pages are typically specified by adding the
+                       # language code to the filename, so detect that and
+                       # redirect to appropriate directory, stripping the code.
+                       ($langcode)=$basename=~m/.*\.([a-z][a-z](?:_[A-Z][A-Z])?)\.(?:[1-9]|man)/;
+                       if (defined $langcode && $langcode ne '') {
+                               # Strip the language code from the instname.
+                               $instname=~s/\.$langcode$//;
+                       }
+               }
+               elsif ($dh{LANGUAGE} ne 'C') {
+                       $langcode=$dh{LANGUAGE};
+                       ($instname)=$basename=~m/(.*?)\./;
+               }
+               
                if (defined $langcode && $langcode ne '') {
                        $destdir="$tmp/usr/share/man/$langcode/man$realsection/";
-                       # Strip the language code from the instname.
-                       $instname=~s/\.$langcode$//;
                }
                $destdir=~tr:/:/:s; # just for looks
 
@@ -181,10 +197,15 @@ sub find_so_man {
        }
 
        # Test first line of file for the .so thing.
-       open (SOTEST,$_) || die "$_: $!";
+       if (/\.gz$/) {
+               open (SOTEST, "zcat $_|") or die "$_: $!";
+       }
+       else {
+               open (SOTEST,$_) || die "$_: $!";
+       }
        my $l=<SOTEST>;
        close SOTEST;
-       if ($l=~m/\.so\s+(.*)/) {
+       if ($l=~m/\.so\s+(.*)\s*/) {
                my $solink=$1;
                # This test is here to prevent links like ... man8/../man8/foo.8
                if (basename($File::Find::dir) eq