X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=dh_builddeb;h=bf9fc27d39aafdfb2c42545cd5cd213158b42b30;hb=18a0da8092ea9f3dc48bca92b36f592af25a608d;hp=b15c943669c82c4f030969d71fdb765c9b1ae15d;hpb=0952ac2e9995da8abe149f3e42b3b8d9d2797112;p=debhelper.git diff --git a/dh_builddeb b/dh_builddeb index b15c943..bf9fc27 100755 --- a/dh_builddeb +++ b/dh_builddeb @@ -18,6 +18,9 @@ B [S>] [B<--destdir=>I] [B<--filena B simply calls L to build a Debian package or packages. +It supports building multiple binary packages in parallel, when enabled by +DEB_BUILD_OPTIONS. + =head1 OPTIONS =over 4 @@ -63,7 +66,32 @@ else { $dh{FILENAME}="/$dh{FILENAME}"; } +my $max_procs=get_buildoption("parallel") || 1; + +my $processes=1; +my $exit=0; +sub reap { + if (wait == -1) { + $processes=0; + } + else { + $processes--; + $exit=1 if $? != 0; + } +} + foreach my $package (@{$dh{DOPACKAGES}}) { + my $pid=fork(); + if (! defined $pid) { + error("fork failed! $!"); + } + if ($pid) { # parent + $processes++; + reap while $processes > $max_procs; + next; + } + + # child my $tmp=tmpdir($package); if (exists $ENV{DH_ALWAYS_EXCLUDE} && length $ENV{DH_ALWAYS_EXCLUDE}) { if (! compat(5)) { @@ -84,10 +112,15 @@ foreach my $package (@{$dh{DOPACKAGES}}) { if (! $filename) { $filename="/".udeb_filename($package); } - doit("dpkg-deb", @{$dh{U_PARAMS}}, "--build", $tmp, $dh{DESTDIR}.$filename); + doit("dpkg-deb", "-z1", "-Zxz", "-Sextreme", + @{$dh{U_PARAMS}}, "--build", $tmp, $dh{DESTDIR}.$filename); } + exit 0; } +reap while $processes; +exit $exit; + =head1 SEE ALSO L