To see what commands are included in a sequence, without actually
doing anything:
dh binary-arch --no-act
This is a very simple rules file, for packages where the default
sequences of commands work with no additional options.
#!/usr/bin/make -f
%:
dh $@
Often you'll want to pass an option to a specific debhelper
command. The easy way to do with is by adding an override target
for that command.
#!/usr/bin/make -f
%:
dh $@
override_dh_strip:
dh_strip -Xfoo
override_dh_auto_configure:
dh_auto_configure -- --with-foo --disable-bar
Sometimes the automated dh_auto_configure(1) and dh_auto_build(1)
can't guess what to do for a strange package. Here's how to avoid
running either and instead run your own commands.
#!/usr/bin/make -f
%:
dh $@
override_dh_auto_configure:
./mondoconfig
override_dh_auto_build:
make universe-explode-in-delight
Another common case is wanting to do something manually before or
after a particular debhelper command is run.
#!/usr/bin/make -f
%:
dh $@
# Example assumes debhelper/12.8 and compat 10+
execute_after_dh_fixperms:
chmod 4755 debian/foo/usr/bin/foo
If you are on an older debhelper or compatibility level, the
above example would have to be written as.
#!/usr/bin/make -f
%:
dh $@
# Older debhelper versions or using compat 9 or lower.
override_dh_fixperms:
dh_fixperms
chmod 4755 debian/foo/usr/bin/foo
Python tools are not run by dh by default, due to the continual
change in that area. Here is how to use dh_python2
.
#!/usr/bin/make -f
%:
dh $@ --with python2
Here is how to force use of Perl's Module::Build
build system,
which can be necessary if debhelper wrongly detects that the
package uses MakeMaker.
#!/usr/bin/make -f
%:
dh $@ --buildsystem=perl_build
Here is an example of overriding where the dh_auto_
* commands
find the package's source, for a package where the source is
located in a subdirectory.
#!/usr/bin/make -f
%:
dh $@ --sourcedirectory=src
And here is an example of how to tell the dh_auto_
* commands to
build in a subdirectory, which will be removed on clean
.
#!/usr/bin/make -f
%:
dh $@ --builddirectory=build
If your package can be built in parallel, please either use
compat 10 or pass --parallel
to dh. Then dpkg-buildpackage -j
will work.
#!/usr/bin/make -f
%:
dh $@ --parallel
If your package cannot be built reliably while using multiple
threads, please pass --no-parallel
to dh (or the relevant
dh_auto_
* command):
#!/usr/bin/make -f
%:
dh $@ --no-parallel
Here is a way to prevent dh
from running several commands that
you don't want it to run, by defining empty override targets for
each command.
#!/usr/bin/make -f
%:
dh $@
# Commands not to run:
override_dh_auto_test override_dh_compress override_dh_fixperms:
A long build process for a separate documentation package can be
separated out using architecture independent overrides. These
will be skipped when running build-arch and binary-arch
sequences.
#!/usr/bin/make -f
%:
dh $@
override_dh_auto_build-indep:
$(MAKE) -C docs
# No tests needed for docs
override_dh_auto_test-indep:
override_dh_auto_install-indep:
$(MAKE) -C docs install
Adding to the example above, suppose you need to chmod a file,
but only when building the architecture dependent package, as
it's not present when building only documentation.
# Example assumes debhelper/12.8 and compat 10+
execute_after_dh_fixperms-arch:
chmod 4755 debian/foo/usr/bin/foo