Commit ae431993 authored by Bernhard Link's avatar Bernhard Link Committed by Guillem Jover

dpkg-buildflags: Add --status action to describe the flag settings

It's hard to see from a build log file what values should have been
used and why. The new --status action added by this patch tries to
output all meaningful information in a way useful for human consumption
and for automatic log parsers.

 - Mark dpkg-buildflags as bold in man page and escape dash.
 - Use report("status", string). ]

Closes: #664058
Signed-off-by: Bernhard Link's avatarBernhard R. Link <>
Signed-off-by: Guillem Jover's avatarGuillem Jover <>
parent f73bc734
......@@ -15,6 +15,10 @@ dpkg (1.16.5) UNRELEASED; urgency=low
patches to be kept applied after build (used by formats "2.0" and "3.0
(quilt)"). Closes: #643043
[ Guillem Jover ]
* Add a dpkg-buildflags --status action to describe the flag settings.
Thanks to Bernhard R. Link <>. Closes: #664058
[ Updated dpkg translations ]
* Swedish (Peter Krefting).
......@@ -72,6 +72,16 @@ Print the list of flags supported by the current vendor
(one per line). See the \fBSUPPORTED FLAGS\fP section for more
information about them.
.BI \-\-status
Display any information that can be useful to explain the behaviour of
\fBdpkg\-buildflags\fP: relevant environment variables, current vendor,
state of all feature flags. Also print the resulting compiler flags with
their origin.
This is intended to be run from \fBdebian/rules\fP, so that the build log
keeps a clear trace of the build flags used. This can be useful to diagnose
problems related to them.
.BI \-\-export= format
Print to standard output shell (if \fIformat\fP is \fBsh\fP) or make
(if \fIformat\fP is \fBmake\fP) commands that can be used to export
......@@ -22,8 +22,9 @@ use warnings;
use Dpkg;
use Dpkg::Gettext;
use Dpkg::ErrorHandling;
use Dpkg::ErrorHandling qw(report);
use Dpkg::BuildFlags;
use Dpkg::Vendor qw(get_current_vendor);
......@@ -52,6 +53,9 @@ sub usage {
compilation flags in a shell script, in make,
or on a ./configure command line.
--dump output all compilation flags with their values
--status print a synopsis with all parameters affecting the
behaviour of dpkg-buildflags and the resulting flags
and their origin.
--help show this help message.
--version show the version.
"), $progname;
......@@ -72,7 +76,7 @@ while (@ARGV) {
if defined($action);
my $type = $1 || "sh";
$action = "export-$type";
} elsif (m/^--(list|dump)$/) {
} elsif (m/^--(list|status|dump)$/) {
usageerr(_g("two commands specified: --%s and --%s"), $1, $action)
if defined($action);
$action = $1;
......@@ -143,6 +147,40 @@ if ($action eq "get") {
print "$flag=$value\n";
} elsif ($action eq "status") {
# Prefix everything with "dpkg-buildflags: status: " to allow easy
# extraction from a build log. Thus we use report with a non-translated
# type string.
# First print all environment variables that might have changed the
# results (only existing ones, might make sense to add an option to
# also show which ones could have set to modify it).
my @envvars = Dpkg::BuildEnv::list_accessed();
for my $envvar (@envvars) {
if (exists $ENV{$envvar}) {
printf report("status", "environment variable %s=%s",
$envvar, $ENV{$envvar});
my $vendor = Dpkg::Vendor::get_current_vendor() || "undefined";
print report("status", "vendor is $vendor");
# Then the resulting features:
foreach my $area (sort $build_flags->get_feature_areas()) {
my $fs;
my %features = $build_flags->get_features($area);
foreach my $feature (sort keys %features) {
$fs .= sprintf(" %s=%s", $feature, $features{$feature} ? "yes" : "no");
print report("status", "$area features:$fs");
# Then the resulting values (with their origin):
foreach my $flag ($build_flags->list()) {
my $value = $build_flags->get($flag);
my $origin = $build_flags->get_origin($flag);
my $maintainer = $build_flags->is_maintainer_modified($flag) ? "+maintainer" : "";
print report("status", "$flag [$origin$maintainer]: $value");
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment