summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--debian/changelog5
-rw-r--r--debian/dpkg-dev.install2
-rw-r--r--man/Makefile.am1
-rw-r--r--man/dpkg-buildflags.1116
-rw-r--r--man/po/po4a.cfg5
-rw-r--r--scripts/Makefile.am2
-rwxr-xr-xscripts/dpkg-buildflags.pl105
-rw-r--r--scripts/po/POTFILES.in1
8 files changed, 237 insertions, 0 deletions
diff --git a/debian/changelog b/debian/changelog
index 43a145140..0e0d0e93e 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -20,6 +20,11 @@ dpkg (1.15.6.2) UNRELEASED; urgency=low
* Tigthen the regex used by dpkg-source to match the component name of
supplementary tarballs so that undercore (_) are not allowed as it was
supposed to be.
+ * Introduce a new script called dpkg-buildflags: its purpose is to retrieve
+ compilation flags and it should be used within debian/rules to pass
+ the right compilation flags to the build process. dpkg-builpackage still
+ exports them to not break packages currently relying on them but packages
+ should now start using dpkg-buildflags instead. Closes: #560070
[ Updated dpkg translations ]
* German (Sven Joachim).
diff --git a/debian/dpkg-dev.install b/debian/dpkg-dev.install
index 9d911dbb0..80ec5bd6e 100644
--- a/debian/dpkg-dev.install
+++ b/debian/dpkg-dev.install
@@ -2,6 +2,7 @@
../shlibs.override etc/dpkg
usr/bin/dpkg-architecture
+usr/bin/dpkg-buildflags
usr/bin/dpkg-buildpackage
usr/bin/dpkg-checkbuilddeps
usr/bin/dpkg-distaddfile
@@ -27,6 +28,7 @@ usr/share/man/{*/*,*}/deb-triggers.5
usr/share/man/{*/*,*}/deb-old.5
usr/share/man/{*/*,*}/deb.5
usr/share/man/{*/*,*}/dpkg-architecture.1
+usr/share/man/{*/*,*}/dpkg-buildflags.1
usr/share/man/{*/*,*}/dpkg-buildpackage.1
usr/share/man/{*/*,*}/dpkg-checkbuilddeps.1
usr/share/man/{*/*,*}/dpkg-distaddfile.1
diff --git a/man/Makefile.am b/man/Makefile.am
index b6e12877c..834883254 100644
--- a/man/Makefile.am
+++ b/man/Makefile.am
@@ -97,6 +97,7 @@ dist_man_MANS = \
deb-extra-override.5 \
deb.5 \
dpkg-architecture.1 \
+ dpkg-buildflags.1 \
dpkg-buildpackage.1 \
dpkg-checkbuilddeps.1 \
dpkg-deb.1 \
diff --git a/man/dpkg-buildflags.1 b/man/dpkg-buildflags.1
new file mode 100644
index 000000000..1b462c21f
--- /dev/null
+++ b/man/dpkg-buildflags.1
@@ -0,0 +1,116 @@
+.TH dpkg\-buildflags 1 "2010-04-11" "Debian Project" "dpkg suite"
+.SH NAME
+dpkg\-buildflags \- returns build flags to use during package build
+.
+.SH SYNOPSIS
+.B dpkg\-buildflags
+.RI [ option "...] " command
+.
+.SH DESCRIPTION
+\fBdpkg\-buildflags\fP is a tool to retrieve compilation flags to use during
+build of Debian packages.
+.
+The default flags are defined by the vendor but they can be
+extended/overriden in several ways:
+.IP 1.
+system-wide with \fB/etc/dpkg/buildflags.conf\fP;
+.IP 2.
+for the current user with \fB~/.config/dpkg-buildflags.conf\fP;
+.IP 3.
+temporarily with environment variables (see section \fBENVIRONMENT\fP).
+.P
+The configuration files can contain two types of directives:
+.TP
+.BI SET " flag value"
+Override the flag named \fIflag\fP to have the value \fIvalue\fP.
+.TP
+.BI APPEND " flag value"
+Extend the flag named \fIflag\fP with the options given in \fIvalue\fP.
+A space is prepended to the appended value if the flag's current value is non-empty.
+.P
+The configuration files can contain comments on lines starting with a hash
+(#). Empty lines are also ignored.
+.SH COMMANDS
+.TP
+.BI \-\-list
+Print the list of flags supported by the current vendor
+(one per line). See the \fBSUPPORTED FLAGS\fP section for more
+information about them.
+.TP
+.BI \-\-get " flag"
+Print the value of the flag on standard output. Exits with 0
+if the flag is known otherwise exits with 1.
+.TP
+.BI \-\-origin " flag"
+Print the origin of the value that is returned by \fB\-\-get\fP. Exits
+with 0 if the flag is known otherwise exits with 1. The origin can be one
+of the following values:
+.RS
+.TP
+.B vendor
+the original flag set by the vendor is returned;
+.TP
+.B system
+the flag is set/modified by a system-wide configuration;
+.TP
+.B user
+the flag is set/modified by a user-specific configuration;
+.TP
+.B env
+the flag is set/modified by an environment-specific configuration.
+.RE
+.TP
+.B \-\-help
+Show the usage message and exit.
+.TP
+.B \-\-version
+Show the version and exit.
+.
+.SH SUPPORTED FLAGS
+.TP
+.B CFLAGS
+Options for the C compiler. The default value set by the vendor
+includes \fI-g\fP and the default optimization level (\fI-O2\fP usually,
+or \fI-O0\fP if the \fBDEB_BUILD_OPTIONS\fP environment variable defines
+\fInoopt\fP).
+.TP
+.B CPPFLAGS
+Options for the C preprocessor. Default value: empty.
+.TP
+.B CXXFLAGS
+Options for the C++ compiler. Same as \fBCFLAGS\fP.
+.TP
+.B FFLAGS
+Options for the Fortran compiler. Same as \fBCFLAGS\fP.
+.TP
+.B LDFLAGS
+Options passed to the compiler when linking executables or shared
+objects (if the linker is called directly, then
+.B -Wl
+and
+.B ,
+have to be stripped from these options). Default value: empty.
+.
+.SH FILES
+.TP
+.B /etc/dpkg/buildflags.conf
+System wide configuration file.
+.TP
+.B ~/.config/dpkg-buildflags.conf
+User configuration file.
+.SH ENVIRONMENT
+.TP
+.BI DEB_ flag _SET
+This variable can be used to force the value returned for the given
+\fIflag\fP.
+.TP
+.BI DEB_ flag _APPEND
+This variable can be used to append supplementary options to the value
+returned for the given \fIflag\fP.
+.
+.SH AUTHOR
+Copyright \(co 2010 Rapha\[:e]l Hertzog
+.sp
+This is free software; see the GNU General Public Licence version 2 or
+later for copying conditions. There is NO WARRANTY.
+
diff --git a/man/po/po4a.cfg b/man/po/po4a.cfg
index 1a3ed7909..80089ae40 100644
--- a/man/po/po4a.cfg
+++ b/man/po/po4a.cfg
@@ -83,6 +83,11 @@
add_$lang:po/$lang.add
+[type:man] dpkg-buildflags.1 \
+ $lang:$(builddir)/$lang/dpkg-buildflags.1 \
+ add_$lang:po/$lang.add
+
+
[type:man] dpkg-buildpackage.1 \
$lang:$(builddir)/$lang/dpkg-buildpackage.1 \
add_$lang:po/$lang.add
diff --git a/scripts/Makefile.am b/scripts/Makefile.am
index d70af7e55..07c108d38 100644
--- a/scripts/Makefile.am
+++ b/scripts/Makefile.am
@@ -4,6 +4,7 @@ SUBDIRS = po
bin_SCRIPTS = \
dpkg-architecture \
+ dpkg-buildflags \
dpkg-buildpackage \
dpkg-checkbuilddeps \
dpkg-distaddfile \
@@ -30,6 +31,7 @@ changelog_SCRIPTS = \
EXTRA_DIST = \
README.alternatives \
dpkg-architecture.pl \
+ dpkg-buildflags.pl \
dpkg-buildpackage.pl \
dpkg-checkbuilddeps.pl \
dpkg-distaddfile.pl \
diff --git a/scripts/dpkg-buildflags.pl b/scripts/dpkg-buildflags.pl
new file mode 100755
index 000000000..bce8c314a
--- /dev/null
+++ b/scripts/dpkg-buildflags.pl
@@ -0,0 +1,105 @@
+#!/usr/bin/perl
+#
+# dpkg-vendor
+#
+# Copyright © 2010 Raphaël Hertzog <hertzog@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 <http://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Dpkg;
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::BuildFlags;
+
+textdomain("dpkg-dev");
+
+sub version {
+ printf _g("Debian %s version %s.\n"), $progname, $version;
+
+ printf _g("
+Copyright (C) 2010 Raphael Hertzog <hertzog\@debian.org>.");
+
+ 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 [<action>]
+
+Actions:
+ --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.
+ --list output a list of the flags supported by the current vendor.
+ --help show this help message.
+ --version show the version.
+"), $progname;
+}
+
+my ($param, $action);
+
+while (@ARGV) {
+ $_ = shift(@ARGV);
+ if (m/^--(get|origin)$/) {
+ usageerr(_g("two commands specified: --%s and --%s"), $1, $action)
+ if defined($action);
+ $action = $1;
+ $param = shift(@ARGV);
+ } elsif (m/^--list$/) {
+ usageerr(_g("two commands specified: --%s and --%s"), "list", $action)
+ if defined($action);
+ $action = "list";
+ } elsif (m/^-(h|-help)$/) {
+ usage();
+ exit 0;
+ } elsif (m/^--version$/) {
+ version();
+ exit 0;
+ } else {
+ usageerr(_g("unknown option \`%s'"), $_);
+ }
+}
+
+usageerr(_g("need an action option")) unless defined($action);
+
+my $build_flags = Dpkg::BuildFlags->new();
+
+if ($action eq "list") {
+ foreach my $flag ($build_flags->list()) {
+ print "$flag\n";
+ }
+ exit(0);
+}
+
+$build_flags->load_config();
+
+if ($action eq "get") {
+ if ($build_flags->has($param)) {
+ print $build_flags->get($param) . "\n";
+ exit(0);
+ }
+} elsif ($action eq "origin") {
+ if ($build_flags->has($param)) {
+ print $build_flags->get_origin($param) . "\n";
+ exit(0);
+ }
+}
+
+exit(1);
diff --git a/scripts/po/POTFILES.in b/scripts/po/POTFILES.in
index 9b7483cd9..1bcd2d521 100644
--- a/scripts/po/POTFILES.in
+++ b/scripts/po/POTFILES.in
@@ -1,6 +1,7 @@
# This is the list of all source files with translatable strings.
scripts/dpkg-architecture.pl
+scripts/dpkg-buildflags.pl
scripts/dpkg-buildpackage.pl
scripts/dpkg-checkbuilddeps.pl
scripts/dpkg-distaddfile.pl