[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[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: