diff options
Diffstat (limited to 'dh_builddeb')
-rwxr-xr-x | dh_builddeb | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/dh_builddeb b/dh_builddeb new file mode 100755 index 00000000..bf9fc27d --- /dev/null +++ b/dh_builddeb @@ -0,0 +1,134 @@ +#!/usr/bin/perl -w + +=head1 NAME + +dh_builddeb - build Debian binary packages + +=cut + +use strict; +use Debian::Debhelper::Dh_Lib; + +=head1 SYNOPSIS + +B<dh_builddeb> [S<I<debhelper options>>] [B<--destdir=>I<directory>] [B<--filename=>I<name>] [S<B<--> I<params>>] + +=head1 DESCRIPTION + +B<dh_builddeb> simply calls L<dpkg-deb(1)> 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<directory> + +Use this if you want the generated F<.deb> files to be put in a directory +other than the default of "F<..>". + +=item B<--filename=>I<name> + +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<--> I<params> + +Pass I<params> to L<dpkg-deb(1)> when it is used to build the +package. + +=item B<-u>I<params> + +This is another way to pass I<params> to L<dpkg-deb(1)>. +It is deprecated; use B<--> instead. + +=back + +=cut + +init(options => { + "filename=s" => \$dh{FILENAME}, + "destdir=s" => \$dh{DESTDIR}, +}); + +# Set the default destination directory. +if (! defined $dh{DESTDIR}) { + $dh{DESTDIR}='..'; +} + +if (! defined $dh{FILENAME}) { + $dh{FILENAME}=''; +} +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)) { + 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<debhelper(7)> + +This program is a part of debhelper. + +=head1 AUTHOR + +Joey Hess <joeyh@debian.org> + +=cut |