/usr/bin/dpkg-buildflags is in dpkg-dev 1.17.27.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 | #!/usr/bin/perl
#
# dpkg-buildflags
#
# Copyright © 2010-2011 Raphaël Hertzog <hertzog@debian.org>
# Copyright © 2012-2013 Guillem Jover <guillem@debian.org>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
use strict;
use warnings;
use Dpkg ();
use Dpkg::Gettext;
use Dpkg::ErrorHandling qw(:DEFAULT report);
use Dpkg::BuildFlags;
use Dpkg::Vendor qw(get_current_vendor);
textdomain('dpkg-dev');
sub version {
printf _g("Debian %s version %s.\n"), $Dpkg::PROGNAME, $Dpkg::PROGVERSION;
printf _g('
This is free software; see the GNU General Public License version 2 or
later for copying conditions. There is NO warranty.
');
}
sub usage {
printf _g(
'Usage: %s [<command>]')
. "\n\n" . _g(
'Commands:
--get <flag> output the requested flag to stdout.
--origin <flag> output the origin of the flag to stdout:
value is one of vendor, system, user, env.
--query-features <area>
output the status of features 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
flags in a shell script, in make, or in a 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.
'), $Dpkg::PROGNAME;
}
my ($param, $action);
my $load_config = 1;
while (@ARGV) {
$_ = shift(@ARGV);
if (m/^--(get|origin|query-features)$/) {
usageerr(_g('two commands specified: --%s and --%s'), $1, $action)
if defined($action);
$action = $1;
$param = shift(@ARGV);
usageerr(_g('%s needs a parameter'), $_) unless defined $param;
} elsif (m/^--export(?:=(sh|make|cmdline|configure))?$/) {
usageerr(_g('two commands specified: --%s and --%s'), 'export', $action)
if defined($action);
my $type = $1 || 'sh';
# Map legacy aliases.
$type = 'cmdline' if $type eq 'configure';
$action = "export-$type";
} elsif (m/^--(list|status|dump)$/) {
usageerr(_g('two commands specified: --%s and --%s'), $1, $action)
if defined($action);
$action = $1;
$load_config = 0 if $action eq 'list';
} elsif (m/^-(?:\?|-help)$/) {
usage();
exit 0;
} elsif (m/^--version$/) {
version();
exit 0;
} else {
usageerr(_g("unknown option \`%s'"), $_);
}
}
$action //= 'dump';
my $build_flags = Dpkg::BuildFlags->new();
$build_flags->load_config() if $load_config;
if ($action eq 'list') {
foreach my $flag ($build_flags->list()) {
print "$flag\n";
}
} elsif ($action eq 'get') {
exit 1 unless $build_flags->has($param);
print $build_flags->get($param) . "\n";
} elsif ($action eq 'origin') {
exit 1 unless $build_flags->has($param);
print $build_flags->get_origin($param) . "\n";
} elsif ($action eq 'query-features') {
exit 1 unless $build_flags->has_features($param);
my %features = $build_flags->get_features($param);
my $para_shown = 0;
foreach my $feature (sort keys %features) {
print $para_shown++ ? "\n" : '';
printf "Feature: %s\n", $feature;
printf "Enabled: %s\n", $features{$feature} ? 'yes' : 'no';
}
} elsif ($action =~ m/^export-(.*)$/) {
my $export_type = $1;
foreach my $flag ($build_flags->list()) {
next unless $flag =~ /^[A-Z]/; # Skip flags starting with lowercase
my $value = $build_flags->get($flag);
if ($export_type eq 'sh') {
$value =~ s/"/\"/g;
print "export $flag=\"$value\"\n";
} elsif ($export_type eq 'make') {
$value =~ s/\$/\$\$/g;
print "export $flag := $value\n";
} elsif ($export_type eq 'cmdline') {
print "$flag=\"$value\" ";
}
}
} elsif ($action eq 'dump') {
foreach my $flag ($build_flags->list()) {
my $value = $build_flags->get($flag);
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");
}
}
|