diff options
Diffstat (limited to 'dh_installdocs')
-rwxr-xr-x | dh_installdocs | 209 |
1 files changed, 45 insertions, 164 deletions
diff --git a/dh_installdocs b/dh_installdocs index b991162f..101110da 100755 --- a/dh_installdocs +++ b/dh_installdocs @@ -1,174 +1,67 @@ #!/usr/bin/perl -w +# +# Reads debian/docs, installs all files listed there into /usr/doc/$PACKAGE +# Also installs the debian/copyright and debian/README.debian and debian/TODO +# and handles debian/doc-base. -=head1 NAME - -dh_installdocs - install documentation into package build directories - -=cut - -use strict; -use Debian::Debhelper::Dh_Lib; - -=head1 SYNOPSIS - -B<dh_installdocs> [S<I<debhelper options>>] [B<-A>] [B<-n>] [B<-X>I<item>] [S<I<file ...>>] - -=head1 DESCRIPTION - -dh_installdocs is a debhelper program that is responsible for installing -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 -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 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 -they exist, will be installed into the first binary package listed in -debian/control, if dh_installdocs is acting on that package. Note that -debian/TODO will be installed named TODO.Debian, if the package is not a -debian native package. Also note that README.debian is installed as -README.Debian, for consistency. Note that debian/package.README.Debian and -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.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. - -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.* - -=head1 OPTIONS - -=over 4 - -=item B<-A>, B<--all> - -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. - -=item I<file ...> - -Install these files as documentation into the first package acted on. (Or -in all packages if B<-A> is specified). - -=back - -=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 -between invocations of this command. Otherwise, it may cause multiple -instances of the same text to be added to maintainer scripts. - -=cut - +BEGIN { push @INC, "debian", "/usr/share/debhelper" } +use Dh_Lib; init(); -foreach my $package (@{$dh{DOPACKAGES}}) { - my $tmp=tmpdir($package); - my $file=pkgfile($package,"docs"); +foreach $PACKAGE (@{$dh{DOPACKAGES}}) { + $TMP=tmpdir($PACKAGE); + $file=pkgfile($PACKAGE,"docs"); - # If this is a symlink, leave it alone. - if ( ! -d "$tmp/usr/share/doc/$package" && - ! -l "$tmp/usr/share/doc/$package") { - doit("install","-g",0,"-o",0,"-d","$tmp/usr/share/doc/$package"); + if ( ! -d "$TMP/usr/doc/$PACKAGE") { + doit("install","-d","$TMP/usr/doc/$PACKAGE"); } - my @docs; + undef @docs; if ($file) { - @docs=filearray($file, "."); + @docs=filearray($file); } - if (($package eq $dh{FIRSTPACKAGE} || $dh{PARAMS_ALL}) && @ARGV) { + if (($PACKAGE eq $dh{FIRSTPACKAGE} || $dh{PARAMS_ALL}) && @ARGV) { push @docs, @ARGV; } if (@docs) { - my $exclude = ''; - if ($dh{EXCLUDE_FIND}) { - $exclude = ' -and ! \( '.$dh{EXCLUDE_FIND}.' \)'; - } - 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 \\;"); - } - 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("cp","-a",@docs,"$TMP/usr/doc/$PACKAGE/"); + doit("chmod","-R","go=rX","$TMP/usr/doc"); + doit("chmod","-R","u+rw","$TMP/usr/doc"); } # .Debian is correct, according to policy, but I'm easy. - my $readme_debian=pkgfile($package,'README.Debian'); + $readme_debian=pkgfile($PACKAGE,'README.Debian'); if (! $readme_debian) { - $readme_debian=pkgfile($package,'README.debian'); + $readme_debian=pkgfile($PACKAGE,'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"); + if ($readme_debian) { + doit("install","-m","644","-p","$readme_debian","$TMP/usr/doc/$PACKAGE/README.Debian"); } - my $todo=pkgfile($package,'TODO'); - if ($todo && ! excludefile($todo)) { - if (isnative($package)) { - doit("install","-g",0,"-o",0,"-m","644","-p",$todo, - "$tmp/usr/share/doc/$package/TODO"); + $todo=pkgfile($PACKAGE,'TODO'); + if ($todo) { + if (isnative($PACKAGE)) { + doit("install","-m","644","-p",$todo,"$TMP/usr/doc/$PACKAGE/TODO"); } else { - doit("install","-g",0,"-o",0,"-m","644","-p",$todo, - "$tmp/usr/share/doc/$package/TODO.Debian"); + doit("install","-m","644","-p",$todo,"$TMP/usr/doc/$PACKAGE/TODO.Debian"); } } - # If the "directory" is a dangling symlink, then don't install - # the copyright file. This is useful for multibinary packages - # that share a doc directory. - if (-d "$tmp/usr/share/doc/$package") { - # Support debian/package.copyright, but if not present, fall - # back on debian/copyright for all packages, not just the - # main binary package. - my $copyright=pkgfile($package,'copyright'); - if (! $copyright && -e "debian/copyright") { - $copyright="debian/copyright"; - } - if ($copyright && ! excludefile($copyright)) { - doit("install","-g",0,"-o",0,"-m","644","-p",$copyright, - "$tmp/usr/share/doc/$package/copyright"); - } + # Support debian/package.copyright, but if not present, fall back + # on debian/copyright for all packages, not just the main binary + # package. + $copyright=pkgfile($PACKAGE,'copyright'); + if (! $copyright && -e "debian/copyright") { + $copyright="debian/copyright"; } - + if ($copyright) { + doit("install","-m","644","-p",$copyright,"$TMP/usr/doc/$PACKAGE/copyright"); + } + # Handle doc-base files. There are two filename formats, the usual # plus an extended format (debian/package.*). my %doc_ids; @@ -177,15 +70,15 @@ foreach my $package (@{$dh{DOPACKAGES}}) { # If this is the main package, we need to handle unprefixed filenames. # For all packages, we must support both the usual filename format plus # that format with a period an something appended. - my $regexp="\Q$package\E\."; - if ($package eq $dh{MAINPACKAGE}) { + my $regexp="\Q$PACKAGE\E\."; + if ($PACKAGE eq $dh{MAINPACKAGE}) { $regexp="(|$regexp)"; } foreach my $fn (grep {/^${regexp}doc-base(\..*)?$/} readdir(DEB)) { # Parse the file to get the doc id. open (IN, "debian/$fn") || die "Cannot read debian/$fn."; while (<IN>) { - if (/^Document:\s+(.*)(\s+)?/) { + if (/^Document:\s+(.*)/) { $doc_ids{$fn}=$1; last; } @@ -195,32 +88,20 @@ foreach my $package (@{$dh{DOPACKAGES}}) { closedir(DEB); if (%doc_ids) { - if (! -d "$tmp/usr/share/doc-base/") { - doit("install","-g",0,"-o",0,"-d","$tmp/usr/share/doc-base/"); + if (! -d "$TMP/usr/share/doc-base/") { + doit("install","-d","$TMP/usr/share/doc-base/"); } } foreach my $fn (keys %doc_ids) { - doit("install","-g",0,"-o",0,"-m644","-p","debian/$fn", - "$tmp/usr/share/doc-base/$doc_ids{$fn}"); + doit("install","-m644","-p","debian/$fn", + "$TMP/usr/share/doc-base/$doc_ids{$fn}"); if (! $dh{NOSCRIPTS}) { - autoscript($package,"postinst","postinst-doc-base", + autoscript($PACKAGE,"postinst","postinst-doc-base", "s/#DOC-ID#/$doc_ids{$fn}/", ); - autoscript($package,"prerm","prerm-doc-base", + autoscript($PACKAGE,"prerm","prerm-doc-base", "s/#DOC-ID#/$doc_ids{$fn}/", ); } } } - -=head1 SEE ALSO - -L<debhelper(7)> - -This program is a part of debhelper. - -=head1 AUTHOR - -Joey Hess <joeyh@debian.org> - -=cut |