]> git.donarmstrong.com Git - debhelper.git/blobdiff - dh
logic simplification
[debhelper.git] / dh
diff --git a/dh b/dh
index cd2f9f0870598da3650df0b46241f483757bf88d..775e94921d90b64a39d89f391fcaf2a6f18b7aeb 100755 (executable)
--- a/dh
+++ b/dh
@@ -41,6 +41,13 @@ override target can then run the command with additional options, or run
 entirely different commands instead. (Note that to use this feature,
 you should Build-Depend on debhelper 7.0.50 or above.)
 
+dh passes --parallel to dh_auto_* commands if it detects being run by the
+C<dpkg-buildpackage -jX> command, but a job server of the parent I<make>
+(presumably debian/rules) is not reachable. Nonetheless, it is highly
+recommended to pass --parallel/-j option to dh explicitly to indicate that a
+source package supports parallel building. See L<debhelper(7)/"BUILD SYSTEM
+OPTIONS"> for more information.
+
 =head1 OPTIONS
 
 =over 4
@@ -222,9 +229,21 @@ init(options => {
        },
        "l" => \$dh{LIST},
        "list" => \$dh{LIST},
+       "j:i" => \$dh{PARALLEL},
+       "parallel:i" => \$dh{PARALLEL},
 });
 inhibit_log();
 
+# If make was using a jobserver, but it is not available, clean out
+# MAKEFLAGS so that further make invocations can start a new job
+# server. 
+if (is_make_jobserver_unavailable()) {
+       clean_jobserver_makeflags();
+       # Implicitly enable parallel (no maximum) if a value was not previously
+       # specified.
+       $dh{PARALLEL} = 0 unless defined $dh{PARALLEL};
+}
+
 # Definitions of sequences.
 my %sequences;
 $sequences{build} = [qw{
@@ -431,7 +450,12 @@ while (@ARGV_orig) {
                shift @ARGV_orig;
                next;
        }
-       elsif ($opt =~ /^--?(no-act|remaining|(after|until|before|with|without)=)/) {
+       elsif ($opt =~ /^--?(no-act|remaining|(after|until|before|with|without|parallel)=)/) {
+               next;
+       }
+       elsif ($opt =~ /^(-j|--parallel)$/) {
+               # Argument to -j/--parallel is optional.
+               shift @ARGV_orig if @ARGV_orig > 0 && $ARGV_orig[0] =~ /^\d+$/;
                next;
        }
        push @options, $opt;
@@ -512,6 +536,12 @@ sub run {
        # to prevent them from being acted on.
        push @options, map { "-N$_" } @exclude;
 
+       # Pass --parallel to dh_auto_* commands.
+       if (defined $dh{PARALLEL} && $dh{PARALLEL} != 1
+           && $command =~ /^dh_auto_/) {
+               push @options, "--parallel" . ($dh{PARALLEL} > 1 ? "=$dh{PARALLEL}" : "");
+       }
+
        # Check for override targets in debian/rules and
        # run them instead of running the command directly.
        my $override_command;