X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=dh_builddeb;h=77da898fc02d1c2114723247e57cb6560e1d1206;hb=e2a6d4cec4a7ee952cf6a7f250d80f1d75a38f95;hp=26e127464a36ee75c25bd0b7fcea5d74c6b0f4d8;hpb=aad9db39d4c4d68ce6b30b193fbdbc6b737e0a9c;p=debhelper.git diff --git a/dh_builddeb b/dh_builddeb index 26e1274..77da898 100755 --- a/dh_builddeb +++ b/dh_builddeb @@ -63,55 +63,59 @@ else { $dh{FILENAME}="/$dh{FILENAME}"; } +my $max_procs=get_buildoption("parallel") || 1; + my $processes=1; -my $max_procs=1; -if (defined $ENV{DEB_BUILD_OPTIONS} && $ENV{DEB_BUILD_OPTIONS}=~/parallel=(\d+)/) { - $max_procs=$1; +my $exit=0; +sub reap { + if (wait == -1) { + $processes=0; + } + else { + $processes--; + $exit=1 if $? != 0; + } } foreach my $package (@{$dh{DOPACKAGES}}) { - my $pid=0; - - if ($max_procs > 1) { - while ($processes > $max_procs) { - wait; - $processes--; - } - $pid=fork(); + my $pid=fork(); + if (! defined $pid) { + error("fork failed! $!"); + } + if ($pid) { # parent + $processes++; + reap while $processes > $max_procs; + next; } - if ($pid == 0) { - my $tmp=tmpdir($package); - if (exists $ENV{DH_ALWAYS_EXCLUDE} && length $ENV{DH_ALWAYS_EXCLUDE}) { - if (! compat(5)) { - complex_doit("find $tmp $dh{EXCLUDE_FIND} | xargs rm -rf"); - } - else { - # Old broken code here for compatibility. Does not - # remove everything. - complex_doit("find $tmp -name $_ | xargs rm -rf") - foreach split(":", $ENV{DH_ALWAYS_EXCLUDE}); - } - } - if (! is_udeb($package)) { - doit("dpkg-deb", @{$dh{U_PARAMS}}, "--build", $tmp, $dh{DESTDIR}.$dh{FILENAME}); + # child + my $tmp=tmpdir($package); + if (exists $ENV{DH_ALWAYS_EXCLUDE} && length $ENV{DH_ALWAYS_EXCLUDE}) { + if (! compat(5)) { + complex_doit("find $tmp $dh{EXCLUDE_FIND} | xargs rm -rf"); } else { - my $filename=$dh{FILENAME}; - if (! $filename) { - $filename="/".udeb_filename($package); - } - doit("dpkg-deb", @{$dh{U_PARAMS}}, "--build", $tmp, $dh{DESTDIR}.$filename); + # Old broken code here for compatibility. Does not + # remove everything. + complex_doit("find $tmp -name $_ | xargs rm -rf") + foreach split(":", $ENV{DH_ALWAYS_EXCLUDE}); } - exit (0) if ($max_procs > 1); - } else { - if (!defined $pid) { - error("fork failed!"); + } + if (! is_udeb($package)) { + doit("dpkg-deb", @{$dh{U_PARAMS}}, "--build", $tmp, $dh{DESTDIR}.$dh{FILENAME}); + } + else { + my $filename=$dh{FILENAME}; + if (! $filename) { + $filename="/".udeb_filename($package); } - $processes++; + doit("dpkg-deb", @{$dh{U_PARAMS}}, "--build", $tmp, $dh{DESTDIR}.$filename); } + exit 0; } -while (($max_procs > 0) && (wait != -1)) {} + +reap while $processes; +exit $exit; =head1 SEE ALSO