man-pages/fr/man1/dpkg-buildflags.1.html
2021-03-31 01:06:50 +01:00

727 lines
35 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML><HEAD><TITLE>Man page of dpkg-buildflags</TITLE>
</HEAD><BODY>
<H1>dpkg-buildflags</H1>
Section: suite dpkg (1)<BR>Updated: 2020-03-23<BR><A HREF="#index">Index</A>
<A HREF="/cgi-bin/man/man2html">Return to Main Contents</A><HR>
<A NAME="lbAB">&nbsp;</A>
<H2>NOM</H2>
dpkg-buildflags - Renvoie les options de compilation &agrave; utiliser pour la
construction du paquet
<A NAME="lbAC">&nbsp;</A>
<H2>SYNOPSIS</H2>
<B>dpkg-buildflags</B> [<I>option</I>...] [<I>commande</I>]
<A NAME="lbAD">&nbsp;</A>
<H2>DESCRIPTION</H2>
<B>dpkg-buildflags</B> est un script qui permet de r&eacute;cup&eacute;rer les options de
compilation &agrave; utiliser pour la construction d'un paquet.
Les drapeaux par d&eacute;faut sont d&eacute;finis par le distributeur mais peuvent &ecirc;tre
&eacute;tendus ou remplac&eacute;s de plusieurs fa&ccedil;ons&nbsp;:
<DL COMPACT>
<DT id="1">1.<DD>
pour tout le syst&egrave;me avec <B>/etc/dpkg/buildflags.conf</B>&nbsp;;
<DT id="2">2.<DD>
pour l'utilisateur courant avec <B>$XDG_CONFIG_HOME/dpkg/buildflags.conf</B> o&ugrave;
la valeur par d&eacute;faut de <B>$XDG_CONFIG_HOME</B> est <B>$HOME/.config</B>&nbsp;;
<DT id="3">3.<DD>
temporairement par l'utilisateur avec des variables d'environnement (voir
<B>VARIABLES D'ENVIRONNEMENT</B>)&nbsp;;
<DT id="4">4.<DD>
dynamiquement par le responsable du paquet avec des variables
d'environnement &agrave; l'aide de <B>debian/rules</B> (voir <B>VARIABLES
D'ENVIRONNEMENT</B>).
</DL>
<P>
Les fichiers de configuration peuvent contenir quatre types de directives&nbsp;:
<DL COMPACT>
<DT id="5"><B>SET</B><I> drapeau valeur</I><DD>
Remplace le drapeau <I>drapeau</I> par la valeur <I>valeur</I>.
<DT id="6"><B>STRIP</B><I> drapeau valeur</I><DD>
Retire du drapeau <I>drapeau</I> tous les drapeaux de construction list&eacute;s dans
<I>valeur</I>.
<DT id="7"><B>APPEND</B><I> drapeau valeur</I><DD>
&Eacute;tend le drapeau <I>drapeau</I> avec les options indiqu&eacute;es dans <I>valeur</I>. Une
espace est ajout&eacute;e au d&eacute;but de ce qui est ajout&eacute; si la valeur actuelle du
drapeau n'est pas vide.
<DT id="8"><B>PREPEND</B><I> drapeau valeur</I><DD>
Pr&eacute;fixe le drapeau <I>drapeau</I> avec les options indiqu&eacute;es dans <I>valeur</I>. Une
espace est ajout&eacute;e au d&eacute;but de ce qui est ajout&eacute; si la valeur actuelle du
drapeau n'est pas vide.
</DL>
<P>
Les fichiers de configuration peuvent contenir des commentaires sur les
lignes commen&ccedil;ant par un di&egrave;se (#). Les lignes vides sont &eacute;galement
ignor&eacute;es.
<A NAME="lbAE">&nbsp;</A>
<H2>COMMANDES</H2>
<DL COMPACT>
<DT id="9"><B>--dump</B><DD>
Affiche sur la sortie standard tous les drapeaux de compilation et leurs
valeurs. Un drapeau par ligne est affich&eacute;, suivi de sa valeur, s&eacute;par&eacute;e par
le caract&egrave;re &laquo;&nbsp;&eacute;gal&nbsp;&raquo; (&laquo;&nbsp;<I>drapeau</I>=<I>valeur</I>&nbsp;&raquo;). Il s'agit de l'action par
d&eacute;faut.
<DT id="10"><B>--list</B><DD>
Affiche la liste des drapeaux g&eacute;r&eacute;s par le distributeur actuel (un par
ligne). Voir la section <B>DRAPEAUX G&Eacute;R&Eacute;S</B> pour plus d'informations sur
chacun d'eux.
<DT id="11"><B>--status</B><DD>
Affiche toute information utile pour expliquer le comportement de
<B>dpkg-buildflags</B> (depuis dpkg&nbsp;1.16.5)&nbsp;: variables d'environnement,
distributeur actuel, &eacute;tat de tous les drapeaux de fonctionnalit&eacute;s. Affiche
&eacute;galement les drapeaux de compilation r&eacute;sultants ainsi que leur origine.
<P>
Cette option est destin&eacute;e &agrave; &ecirc;tre utilis&eacute;e depuis <B>debian/rules</B>, afin de
garder dans le journal de construction une trace claire des drapeaux de
compilation utilis&eacute;s. Cela peut &ecirc;tre utile pour diagnostiquer des probl&egrave;mes
qui y seraient li&eacute;s.
<DT id="12"><B>--export=</B><I>format</I><DD>
Affiche sur la sortie standard les commandes qui permettent d'exporter tous
les drapeaux de compilation pour un outil particulier. Si <I>format</I> n'est
pas sp&eacute;cifi&eacute;, sa valeur est <B>sh</B>. Seuls les drapeaux de compilation
commen&ccedil;ant par une majuscule sont inclus, les autres &eacute;tant suppos&eacute;s
inadapt&eacute;s &agrave; l'environnement. Formats pris en charge&nbsp;:
<DL COMPACT><DT id="13"><DD>
<DL COMPACT>
<DT id="14"><B>sh</B><DD>
Commandes shell pour d&eacute;finir et exporter tous les drapeaux de compilation
dans l'environnement. Les valeurs drapeau sont prot&eacute;g&eacute;es et ainsi la sortie
est pr&ecirc;te &agrave; &ecirc;tre &eacute;valu&eacute;e par un shell.
<DT id="15"><B>cmdline</B><DD>
Arguments &agrave; passer &agrave; la ligne de commande d'un programme de construction
pour utiliser tous les drapeaux de compilation (depuis dpkg&nbsp;1.17.0). Les
valeurs drapeau sont prot&eacute;g&eacute;es dans la syntaxe du shell.
<DT id="16"><B>configure</B><DD>
C'est un ancien alias pour <B>cmdline</B>.
<DT id="17"><B>make</B><DD>
Directives de make pour d&eacute;finir et exporter tous les drapeaux de compilation
dans l'environnement. La sortie peut &ecirc;tre &eacute;crite dans un fragment de
Makefile et &eacute;valu&eacute;e en utilisant une directive <B>include</B>.
</DL>
</DL>
<DT id="18"><B>--get</B><I> drapeau</I><DD>
Affiche la valeur de ce drapeau sur la sortie standard. Retourne un code de
sortie <B>0</B> si le drapeau est connu et <B>1</B> s'il est inconnu.
<DT id="19"><B>--origin</B><I> drapeau</I><DD>
Affiche l'origine de la valeur renvoy&eacute;e par <B>--get</B>. Retourne un code de
sortie <B>0</B> si le drapeau est connu et <B>1</B> s'il est inconnu. L'origine est
une des valeurs suivantes&nbsp;:
<DL COMPACT><DT id="20"><DD>
<DL COMPACT>
<DT id="21"><B>vendor</B><DD>
le drapeau d&eacute;fini &agrave; l'origine par le distributeur est renvoy&eacute;&nbsp;;
<DT id="22"><B>system</B><DD>
le drapeau est plac&eacute; ou modifi&eacute; par un r&eacute;glage syst&egrave;me&nbsp;;
<DT id="23"><B>user</B><DD>
le drapeau est plac&eacute; ou modifi&eacute; par une configuration sp&eacute;cifique &agrave;
l'utilisateur&nbsp;;
<DT id="24"><B>env</B><DD>
le drapeau est plac&eacute; ou modifi&eacute; par une configuration sp&eacute;cifique dans
l'environnement.
</DL>
</DL>
<DT id="25"><B>--query</B><DD>
Affiche toute information utile pour expliquer le comportement du
programme&nbsp;: distributeur actuel, variables d'environnement, domaines des
fonctionnalit&eacute;s, &eacute;tat de tous les drapeaux de fonctionnalit&eacute;s. Affiche
&eacute;galement les drapeaux de compilation r&eacute;sultants ainsi que leur origine
(depuis dpkg&nbsp;1.19.0).
<DT id="26"><DD>
Par exemple&nbsp;:
<PRE>
Vendor: Debian
Environment:
DEB_CFLAGS_SET=-O0 -Wall
Area: qa
Features:
bug=no
canary=no
Area: reproducible
Features:
timeless=no
Flag: CFLAGS
Value: -O0 -Wall
Origin: env
Flag: CPPFLAGS
Value: -D_FORTIFY_SOURCE=2
Origin: vendor
</PRE>
<DT id="27"><B>--query-features</B><I> domaine</I><DD>
Affiche les fonctionnalit&eacute;s activ&eacute;es pour un domaine donn&eacute; (depuis
dpkg&nbsp;1.16.2). Les seuls domaines reconnus actuellement sur Debian et ses
d&eacute;riv&eacute;s sont <B>future</B>, <B>qa</B>, <B>reproducible</B>, <B>sanitize</B> et <B>hardening</B>,
voir la section <B>ZONES D'OPTION</B> pour plus de d&eacute;tails. Retourne un code de
sortie <B>0</B> si le domaine est connu et <B>1</B> s'il est inconnu.
<DT id="28"><DD>
L'affichage est dans le format RFC822, avec une section par
fonctionnalit&eacute;. Par exemple&nbsp;:
<DT id="29"><DD>
<PRE>
Feature: pie
Enabled: yes
Feature: stackprotector
Enabled: yes
</PRE>
<DT id="30"><B>--help</B><DD>
Affiche un message d'aide puis quitte.
<DT id="31"><B>--version</B><DD>
Affiche le num&eacute;ro de version puis quitte.
</DL>
<A NAME="lbAF">&nbsp;</A>
<H2>DRAPEAUX G&Eacute;R&Eacute;S</H2>
<DL COMPACT>
<DT id="32"><B>CFLAGS</B><DD>
Options du compilateur&nbsp;C. La valeur par d&eacute;faut d&eacute;finie par le distributeur
comporte <B>-g</B> et le niveau d'optimisation par d&eacute;faut (<B>-O2</B> en g&eacute;n&eacute;ral, ou
<B>-O0</B> si la variable d'environnement <B>DEB_BUILD_OPTIONS</B> contient
<I>noopt</I>).
<DT id="33"><B>CPPFLAGS</B><DD>
Options du pr&eacute;processeur&nbsp;C. Valeur par d&eacute;faut&nbsp;:&nbsp;aucune.
<DT id="34"><B>CXXFLAGS</B><DD>
Options du compilateur&nbsp;C++. Analogue &agrave; <B>CFLAGS</B>.
<DT id="35"><B>OBJCFLAGS</B><DD>
Options du compilateur Objective&nbsp;C. Analogue &agrave; <B>CFLAGS</B>.
<DT id="36"><B>OBJCXXFLAGS</B><DD>
Options du compilateur Objective&nbsp;C++. Analogue &agrave; <B>CXXFLAGS</B>.
<DT id="37"><B>GCJFLAGS</B><DD>
Options du compilateur Java GNU (gcj). Un sous-ensemble de <B>CFLAGS</B>.
<DT id="38"><B>FFLAGS</B><DD>
Options du compilateur Fortran&nbsp;77. Un sous-ensemble de <B>CFLAGS</B>.
<DT id="39"><B>FCFLAGS</B><DD>
Options du compilateur Fortran&nbsp;9x. Analogue &agrave; <B>FFLAGS</B>.
<DT id="40"><B>LDFLAGS</B><DD>
Options pass&eacute;es au compilateur lors du processus de liaison des ex&eacute;cutables
ou des objets partag&eacute;s (si le linker est appel&eacute; directement, alors <B>-Wl</B> et
<B>,</B> doivent &ecirc;tre retir&eacute;s de ces options). Valeur par d&eacute;faut&nbsp;:&nbsp;aucune.
</DL>
<P>
De nouveaux drapeaux pourront &ecirc;tre ajout&eacute;s si besoin est (par exemple pour
la prise en charge de nouveaux langages).
<A NAME="lbAG">&nbsp;</A>
<H2>ZONES D'OPTION</H2>
<P>
Chaque option de zone peut &ecirc;tre activ&eacute;e ou d&eacute;sactiv&eacute;e avec les valeurs
<B>DEB_BUILD_OPTIONS</B> et <B>DEB_BUIL_MAINT_OPTIONS</B> de l'espace de variables
d'environnement gr&acirc;ce aux modificateurs &laquo;&nbsp;<B>+</B>&nbsp;&raquo; et &laquo;&nbsp;<B>-</B>&nbsp;&raquo;. Par exemple,
pour activer l'option <B>hardening</B> &laquo;&nbsp;pie&nbsp;&raquo; et d&eacute;sactiver l'option
&laquo;&nbsp;fortify&nbsp;&raquo;, il est possible d'indiquer cela dans <B>debian/rules</B>&nbsp;:
<P>
<BR>&nbsp;&nbsp;export&nbsp;DEB_BUILD_MAINT_OPTIONS=hardening=+pie,-fortify
<P>
L'option sp&eacute;ciale <B>all</B> (valable dans toutes les zones) peut &ecirc;tre utilis&eacute;e
pour activer ou d&eacute;sactiver toutes les options de la zone &agrave; la fois. Ainsi,
tout d&eacute;sactiver dans la zone <B>hardening</B> en n'activant que &laquo;&nbsp;format&nbsp;&raquo; et
&laquo;&nbsp;fortify&nbsp;&raquo; peut &ecirc;tre r&eacute;alis&eacute; avec&nbsp;:
<P>
<BR>&nbsp;&nbsp;export&nbsp;DEB_BUILD_MAINT_OPTIONS=hardening=-all,+format,+fortify
<A NAME="lbAH">&nbsp;</A>
<H3>future</H3>
Plusieurs options de compilation (d&eacute;taill&eacute;es ci-dessous) peuvent &ecirc;tre
utilis&eacute;es pour activer des fonctionnalit&eacute;s qui devraient &ecirc;tre activ&eacute;es par
d&eacute;faut, mais ne peuvent pas l'&ecirc;tre pour des raisons de compatibilit&eacute; avec
les versions pr&eacute;c&eacute;dentes.
<DL COMPACT>
<DT id="41"><B>lfs</B><DD>
Ce param&egrave;tre (d&eacute;sactiv&eacute; par d&eacute;faut) active la prise en charge des gros
fichiers (LFS) sur les architectures 32&nbsp;bits o&ugrave; l'ABI n'inclut pas LFS par
d&eacute;faut, en ajoutant <B>-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64</B> &agrave;
<B>CPPFLAGS</B>.
</DL>
<A NAME="lbAI">&nbsp;</A>
<H3>qa</H3>
Plusieurs options de compilation (d&eacute;taill&eacute;es ci-dessous) peuvent &ecirc;tre
utilis&eacute;es pour d&eacute;tecter des probl&egrave;mes dans le code source ou dans le syst&egrave;me
de construction.
<DL COMPACT>
<DT id="42"><B>bug</B><DD>
Ce param&egrave;tre (d&eacute;sactiv&eacute; par d&eacute;faut) ajoute toutes les options
d'avertissement d&eacute;tectant de fa&ccedil;on fiable du code source probl&eacute;matique. Les
avertissements sont fatals. Les seuls drapeaux actuellement g&eacute;r&eacute;s sont
<B>CFLAGS</B> et <B>CXXFLAGS</B> avec des drapeaux d&eacute;finis &agrave;
<B>-Werror=array-bounds</B>, <B>-Werror=clobbered</B>,
<B>-Werror=implicit-function-declaration</B> et
<B>-Werror=volatile-register-var</B>.
<DT id="43"><B>canary</B><DD>
Ce param&egrave;tre (d&eacute;sactiv&eacute; par d&eacute;faut) ajoute des options d&eacute;tectrices
&laquo;&nbsp;canary&nbsp;&raquo; factices aux drapeaux de construction de telle sorte que les
rapports de compilation permettront de v&eacute;rifier la fa&ccedil;on dont ces drapeaux
se propagent et de rep&eacute;rer toute omission des param&egrave;tres de drapeaux
habituels. Les drapeaux actuellement pris en charge sont <B>CPPFLAGS</B>,
<B>CFLAGS</B>, <B>OBJCFLAGS</B>, <B>CXXFLAGS</B> ainsi que <B>OBJCXXFLAGS</B>, avec les
drapeaux d&eacute;finis &agrave; <B>-D__DEB_CANARY_</B><I>flag</I>_<I>random-id</I><B>__</B>, et
<B>LDFLAGS</B> param&eacute;tr&eacute; &agrave; <B>-Wl,-z,deb-canary-</B><I>random-id</I>.
</DL>
<A NAME="lbAJ">&nbsp;</A>
<H3>sanitize</H3>
Plusieurs options de compilation (d&eacute;taill&eacute;es ci-dessous) peuvent &ecirc;tre
utilis&eacute;es pour aider &agrave; nettoyer le binaire compil&eacute; face aux corruptions de
la m&eacute;moire, aux fuites de m&eacute;moire, &agrave; l'utilisation de m&eacute;moire apr&egrave;s
lib&eacute;ration et &agrave; des bogues au comportement ind&eacute;fini. <B>Note</B>&nbsp;: ces options
ne devraient pas &ecirc;tre utilis&eacute;es pour des constructions en production car
elles peuvent r&eacute;duire la fiabilit&eacute; du code, r&eacute;duire la s&eacute;curit&eacute; ou m&ecirc;me les
fonctionnalit&eacute;s.
<DL COMPACT>
<DT id="44"><B>address</B><DD>
Ce param&egrave;tre (d&eacute;sactiv&eacute; par d&eacute;faut) ajoute <B>-fsanitize=address</B> &agrave;
<B>LDFLAGS</B> et <B>-fsanitize=address -fno-omit-frame-pointer</B> &agrave; <B>CFLAGS</B> et
<B>CXXFLAGS</B>.
<DT id="45"><B>thread</B><DD>
Ce param&egrave;tre (d&eacute;sactiv&eacute; par d&eacute;faut) ajoute <B>-fsanitize=thread</B> &agrave; <B>CFLAGS</B>,
<B>CXXFLAGS</B> et <B>LDFLAGS</B>.
<DT id="46"><B>leak</B><DD>
Ce param&egrave;tre (d&eacute;sactiv&eacute; par d&eacute;faut) ajoute <B>-fsanitize=leak</B> &agrave;
<B>LDFLAGS</B>. Il est automatiquement d&eacute;sactiv&eacute; si les fonctions <B>address</B> ou
<B>thread</B> sont activ&eacute;es, parce qu'elles l'impliquent.
<DT id="47"><B>undefined</B><DD>
Ce param&egrave;tre (d&eacute;sactiv&eacute; par d&eacute;faut) ajoute <B>-fsanitize=undefined</B> &agrave;
<B>CFLAGS</B>, <B>CXXFLAGS</B> et <B>LDFLAGS</B>.
</DL>
<A NAME="lbAK">&nbsp;</A>
<H3>compilation renforc&eacute;e</H3>
Plusieurs options de compilation (d&eacute;taill&eacute;es ci-dessous) peuvent &ecirc;tre
utilis&eacute;es pour accro&icirc;tre la r&eacute;sistance du binaire compil&eacute; face aux attaques
par corruption de la m&eacute;moire ou fournir des messages d'avertissement
suppl&eacute;mentaires lors de la compilation. Sauf mention contraire (voir
ci-dessous), ces options sont activ&eacute;es par d&eacute;faut pour les architectures qui
les g&egrave;rent.
<DL COMPACT>
<DT id="48"><B>format</B><DD>
Ce r&eacute;glage, activ&eacute; par d&eacute;faut, ajoute <B>-Wformat -Werror=format-security</B> &agrave;
<B>CFLAGS</B>, <B>CXXFLAGS</B>, <B>OBJCFLAGS</B> et <B>OBJCXXFLAGS</B>. Cela provoquera
l'avertissement en cas d'utilisation de cha&icirc;nes de formatage incorrectes et
&eacute;chouera si les fonctions de formatage sont utilis&eacute;es d'une fa&ccedil;on qui
pr&eacute;sente des risques pour la s&eacute;curit&eacute;. Actuellement, ce r&eacute;glage cr&eacute;e des
avertissements pour les appels des fonctions <B>printf</B> et <B>scanf</B> lorsque
la cha&icirc;ne de formatage n'est pas une cha&icirc;ne litt&eacute;rale et qu'aucun param&egrave;tre
de formatage n'est utilis&eacute; (par exemple dans <B>printf(foo);</B> au lieu de <B>
printf(&quot;%s&quot;, foo);</B>. Ce type de syntaxe peut cr&eacute;er un probl&egrave;me de s&eacute;curit&eacute;
si la cha&icirc;ne de formatage vient d'une source non s&ucirc;re et contient &laquo;&nbsp;%n&nbsp;&raquo;.
<DT id="49"><B>fortify</B><DD>
Ce r&eacute;glage, activ&eacute; par d&eacute;faut, ajoute <B>-D_FORTIFY_SOURCE=2</B> &agrave;
<B>CPPFLAGS</B>. Lors de la cr&eacute;ation du code, le compilateur conna&icirc;t un nombre
important d'informations relatives aux tailles de tampons (quand c'est
possible) et tente alors de remplacer des appels de fonctions avec une
taille illimit&eacute;e de tampons, peu s&ucirc;rs, par des appels avec des tampons de
taille limit&eacute;e. Cette fonctionnalit&eacute; est particuli&egrave;rement utile pour du code
ancien et mal &eacute;crit. De plus, les cha&icirc;nes de formatage dans la m&eacute;moire
accessible en &eacute;criture qui contiennent &laquo;&nbsp;%n&nbsp;&raquo; sont bloqu&eacute;es. Si une
application d&eacute;pend de telles cha&icirc;nes de formatage, un contournement devra
&ecirc;tre mis en place.
<P>
Veuillez noter que pour que cette option fasse effet, la source devra aussi
&ecirc;tre compil&eacute;e avec <B>-O1</B> ou plus. Si la variable d'environnement
<B>DEB_BUILD_OPTIONS</B> contient <I>noopt</I>, la prise en charge de <B>fortify</B>
sera d&eacute;sactiv&eacute;e du fait des nouveaux avertissements &eacute;mis par glibc
version&nbsp;2.16 et ult&eacute;rieure.
<DT id="50"><B>stackprotector</B><DD>
Ce r&eacute;glage (activ&eacute; par d&eacute;faut si stackprotectorstrong n'est pas employ&eacute;),
ajoute <B>-fstack-protector --param=ssp-buffer-size=4</B> &agrave; <B>CFLAGS</B>,
<B>CXXFLAGS</B>, <B>OBJCFLAGS</B>, <B>OBJCXXFLAGS</B>, <B>GCJFLAGS</B>, <B>FFLAGS</B> et
<B>FCFLAGS</B>. Il ajoute des contr&ocirc;les li&eacute;s aux r&eacute;&eacute;critures de piles. Cela
conduit des tentatives d'attaques par injection de code &agrave; terminer en
&eacute;chec. Dans le meilleur des cas, cette protection transforme une
vuln&eacute;rabilit&eacute; d'injection de code en d&eacute;ni de service ou en non-probl&egrave;me
(selon les applications).
<P>
Cette fonctionnalit&eacute; impose de lier le code &agrave; glibc (ou toute autre
biblioth&egrave;que fournissant <B>__stack_chk_fail</B>) et doit donc &ecirc;tre d&eacute;sactiv&eacute;e
lorsque le code est construit avec <B>-nostdlib</B>, <B>-ffreestanding</B> ou
&eacute;quivalents.
<DT id="51"><B>stackprotectorstrong</B><DD>
Ce r&eacute;glage, activ&eacute; par d&eacute;faut, ajoute <B>-fstack-protector-strong</B> &agrave;
<B>CFLAGS</B>, <B>CXXFLAGS</B>, <B>OBJCFLAGS</B>, <B>OBJCXXFLAGS</B>, <B>GCJFLAGS</B>, <B>FFLAGS</B>
et <B>FCFLAGS</B>. Il s'agit d'une version renforc&eacute;e de <B>stackprotector</B> qui
n'affecte pas les performances de mani&egrave;re importante.
<P>
D&eacute;sactiver <B>stackprotector</B> d&eacute;sactive &eacute;galement ce param&egrave;tre.
<P>
Cette fonctionnalit&eacute; a les m&ecirc;me exigences que <B>stackprotector</B>, en plus de
n&eacute;cessiter gcc&nbsp;4.9 ou plus r&eacute;cent.
<DT id="52"><B>relro</B><DD>
Ce r&eacute;glage, activ&eacute; par d&eacute;faut, ajoute <B>-Wl,-z,relro</B> &agrave; <B>LDFLAGS</B>. Lors du
chargement du programme, plusieurs parties de la m&eacute;moire ELF doivent &ecirc;tre
&eacute;crites par l'&eacute;diteur de liens. Ce r&eacute;glage indique au chargeur de mettre ces
sections en lecture seule avant de rendre le contr&ocirc;le au
programme. L'utilisation habituelle de ce r&eacute;glage est la protection contre
les attaques par r&eacute;&eacute;criture GOT. Si cette option est d&eacute;sactiv&eacute;e, l'option
<B>bindnow</B> sera &eacute;galement d&eacute;sactiv&eacute;e.
<DT id="53"><B>bindnow</B><DD>
Ce r&eacute;glage, d&eacute;sactiv&eacute; par d&eacute;faut, ajoute <B>-Wl,-z,now</B> &agrave; <B>LDFLAGS</B>. Lors du
chargement du programme, tous les symboles dynamiques sont r&eacute;solus, ce qui
permet au PLT (Procedure Linkage Table) entier d'&ecirc;tre en lecture seule (du
fait du r&eacute;glage <B>relro</B> ci-dessus). Cette option ne peut &ecirc;tre activ&eacute;e si
<B>relro</B> ne l'est pas.
<DT id="54"><B>pie</B><DD>
Ce r&eacute;glage (sans option globale par d&eacute;faut depuis dpkg&nbsp;1.18.23, parce qu'il
est maintenant activ&eacute; par d&eacute;faut par gcc dans les architectures Debian
amd64, arm64, armel, armhf, hurd-i386, i386, kfreebsd-amd64, kfreebsd-i386,
mips, mipsel, mips64el, powerpc, ppc64, ppc64el, riscv64, s390x, sparc et
sparc64) ajoute les options requises pour activer ou d&eacute;sactiver PIE
(ex&eacute;cutable ind&eacute;pendant de l'emplacement) au moyen des fichiers de
sp&eacute;cifications de gcc, si n&eacute;cessaire, selon que gcc injecte sur cette
architecture les drapeaux par lui-m&ecirc;me ou non. Si le r&eacute;glage est activ&eacute; et
que gcc injecte les drapeaux, il n'ajoute rien. Si le r&eacute;glage est activ&eacute; et
que gcc n'injecte pas les drapeaux, il ajoute <B>-fPIE</B> (au moyen de
<I>/usr/share/dpkg/pie-compiler.specs</I>) &agrave; <B>CFLAGS</B>, <B>CXXFLAGS</B>, <B>OBJCFLAGS</B>,
<B>OBJCXXFLAGS</B>, <B>GCJFLAGS</B>, <B>FFLAGS</B> et <B>FCFLAGS</B>, et <B>-fPIE -pie</B> (au
moyen de <I>/usr/share/dpkg/pie-link.specs</I>) &agrave; <B>LDFLAGS</B>. Si le r&eacute;glage est
d&eacute;sactiv&eacute; et que gcc injecte les drapeaux, il ajoute <B>-fno-PIE</B> (au moyen
de <I>/usr/share/dpkg/no-pie-compile.specs</I>) &agrave; <B>CFLAGS</B>, <B>CXXFLAGS</B>,
<B>OBJCFLAGS</B>, <B>OBJCXXFLAGS</B>, <B>GCJFLAGS</B>, <B>FFLAGS</B> et <B>FCFLAGS</B>, et
<B>-fno-PIE -no-pie</B> (au moyen de <I>/usr/share/dpkg/no-pie-link.specs</I>) &agrave;
<B>LDFLAGS</B>.
<P>
Les ex&eacute;cutables &agrave; position ind&eacute;pendante (&laquo;&nbsp;Position Independent
Executable&nbsp;&raquo;) permettent d'utiliser la randomisation de l'organisation de
l'espace d'adressage (ASLR&nbsp;:&nbsp;&laquo;&nbsp;Address Space Layout Randomization&nbsp;&raquo;), qui
est g&eacute;r&eacute;e par certaines versions du noyau. Bien que ASLR puisse d&eacute;j&agrave; &ecirc;tre
mise en &oelig;uvre pour les zones de donn&eacute;es dans la pile et le tampon (brk et
mmap), les zones de codes doivent &ecirc;tre compil&eacute;es comme ind&eacute;pendantes de la
position. Les biblioth&egrave;ques partag&eacute;es font d&eacute;j&agrave; cela (<B>-fPIC</B>) ce qui
permet automatiquement d'utiliser ASLR. Par contre les r&eacute;gions .text
binaires doivent &ecirc;tre construites en mode PIE pour mettre en &oelig;uvre ASLR. Une
fois cela r&eacute;alis&eacute;, les attaques ROP (&laquo;&nbsp;Return Oriented Programming&nbsp;&raquo;)
deviennent plus difficiles car il n'existe pas d'emplacement statique d'o&ugrave;
rebondir pendant une attaque par corruption de la m&eacute;moire.
<P>
PIE n'est pas compatible avec <B>fPIC</B>, aussi, en g&eacute;n&eacute;ral, des pr&eacute;cautions
doivent &ecirc;tre prises lors de la construction d'objets partag&eacute;s. Mais comme
les drapeaux PIE &eacute;mis sont inject&eacute;s par des fichiers de sp&eacute;cifications de
gcc, il devrait toujours &ecirc;tre s&ucirc;r de les d&eacute;finir sans condition
ind&eacute;pendamment du type d'objet en train d'&ecirc;tre compil&eacute; ou li&eacute;.
<P>
Les biblioth&egrave;ques statiques peuvent &ecirc;tre utilis&eacute;es par des programmes ou
d'autres biblioth&egrave;ques partag&eacute;es. Selon les drapeaux utilis&eacute;s pour compiler
tous les objets d'une biblioth&egrave;que statique, ces biblioth&egrave;ques seront
utilisables par divers ensembles d'objets&nbsp;:
<P>
<DL COMPACT><DT id="55"><DD>
<DL COMPACT>
<DT id="56"><B>none</B><DD>
Ne peut &ecirc;tre li&eacute; ni &agrave; un programme PIE, ni &agrave; une biblioth&egrave;que partag&eacute;e.
<DT id="57"><B>-fPIE</B><DD>
Peut &ecirc;tre li&eacute; &agrave; tout programme, mais pas &agrave; une biblioth&egrave;que partag&eacute;e
(recommand&eacute;).
<DT id="58"><B>-fPIC</B><DD>
Peut &ecirc;tre li&eacute; &agrave; tout programme et toute biblioth&egrave;que partag&eacute;e.
</DL>
</DL>
<P>
<DT id="59"><DD>
S'il est n&eacute;cessaire de r&eacute;gler ces drapeaux manuellement, en contournant
l'injonction des sp&eacute;cifications de gcc, il y a plusieurs choses &agrave; prendre en
compte. Le passage sans condition et de fa&ccedil;on explicite de <B>-fPIE</B>,
<B>-fpie</B> ou <B>-pie</B> &agrave; un syst&egrave;me de construction en utilisant libtool est
s&ucirc;r dans la mesure o&ugrave; ces drapeaux seront retir&eacute;s lors de la construction de
biblioth&egrave;ques partag&eacute;es. Sinon, sur les projets qui construisent &agrave; la fois
des programmes et des biblioth&egrave;ques partag&eacute;es, il faudrait s'assurer que,
lors de la construction des biblioth&egrave;ques partag&eacute;es, <B>-fPIC</B> soit toujours
pass&eacute; en dernier aux drapeaux de compilation tels que <B>CFLAGS</B> (de sorte
qu'il remplace tout <B>-PIE</B> ant&eacute;rieur), et que <B>-shared</B> soit pass&eacute; en
dernier aux drapeaux de cr&eacute;ation de lien tels que <B>LDFLAGS</B> (de sorte qu'il
remplace tout <B>-pie</B> ant&eacute;rieur). <B>Note</B>&nbsp;: Cela ne devrait pas &ecirc;tre
n&eacute;cessaire avec les m&eacute;canismes de sp&eacute;cification de gcc par d&eacute;faut.
<P>
<DT id="60"><DD>
De plus, comme la protection PIE est mise en &oelig;uvre &agrave; l'aide d'un registre
global, certaines architectures priv&eacute;es de registre (mais plus i386 depuis
les optimisations mises en &oelig;uvre dans gcc&nbsp;&gt;=&nbsp;5) peuvent souffrir de
pertes de performances allant jusqu'&agrave; 15&nbsp;% sur des charges d'applications
utilisant largement les segments de texte&nbsp;; le plus souvent, cette perte de
performances n'exc&eacute;dera pas&nbsp;1&nbsp;%. Pour des architectures offrant plus de
registres globaux (par exemple amd64), cette p&eacute;nalisation n'existe
pratiquement pas.
</DL>
<A NAME="lbAL">&nbsp;</A>
<H3>reproductible</H3>
Les options de compilation (d&eacute;taill&eacute;es ci-dessous) peuvent aider &agrave; am&eacute;liorer
la reproductibilit&eacute; de la construction ou fournir des messages
d'avertissement suppl&eacute;mentaires lors de la compilation. Sauf mention
contraire (voir ci-dessous), ces options sont activ&eacute;es par d&eacute;faut pour les
architectures qui les g&egrave;rent.
<DL COMPACT>
<DT id="61"><B>timeless</B><DD>
Ce param&egrave;tre, activ&eacute; par d&eacute;faut, ajoute <B>-Wdate-time</B> &agrave; <B>CPPFLAGS</B>. Cela
provoquera des avertissements quand les macros <B>__TIME__</B>, <B>__DATE__</B> et
<B>__TIMESTAMP__</B> sont utilis&eacute;es.
<DT id="62"><B>fixfilepath</B><DD>
Ce param&egrave;tre, d&eacute;sactiv&eacute; par d&eacute;faut, ajoute
<B>-ffile-prefix-map=</B><I>BUILDPATH</I><B>=.</B> &agrave; <B>CFLAGS</B>, <B>CXXFLAGS</B>,
<B>OBJCFLAGS</B>, <B>OBJCXXFLAGS</B>, <B>GCJFLAGS</B>, <B>FFLAGS</B> et <B>FCFLAGS</B> o&ugrave;
<B>BUILDPATH</B> est fix&eacute; sur le r&eacute;pertoire de plus haut niveau du paquet en
construction. Cela a pour effet de retirer le chemin de construction de tout
fichier g&eacute;n&eacute;r&eacute;.
<P>
Si &agrave; la fois <B>fixdebugpath</B> et <B>fixfilepath</B> sont d&eacute;finis, cette option a
la priorit&eacute; parce c'est un sur-ensemble du premier.
<DT id="63"><B>fixdebugpath</B><DD>
Ce r&eacute;glage, activ&eacute; par d&eacute;faut, ajoute
<B>-fdebug-prefix-map=</B><I>BUILDPATH</I><B>=.</B> &agrave; <B>CFLAGS</B>, <B>CXXFLAGS</B>,
<B>OBJCFLAGS</B>, <B>OBJCXXFLAGS</B>, <B>GCJFLAGS</B>, <B>FFLAGS</B> et <B>FCFLAGS</B> o&ugrave;
<B>BUILDPATH</B> est fix&eacute; sur le r&eacute;pertoire de plus haut niveau du paquet en
construction. Cela a pour effet de retirer le chemin de construction de tous
les symboles de d&eacute;bogage g&eacute;n&eacute;r&eacute;s.
</DL>
<A NAME="lbAM">&nbsp;</A>
<H2>ENVIRONNEMENT</H2>
Deux jeux de variables d'environnement effectuent les m&ecirc;mes op&eacute;rations. Le
premier (DEB_<I>drapeau</I>_<I>op&eacute;ration</I>) ne devrait jamais &ecirc;tre utilis&eacute; depuis
<B>debian/rules</B>. Il est destin&eacute; aux utilisateurs souhaitant recompiler le
paquet source avec des drapeaux de compilation modifi&eacute;s. Le second
(DEB_<I>drapeau</I>_MAINT_<I>op&eacute;ration</I>) ne doit &ecirc;tre utilis&eacute; que dans
<B>debian/rules</B> par les responsables de paquets pour modifier les drapeaux
de compilation concern&eacute;s.
<DL COMPACT>
<DT id="64"><B>DEB_</B><I>drapeau</I><B>_SET</B><DD>
<B>DEB_</B><I>drapeau</I><B>_MAINT_SET</B>
Cette variable permet de forcer la valeur renvoy&eacute;e pour le <I>drapeau</I>
indiqu&eacute;.
<DT id="65"><B>DEB_</B><I>drapeau</I><B>_STRIP</B><DD>
<B>DEB_</B><I>drapeau</I><B>_MAINT_STRIP</B>
Cette variable peut &ecirc;tre utilis&eacute;e pour fournir une liste d'options (s&eacute;par&eacute;es
par des espaces) qui seront retir&eacute;es du jeu de drapeaux renvoy&eacute; pour le
<I>drapeau</I> indiqu&eacute;.
<DT id="66"><B>DEB_</B><I>drapeau</I><B>_APPEND</B><DD>
<B>DEB_</B><I>drapeau</I><B>_MAINT_APPEND</B>
Cette variable permet d'ajouter des options &agrave; la valeur renvoy&eacute;e pour le
<I>drapeau</I> indiqu&eacute;.
<DT id="67"><B>DEB_</B><I>drapeau</I><B>_PREPEND</B><DD>
<B>DEB_</B><I>drapeau</I><B>_MAINT_PREPEND</B>
Cette variable permet de pr&eacute;fixer la valeur renvoy&eacute;e pour le <I>drapeau</I>
indiqu&eacute; par des options suppl&eacute;mentaires.
<DT id="68"><B>DEB_BUILD_OPTIONS</B><DD>
<B>DEB_BUILD_MAINT_OPTIONS</B>
Ces variables peuvent &ecirc;tre utilis&eacute;es par un utilisateur ou un responsable de
paquet pour activer ou d&eacute;sactiver diff&eacute;rentes options de zone qui affectent
les drapeaux de construction. La variable <B>DEB_BUILD_MAINT_OPTIONS</B>
outrepasse tous les param&egrave;tres de la zone d'options
<B>DEB_BUILD_OPTIONS</B>. Voir la section <B>ZONES D'OPTION</B> pour plus de
d&eacute;tails.
<DT id="69"><B>DEB_VENDOR</B><DD>
Ce r&eacute;glage d&eacute;finit l'&eacute;diteur (&laquo;&nbsp;vendor&nbsp;&raquo;) actuel. Si cette valeur est vide,
le contenu du fichier <B>/etc/dpkg/origins/default</B> est utilis&eacute;.
<DT id="70"><B>DEB_BUILD_PATH</B><DD>
Cette variable configure le chemin de construction (depuis dpkg&nbsp;1.18.8) &agrave;
utiliser avec des fonctions telles que <B>fixdebugpath</B> de telle sorte
qu'elles soient contr&ocirc;l&eacute;es par l'appelant. Cette variable est actuellement
sp&eacute;cifique &agrave; Debian et &agrave; ses d&eacute;riv&eacute;s.
<DT id="71"><B>DPKG_COLORS</B><DD>
D&eacute;finit le mode de couleur (depuis dpkg&nbsp;1.18.5). Les valeurs actuellement
accept&eacute;es sont <B>auto</B> (par d&eacute;faut), <B>always</B> et <B>never</B>.
<DT id="72"><B>DPKG_NLS</B><DD>
Si cette variable est d&eacute;finie, elle sera utilis&eacute;e pour d&eacute;cider l'activation
de la prise en charge des langues (NLS -&nbsp;Native Language Support), connu
aussi comme la gestion de l'internationalisation (ou i18n) (depuis
dpkg&nbsp;1.19.0). Les valeurs permises sont&nbsp;: <B>0</B> et <B>1</B> (par d&eacute;faut).
</DL>
<A NAME="lbAN">&nbsp;</A>
<H2>FICHIERS</H2>
<A NAME="lbAO">&nbsp;</A>
<H3>Fichiers de configuration.</H3>
<DL COMPACT>
<DT id="73"><B>/etc/dpkg/buildflags.conf</B><DD>
Fichier de configuration pour l'ensemble du syst&egrave;me.
<DT id="74"><B>$XDG_CONFIG_HOME/dpkg/buildflags.conf</B> ou <DD>
<B>$HOME/.config/dpkg/buildflags.conf</B>
Fichier de configuration propre &agrave; l'utilisateur
</DL>
<A NAME="lbAP">&nbsp;</A>
<H3>Gestion de l'empaquetage</H3>
<DL COMPACT>
<DT id="75"><B>/usr/share/dpkg/buildflags.mk</B><DD>
Fragment de fichier Makefile qui chargera (et facultativement exportera)
dans les variables (depuis dpkg&nbsp;1.16.1) tous les drapeaux pris en charge par
<B>dpkg-buildflags</B>.
</DL>
<A NAME="lbAQ">&nbsp;</A>
<H2>EXEMPLES</H2>
Pour passer des drapeaux de compilation &agrave; une commande de compilation dans
un Makefile&nbsp;:
<P>
<DL COMPACT><DT id="76"><DD>
<PRE>
$(MAKE) $(shell dpkg-buildflags --export=cmdline)
./configure $(shell dpkg-buildflags --export=cmdline)
</PRE>
</DL>
<P>
Pour d&eacute;finir les drapeaux de compilation dans un script shell ou un fragment
de shell, on peut utiliser <B>eval</B> pour interpr&eacute;ter la sortie et exporter
les drapeaux dans l'environnement&nbsp;:
<P>
<DL COMPACT><DT id="77"><DD>
<PRE>
eval &quot;$(dpkg-buildflags --export=sh)&quot; &amp;&amp; make
</PRE>
</DL>
<P>
ou d&eacute;finir les param&egrave;tres de position &agrave; passer &agrave; la commande&nbsp;:
<P>
<DL COMPACT><DT id="78"><DD>
<PRE>
eval &quot;set -- $(dpkg-buildflags --export=cmdline)&quot;
for dir in a b c; do (cd $dir &amp;&amp; ./configure &quot;$@&quot; &amp;&amp; make); done
</PRE>
</DL>
<A NAME="lbAR">&nbsp;</A>
<H3>Utilisation dans debian/rules</H3>
Il faut appeler <B>dpkg-buildflags</B> ou inclure <B>buildflags.mk</B> &agrave; partir du
fichier <B>debian/rules</B> pour obtenir les drapeaux de compilation n&eacute;cessaires
&agrave; passer au syst&egrave;me de construction. Veuillez noter que les anciennes
versions de <B>dpkg-buildpackage</B> (ant&eacute;rieures &agrave; dpkg&nbsp;1.16.1) exportaient ces
drapeaux automatiquement. N&eacute;anmoins, il est d&eacute;conseill&eacute; de d&eacute;pendre de ce
comportement parce qu'il casse l'appel manuel de <B>debian/rules</B>.
<P>
Pour les paquets avec des syst&egrave;mes de construction du style autoconf, il est
possible de passer les options appropri&eacute;es &agrave; configure ou <B><A HREF="/cgi-bin/man/man2html?1+make">make</A></B>(1)
directement, comme vu ci-dessus.
<P>
Pour d'autres syst&egrave;mes de construction ou si on souhaite un contr&ocirc;le
extr&ecirc;mement pr&eacute;cis sur le choix et la position o&ugrave; sont pass&eacute;s les drapeaux,
<B>--get</B> peut &ecirc;tre utilis&eacute;. Autrement, il est possible d'inclure
<B>buildflags.mk</B> qui s'occupe de l'appel de <B>dpkg-buildflags</B> et du
placement des drapeaux de compilation dans les variables de make.
<P>
Si vous voulez exporter tous les drapeaux de compilation dans
l'environnement (o&ugrave; le syst&egrave;me de construction peut les r&eacute;cup&eacute;rer)&nbsp;:
<P>
<DL COMPACT><DT id="79"><DD>
<PRE>
DPKG_EXPORT_BUILDFLAGS = 1
include /usr/share/dpkg/buildflags.mk
</PRE>
</DL>
<P>
Pour un contr&ocirc;le suppl&eacute;mentaire sur ce qui est export&eacute;, vous pouvez exporter
manuellement les variables (puisque aucune n'est export&eacute;e par d&eacute;faut)&nbsp;:
<P>
<DL COMPACT><DT id="80"><DD>
<PRE>
include /usr/share/dpkg/buildflags.mk
export CPPFLAGS CFLAGS LDFLAGS
</PRE>
</DL>
<P>
Et enfin, vous pouvez bien s&ucirc;r passer manuellement les drapeaux aux
commandes&nbsp;:
<P>
<DL COMPACT><DT id="81"><DD>
<PRE>
include /usr/share/dpkg/buildflags.mk
build-arch:
$(CC) -o hello hello.c $(CPPFLAGS) $(CFLAGS) $(LDFLAGS)
</PRE>
</DL>
<A NAME="lbAS">&nbsp;</A>
<H2>TRADUCTION</H2>
Ariel VARDI &lt;<A HREF="mailto:ariel.vardi@freesbee.fr">ariel.vardi@freesbee.fr</A>&gt;, 2002.
Philippe Batailler, 2006.
Nicolas Fran&ccedil;ois, 2006.
Veuillez signaler toute erreur &agrave; &lt;<A HREF="mailto:debian-l10n-french@lists.debian.org">debian-l10n-french@lists.debian.org</A>&gt;.
<P>
<HR>
<A NAME="index">&nbsp;</A><H2>Index</H2>
<DL>
<DT id="82"><A HREF="#lbAB">NOM</A><DD>
<DT id="83"><A HREF="#lbAC">SYNOPSIS</A><DD>
<DT id="84"><A HREF="#lbAD">DESCRIPTION</A><DD>
<DT id="85"><A HREF="#lbAE">COMMANDES</A><DD>
<DT id="86"><A HREF="#lbAF">DRAPEAUX G&Eacute;R&Eacute;S</A><DD>
<DT id="87"><A HREF="#lbAG">ZONES D'OPTION</A><DD>
<DL>
<DT id="88"><A HREF="#lbAH">future</A><DD>
<DT id="89"><A HREF="#lbAI">qa</A><DD>
<DT id="90"><A HREF="#lbAJ">sanitize</A><DD>
<DT id="91"><A HREF="#lbAK">compilation renforc&eacute;e</A><DD>
<DT id="92"><A HREF="#lbAL">reproductible</A><DD>
</DL>
<DT id="93"><A HREF="#lbAM">ENVIRONNEMENT</A><DD>
<DT id="94"><A HREF="#lbAN">FICHIERS</A><DD>
<DL>
<DT id="95"><A HREF="#lbAO">Fichiers de configuration.</A><DD>
<DT id="96"><A HREF="#lbAP">Gestion de l'empaquetage</A><DD>
</DL>
<DT id="97"><A HREF="#lbAQ">EXEMPLES</A><DD>
<DL>
<DT id="98"><A HREF="#lbAR">Utilisation dans debian/rules</A><DD>
</DL>
<DT id="99"><A HREF="#lbAS">TRADUCTION</A><DD>
</DL>
<HR>
This document was created by
<A HREF="/cgi-bin/man/man2html">man2html</A>,
using the manual pages.<BR>
Time: 00:05:01 GMT, March 31, 2021
</BODY>
</HTML>