Package: dpkg-dev
Version: patch
Severity: minor
Tags: patch
I would like to have a simple way to query for a specific feature in
debian/rules. E.g. an upstream package provides options to configure for lto or
pgo builds on it's own, like
ifeq (yes,$(shell dpkg-buildflags --query-feature optimize lto))
configure_args += --enable-lto
# lto flags are set by the upstream build system
export DEB_BUILD_MAINT_OPTIONS := $(DEB_BUILD_MAINT_OPTIONS) optimize=-lto
endif
dpkg-buildflags already has a --query-features option, but that one would be
inconvenient to use in a Makefile.
--- scripts/dpkg-buildflags.pl~ 2019-11-05 12:59:03.000000000 +0100
+++ scripts/dpkg-buildflags.pl 2021-03-27 12:32:39.965624383 +0100
@@ -52,6 +52,8 @@
--query like --status, but in deb822 format.
--query-features <area>
output the status of features for the given area.
+ --query-feature <area> <feature>
+ output the status of the feature for the given area.
--list output a list of the flags supported by the current vendor.
--export=(sh|make|cmdline|configure)
output something convenient to import the compilation
@@ -62,7 +64,7 @@
'), $Dpkg::PROGNAME;
}
-my ($param, $action);
+my ($param, $param2, $action);
my $load_config = 1;
while (@ARGV) {
@@ -73,6 +75,13 @@
$action = $1;
$param = shift(@ARGV);
usageerr(g_('%s needs a parameter'), $_) unless defined $param;
+ } elsif (m/^--(query-feature)$/) {
+ usageerr(g_('two commands specified: --%s and --%s'), $1, $action)
+ if defined($action);
+ $action = $1;
+ $param = shift(@ARGV);
+ $param2 = shift(@ARGV);
+ usageerr(g_('%s needs two parameters'), $_) unless (defined $param && defined $param2);
} elsif (m/^--export(?:=(sh|make|cmdline|configure))?$/) {
usageerr(g_('two commands specified: --%s and --%s'), 'export', $action)
if defined($action);
@@ -124,6 +133,12 @@
printf "Feature: %s\n", $feature;
printf "Enabled: %s\n", $features{$feature} ? 'yes' : 'no';
}
+} elsif ($action eq 'query-feature') {
+ exit 1 unless $build_flags->has_features($param);
+
+ my %features = $build_flags->get_features($param);
+ exit 1 unless exists $features{$param2};
+ printf "%s\n", $features{$param2} ? 'yes' : 'no';
} elsif ($action =~ m/^export-(.*)$/) {
my $export_type = $1;
foreach my $flag ($build_flags->list()) {