]> git.donarmstrong.com Git - debhelper.git/blobdiff - dh_installdocs
Merge branch 'master' of ssh://git.debian.org/git/debhelper/debhelper
[debhelper.git] / dh_installdocs
index 2920446aec9b53b5d358554d2402bd9b9d3d5dcf..1226cf8fabe4bebd5ccc1d9a4ae009c81e3507af 100755 (executable)
@@ -11,7 +11,7 @@ use Debian::Debhelper::Dh_Lib;
 
 =head1 SYNOPSIS
 
 
 =head1 SYNOPSIS
 
-B<dh_installdocs> [S<I<debhelper options>>] [B<-A>] [B<-n>] [S<I<file ...>>]
+B<dh_installdocs> [S<I<debhelper options>>] [B<-A>] [B<-X>I<item>] [S<I<file ...>>]
 
 =head1 DESCRIPTION
 
 
 =head1 DESCRIPTION
 
@@ -20,13 +20,13 @@ documentation into usr/share/doc/package in package build directories.
 
 dh_installdocs automatically installs debian/copyright if it exists. If
 dh_installdocs is acting on multiple packages, debian/copyright files will be
 
 dh_installdocs automatically installs debian/copyright if it exists. If
 dh_installdocs is acting on multiple packages, debian/copyright files will be
-installed into all packages. However, if you need to have seperate copyright
+installed into all packages. However, if you need to have separate copyright
 files for different binary packages, you can use files named
 debian/package.copyright.
 
 Any filenames specified as parameters will be installed into the first
 package dh_installdocs is told to act on. By default, this is the first
 files for different binary packages, you can use files named
 debian/package.copyright.
 
 Any filenames specified as parameters will be installed into the first
 package dh_installdocs is told to act on. By default, this is the first
-binary package in debian/control, but if you use -p, -i, or -a flags, it
+binary package in debian/control, but if you use B<-p>, B<-i>, or B<-a> flags, it
 will be the first package specified by those flags.
 
 Also, debian/README.Debian (or debian/README.debian) and debian/TODO, if
 will be the first package specified by those flags.
 
 Also, debian/README.Debian (or debian/README.debian) and debian/TODO, if
@@ -39,16 +39,9 @@ debian/package.TODO can be used to specify files for subpackages.
 
 Files named debian/package.docs can list other files to be installed.
 
 
 Files named debian/package.docs can list other files to be installed.
 
-This program will automatically generate postinst and prerm commands to
-maintain a compatibility symlink, /usr/doc/package, to the documentation in
-/usr/share/doc/package. See L<dh_installdeb(1)> for an explanation of how
-this works.
-
 Files named debian/package.doc-base, will be installed as doc-base control
 Files named debian/package.doc-base, will be installed as doc-base control
-files, and will make this program automatically generate the postinst and
-prerm commands needed to interface with the doc-base package. Note that the
-doc-id will be determined from the "Document:" entry in the
-doc-base control file in question.
+files. Note that the doc-id will be determined from the "Document:" entry
+in the doc-base control file in question.
 
 If your package needs to register more than one document, you need multiple
 files. To accomplish this, you can use files named debian/package.doc-base.*
 
 If your package needs to register more than one document, you need multiple
 files. To accomplish this, you can use files named debian/package.doc-base.*
@@ -62,24 +55,36 @@ files. To accomplish this, you can use files named debian/package.doc-base.*
 Install all files specified by command line parameters in ALL packages
 acted on.
 
 Install all files specified by command line parameters in ALL packages
 acted on.
 
-=item B<-n>, B<--noscripts>
+=item B<-Xitem>, B<--exclude=item>
 
 
-Do not modify postinst/prerm scripts.
+Exclude files that contain "item" anywhere in their filename from
+being installed. Note that this includes doc-base files.
 
 =item I<file ...>
 
 Install these files as documentation into the first package acted on. (Or
 
 =item I<file ...>
 
 Install these files as documentation into the first package acted on. (Or
-in all packages if -A is specified).
+in all packages if B<-A> is specified).
 
 =back
 
 
 =back
 
+=head1 EXAMPLES
+
+This is an example of a debian/package.docs file:
+
+  README
+  TODO
+  debian/notes-for-maintainers.txt
+  docs/manual.txt
+  docs/manual.pdf
+  docs/manual-html/
+
 =head1 NOTES
 
 Note that dh_installdocs will happily copy entire directory hierarchies if
 =head1 NOTES
 
 Note that dh_installdocs will happily copy entire directory hierarchies if
-you ask it to (it uses cp -a internally). If it is asked to install a
+you ask it to (similar to cp -a). If it is asked to install a
 directory, it will install the complete contents of the directory.
 
 directory, it will install the complete contents of the directory.
 
-Note that this command is not idempotent. "dh_clean -k" should be called
+Note that this command is not idempotent. L<dh_prep(1)> should be called
 between invocations of this command. Otherwise, it may cause multiple
 instances of the same text to be added to maintainer scripts.
 
 between invocations of this command. Otherwise, it may cause multiple
 instances of the same text to be added to maintainer scripts.
 
@@ -88,6 +93,8 @@ instances of the same text to be added to maintainer scripts.
 init();
 
 foreach my $package (@{$dh{DOPACKAGES}}) {
 init();
 
 foreach my $package (@{$dh{DOPACKAGES}}) {
+       next if is_udeb($package);
+       
        my $tmp=tmpdir($package);
        my $file=pkgfile($package,"docs");
 
        my $tmp=tmpdir($package);
        my $file=pkgfile($package,"docs");
 
@@ -108,8 +115,29 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
        }
 
        if (@docs) {
        }
 
        if (@docs) {
-               doit("cp", "-a",@docs,"$tmp/usr/share/doc/$package/");
-               doit("chown","-R","0.0","$tmp/usr/share/doc");
+               my $exclude = '';
+               if ($dh{EXCLUDE_FIND}) {
+                       $exclude .= ' -and ! \( '.$dh{EXCLUDE_FIND}.' \)';
+               }
+               if (! compat(4)) {
+                       # ignore empty files in subdirs
+                       $exclude .= ' -and ! -empty';
+               }
+               foreach my $doc (@docs) {
+                       next if excludefile($doc);
+                       next if -e $doc && ! -s $doc && ! compat(4); # ignore empty files
+                       if (-d $doc && length $exclude) {
+                               my $basename = basename($doc);
+                               my $dir = ($basename eq '.') ? $doc : "$doc/..";
+                               my $pwd=`pwd`;
+                               chomp $pwd;
+                               complex_doit("cd '$dir' && find '$basename' \\( -type f -or -type l \\)$exclude -exec cp --parents -dp {} $pwd/$tmp/usr/share/doc/$package \\;");
+                       }
+                       else {
+                               doit("cp", "-a", $doc, "$tmp/usr/share/doc/$package");
+                       }
+               }
+               doit("chown","-R","0:0","$tmp/usr/share/doc");
                doit("chmod","-R","go=rX","$tmp/usr/share/doc");
                doit("chmod","-R","u+rw","$tmp/usr/share/doc");
        }
                doit("chmod","-R","go=rX","$tmp/usr/share/doc");
                doit("chmod","-R","u+rw","$tmp/usr/share/doc");
        }
@@ -119,13 +147,13 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
        if (! $readme_debian) {
                $readme_debian=pkgfile($package,'README.debian');
        }
        if (! $readme_debian) {
                $readme_debian=pkgfile($package,'README.debian');
        }
-       if ($readme_debian) {
+       if ($readme_debian && ! excludefile($readme_debian)) {
                doit("install","-g",0,"-o",0,"-m","644","-p","$readme_debian",
                        "$tmp/usr/share/doc/$package/README.Debian");
        }
 
        my $todo=pkgfile($package,'TODO');
                doit("install","-g",0,"-o",0,"-m","644","-p","$readme_debian",
                        "$tmp/usr/share/doc/$package/README.Debian");
        }
 
        my $todo=pkgfile($package,'TODO');
-       if ($todo) {
+       if ($todo && ! excludefile($todo)) {
                if (isnative($package)) {
                        doit("install","-g",0,"-o",0,"-m","644","-p",$todo,
                                "$tmp/usr/share/doc/$package/TODO");
                if (isnative($package)) {
                        doit("install","-g",0,"-o",0,"-m","644","-p",$todo,
                                "$tmp/usr/share/doc/$package/TODO");
@@ -147,22 +175,12 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
                if (! $copyright && -e "debian/copyright") {
                        $copyright="debian/copyright";
                }
                if (! $copyright && -e "debian/copyright") {
                        $copyright="debian/copyright";
                }
-               if ($copyright) {
+               if ($copyright && ! excludefile($copyright)) {
                                doit("install","-g",0,"-o",0,"-m","644","-p",$copyright,
                                        "$tmp/usr/share/doc/$package/copyright");
                }
        }
 
                                doit("install","-g",0,"-o",0,"-m","644","-p",$copyright,
                                        "$tmp/usr/share/doc/$package/copyright");
                }
        }
 
-       # Add in the /usr/doc compatibility symlinks code.
-       if (! $dh{NOSCRIPTS}) {
-               autoscript($package,"postinst","postinst-doc",
-                       "s/#PACKAGE#/$package/g",
-               );
-               autoscript($package,"prerm","prerm-doc",
-                       "s/#PACKAGE#/$package/g",
-               );
-       }
-
        # Handle doc-base files. There are two filename formats, the usual
        # plus an extended format (debian/package.*).
        my %doc_ids;
        # Handle doc-base files. There are two filename formats, the usual
        # plus an extended format (debian/package.*).
        my %doc_ids;
@@ -176,10 +194,14 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
                $regexp="(|$regexp)";
        }
        foreach my $fn (grep {/^${regexp}doc-base(\..*)?$/} readdir(DEB)) {
                $regexp="(|$regexp)";
        }
        foreach my $fn (grep {/^${regexp}doc-base(\..*)?$/} readdir(DEB)) {
+               # .EX are example files, generated by eg, dh-make
+               next if $fn=~/\.EX$/;
+               next if excludefile($fn);
                # Parse the file to get the doc id.
                open (IN, "debian/$fn") || die "Cannot read debian/$fn.";
                while (<IN>) {
                # Parse the file to get the doc id.
                open (IN, "debian/$fn") || die "Cannot read debian/$fn.";
                while (<IN>) {
-                       if (/^Document:\s+(.*)(\s+)?/) {
+                       s/\s*$//;
+                       if (/^Document\s*:\s*(.*)/) {
                                $doc_ids{$fn}=$1;
                                last;
                        }
                                $doc_ids{$fn}=$1;
                                last;
                        }
@@ -196,20 +218,12 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
        foreach my $fn (keys %doc_ids) {
                doit("install","-g",0,"-o",0,"-m644","-p","debian/$fn",
                     "$tmp/usr/share/doc-base/$doc_ids{$fn}");
        foreach my $fn (keys %doc_ids) {
                doit("install","-g",0,"-o",0,"-m644","-p","debian/$fn",
                     "$tmp/usr/share/doc-base/$doc_ids{$fn}");
-               if (! $dh{NOSCRIPTS}) {
-                       autoscript($package,"postinst","postinst-doc-base",
-                               "s/#DOC-ID#/$doc_ids{$fn}/",
-                       );
-                       autoscript($package,"prerm","prerm-doc-base",
-                               "s/#DOC-ID#/$doc_ids{$fn}/",
-                       );
-               }
        }
 }
 
 =head1 SEE ALSO
 
        }
 }
 
 =head1 SEE ALSO
 
-L<debhelper(1)>
+L<debhelper(7)>
 
 This program is a part of debhelper.
 
 
 This program is a part of debhelper.