]> git.donarmstrong.com Git - debhelper.git/blobdiff - dh
Merge branch 'master' into smarter-targets
[debhelper.git] / dh
diff --git a/dh b/dh
index 33a7be33318c11be56ffbc175d07ecdab46cc98b..aba8c270efb29d8bc9c4ebbcec67e14775d63b58 100755 (executable)
--- a/dh
+++ b/dh
@@ -257,7 +257,9 @@ B<build-indep>.
 
 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.
+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.
 
 =head1 INTERNALS
 
@@ -276,6 +278,9 @@ options can override this behavior.
 A sequence can also run dependent targets in debian/rules.  For
 example, the "binary" sequence runs the "install" target.
 
+B<dh> sets environment variables listed by B<dpkg-buildflags>, unless
+they are already set. It supports DEB_BUILD_OPTIONS=noopt too.
+
 B<dh> uses the B<DH_INTERNAL_OPTIONS> environment variable to pass information
 through to debhelper commands that are run inside override targets. The
 contents (and indeed, existence) of this environment variable, as the name
@@ -313,7 +318,7 @@ init(options => {
        bundling => 0,
 );
 inhibit_log();
-
+set_buildflags();
 
 # If make is using a jobserver, but it is not available
 # to this process, clean out MAKEFLAGS. This avoids
@@ -344,9 +349,12 @@ if (! defined $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;
 }
 
@@ -362,22 +370,6 @@ my @bd = qw{
        dh_auto_build
        dh_auto_test
 };
-$sequences{'build-indep'} = [@bd];
-$sequences{'build-arch'} = [@bd];
-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{clean} = [qw{
-       dh_testdir
-       dh_auto_clean
-       dh_clean
-}];
 my @i_minimal = qw{
        dh_testroot
 };
@@ -423,17 +415,6 @@ my @i = qw{
        dh_compress
        dh_fixperms
 };
-$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'];
-}
 my @ba=qw{
        dh_strip
        dh_makeshlibs
@@ -445,9 +426,48 @@ my @b=qw{
        dh_md5sums
        dh_builddeb
 };
-$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{clean} = [qw{
+       dh_testdir
+       dh_auto_clean
+       dh_clean
+}];
+$sequences{'build-indep'} = [@bd];
+$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")];
+}
+else {
+       $sequences{build} = [@bd];
+       $sequences{'install'} = [@{$sequences{build}}, @i];
+       $sequences{'install-indep'} = [@{$sequences{'build-indep'}}, @i];
+       $sequences{'install-arch'} = [@{$sequences{'build-arch'}}, @i];
+       $sequences{binary} = [@{$sequences{install}}, @ba, @b];
+       $sequences{'binary-indep'} = [@{$sequences{'install-indep'}}, @b];
+       $sequences{'binary-arch'} = [@{$sequences{'install-arch'}}, @ba, @b];
+}
 
 # Additional command options
 my %command_opts;
@@ -677,8 +697,6 @@ sub run {
        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
@@ -764,7 +782,7 @@ sub optimize_sequence {
        foreach my $command (@_) {
                my $rules_target=rules_target($command);
                if (defined $rules_target &&
-                   ! rules_explicit_target($rules_target)) {
+                   ! defined rules_explicit_target($rules_target)) {
                        # inline the sequence for this implicit target
                        $add->($_) foreach optimize_sequence(@{$sequences{$rules_target}});
                }
@@ -777,7 +795,7 @@ sub optimize_sequence {
 
 sub rules_target {
        my $command=shift;
-       if ($command =~ /^rules:(.*)/) {
+       if ($command =~ /^debian\/rules\s+(.*)/) {
                return $1
        }
        else {
@@ -785,6 +803,10 @@ sub rules_target {
        }
 }
 
+sub rules {
+       return "debian/rules ".join(" ", @_);
+}
+
 {
 my %targets;
 my $rules_parsed;
@@ -800,7 +822,7 @@ sub rules_explicit_target {
                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:/) {