]> git.donarmstrong.com Git - debhelper.git/blobdiff - Debian/Debhelper/Dh_Buildsystems.pm
support unlimited parallel jobs
[debhelper.git] / Debian / Debhelper / Dh_Buildsystems.pm
index 49862675caccda2dd6d04c558d3b37625577f92c..fc06a2ac16a27e3f32583b4d91473c6bf850dce1 100644 (file)
@@ -30,6 +30,7 @@ my $opt_buildsys;
 my $opt_sourcedir;
 my $opt_builddir;
 my $opt_list;
+my $opt_parallel;
 
 sub create_buildsystem_instance {
        my $system=shift;
@@ -47,6 +48,9 @@ sub create_buildsystem_instance {
        if (!exists $bsopts{sourcedir} && defined $opt_sourcedir) {
                $bsopts{sourcedir} = ($opt_sourcedir eq "") ? undef : $opt_sourcedir;
        }
+       if (!exists $bsopts{parallel}) {
+               $bsopts{parallel} = $opt_parallel;
+       }
        return $module->new(%bsopts);
 }
 
@@ -108,6 +112,8 @@ sub load_all_buildsystems {
 
 sub buildsystems_init {
        my %args=@_;
+       
+       my $max_parallel=-1; # unlimited
 
        # Available command line options
        my %options = (
@@ -122,9 +128,33 @@ sub buildsystems_init {
 
            "l" => \$opt_list,
            "list" => \$opt_list,
+
+           "max-parallel:i" => \$max_parallel,
        );
        $args{options}{$_} = $options{$_} foreach keys(%options);
        Debian::Debhelper::Dh_Lib::init(%args);
+       set_parallel($max_parallel);
+}
+
+sub set_parallel {
+       my $max=shift;
+
+       $opt_parallel=1;
+
+       if (exists $ENV{DEB_BUILD_OPTIONS}) {
+               # Parse parallel=n tag
+               foreach my $opt (split(/\s+/, $ENV{DEB_BUILD_OPTIONS})) {
+                       if ($opt =~ /^parallel=([-\d]+)$/) {
+                               my $n=$1;
+                               if ($n > 0 && ($max == -1 || $n < $max)) {
+                                       $opt_parallel = $n;
+                               }
+                               else {
+                                       $opt_parallel = $max;
+                               }
+                       }
+               }
+       }
 }
 
 sub buildsystems_list {