X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Debian%2FDebhelper%2FDh_Lib.pm;h=b57c4d97d15c66faf1fb166ed82ca0c1480c7010;hb=240dc46e8c30caa425156006438af98cce06df84;hp=6be25f9d8bb6f2deb4da5ee063fc9d0ba5f7e1de;hpb=65da07d0416734e825f13cc3c30f0d2cbf229df8;p=debhelper.git diff --git a/Debian/Debhelper/Dh_Lib.pm b/Debian/Debhelper/Dh_Lib.pm index 6be25f9..b57c4d9 100644 --- a/Debian/Debhelper/Dh_Lib.pm +++ b/Debian/Debhelper/Dh_Lib.pm @@ -15,34 +15,23 @@ use vars qw(@ISA @EXPORT %dh); &filedoublearray &getpackages &basename &dirname &xargs %dh &compat &addsubstvar &delsubstvar &excludefile &package_arch &is_udeb &udeb_filename &debhelper_script_subst &escape_shell - &inhibit_log); + &inhibit_log &load_log &write_log); my $max_compat=7; sub init { - # If DH_OPTIONS is set, prepend it @ARGV. - if (defined($ENV{DH_OPTIONS})) { - # Ignore leading/trailing whitespace. - $ENV{DH_OPTIONS}=~s/^\s+//; - $ENV{DH_OPTIONS}=~s/\s+$//; - unshift @ARGV,split(/\s+/,$ENV{DH_OPTIONS}); - } + my %params=@_; - # Check to see if an argument on the command line starts with a dash. - # if so, we need to pass this off to the resource intensive + # Check to see if an option line starts with a dash, + # or DH_OPTIONS is set. + # If so, we need to pass this off to the resource intensive # Getopt::Long, which I'd prefer to avoid loading at all if possible. - my $parseopt=undef; - my $arg; - foreach $arg (@ARGV) { - if ($arg=~m/^-/) { - $parseopt=1; - last; - } - } - if ($parseopt) { + if ((defined $ENV{DH_OPTIONS} && length $ENV{DH_OPTIONS}) || + (defined $ENV{DH_INTERNAL_OPTIONS} && length $ENV{DH_INTERNAL_OPTIONS}) || + grep /^-/, @ARGV) { eval "use Debian::Debhelper::Dh_Getopt"; - error($!) if $@; - %dh=Debian::Debhelper::Dh_Getopt::parseopts(); + error($@) if $@; + Debian::Debhelper::Dh_Getopt::parseopts($params{options}); } # Another way to set excludes. @@ -85,9 +74,6 @@ sub init { # Check if packages to build have been specified, if not, fall back to # the default, doing them all. if (! defined $dh{DOPACKAGES} || ! @{$dh{DOPACKAGES}}) { - if ($dh{DOINDEP} || $dh{DOARCH} || $dh{DOSAME}) { - error("You asked that all arch in(dep) packages be built, but there are none of that type."); - } push @{$dh{DOPACKAGES}},@allpackages; } @@ -114,14 +100,35 @@ sub init { my $write_log=1; sub END { if ($? == 0 && $write_log) { - my $cmd=basename($0); - foreach my $package (@{$dh{DOPACKAGES}}) { - my $ext=pkgext($package); - my $log="debian/${ext}debhelper.log"; - open(LOG, ">>", $log) || error("failed to write to ${log}: $!"); - print LOG $cmd."\n"; - close LOG; - } + write_log(basename($0), @{$dh{DOPACKAGES}}); + } +} + +sub load_log { + my ($package, $db)=@_; + my $ext=pkgext($package); + + my @log; + open(LOG, "<", "debian/${ext}debhelper.log") || return; + while () { + chomp; + push @log, $_; + $db->{$package}{$_}=1 if defined $db; + } + close LOG; + return @log; +} + +sub write_log { + my $cmd=shift; + my @packages=@_; + + foreach my $package (@packages) { + my $ext=pkgext($package); + my $log="debian/${ext}debhelper.log"; + open(LOG, ">>", $log) || error("failed to write to ${log}: $!"); + print LOG $cmd."\n"; + close LOG; } } @@ -167,8 +174,7 @@ sub doit { verbose_print(escape_shell(@_)); if (! $dh{NO_ACT}) { - my $ret=system(@_); - $ret == 0 || error("command returned error code $ret"); + system(@_) == 0 || _error_exitcode($_[0]); } } @@ -181,11 +187,23 @@ sub complex_doit { if (! $dh{NO_ACT}) { # The join makes system get a scalar so it forks off a shell. - system(join(" ",@_)) == 0 - || error("command returned error code"); + system(join(" ", @_)) == 0 || _error_exitcode(join(" ", @_)) } } +sub _error_exitcode { + my $command=shift; + if ($? == -1) { + error("$command failed to to execute: $!"); + } + elsif ($? & 127) { + error("$command died with signal ".($? & 127)); + } + else { + error("$command returned exit code ".($? >> 8)); + } +} + # Run a command that may have a huge number of arguments, like xargs does. # Pass in a reference to an array containing the arguments, and then other # parameters that are the command and any parameters that should be passed to @@ -293,7 +311,7 @@ sub dirname { } if ($c < 4 && ! $warned_compat) { - warning("Compatibility levels before 4 are deprecated."); + warning("Compatibility levels before 5 are deprecated."); $warned_compat=1; }