X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=dh_installdocs;h=87954116b3fd3b5d9f4d31a0b61e73f8e613e581;hb=a25dfbd7276fae15fb6587375602d89ffcd7ca68;hp=7bfe8ff167803eca067f66a3b7c01ddbd53de797;hpb=8ba59bbb27c5caf42ccb9c96c9be803b3310448f;p=debhelper.git diff --git a/dh_installdocs b/dh_installdocs index 7bfe8ff..8795411 100755 --- a/dh_installdocs +++ b/dh_installdocs @@ -11,7 +11,7 @@ use Debian::Debhelper::Dh_Lib; =head1 SYNOPSIS -B [S>] [B<-A>] [B<-n>] [B<-X>I] [S>] +B [S>] [B<-A>] [B<-X>I] [S>] =head1 DESCRIPTION @@ -20,7 +20,7 @@ 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 -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. @@ -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. -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 for an explanation of how -this works. - 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.* @@ -62,14 +55,10 @@ 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. -=item B<-n>, B<--noscripts> - -Do not modify postinst/prerm scripts. - =item B<-Xitem>, B<--exclude=item> Exclude files that contain "item" anywhere in their filename from -being installed. +being installed. Note that this includes doc-base files. =item I @@ -78,13 +67,24 @@ in all packages if B<-A> is specified). =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 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. -Note that this command is not idempotent. "dh_clean B<-k>" should be called +Note that this command is not idempotent. L should be called between invocations of this command. Otherwise, it may cause multiple instances of the same text to be added to maintainer scripts. @@ -93,6 +93,8 @@ instances of the same text to be added to maintainer scripts. init(); foreach my $package (@{$dh{DOPACKAGES}}) { + next if is_udeb($package); + my $tmp=tmpdir($package); my $file=pkgfile($package,"docs"); @@ -115,22 +117,27 @@ foreach my $package (@{$dh{DOPACKAGES}}) { if (@docs) { my $exclude = ''; if ($dh{EXCLUDE_FIND}) { - $exclude = ' -and ! \( '.$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); - if (-d $doc && $exclude) { - my ($dir_basename) = basename($doc); - # Pity there's no cp --exclude .. - my $pwd=`pwd`; - chomp $pwd; - complex_doit("cd $doc/.. && find $dir_basename -type f$exclude -exec cp --parents -dp {} $pwd/$tmp/usr/share/doc/$package \\;"); + 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("cp", "-a", $doc, "$tmp/usr/share/doc/$package"); } } - doit("chown","-R","0.0","$tmp/usr/share/doc"); + 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"); } @@ -174,16 +181,6 @@ foreach my $package (@{$dh{DOPACKAGES}}) { } } - # 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; @@ -197,10 +194,13 @@ foreach my $package (@{$dh{DOPACKAGES}}) { $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 () { - if (/^Document:\s+(.*)(\s+)?/) { + if (/^Document:\s+([-+.a-z0-9]+)/) { $doc_ids{$fn}=$1; last; } @@ -217,20 +217,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}"); - 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 -L +L This program is a part of debhelper.