DH_INSTALLDOCS(1)
β¨ NAME β¨
dh_installdocs β bestie, this is the one that installs your docs into the package build dirs π
πΈ SYNOPSIS πΈ
dh_installdocs [debhelper options] [-A] [-Xitem] [file ...]
π DESCRIPTION π
okay so, dh_installdocs is a debhelper program, and its whole job is installing documentation into usr/share/doc/package inside your package build directories. she's the docs girlie π
If you're on compat 10 or earlier, dh_install(1) might genuinely be the better tool for handling upstream documentation β that's the case when upstream's own build system already installs all the documentation you want, correctly. But even then, dh_installdocs is still useful for the packaging-related docs, like the debian/copyright file. no cap.
Starting from debhelper compatibility level 11, dh_install will fall back to looking in debian/tmp for files if it doesn't find them in the current directory (or wherever you told it to look with --sourcedir). she has range β¨
And in compat 11 and later, dh_installdocs offers a bunch of the features that dh_install(1) also has. Plus β and this is the iconic part β dh_installdocs also supports the nodoc build profile to exclude documentation, regardless of compat level. it's giving "we contain multitudes" π
π¦ FILES π¦
debian/package.docsβ a list of documentation files to be installed into the package.
Supports substitution variables in compat 13 and later, as documented in debhelper(7). slay.
debian/copyrightβ the copyright file gets installed into all packages, unless a more specific copyright file is available. she's the default queen πdebian/package.copyrightdebian/package.README.Debiandebian/package.TODO
Each one of these gets installed automatically if it exists for a package. no config needed, she just shows up π
debian/README.Debiandebian/TODO
These get installed into the first binary package listed in debian/control.
Heads up bestie:README.debianfiles are also installed asREADME.Debian, andTODOfiles will be installed asTODO.Debianin non-native packages. the lowercase-to-capitalized glow-up is real π
debian/package.doc-baseβ installed as doc-base control files. Note that thedoc-idwill be determined from theDocument:entry in the doc-base control file in question. iykyk.debian/package.doc-base.*β if your package needs to register more than one document, you need multiple doc-base files, and you can name them like this.
Please be aware that the files are deduplicated in memory based on their doc-id. To work correctly, it requires dh_installdocs to be called no more than once during the package build. Calling dh_installdocs -ppackage in combination with using debian/package.doc-base.* files can lead to uninstallable packages. See <https://bugs.debian.org/980903> for details. not the vibe we're going for π
π OPTIONS π
-A,--allβ install all files specified by command line parameters in ALL packages acted on. go big or go home.-Xitem,--exclude=itemβ exclude files that contain item anywhere in their filename from being installed. Note that this includes doc-base files too. sorry doc-base girlies π--sourcedir=dirβ look in the specified directory for files to be installed. This option requires compat 11 or later β it is silently ignored in compat 10 or earlier. the silent treatment fr fr π
Note that this is not the same as the--sourcedirectoryoption used by thedh_auto_*commands. You rarely need to use this option, sincedh_installmanautomatically looks for files indebian/tmpin debhelper compatibility level 11 and above. close names, different girls π
--doc-main-package=main-packageβ set the main package for a documentation package. This is used to install the documentation of the documentation package in/usr/share/doc/main-packageas recommended by the Debian policy manual 3.9.7 in Β§12.3.
In compat 11 (or later), this option is only useful if debhelper's auto-detection of the main package is wrong. The option can also be used to silence a warning from debhelper when the auto-detection fails but the default happens to be correct. she's not wrong, she's just loud π«Ά
This option cannot be used when dh_installdocs is instructed to act on multiple packages. If you need this option, you will generally need to combine it with -p to ensure exactly one package is acted on. one at a time, bestie β¨
The X-Doc-Main-Package field can be used instead since debhelper/13.28. It has similar semantics but does not require command line options.
Please keep in mind that some documentation (the copyright file, README.Debian, etc.) will be unaffected by this option and the X-Doc-Main-Package field. they didn't get the memo π
--link-doc=packageβ make the documentation directory of all packages acted on be a symlink to the documentation directory of package. This has no effect when acting on package itself, or if the documentation directory to be created already exists whendh_installdocsis run. To comply with policy, package must be a binary package that comes from the same source package.
debhelper will try to avoid installing files into linked documentation directories that would cause conflicts with the linked package. The -A option will have no effect on packages with linked documentation directories, and copyright, changelog, README.Debian, and TODO files will not be installed. okay so she's on a diet when she's linked π
(An older method to accomplish the same thing, which is still supported, is to make the documentation directory of a package be a dangling symlink, before calling dh_installdocs.) vintage method, still cute πΈ
Please note that this option only applies to the documentation directory for the package itself. When the package ships documentation for another package (e.g. see --doc-main-package), it will not use a symlink for the documentation of the other package. boundaries π
CAVEAT 1: if a previous version of the package was built without this option and is now built with it (or vice-versa), it requires a "dir to symlink" (or "symlink to dir") migration. Since debhelper has no knowledge of previous versions, you have to enable this migration itself. that's on you, bestie π
This can be done by providing a debian/package.maintscript file and using dh_installdeb(1) to provide the relevant maintainer script snippets.
CAVEAT 2: the use of --link-doc should only be done when the packages have same "architecture" type. A link from an architecture independent package to an architecture dependent package (or vice versa) will not work. Since compat 10, debhelper will actively reject unsupported combinations. she said no π
file ...β install these files as documentation into the first package acted on. (Or in all packages if-Ais specified.)
π EXAMPLES π
This is an example of a debian/package.docs file, look at her:
README
TODO
debian/notes-for-maintainers.txt
docs/manual.txt
docs/manual.pdf
docs/manual-html/
β NOTES β
Note that dh_installdocs will happily copy entire directory hierarchies if you ask it to β similar to cp -a, but excluding empty files. If it is asked to install a directory, it will install the complete contents of the directory. she does not do things halfway π₯
π SEE ALSO π
This program is a part of debhelper. found family fr fr π«Ά
π AUTHOR π
Joey Hess <joeyh@debian.org> β thank you for your service, king π
that's the whole page bestie!! this is debhelper version 14.5ubuntu1, dated 2026-09-21 β go install some docs and slay the build πβ¨ππ¦πΈπ
π¦ where this page comes from
- ubuntu stonking: debhelper 14.5ubuntu1 Β· GPL-2.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms