5 dh_installdocs - install documentation into package build directories
10 use Debian::Debhelper::Dh_Lib;
14 B<dh_installdocs> [S<I<debhelper options>>] [B<-A>] [B<-n>] [B<-X>I<item>] [S<I<file ...>>]
18 dh_installdocs is a debhelper program that is responsible for installing
19 documentation into usr/share/doc/package in package build directories.
21 dh_installdocs automatically installs debian/copyright if it exists. If
22 dh_installdocs is acting on multiple packages, debian/copyright files will be
23 installed into all packages. However, if you need to have seperate copyright
24 files for different binary packages, you can use files named
25 debian/package.copyright.
27 Any filenames specified as parameters will be installed into the first
28 package dh_installdocs is told to act on. By default, this is the first
29 binary package in debian/control, but if you use B<-p>, B<-i>, or B<-a> flags, it
30 will be the first package specified by those flags.
32 Also, debian/README.Debian (or debian/README.debian) and debian/TODO, if
33 they exist, will be installed into the first binary package listed in
34 debian/control, if dh_installdocs is acting on that package. Note that
35 debian/TODO will be installed named TODO.Debian, if the package is not a
36 debian native package. Also note that README.debian is installed as
37 README.Debian, for consistency. Note that debian/package.README.Debian and
38 debian/package.TODO can be used to specify files for subpackages.
40 Files named debian/package.docs can list other files to be installed.
42 Files named debian/package.doc-base, will be installed as doc-base control
43 files, and will make this program automatically generate the postinst and
44 prerm commands needed to interface with the doc-base package. Note that the
45 doc-id will be determined from the "Document:" entry in the
46 doc-base control file in question.
48 If your package needs to register more than one document, you need multiple
49 files. To accomplish this, you can use files named debian/package.doc-base.*
57 Install all files specified by command line parameters in ALL packages
60 =item B<-n>, B<--noscripts>
62 Do not modify postinst/prerm scripts.
64 =item B<-Xitem>, B<--exclude=item>
66 Exclude files that contain "item" anywhere in their filename from
71 Install these files as documentation into the first package acted on. (Or
72 in all packages if B<-A> is specified).
78 This is an example of a debian/package.docs file:
82 debian/notes-for-maintainers.txt
89 Note that dh_installdocs will happily copy entire directory hierarchies if
90 you ask it to (similar to cp -a). If it is asked to install a
91 directory, it will install the complete contents of the directory.
93 Note that this command is not idempotent. "dh_clean B<-k>" should be called
94 between invocations of this command. Otherwise, it may cause multiple
95 instances of the same text to be added to maintainer scripts.
101 foreach my $package (@{$dh{DOPACKAGES}}) {
102 next if is_udeb($package);
104 my $tmp=tmpdir($package);
105 my $file=pkgfile($package,"docs");
107 # If this is a symlink, leave it alone.
108 if ( ! -d "$tmp/usr/share/doc/$package" &&
109 ! -l "$tmp/usr/share/doc/$package") {
110 doit("install","-g",0,"-o",0,"-d","$tmp/usr/share/doc/$package");
116 @docs=filearray($file, ".");
119 if (($package eq $dh{FIRSTPACKAGE} || $dh{PARAMS_ALL}) && @ARGV) {
125 if ($dh{EXCLUDE_FIND}) {
126 $exclude = ' -and ! \( '.$dh{EXCLUDE_FIND}.' \)';
128 foreach my $doc (@docs) {
129 next if excludefile($doc);
130 if (-d $doc && $exclude) {
131 my ($dir_basename) = basename($doc);
132 # Pity there's no cp --exclude ..
135 complex_doit("cd $doc/.. && find $dir_basename -type f$exclude -exec cp --parents -dp {} $pwd/$tmp/usr/share/doc/$package \\;");
138 doit("cp","-a",$doc,"$tmp/usr/share/doc/$package");
141 doit("chown","-R","0:0","$tmp/usr/share/doc");
142 doit("chmod","-R","go=rX","$tmp/usr/share/doc");
143 doit("chmod","-R","u+rw","$tmp/usr/share/doc");
146 # .Debian is correct, according to policy, but I'm easy.
147 my $readme_debian=pkgfile($package,'README.Debian');
148 if (! $readme_debian) {
149 $readme_debian=pkgfile($package,'README.debian');
151 if ($readme_debian && ! excludefile($readme_debian)) {
152 doit("install","-g",0,"-o",0,"-m","644","-p","$readme_debian",
153 "$tmp/usr/share/doc/$package/README.Debian");
156 my $todo=pkgfile($package,'TODO');
157 if ($todo && ! excludefile($todo)) {
158 if (isnative($package)) {
159 doit("install","-g",0,"-o",0,"-m","644","-p",$todo,
160 "$tmp/usr/share/doc/$package/TODO");
163 doit("install","-g",0,"-o",0,"-m","644","-p",$todo,
164 "$tmp/usr/share/doc/$package/TODO.Debian");
168 # If the "directory" is a dangling symlink, then don't install
169 # the copyright file. This is useful for multibinary packages
170 # that share a doc directory.
171 if (-d "$tmp/usr/share/doc/$package") {
172 # Support debian/package.copyright, but if not present, fall
173 # back on debian/copyright for all packages, not just the
174 # main binary package.
175 my $copyright=pkgfile($package,'copyright');
176 if (! $copyright && -e "debian/copyright") {
177 $copyright="debian/copyright";
179 if ($copyright && ! excludefile($copyright)) {
180 doit("install","-g",0,"-o",0,"-m","644","-p",$copyright,
181 "$tmp/usr/share/doc/$package/copyright");
185 # Handle doc-base files. There are two filename formats, the usual
186 # plus an extended format (debian/package.*).
189 opendir(DEB,"debian/") || error("can't read debian directory: $!");
190 # If this is the main package, we need to handle unprefixed filenames.
191 # For all packages, we must support both the usual filename format plus
192 # that format with a period an something appended.
193 my $regexp="\Q$package\E\.";
194 if ($package eq $dh{MAINPACKAGE}) {
195 $regexp="(|$regexp)";
197 foreach my $fn (grep {/^${regexp}doc-base(\..*)?$/} readdir(DEB)) {
198 # .EX are example files, generated by eg, dh-make
199 next if $fn=~/\.EX$/;
200 # Parse the file to get the doc id.
201 open (IN, "debian/$fn") || die "Cannot read debian/$fn.";
203 if (/^Document:\s+(.*)(\s+)?/) {
213 if (! -d "$tmp/usr/share/doc-base/") {
214 doit("install","-g",0,"-o",0,"-d","$tmp/usr/share/doc-base/");
217 foreach my $fn (keys %doc_ids) {
218 doit("install","-g",0,"-o",0,"-m644","-p","debian/$fn",
219 "$tmp/usr/share/doc-base/$doc_ids{$fn}");
220 if (! $dh{NOSCRIPTS}) {
221 autoscript($package,"postinst","postinst-doc-base",
222 "s/#DOC-ID#/$doc_ids{$fn}/",
224 autoscript($package,"prerm","prerm-doc-base",
225 "s/#DOC-ID#/$doc_ids{$fn}/",
235 This program is a part of debhelper.
239 Joey Hess <joeyh@debian.org>