X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Debian%2FDebhelper%2FDh_Lib.pm;h=60f13c30517664265b6b8b540b9bb8f0013381c1;hb=08fd6e5a07b96c2d7792a66458408916b754c97a;hp=fb83480b5324b69182c26fcc2e17587e1678332b;hpb=7bc99d44cfc0275e1b44b390bed1362c457da9ab;p=debhelper.git diff --git a/Debian/Debhelper/Dh_Lib.pm b/Debian/Debhelper/Dh_Lib.pm index fb83480..60f13c3 100644 --- a/Debian/Debhelper/Dh_Lib.pm +++ b/Debian/Debhelper/Dh_Lib.pm @@ -15,11 +15,12 @@ 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 &load_log &write_log &dpkg_architecture_value - &sourcepackage - &is_make_jobserver_unavailable &clean_jobserver_makeflags); + &inhibit_log &load_log &write_log &commit_override_log + &dpkg_architecture_value &sourcepackage + &is_make_jobserver_unavailable &clean_jobserver_makeflags + &cross_command &set_buildflags &get_buildoption); -my $max_compat=8; +my $max_compat=9; sub init { my %params=@_; @@ -106,16 +107,36 @@ sub END { } } +sub logfile { + my $package=shift; + my $ext=pkgext($package); + return "debian/${ext}debhelper.log" +} + +sub add_override { + my $line=shift; + $line="override_$ENV{DH_INTERNAL_OVERRIDE} $line" + if defined $ENV{DH_INTERNAL_OVERRIDE}; + return $line; +} + +sub remove_override { + my $line=shift; + $line=~s/^\Qoverride_$ENV{DH_INTERNAL_OVERRIDE}\E\s+// + if defined $ENV{DH_INTERNAL_OVERRIDE}; + return $line; +} + sub load_log { my ($package, $db)=@_; - my $ext=pkgext($package); my @log; - open(LOG, "<", "debian/${ext}debhelper.log") || return; + open(LOG, "<", logfile($package)) || return; while () { chomp; - push @log, $_; - $db->{$package}{$_}=1 if defined $db; + my $command=remove_override($_); + push @log, $command; + $db->{$package}{$command}=1 if defined $db; } close LOG; return @log; @@ -125,13 +146,26 @@ sub write_log { my $cmd=shift; my @packages=@_; - return if defined $ENV{DH_INHIBIT_LOG} && $cmd eq $ENV{DH_INHIBIT_LOG}; + return if $dh{NO_ACT}; foreach my $package (@packages) { - my $ext=pkgext($package); - my $log="debian/${ext}debhelper.log"; + my $log=logfile($package); open(LOG, ">>", $log) || error("failed to write to ${log}: $!"); - print LOG $cmd."\n"; + print LOG add_override($cmd)."\n"; + close LOG; + } +} + +sub commit_override_log { + my @packages=@_; + + return if $dh{NO_ACT}; + + foreach my $package (@packages) { + my @log=map { remove_override($_) } load_log($package); + my $log=logfile($package); + open(LOG, ">", $log) || error("failed to write to ${log}: $!"); + print LOG $_."\n" foreach @log; close LOG; } } @@ -294,6 +328,7 @@ sub dirname { sub compat { my $num=shift; + my $nowarn=shift; if (! defined $c) { $c=1; @@ -315,7 +350,7 @@ sub dirname { } } - if ($c <= 4 && ! $warned_compat) { + if ($c <= 4 && ! $warned_compat && ! $nowarn) { warning("Compatibility levels before 5 are deprecated."); $warned_compat=1; } @@ -579,7 +614,7 @@ sub filedoublearray { my $globdir=shift; my @ret; - open (DH_FARRAY_IN, $file) || error("cannot read $file: $1"); + open (DH_FARRAY_IN, $file) || error("cannot read $file: $!"); while () { chomp; # Only ignore comments and empty lines in v5 mode. @@ -858,4 +893,55 @@ sub clean_jobserver_makeflags { } } +# If cross-compiling, returns appropriate cross version of command. +sub cross_command { + my $command=shift; + if (dpkg_architecture_value("DEB_BUILD_GNU_TYPE") + ne dpkg_architecture_value("DEB_HOST_GNU_TYPE")) { + return dpkg_architecture_value("DEB_HOST_GNU_TYPE")."-$command"; + } + else { + return $command; + } +} + +# Sets environment variables from dpkg-buildflags. Avoids changing +# any existing environment variables. +sub set_buildflags { + return if $ENV{DH_INTERNAL_BUILDFLAGS} || compat(8); + $ENV{DH_INTERNAL_BUILDFLAGS}=1; + + eval "use Dpkg::BuildFlags"; + if ($@) { + warning "unable to load build flags: $@"; + return; + } + + my $buildflags = Dpkg::BuildFlags->new(); + $buildflags->load_config(); + foreach my $flag ($buildflags->list()) { + next unless $flag =~ /^[A-Z]/; # Skip flags starting with lowercase + if (! exists $ENV{$flag}) { + $ENV{$flag} = $buildflags->get($flag); + } + } +} + +# Gets a DEB_BUILD_OPTIONS option, if set. +sub get_buildoption { + my $wanted=shift; + + return undef unless exists $ENV{DEB_BUILD_OPTIONS}; + + foreach my $opt (split(/\s+/, $ENV{DEB_BUILD_OPTIONS})) { + # currently parallel= is the only one with a parameter + if ($opt =~ /^parallel=(-?\d+)$/ && $wanted eq 'parallel') { + return $1; + } + elsif ($opt eq $wanted) { + return 1; + } + } +} + 1