[PATCH] Dpkg::Vendor::Ubuntu: Respect options env when override features
It's bit unfortunate that I've to duplicate Dpkg::BuildOptions
parsing here.
LP: #2002582
---
scripts/Dpkg/Vendor/Ubuntu.pm | 23 ++++++++++++++++++++++-
scripts/t/Dpkg_BuildFlags_Ubuntu.t | 28 +++++++++++++++++++++++++++-
2 files changed, 49 insertions(+), 2 deletions(-)
diff --git a/scripts/Dpkg/Vendor/Ubuntu.pm b/scripts/Dpkg/Vendor/Ubuntu.pm
index df42580e2..720475e94 100644
--- a/scripts/Dpkg/Vendor/Ubuntu.pm
+++ b/scripts/Dpkg/Vendor/Ubuntu.pm
@@ -114,11 +114,32 @@ sub set_build_features {
$self->SUPER::set_build_features($flags);
+ my %default_feature = (
+ optimize => {
+ lto => 0,
+ },
+ );
+
+
require Dpkg::Arch;
my $arch = Dpkg::Arch::get_host_arch();
if (any { $_ eq $arch } qw(amd64 arm64 ppc64el s390x)) {
- $flags->set_feature('optimize', 'lto', 1);
+ $default_feature{optimize}{lto} = 1;
+ }
+
+ my $opts_build = Dpkg::BuildOptions->new(envvar => 'DEB_BUILD_OPTIONS');
+ my $opts_maint = Dpkg::BuildOptions->new(envvar => 'DEB_BUILD_MAINT_OPTIONS');
+
+ foreach my $area (sort keys %default_feature) {
+ $opts_build->parse_features($area, $default_feature{$area});
+ $opts_maint->parse_features($area, $default_feature{$area});
+ }
+
+ foreach my $area (sort keys %default_feature) {
+ while (my ($feature, $enabled) = each %{$default_feature{$area}}) {
+ $flags->set_feature($area, $feature, $enabled);
+ }
}
if ($arch eq 'ppc64el' && $flags->get_option_value('optimize-level') != 0) {
diff --git a/scripts/t/Dpkg_BuildFlags_Ubuntu.t b/scripts/t/Dpkg_BuildFlags_Ubuntu.t
index 193e49269..2f8827f80 100644
--- a/scripts/t/Dpkg_BuildFlags_Ubuntu.t
+++ b/scripts/t/Dpkg_BuildFlags_Ubuntu.t
@@ -16,7 +16,7 @@
use strict;
use warnings;
-use Test::More tests => 18;
+use Test::More tests => 21;
BEGIN {
use_ok('Dpkg::BuildFlags');
@@ -42,6 +42,15 @@ sub test_ltoflag
"LDFLAGS contains LTO flags on $ENV{DEB_HOST_ARCH}");
}
+sub test_no_ltoflag
+{
+ my $bf = shift;
+
+ # Test the LTO flags not enabled.
+ ok($bf->get('LDFLAGS') !~ m/-flto=auto -ffat-lto-objects/,
+ "LDFLAGS doesn't contains LTO flags on $ENV{DEB_HOST_ARCH}");
+}
+
my $bf;
# Force loading the Dpkg::Vendor::Ubuntu module.
@@ -65,4 +74,21 @@ $bf = Dpkg::BuildFlags->new();
test_optflag($bf, '-O3');
test_ltoflag($bf);
+# Test the optimization flag not enabled for riscv64.
+$ENV{DEB_HOST_ARCH} = 'riscv64';
+$bf = Dpkg::BuildFlags->new();
+
+test_no_ltoflag($bf);
+
+# Test the optimization flag overrided by DEB_BUILD_MAINT_OPTIONS.
+$ENV{DEB_BUILD_MAINT_OPTIONS} = 'optimize=+lto';
+$bf = Dpkg::BuildFlags->new();
+
+test_ltoflag($bf);
+
+$ENV{DEB_HOST_ARCH} = 'amd64';
+$ENV{DEB_BUILD_MAINT_OPTIONS} = 'optimize=-lto';
+$bf = Dpkg::BuildFlags->new();
+test_no_ltoflag($bf);
+
1;
--
2.39.0
Reply to: