&inhibit_log &load_log &write_log &commit_override_log
&dpkg_architecture_value &sourcepackage
&is_make_jobserver_unavailable &clean_jobserver_makeflags
- &cross_command);
+ &cross_command &set_buildflags &get_buildoption);
my $max_compat=9;
my $cmd=shift;
my @packages=@_;
+ return if $dh{NO_ACT};
+
foreach my $package (@packages) {
my $log=logfile($package);
open(LOG, ">>", $log) || error("failed to write to ${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);
sub compat {
my $num=shift;
+ my $nowarn=shift;
if (! defined $c) {
$c=1;
}
}
- if ($c <= 4 && ! $warned_compat) {
+ if ($c <= 4 && ! $warned_compat && ! $nowarn) {
warning("Compatibility levels before 5 are deprecated.");
$warned_compat=1;
}
my $file=shift;
my $globdir=shift;
+ # executable confi files are a v9 thing.
+ my $x=! compat(8) && -x $file;
+ if ($x) {
+ require Cwd;
+ my $cmd=Cwd::abs_path($file);
+ open (DH_FARRAY_IN, "$cmd |") || error("cannot run $file: $!");
+ }
+ else {
+ open (DH_FARRAY_IN, $file) || error("cannot read $file: $!");
+ }
+
my @ret;
- open (DH_FARRAY_IN, $file) || error("cannot read $file: $1");
while (<DH_FARRAY_IN>) {
chomp;
# Only ignore comments and empty lines in v5 mode.
- if (! compat(4)) {
+ if (! compat(4) && ! $x) {
next if /^#/ || /^$/;
}
my @line;
# The tricky bit is that the glob expansion is done
# as if we were in the specified directory, so the
# filenames that come out are relative to it.
- if (defined $globdir && ! compat(2)) {
+ if (defined $globdir && ! compat(2) && ! $x) {
foreach (map { glob "$globdir/$_" } split) {
s#^$globdir/##;
push @line, $_;
}
push @ret, [@line];
}
- close DH_FARRAY_IN;
+
+ close DH_FARRAY_IN || error("problem reading $file: $!");
return @ret;
}
}
}
+# 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