]> git.donarmstrong.com Git - debhelper.git/blobdiff - Debian/Debhelper/Dh_Buildsystems.pm
refactor --parallel processing
[debhelper.git] / Debian / Debhelper / Dh_Buildsystems.pm
index 49862675caccda2dd6d04c558d3b37625577f92c..b0e0a568a7d5d00c9505b2206a1423e632c996af 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);
 }
 
@@ -122,11 +126,41 @@ sub buildsystems_init {
 
            "l" => \$opt_list,
            "list" => \$opt_list,
+
+           "j:i" => \&set_parallel,
+           "parallel:i" => \&set_parallel,
        );
        $args{options}{$_} = $options{$_} foreach keys(%options);
        Debian::Debhelper::Dh_Lib::init(%args);
 }
 
+sub set_parallel {
+       my ($option, $value)=@_;
+
+       if ($value >= 0 && exists $ENV{DEB_BUILD_OPTIONS}) {
+               # Parse parallel=n tag
+               my $n;
+               foreach my $opt (split(/\s+/, $ENV{DEB_BUILD_OPTIONS})) {
+                       $n = $1 if $opt =~ /^parallel=(\d+)$/;
+               }
+               if (defined $n && $n > 0) {
+                       if ($value == 0 || $n < $value) {
+                               $opt_parallel = $n;
+                       }
+                       else {
+                               $opt_parallel = $value;
+                       }
+               }
+               else {
+                       # Invalid value in the parallel tag. Disable.
+                       $opt_parallel = 1;
+               }
+       }
+       else {
+               $opt_parallel = 1;
+       }
+}
+
 sub buildsystems_list {
        my $step=shift;