X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=dh_builddeb;h=bf9fc27d39aafdfb2c42545cd5cd213158b42b30;hb=18a0da8092ea9f3dc48bca92b36f592af25a608d;hp=adad09dd9886a190c6ada6712e25d24a3f8df0cf;hpb=ad3d82f4a566c40f6992c4e5db795b3c0e9e87c7;p=debhelper.git diff --git a/dh_builddeb b/dh_builddeb index adad09d..bf9fc27 100755 --- a/dh_builddeb +++ b/dh_builddeb @@ -2,7 +2,7 @@ =head1 NAME -dh_builddeb - build debian packages +dh_builddeb - build Debian binary packages =cut @@ -11,39 +11,48 @@ use Debian::Debhelper::Dh_Lib; =head1 SYNOPSIS - dh_builddeb [debhelper options] [--destdir=directory] - [--name=filename] [-uparams] [-- params] +B [S>] [B<--destdir=>I] [B<--filename=>I] [S I>] =head1 DESCRIPTION -dh_builddeb simply calls L to build a debian package or +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 =item B<--destdir=>I -Use this if you want the generated .deb files to be put in a directory -other than the default of ".." +Use this if you want the generated F<.deb> files to be put in a directory +other than the default of "F<..>". -=item B<--name=>I +=item B<--filename=>I Use this if you want to force the generated .deb file to have a particular file name. Does not work well if more than one .deb is generated! -=item B<-u>I =item B<--> I -Pass I to L when it is used to build the +Pass I to L when it is used to build the package. +=item B<-u>I + +This is another way to pass I to L. +It is deprecated; use B<--> instead. + =back =cut -init(); +init(options => { + "filename=s" => \$dh{FILENAME}, + "destdir=s" => \$dh{DESTDIR}, +}); # Set the default destination directory. if (! defined $dh{DESTDIR}) { @@ -57,14 +66,64 @@ 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); - doit("dpkg","--build",$tmp,"$dh{DESTDIR}$dh{FILENAME}",@{$dh{U_PARAMS}}); + 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}); + } + else { + my $filename=$dh{FILENAME}; + if (! $filename) { + $filename="/".udeb_filename($package); + } + 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 +L This program is a part of debhelper.