=head1 SYNOPSIS
-B<dh> I<sequence> [B<--with> I<addon>[B<,>I<addon> ...]] [B<--list>] [B<--until> I<cmd>] [B<--before> I<cmd>] [B<--after> I<cmd>] [B<--remaining>] [S<I<debhelper options>>]
+B<dh> I<sequence> [B<--with> I<addon>[B<,>I<addon> ...]] [B<--list>] [S<I<debhelper options>>]
=head1 DESCRIPTION
List all available addons.
-=item B<--until> I<cmd>
-
-Run commands in the sequence until and including I<cmd>, then stop.
-
-=item B<--before> I<cmd>
-
-Run commands in the sequence before I<cmd>, then stop.
-
-=item B<--after> I<cmd>
-
-Run commands in the sequence that come after I<cmd>.
-
-=item B<--remaining>
-
-Run all commands in the sequence that have yet to be run.
-
=item B<--no-act>
Prints commands that would run for a given sequence, but does not run them.
=back
-All other options passed to B<dh> are passed on to each command it runs. This
+Other options passed to B<dh> are passed on to each command it runs. This
can be used to set an option like B<-v> or B<-X> or B<-N>, as well as for more
specialised options.
-In the above options, I<cmd> can be a full name of a debhelper command, or
-a substring. It'll first search for a command in the sequence exactly
-matching the name, to avoid any ambiguity. If there are multiple substring
-matches, the last one in the sequence will be used.
-
-=cut
-
-sub command_pos {
- my $command=shift;
- my @sequence=@_;
-
- foreach my $i (0..$#sequence) {
- if ($command eq $sequence[$i]) {
- return $i;
- }
- }
-
- my @matches;
- foreach my $i (0..$#sequence) {
- if ($sequence[$i] =~ /\Q$command\E/) {
- push @matches, $i;
- }
- }
- if (! @matches) {
- error "command specification \"$command\" does not match any command in the sequence"
- }
- else {
- return pop @matches;
- }
-}
-
=head1 EXAMPLES
To see what commands are included in a sequence, without actually doing
dh_fixperms
chmod 4755 debian/foo/usr/bin/foo
-If your package is a Python package, B<dh> will use B<dh_pysupport> by
-default. This is how to use B<dh_pycentral> instead.
+Python tools are not run by dh by default, due to the continual change
+in that area. (Before compatability level v9, dh does run B<dh_pysupport>.)
+Here is how to use B<dh_python2>.
#!/usr/bin/make -f
%:
- dh $@ --with python-central
+ dh $@ --with python2
If your package uses autotools and you want to freshen F<config.sub> and
F<config.guess> with newer versions from the B<autotools-dev> package
Note that in the example above, dh will arrange for "debian/rules build"
to call your build-indep and build-arch targets. You do not need to
-explicitly define the dependencies in the rules file when using dh with
-compatability level v9. This example would be more complicated with
-earlier compatability levels.
+explicitly define those dependencies in the rules file when using dh with
+compatibility level v9. This example would be more complicated with
+earlier compatibility levels.
=head1 INTERNALS
contents (and indeed, existence) of this environment variable, as the name
might suggest, is subject to change at any time.
+=head1 DEPRECATED OPTIONS
+
+The following options are deprecated. It's much
+better to use override targets instead.
+
+=over 4
+
+=item B<--until> I<cmd>
+
+Run commands in the sequence until and including I<cmd>, then stop.
+
+=item B<--before> I<cmd>
+
+Run commands in the sequence before I<cmd>, then stop.
+
+=item B<--after> I<cmd>
+
+Run commands in the sequence that come after I<cmd>.
+
+=item B<--remaining>
+
+Run all commands in the sequence that have yet to be run.
+
+=back
+
+In the above options, I<cmd> can be a full name of a debhelper command, or
+a substring. It'll first search for a command in the sequence exactly
+matching the name, to avoid any ambiguity. If there are multiple substring
+matches, the last one in the sequence will be used.
+
=cut
# Stash this away before init modifies it.
my @ARGV_orig=@ARGV;
-# python-support is enabled by default, at least for now
-# (and comes first so python-central loads later and can disable it).
-unshift @ARGV, "--with=python-support";
+if (compat(8)) {
+ # python-support was enabled by default before v9.
+ # (and comes first so python-central loads later and can disable it).
+ unshift @ARGV, "--with=python-support";
+}
init(options => {
"until=s" => \$dh{UNTIL},
bundling => 0,
);
inhibit_log();
-
+set_buildflags();
+warn_deprecated();
# If make is using a jobserver, but it is not available
# to this process, clean out MAKEFLAGS. This avoids
if (! compat(7)) {
# From v8, the sequence is the very first parameter.
$sequence=shift @ARGV_orig;
- if ($sequence=~/^-/) {
+ if (defined $sequence && $sequence=~/^-/) {
error "Unknown sequence $sequence (options should not come before the sequence)";
}
}
}
# make -B causes the rules file to be run as a target.
# Also support completly empty override targets.
-# Note: it's not safe to use rules_explicit_target before this check.
+# Note: it's not safe to use rules_explicit_target before this check,
+# since it causes dh to be run.
+my $dummy_target="debhelper-fail-me";
if ($sequence eq 'debian/rules' ||
- $sequence =~ /^override_dh_/) {
+ $sequence =~ /^override_dh_/ ||
+ $sequence eq $dummy_target) {
exit 0;
}
dh_auto_build
dh_auto_test
};
-my @i_minimal = qw{
- dh_testroot
-};
my @i = qw{
dh_testroot
dh_prep
dh_makeshlibs
dh_shlibdeps
};
+if (! getpackages("arch")) {
+ @ba=();
+}
my @b=qw{
dh_installdeb
dh_gencontrol
$sequences{'build-arch'} = [@bd];
if (! compat(8)) {
# From v9, sequences take standard rules targets into account.
- if (rules_explicit_target('build-arch') ||
- rules_explicit_target('build-indep')) {
- # run sequences separately
- $sequences{build} = [@bd_minimal, 'rules:build-arch', 'rules:build-indep'];
- }
- else {
- # run standard sequence (this is faster)
- $sequences{build} = [@bd];
- }
- $sequences{'install-indep'} = ['rules:build-indep', @i];
- $sequences{'install-arch'} = ['rules:build-arch', @i];
- if (rules_explicit_target('install-arch') ||
- rules_explicit_target('install-indep')) {
- # run sequences separately
- $sequences{'install'} = ['rules:build', @i_minimal, 'rules:install-arch', 'rules:install-indep'];
- }
- else {
- # run standard sequence (this is faster)
- $sequences{'install'} = ['rules:build', @i, 'rules:install-arch', 'rules:install-indep'];
- }
- $sequences{'binary-indep'} = ['rules:install-indep', @b];
- $sequences{'binary-arch'} = ['rules:install-arch', @ba, @b];
- $sequences{binary} = ['rules:install', 'rules:binary-arch', 'rules:binary-indep'];
+ $sequences{build} = [@bd_minimal, rules("build-arch"), rules("build-indep")];
+ $sequences{'install-indep'} = [rules("build-indep"), @i];
+ $sequences{'install-arch'} = [rules("build-arch"), @i];
+ $sequences{'install'} = [rules("build"), rules("install-arch"), rules("install-indep"), @i];
+ $sequences{'binary-indep'} = [rules("install-indep"), @b];
+ $sequences{'binary-arch'} = [rules("install-arch"), @ba, @b];
+ $sequences{binary} = [rules("install"), rules("binary-arch"), rules("binary-indep")];
}
else {
$sequences{build} = [@bd];
my $override_command;
my $has_explicit_target = rules_explicit_target("override_".$command);
- # If the command has a rules: prefix, run debian/rules with
- # the remainder as the target.
my $rules_target = rules_target($command);
if (defined $rules_target) {
# Don't pass DH_ environment variables, since this is
sub rules_target {
my $command=shift;
- if ($command =~ /^rules:(.*)/) {
+ if ($command =~ /^debian\/rules\s+(.*)/) {
return $1
}
else {
}
}
+sub rules {
+ return "debian/rules ".join(" ", @_);
+}
+
{
my %targets;
my $rules_parsed;
my $processing_targets = 0;
my $not_a_target = 0;
my $current_target;
- open(MAKE, "LC_ALL=C make -Rrnpsf debian/rules debhelper-fail-me 2>/dev/null |");
+ open(MAKE, "LC_ALL=C make -Rrnpsf debian/rules $dummy_target 2>/dev/null |");
while (<MAKE>) {
if ($processing_targets) {
if (/^# Not a target:/) {
if (defined $current_target) {
if (/^#/) {
# Check if target has commands to execute
- if (/^#\s*commands to execute/) {
+ if (/^#\s*(commands|recipe) to execute/) {
$targets{$current_target} = 1;
}
}
}
+sub warn_deprecated {
+ foreach my $deprecated ('until', 'after', 'before', 'remaining') {
+ if (defined $dh{uc $deprecated}) {
+ warning("The --$deprecated option is deprecated. Use override targets instead.");
+ }
+ }
+}
+
+sub command_pos {
+ my $command=shift;
+ my @sequence=@_;
+
+ foreach my $i (0..$#sequence) {
+ if ($command eq $sequence[$i]) {
+ return $i;
+ }
+ }
+
+ my @matches;
+ foreach my $i (0..$#sequence) {
+ if ($sequence[$i] =~ /\Q$command\E/) {
+ push @matches, $i;
+ }
+ }
+ if (! @matches) {
+ error "command specification \"$command\" does not match any command in the sequence"
+ }
+ else {
+ return pop @matches;
+ }
+}
+
=head1 SEE ALSO
L<debhelper(7)>