dpkg-buildflags Man page

dpkg-buildflags suite dpkg dpkg-buildflags

NOM
dpkg-buildflags – retourne les options de compilation à utiliser pour
la construction du paquet

SYNOPSIS

dpkg-buildflags [option…] [commande]

DESCRIPTION

dpkg-buildflags est un script qui permet de récupérer les options de
compilation à utiliser pour la construction d’un paquet. Les drapeaux
par défaut sont définis par le fournisseur de la distribution mais
peuvent être étendus ou remplacés de plusieurs façons :

1. pour tout le système avec /etc/dpkg/buildflags.conf;

2. pour l’utilisateur courant avec $XDG_CONFIG_HOME/dpkg/build‐
flags.conf où la valeur par défaut de $XDG_CONFIG_HOME est
$HOME/.config;

3. temporairement par l’utilisateur avec des variables d’environne‐
ment (voir VARIABLES D’ENVIRONNEMENT).

4. dynamiquement par le responsable du paquet avec des variables
d’environnement via debian/rules (voir VARIABLES D’ENVIRONNE‐
MENT).

Les fichiers de configuration peuvent contenir deux types de direc‐
tives :

SET drapeau valeur
Remplace le drapeau drapeau par la valeur valeur.

STRIP valeur drapeau
Retire du drapeau drapeau tous les drapeaux de construction lis‐
tés dans valeur.

APPEND drapeau valeur
Étend le drapeau drapeau avec les options indiquées dans valeur.
Une espace est ajoutée au début de ce qui est ajouté si la
valeur actuelle du drapeau n’est pas vide.

PREPEND valeur drapeau
Préfixe le drapeau drapeau avec les options indiquées dans
valeur. Une espace est ajoutée au début de ce qui est ajouté si
la valeur actuelle du drapeau n’est pas vide.

Les fichiers de configuration peuvent contenir des commentaires sur les
lignes commençant par un dièse (#). Les lignes vides sont également
ignorées.

COMMANDES
–dump Print to standard output all compilation flags and their values.
It prints one flag per line separated from its value by an equal
sign (“flag=value”). This is the default action.

–list Affiche la liste des drapeaux gérés par l’éditeur actuel (un par
ligne). Voir la section DRAPEAUX GÉRÉS pour plus d’informations
sur chacun d’eux.

–status
Display any information that can be useful to explain the beha‐
viour of dpkg-buildflags (since dpkg 1.16.5): relevant environ‐
ment variables, current vendor, state of all feature flags. Also
print the resulting compiler flags with their origin.

Cette option est destinée à être utilisée depuis debian/rules,
afin de garder dans le journal de construction une trace claire
des drapeaux de compilation utilisés. Cela peut être utile pour
diagnostiquer des problèmes qui y seraient liés.

–export=format
Affiche sur la sortie standard les commandes qui permettent
d’exporter tous les drapeaux de compilation pour un outil parti‐
culier. Si format n’est pas spécifié, sa valeur est sh. Seuls
les drapeaux de compilation commençant par une majuscule sont
inclus, les autres étant supposés inadaptés à l’environnement.
Formats pris en charge :

sh Commandes shell pour définir et exporter tous les dra‐
peaux de compilation dans l’environnement. Les valeurs
drapeau sont protégées et ainsi la sortie est prête à
être évaluée par un shell.

cmdline
Arguments à passer à la ligne de commande d’un programme
de construction pour utiliser tous les drapeaux de compi‐
lation (depuis dpkg 1.17.0). Les valeurs drapeau sont
protégées dans la syntaxe du shell.

configure
C’est un ancien alias pour cmdline.

make Directives de make pour définir et exporter tous les dra‐
peaux de compilation dans l’environnement. La sortie peut
être écrite dans un fragment de makefile et évaluée en
utilisant une directive include.

–get drapeau
Affiche la valeur de ce drapeau sur la sortie standard. Retourne
un code de sortie 0 si le drapeau est connu et 1 s’il est
inconnu.

–origin drapeau
Affiche l’origine de la valeur renvoyée par –get. Retourne un
code de sortie 0 si le drapeau est connu et 1 s’il est inconnu.
L’origine est une des valeurs suivantes :

vendor le drapeau défini à l’origine par l’éditeur est renvoyé ;

system le drapeau est placé ou modifié par un réglage système ;

user le drapeau est placé ou modifié par une configuration
spécifique à l’utilisateur ;

env le drapeau est placé ou modifié par une configuration
spécifique dans l’environnement.

–query-features domaine
Print the features enabled for a given area (since dpkg 1.16.2).
The only currently recognized areas on Debian and derivatives
are qa, reproducible, sanitize and hardening, see the FEATURE
AREAS section for more details. Exits with 0 if the area is
known otherwise exits with 1.

L’affichage est dans le format RFC822, avec une section par
fonctionnalité. Par exemple :

Feature: pie
Enabled: no

Feature: stackprotector
Enabled: yes

–help Affiche un message d’aide puis quitte.

–version
Affiche le numéro de version puis quitte.

DRAPEAUX GÉRÉS
CFLAGS Options du compilateur C. La valeur par défaut définie par
l’éditeur comporte -g et le niveau d’optimisation par défaut
(-O2 en général, ou -O0 si la variable d’environnement
DEB_BUILD_OPTIONS contient noopt).

CPPFLAGS
Options du préprocesseur C. Valeur par défaut : aucune.

CXXFLAGS
Options du compilateur C++. Analogue à CFLAGS.

OBJCFLAGS
Options du compilateur Objective C. Analogue à CFLAGS.

OBJCXXFLAGS
Options du compilateur Objective C++. Analogue à CXXFLAGS.

GCJFLAGS
Options du compilateur Java GNU (gcj). Un sous-ensemble de
CFLAGS.

FFLAGS Options du compilateur Fortran 77. Un sous-ensemble de CFLAGS.

FCFLAGS
Options du compilateur Fortran 9x. Analogue à FFLAGS.

LDFLAGS
Options passées au compilateur lors du processus de liaison des
exécutables ou des objets partagés (si le linker est appelé
directement, alors -Wl et , doivent être retirés de ces
options). Valeur par défaut : aucune.

De nouveaux drapeaux pourront être ajoutés si besoin est (par exemple
pour la prise en charge de nouveaux langages).

ZONES D’OPTION
Each area feature can be enabled and disabled in the DEB_BUILD_

OPTIONS

and DEB_BUILD_MAINT_OPTIONS environment variable’s area value with the
‘+’ and ‘-’ modifier. For example, to enable the hardening “pie” fea‐
ture and disable the “fortify” feature you can do this in debian/rules:

export DEB_BUILD_MAINT_OPTIONS=hardening=+pie,-fortify

The special feature all (valid in any area) can be used to enable or
disable all area features at the same time. Thus disabling everything
in the hardening area and enabling only “format” and “fortify” can be
achieved with:

export DEB_BUILD_MAINT_OPTIONS=hardening=-all,+format,+fortify

qa
Plusieurs options de compilation (détaillées ci-dessous) peuvent être
utilisées pour détecter des problèmes dans le code source ou dans le
système de construction.

bug Ce paramètre (désactivé par défaut) ajoute toutes les options
d’avertissement détectant de façon fiable du code source problé‐
matique. Les avertissements sont fatals.

canary Ce paramètre (désactivé par défaut) ajoute des options détec‐
trices « canary » factices aux drapeaux de construction de telle
sorte que les rapports de compilation permettront de vérifier la
façon dont ces drapeaux se propagent et de repérer toute ommis‐
sion des paramètres de drapeaux habituels. Les drapeaux actuel‐
lement pris en charge sont CPPFLAGS, CFLAGS, OBJCFLAGS,
CXXFLAGS ainsi que OBJCXXFLAGS, avec les drapeaux définis à
-D__DEB_CANARY_flag_random-id__, et LDFLAGS paramétré à
-Wl,-z,deb-canary-random-id.

sanitize
Several compile-time options (detailed below) can be used to help sani‐
tize a resulting binary against memory corruptions, memory leaks, use
after free, threading data races and undefined behavior bugs.

address
This setting (disabled by default) adds -fsanitize=address to
LDFLAGS and -fsanitize=address -fno-omit-frame-pointer to CFLAGS
and CXXFLAGS.

thread This setting (disabled by default) adds -fsanitize=thread to
CFLAGS, CXXFLAGS and LDFLAGS.

leak This setting (disabled by default) adds -fsanitize=leak to
LDFLAGS. It gets automatically disabled if either the address or
the thread features are enabled, as they imply it.

undefined
This setting (disabled by default) adds -fsanitize=undefined to
CFLAGS, CXXFLAGS and LDFLAGS.

hardening
Plusieurs options de compilation (détaillées ci-dessous) peuvent être
utilisées pour accroître la résistance du binaire compilé face aux
attaques par corruption de la mémoire ou fournir des messages d’aver‐
tissement supplémentaires lors de la compilation. Sauf mention
contraire (voir ci-dessous), ces options sont activées par défaut pour
les architectures qui les gèrent.

format This setting (enabled by default) adds -Wformat -Werror=for‐
mat-security to CFLAGS, CXXFLAGS, OBJCFLAGS and OBJCXXFLAGS.
This will warn about improper format string uses, and will fail
when format functions are used in a way that represent possible
security problems. At present, this warns about calls to printf
and scanf functions where the format string is not a string
literal and there are no format arguments, as in printf(foo);
instead of printf(“%s”, foo); This may be a security hole if the
format string came from untrusted input and contains ‘%n’.

fortify
This setting (enabled by default) adds -D_FORTIFY_SOURCE=2 to
CPPFLAGS. During code generation the compiler knows a great deal
of information about buffer sizes (where possible), and attempts
to replace insecure unlimited length buffer function calls with
length-limited ones. This is especially useful for old, crufty
code. Additionally, format strings in writable memory that
contain ‘%n’ are blocked. If an application depends on such a
format string, it will need to be worked around.

Veuillez noter que pour que cette option fasse effet, la source
devra aussi être compilée avec -O1 ou plus. Si la variable
d’environnement DEB_BUILD_OPTIONS contient noopt, la prise en
charge de fortify sera désactivée du fait des nouveaux avertis‐
sements émis par glibc version 2.16 et ultérieure.

stackprotector
Ce réglage (activé par défaut si stackprotectorstrong n’est pas
employé), ajoute -fstack-protector –param=ssp-buffer-size=4 à
CFLAGS, CXXFLAGS, OBJCFLAGS, OBJCXXFLAGS, GCJFLAGS, FFLAGS et
FCFLAGS. Il ajoute des contrôles liés aux réécritures de piles.
Cela conduit des tentatives d’attaques par injection de code à
terminer en échec. Dans le meilleur des cas, cette protection
transforme une vulnérabilité d’injection de code en déni de ser‐
vice ou en non-problème (selon les applications).

Cette fonctionnalité impose de lier le code à glibc (ou toute
autre bibliothèque fournissant __stack_chk_fail) et doit donc
être désactivée lorsque le code est construit avec -nostdlib,
-ffreestanding ou équivalents.

stackprotectorstrong
Ce réglage, activé par défaut, ajoute -fstack-protector-strong à
CFLAGS, CXXFLAGS, OBJCFLAGS, OBJCXXFLAGS, GCJFLAGS, FFLAGS et
FCFLAGS. Il s’agit d’une version renforcée de stackprotectorqui
n’affecte pas les performances de manière importante.

Désactiver stackprotector désactive également ce paramètre.

Cette fonctionnalité a les même exigences que stackprotector, en
plus de nécessiter gcc 4.9 ou plus récent.

relro Ce réglage, activé par défaut, ajoute -Wl,-z,relro à LDFLAGS.
Lors du chargement du programme, plusieurs parties de la mémoire
ELF doivent être écrites par l’éditeur de liens. Ce réglage
indique au chargeur de mettre ces sections en lecture seule
avant de rendre le contrôle au programme. L’utilisation habi‐
tuelle de ce réglage est la protection contre les attaques par
réécriture GOT. Si cette option est désactivée, l’option bindnow
sera également désactivée.

bindnow
Ce réglage, désactivé par défaut, ajoute -Wl,-z,now à LDFLAGS.
Lors du chargement du programme, tous les symboles dynamiques
sont résolus, ce qui permet au « PLT » entier (NdT : jargon
détecté !) d’être en lecture seule (du fait du réglage relro
ci-dessus). Cette option ne peut être activée si relro ne l’est
pas.

pie Ce réglage, désactivé par défaut, ajoute -fPIE à CFLAGS, CXX‐
FLAGS OBJCFLAGS, OBJCXXFLAGS, GCJFLAGS, FFLAGS et FCFLAGS,ainsi
que -fPIE -pie à LDFLAGS. Les exécutables à position indépen‐
dante (« Position Independent Executable ») permettent d’utili‐
ser la randomisation de l’organisation de l’espace d’adressage
(ASLR : « Address Space Layout Randomization »), qui est gérée
par certaines versions du noyau. Bien que ASLR puisse déjà être
mise en ?uvre pour les zones de données dans la pile et le tam‐
pon (brk et mmap), les zones de codes doivent être compilées
comme indépendantes de la position. Les bibliothèques partagées
font déjà cela (-fPIC) ce qui permet automatiquement d’utiliser
ASLR. Par contre les régions .text binaires doivent être
construites en mode PIE pour mettre en ?uvre ASLR. Une fois cela
réalisé, les attaques ROP (« Return Oriented Programming »)
deviennent plus difficiles car il n’existe pas d’emplacement
statique d’où rebondir sur une attaque par corruption de la
mémoire.

Ce réglage n’est pas compatible avec -Fpic : la prudence est
donc conseillée pour la construction d’objets partagés.

De plus, comme la protection PIE est mise en ?uvre à l’aide dun
registre global, certaines architectures (notamment i386)
peuvent souffrir de pertes de performances allant jusqu’à 15 %
sur des charges d’applications utilisant largement les segments
de texte ; le plus souvent, cette perte de performances n’excè‐
dera pas 1 %. Pour des architectures offrant plus de registres
globaux (par exemple amd64), cette pénalisation n’existe prati‐
quement pas.

reproducible
Les options de compilation (détaillées ci-dessous) peuvent aider à amé‐
liorer la reproductibilité de la construction ou fournir des messages
d’avertissement supplémentaires lors de la compilation. Sauf mention
contraire (voir ci-dessous), ces options sont activées par défaut pour
les architectures qui les gèrent.

timeless
This setting (enabled by default) adds -Wdate-time to CPPFLAGS.
This will cause warnings when the __TIME__, __DATE__ and
__TIMESTAMP__ macros are used.

ENVIRONNEMENT
Deux jeux de variables d’environnement effectuent les mêmes opérations.
Le premier (DEB_drapeau_opération) ne devrait jamais être utilisé
depuis debian/rules. Il est destiné aux utilisateurs souhaitant recom‐
piler le paquet source avec des drapeaux de compilation modifiés. Le
second (DEB_drapeau_MAINT_opération) ne doit être utilisé que dans
debian/rules par les responsables de paquets pour modifier les drapeaux
de compilation concernés.

DEB_drapeau_SET
DEB_drapeau_MAINT_SET
Cette variable permet de forcer la valeur renvoyée pour le dra‐
peau indiqué.

DEB_drapeau_STRIP
DEB_drapeau_MAINT_STRIP
Cette variable peut être utilisée pour fournir une liste
d’options (séparées par des espaces) qui seront retirées du jeu
de drapeaux renvoyé pour le drapeau indiqué.

DEB_drapeau_APPEND
DEB_drapeau_MAINT_APPEND
Cette variable permet d’ajouter des options à la valeur renvoyée
pour le drapeau indiqué.

DEB_drapeau_PREPEND
DEB_drapeau_MAINT_PREPEND
Cette variable permet de préfixer la valeur renvoyée pour le
drapeau indiqué par des options supplémentaires.

DEB_BUILD_

OPTIONS

DEB_BUILD_MAINT_

OPTIONS

Ces variables peuvent être utilisées par un utilisateur ou un
responsable de paquet pour activer ou désactiver différentes
options de zone qui affectent les drapeaux de construction. La
variable DEB_BUILD_MAINT_OPTIONS outrepasse tous les paramètres
de la zone d’options DEB_BUILD_OPTIONS. Voir la section ZONES
D’OPTION pour plus de détails.

FICHIERS
Fichiers de configuration.
/etc/dpkg/buildflags.conf
Fichier de configuration pour l’ensemble du système.

$XDG_CONFIG_HOME/dpkg/buildflags.conf or
$HOME/.config/dpkg/buildflags.conf
Fichier de configuration propre à l’utilisateur

Gestion de l’empaquetage
/usr/share/dpkg/buildflags.mk
Fragment de fichier Makefile qui chargera (et facultativement
exportera) dans les variables (depuis dpkg 1.16.1) tous les dra‐
peaux pris en charge par dpkg-buildflags.

ENVIRONNEMENT
DEB_VENDOR
This setting defines the current vendor. If not set, it will
discover the current vendor by reading
/etc/dpkg/origins/default.

EXEMPLES
Pour passer des drapeaux de compilation à une commande de compilation
dans un Makefile :

$(MAKE) $(shell dpkg-buildflags –export=cmdline)

./configure $(shell dpkg-buildflags –export=cmdline)

To set build flags in a shell script or shell fragment, eval can be
used to interpret the output and to export the flags in the environ‐
ment:

eval “$(dpkg-buildflags –export=sh)” && make

ou définir les paramètres de position à passer à la commande :

eval “set — $(dpkg-buildflags –export=cmdline)”
for dir in a b c; do (cd $dir && ./configure “$@” && make); done

Utilisation dans debian/rules
Il faut appeler dpkg-buildflags ou inclure buildflags.mk à partir du
fichier debian/rules pour obtenir les drapeaux de compilation néces‐
saires à passer au système de construction. Veuillez noter que les
anciennes versions de dpkg-buildpackage (antérieures à dpkg 1.16.1)
exportaient ces drapeaux automatiquement. Néanmoins, il est déconseillé
de dépendre de ce comportement parce qu’il casse l’appel manuel de
debian/rules.

Pour les paquets avec des systèmes de construction du style autoconf,
il est possible de passer les options appropriées à configure ou
make directement, comme vu ci-dessus.

For other build systems, or when you need more fine-grained control
about which flags are passed where, you can use –get. Or you can
include buildflags.mk instead, which takes care of calling
dpkg-buildflags and storing the build flags in make variables.

Si vous voulez exporter tous les drapeaux de compilation dans l’envi‐
ronnement (où le système de construction peut les récupérer) :

DPKG_EXPORT_BUILDFLAGS = 1
include /usr/share/dpkg/buildflags.mk

Pour un contrôle supplémentaire sur ce qui est exporté, vous pouvez
exporter manuellement les variables (puisque aucune n’est exportée par
défaut) :

include /usr/share/dpkg/buildflags.mk
export CPPFLAGS CFLAGS LDFLAGS

Et enfin, vous pouvez bien sûr passer manuellement les drapeaux aux
commandes :

include /usr/share/dpkg/buildflags.mk
build-arch:
$(CC) -o hello hello.c $(CPPFLAGS) $(CFLAGS) $(LDFLAGS)

TRADUCTION
Ariel VARDI , 2002. Philippe Batailler, 2006.
Nicolas François, 2006. Veuillez signaler toute erreur à
.

Projet Debian 04-09-2014 dpkg-buildflags