dpkg (1.18.25) stretch; urgency=medium
[dpkg] / man / de / dpkg-buildflags.man
CommitLineData
1479465f
GJ
1.\" dpkg manual page - dpkg-buildflags(1)
2.\"
3.\" Copyright © 2010-2011 Raphaël Hertzog <hertzog@debian.org>
4.\" Copyright © 2011 Kees Cook <kees@debian.org>
5.\" Copyright © 2011-2015 Guillem Jover <guillem@debian.org>
6.\"
7.\" This is free software; you can redistribute it and/or modify
8.\" it under the terms of the GNU General Public License as published by
9.\" the Free Software Foundation; either version 2 of the License, or
10.\" (at your option) any later version.
11.\"
12.\" This is distributed in the hope that it will be useful,
13.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
14.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15.\" GNU General Public License for more details.
16.\"
17.\" You should have received a copy of the GNU General Public License
18.\" along with this program. If not, see <https://www.gnu.org/licenses/>.
19.
20.\"*******************************************************************
21.\"
22.\" This file was generated with po4a. Translate the source file.
23.\"
24.\"*******************************************************************
25.TH dpkg\-buildflags 1 %RELEASE_DATE% %VERSION% dpkg\-Programmsammlung
26.nh
27.SH BEZEICHNUNG
28dpkg\-buildflags \- liefert Bauschalter zum Einsatz beim Paketbau
29.
30.SH ÜBERSICHT
31\fBdpkg\-buildflags\fP [\fIOption\fP …] [\fIBefehl\fP]
32.
33.SH BESCHREIBUNG
34\fBdpkg\-buildflags\fP ist ein Werkzeug, das zum Abfragen der zu verwendenden
35Kompilierungsschalter für den Bau von Debian\-Paketen eingesetzt wird.
36.
37Die Standardschalter werden vom Lieferanten definiert, sie können auf
38mehrere Arten erweitert/überschrieben werden:
39.IP 1.
40systemweit mit \fB%PKGCONFDIR%/buildflags.conf\fP
41.IP 2.
42für den aktuellen Benutzer mit \fB$XDG_CONFIG_HOME/dpkg/buildflags.conf\fP,
43wobei \fB$XDG_CONFIG_HOME\fP standardmäßig auf \fB$HOME/.config\fP gesetzt ist
44.IP 3.
45temporär durch den Benutzer mittels Umgebungsvariablen (siehe Abschnitt
46\fBUMGEBUNG\fP)
47.IP 4.
48dynamisch durch den Paketverwalter mittels Umgebungsvariablen, die über
49\fBdebian/rules\fP gesetzt wurden (siehe Abschnitt \fBUMGEBUNG\fP)
50.P
51Die Konfigurationsdateien können vier Arten von Direktiven enthalten:
52.TP
53\fBSET\fP\fI Schalter Wert\fP
54Überschreibt den Schalter namens \fISchalter\fP, um den Wert \fIWert\fP zu
55erhalten.
56.TP
57\fBSTRIP\fP\fI Schalter Wert\fP
58Aus dem Schalter namens \fISchalter\fP alle in \fIWert\fP aufgeführten Bauschalter
59entfernen
60.TP
61\fBAPPEND\fP\fI Schalter Wert\fP
62Erweitert den Schalter namens \fISchalter\fP durch Anhängen der in \fIWert\fP
63angegebenen Optionen. Ein Leerzeichen wird vor den angehängten Wert
64vorangestellt, falls der derzeitige Wert nicht leer ist.
65.TP
66\fBPREPEND\fP\fI Schalter Wert\fP
67Erweitert den Schalter namens \fISchalter\fP durch Voranstellen der in \fIWert\fP
68angegebenen Optionen. Ein Leerzeichen wird hinter den vorangestellten Wert
69angehängt, falls der derzeitige Wert nicht leer ist.
70.P
71Die Konfigurationsdateien können Kommentare auf Zeilen enthalten, die mit
72einer Raute (#) beginnen. Leere Zeilen werden auch ignoriert.
73.SH BEFEHLE
74.TP
75\fB\-\-dump\fP
76Auf der Standardausgabe alle Kompilierschalter und ihre Werte ausgeben. Es
77wird ein Schalter pro Zeile ausgegeben, wobei der Werte durch ein
78Gleichheitszeichen („\fISchalter\fP=\fIWert\fP“) abgetrennt wird. Dies ist die
79Standardaktion.
80.TP
81\fB\-\-list\fP
82Gibt die Liste der vom aktuellen Lieferanten unterstützen Schalter (eine pro
83Zeile) aus. Lesen Sie den Abschnitt \fBUNTERSTÜTZTE SCHALTER\fP für weitere
84Informationen über sie.
85.TP
86\fB\-\-status\fP
87Alle Informationen anzeigen, die zum Verständnis des Verhaltens von
88\fBdpkg\-buildflags\fP nützlich sein können (seit Dpkg 1.16.5): relevante
89Umgebungsvariablen, aktueller Lieferant, Zustand der Funktionsschalter. Auch
90die entstehenden Compiler\-Schalter mit ihrem Ursprung werden ausgeben.
91
92Dies ist zur Ausführung in \fBdebian/rules\fP gedacht, so dass das Bauprotokoll
93einen klaren Nachweis der verwandten Bauschalter enthält. Dies kann zur
94Diagnose von Problemen in Zusammenhang mit diesen nützlich sein.
95.TP
96\fB\-\-export=\fP\fIFormat\fP
97Auf der Standardausgabe Befehle ausgeben, die dazu verwandt werden können,
98alle Kompilierschalter für bestimmte Werkzeuge zu exportieren. Falls der
99Wert von \fIFormat\fP nicht angegeben wird, wird \fBsh\fP angenommen. Nur
100Kompilierschalter, die mit einem Großbuchstaben beginnen, werden
101aufgenommen. Bei allen anderen wird angenommen, dass sie für die Umgebung
102nicht geeignet sind. Unterstützte Formate:
103.RS
104.TP
105\fBsh\fP
106Shell\-Befehle, um alle Kompilierungsschalter in der Umgebung zu setzen und
107zu exportieren. Die Schalterwerte werden maskiert, so dass die Ausgabe für
108Auswertung durch eine Shell bereit ist.
109.TP
110\fBcmdline\fP
111Argumente, die an die Befehlszeile eines Bauprogrammes übergeben werden, um
112alle Übersetzungsschalter zu verwenden (seit Dpkg 1.17.0). Die Schalterwerte
113werden in Shell\-Syntax maskiert.
114.TP
115\fBconfigured\fP (konfiguriert)
116Dies ist ein historischer Alias für \fBcmdline\fP.
117.TP
118\fBmake\fP
119Make\-Direktiven, um alle Kompilierungsschalter in der Umgebung zu setzen und
120zu exportieren. Die Ausgabe kann in ein Makefile\-Fragment geschrieben und
121mit einer \fBinclude\fP\-Direktive ausgewertet werden.
122.RE
123.TP
124\fB\-\-get\fP\fI Schalter\fP
125Gibt den Wert des Schalters auf der Standardausgabe aus. Beendet sich mit 0,
126falls der Schalter bekannt ist, andernfalls mit 1.
127.TP
128\fB\-\-origin\fP\fI Schalter\fP
129Gibt den Ursprung des von \fB\-\-get\fP gelieferten Werts aus. Beendet sich mit
1300, falls der Schalter bekannt ist, andernfalls mit 1. Der Ursprung kann
131einer der folgenden Werte sein:
132.RS
133.TP
134\fBvendor\fP
135der ursprünglich vom Lieferanten gesetzte Schalter wird zurückgeliefert
136.TP
137\fBsystem\fP
138der Schalter wurde durch eine systemweite Konfiguration gesetzt/verändert
139.TP
140\fBuser\fP
141der Schalter wurde durch eine benutzerspezifische Konfiguration
142gesetzt/verändert
143.TP
144\fBenv\fP
145der Schalter wurde durch eine umgebungsspezifische Konfiguration
146gesetzt/verändert
147.RE
148.TP
149\fB\-\-query\-features\fP\fI Bereich\fP
150Gibt die Funktionalitäten, die für den übergebenen Bereich aktiviert sind,
151aus (seit Dpkg 1.16.2). Die einzigen unter Debian und abgeleiteten
152Distributionen derzeit erkannten Bereiche sind \fBqa\fP, \fBreproducible\fP,
153\fBsanitize\fP und \fBhardening\fP. Lesen Sie den Abschnitt
154\fBFUNKTIONALITÄTSBEREICHE\fP für weitere Details. Beendet sich mit 0, falls
155der Bereich bekannt ist, andernfalls mit 1.
156.IP
157Das Ausgabeformat ist im RFC822\-Format, mit einem Abschnitt pro
158Funktionalität. Beispiel:
159.IP
160.nf
161 Feature: pie
162 Enabled: yes
163
164 Feature: stackprotector
165 Enabled: yes
166.fi
167.TP
168\fB\-\-help\fP
169Zeige den Bedienungshinweis und beende.
170.TP
171\fB\-\-version\fP
172Gebe die Version aus und beende sich.
173.
174.SH "UNTERSTÜTZTE SCHALTER"
175.TP
176\fBCFLAGS\fP
177Optionen für den C\-Compiler. Der vom Lieferanten gesetzte Standardwert
178enthält \fI\-g\fP und die Standard Optimierungsstufe (normalerweise \fI\-O2\fP oder
179\fB\-O0\fP, falls die Umgebungsvariable \fBDEB_BUILD_OPTIONS\fP \fInoopt\fP definiert.
180.TP
181\fBCPPFLAGS\fP
182Optionen für den C\-Präprozessor. Standardwert: leer
183.TP
184\fBCXXFLAGS\fP
185Optionen für den C++\-Compiler. Identisch zu \fBCFLAGS\fP.
186.TP
187\fBOBJCFLAGS\fP
188Optionen für den Objective\-C\-Compiler. Identisch zu \fBCFLAGS\fP.
189.TP
190\fBOBJCXXFLAGS\fP
191Optionen für den Objective\-C++\-Compiler. Identisch zu \fBCXXFLAGS\fP.
192.TP
193\fBGCJFLAGS\fP
194Optionen für den GNU\-Java\-Compiler (gcj). Eine Untermenge von \fBCFLAGS\fP.
195.TP
196\fBFFLAGS\fP
197Optionen für den Fortran\-77\-Compiler. Eine Untermenge von \fBCFLAGS\fP.
198.TP
199\fBFCFLAGS\fP
200Optionen für den Fortran\-9x\-Compiler. Identisch zu \fBFFLAGS\fP.
201.TP
202\fBLDFLAGS\fP
203Optionen die beim Linken von Programmen oder Laufzeitbibliotheken an den
204Compiler weitergegeben werden (falls der Linker direkt aufgerufen wird,
205müssen \fB\-Wl\fP und \fB,\fP aus diesen Optionen entfernt werden). Standardmäßig
206leer.
207.PP
208Neue Schalter können in Zukunft hinzugefügt werden, falls die Notwendigkeit
209aufkommt (beispielsweise, um weitere Sprachen zu unterstützen).
210.
211.SH FUNKTIONALITÄTSBEREICHE
212.P
213Jede Bereichsfunktionalität kann durch den entsprechenden Bereichswert in
214den Umgebungsvariablen \fBDEB_BUILD_OPTIONS\fP und \fBDEB_BUILD_MAINT_OPTIONS\fP
215mit den ‚\fB+\fP’\- und ‚\fB\-\fP’\-Schaltern aktiviert und deaktiviert werden. Soll
216beispielsweise für \fBhardening\fP die „pie“\-Funktionalität aktiviert und die
217„fortify“\-Funktionalität deaktiviert werden, können Sie Folgendes in
218\fBdebian/rules\fP verwenden:
219.P
220 export DEB_BUILD_MAINT_OPTIONS=hardening=+pie,\-fortify
221.P
222Die spezielle Funktionalität \fBall\fP (in allen Bereichen gültig) kann dazu
223verwandt werden, alle Bereichsfunktionalitäten auf einmal zu aktivieren oder
224zu deaktiveren. Um daher alles im Bereich \fBhardening\fP zu deaktiveren und
225nur „format“ und „fortify“ zu aktiveren, kann Folgendes eingesetzt werden:
226.P
227 export DEB_BUILD_MAINT_OPTIONS=hardening=\-all,+format,+fortify
228.
229.SS QS
230Mehrere Optionen zur Kompilierung (Details weiter unten) können verwandt
231werden, um dabei zu helfen, Probleme im Quellcode oder im Bausystem zu
232erkennen.
233.TP
234\fBbug\fP
235Diese Einstellung (standardmäßig deaktiviert) fügt Warnoptionen hinzu, die
236zuverlässig problematischen Quellcode erkennen. Diese Warnungen sind
237fatal. Die einzigen derzeit unterstützten Schalter sind \fBCFLAGS\fP und
238\fBCXXFLAGS\fP, wobei die Schalter auf \fB\-Werror=array\-bounds\fP,
239\fB\-Werror=clobbered\fP, \fB\-Werror=implicit\-function\-declaration\fP und
240\fB\-Werror=volatile\-register\-var\fP gesetzt werden.
241.
242.TP
243\fBcanary\fP
244Diese Einstellung (standardmäßig deaktiviert) fügt
245Pseudo\-Kanarienvögel\-Optionen zu den Bauschaltern hinzu, so dass die
246Bauprotokolle überprüft werden können, wie die Bauschalter sich
247fortpflanzen. Dies erlaubt, Auslassungen in den normalen
248Bauschaltereinstellungen zu finden. Derzeit werden nur die Schalter
249\fBCPPFLAGS\fP, \fBCFLAGS\fP, \fBOBJCFLAGS\fP, \fBCXXFLAGS\fP und \fBOBJCXXFLAGS\fP
250unterstützt, wobei die Schalter auf
251\fB\-D__DEB_CANARY_\fP\fISchalter\fP_\fIZufallskennung\fP\fB__\fP gesetzt werden, und
252\fBLDFLAGS\fP, das auf \fB\-Wl,\-z,deb\-canary\-\fP\fIZufallskennung\fP gesetzt wird.
253.
254.SS Bereinigung
255Mehrere Kompilierzeit\-Optionen (weiter unten beschrieben) können dazu
256verwandt werden, ein erstelltes Programm vor Speicherverfälschungsangriffen
257Speicherlecks, Verwendung nach Freigabe, Daten\-Zugriffswettläufen (»races«)
258in Threads und Fehlern durch undefiniertes Verhalten zu bereinigen.
259.TP
260\fBaddress\fP
261Diese Einstellung (standardmäßig deaktiviert) fügt \fB\-fsanitize=address\fP zu
262\fBLDFLAGS\fP und \fB\-fsanitize=address \-fno\-omit\-frame\-pointer\fP zu \fBCFLAGS\fP
263und \fBCXXFLAGS\fP hinzu.
264.TP
265\fBthread\fP
266Diese Einstellung (standardmäßig deaktiviert) fügt \fB\-fsanitize=thread\fP zu
267\fBCFLAGS\fP, \fBCXXFLAGS\fP und \fBLDFLAGS\fP hinzu.
268.TP
269\fBleak\fP
270Diese Einstellung (standardmäßig deaktiviert) fügt \fB\-fsanitize=leak\fP zu
271\fBLDFLAGS\fP hinzu. Sie wird automatisch deaktiviert, falls entweder die
272Funktionalitäten \fBaddress\fP oder \fBthread\fP aktiviert werden, da diese sie
273einschließen.
274.TP
275\fBundefined\fP
276Diese Einstellung (standardmäßig deaktiviert) fügt \fB\-fsanitize=undefined\fP
277zu \fBCFLAGS\fP, \fBCXXFLAGS\fP und \fBLDFLAGS\fP hinzu.
278.SS Härtung
279Mehrere Kompilierzeit\-Optionen (weiter unten beschrieben) können dazu
280verwandt werden, ein erstelltes Programm gegen Speicherverfälschungsangriffe
281zu härten, oder zusätzliche Warnungsmeldungen während der Übersetzung
282auszugeben. Sie werden für Architekturen, die diese unterstützen,
283standardmäßig aktiviert; die Ausnahmen sind unten angegeben.
284.TP
285\fBformat\fP
286Diese Einstellung (standardmäßig aktiviert) fügt \fB\-Wformat
287\-Werror=format\-security\fP zu \fBCFLAGS\fP, \fBCXXFLAGS\fP \fBCXXFLAGS\fP, \fBOBJCFLAGS\fP
288und \fBOBJCXXFLAGS\fP hinzu. Damit wird über inkorrekte
289Formatzeichenkettenverwendungen gewarnt und zu einem Fehler führen, wenn
290Formatfunktionen deart verwandt werden, dass daraus ein mögliches
291Sicherheitsproblem werden könnte. Derzeit warnt dies über Aufrufe auf
292\fBprintf\fP\- und \fBscanf\fP\-Funktionen, bei denen die Formatzeichenkette nicht
293eine reine Zeichenkette ist und es keine Formatargumente gibt, wie in
294\fBprintf(foo);\fP statt \fBprintf("%s", foo);\fP. Dies könnte ein
295Sicherheitsproblem sein, falls die Formatzeichenkette aus einer
296unvertrauenswürdigen Eingabe stammt und ‚%n’ enthält.
297.
298.TP
299\fBfortify\fP
300Diese Einstellung (standardmäßig aktiviert) fügt \fB\-D_FORTIFY_SOURCE=2\fP zu
301\fBCPPFLAGS\fP hinzu. Während der Code\-Erstellung hat der Compiler umfangreiche
302Informationen über Puffergrößen (wo möglich) und versucht, unsichere
303unbegrenzte Pufferfunktionsaufrufe durch längenbegrenzte zu ersetzen. Das
304ist besonders für alten, verkramten Code nützlich. Zusätzlich werden
305Formatzeichenketten in schreibbarem Speicher, die ‚%n’ enthalten,
306blockiert. Falls eine Anwendung von solchen Formatzeichenketten abhängt,
307müssen dafür andere Lösungsmöglichkeiten gefunden werden.
308
309Beachten Sie, dass die Quellen auch mit \fB\-O1\fP oder höher übersetzt werden
310müssen, damit diese Option einen Effekt hat. Falls die Umgebungsvariable
311\fBDEB_BUILD_OPTIONS\fP \fInoopt\fP enthält, dann wird die Unterstützung von
312\fBfortify\fP aufgrund neuer Warnungen von Glibc 2.16 und neuer deaktiviert.
313.TP
314\fBstackprotector\fP
315Diese Einstellung (standardmäßig aktiviert falls stackprotectorstrong nicht
316verwandt wird) fügt \fB\-fstack\-protector \-\-param=ssp\-buffer\-size=4\fP zu
317\fBCFLAGS\fP, \fBCXXFLAGS\fP, \fBOBJCFLAGS\fP, \fBOBJCXXFLAGS\fP, \fBGCJFLAGS\fP, \fBFFLAGS\fP
318und \fBFCFLAGS\fP hinzu. Dies fügt Sicherheitsprüfungen gegen die
319Überschreibung des Stapelspeichers (Stacks) hinzu. Damit werden viele
320mögliche Code\-Einfügeangriffe zu Abbruchsituationen. Im besten Fall werden
321damit Code\-Einfügungsangriffe zu Diensteverweigerungsangriffen oder zu
322keinen Problemen (abhängig von der Anwendung).
323
324Diese Funktionalität benötigt das Linken mit Glibc (oder einem anderen
325Anbieter von \fB__stack_chk_fail\fP). Sie muss daher deaktiviert werden, wenn
326mit \fB\-nostdlib\fP oder \fB\-ffreestanding\fP oder Ähnlichem gebaut wird.
327.
328.TP
329\fBstackprotectorstrong\fP
330Diese Einstellung (standardmäßig aktiviert) fügt \fB\-fstack\-protector\-strong\fP
331zu \fBCFLAGS\fP, \fBCXXFLAGS\fP, \fBOBJCFLAGS\fP, \fBOBJCXXFLAGS\fP, \fBGCJFLAGS\fP,
332\fBFFLAGS\fP und \fBFCFLAGS\fP hinzu. Dies ist eine stärkere Variante von
333\fBstackprotector\fP allerdings ohne signifikante Einbußen bei der Leistung.
334
335Deaktivierung von \fBstackprotector\fP deaktiviert auch diese Einstellung.
336
337Diese Funktionalität stellt die gleichen Anforderungen wie \fBstackprotector\fP
338und benötigt zusätzlich Gcc 4.9 oder neuer.
339.
340.TP
341\fBrelro\fP
342Diese Einstellung (standardmäßig aktiviert) fügt \fB\-Wl,\-z,relro\fP zu
343\fBLDFLAGS\fP hinzu. Während des Ladens des Programms müssen mehrere
344ELF\-Speicherabschnitte vom Binder (Linker) geschrieben werden. Diese
345Einstellung signalisiert dem Ladeprogramm, diese Abschnitte in
346nur\-Lese\-Zugriff zu ändern, bevor die Steuerung an das Programm übergeben
347wird. Insbesondere verhindert dies GOT\-Überschreibeangriffe. Falls diese
348Option deaktiviert ist, wird auch \fBbindnow\fP deaktiviert.
349.
350.TP
351\fBbindnow\fP
352Diese Einstellung (standardmäßig deaktiviert) fügt \fB\-Wl,\-z,now\fP zu
353\fBLDFLAGS\fP hinzu. Während des Ladens des Programms werden alle dynamischen
354Symbole aufgelöst, womit das gesamte PLT nur\-lesend markiert werden kann
355(aufgrund von \fBrelro\fP oben). Diese Option kann nicht aktiviert werden,
356falls \fBrelro\fP nicht aktiviert ist.
357.
358.TP
359\fBpie\fP
360Diese Einstellung (seit Dpkg 1.18.13 ohne Vorgabe und standardmäßig von GCC
361auf den Debian\-Architekturen Amd64, Arm64, Armel, Armhf, I386,
362Kfreebsd\-amd64, Kfreebsd\-i386, Mips, Mipsel, Mips64el, PPC64el, S390x, Sparc
363und Sparc64 hinzugefügt) fügt die benötigten Optionen mittels
364GCC\-Spec\-Dateien hinzu, falls sie zum Aktivieren oder Deaktivieren von PIE
365benötigt werden. Falls aktiviert und von GCC hinzugefügt, ergänzt
366nichts. Wenn aktiviert und nicht von GCC hinzugefügt, fügt \fB\-fPIE\fP zu
367\fBCFLAGS\fP, \fBCXXFLAGS\fP, \fBOBJCFLAGS\fP, \fBOBJCXXFLAGS\fP, \fBGCJFLAGS\fP, \fBFFLAGS\fP
368und \fBFCFLAGS\fP hinzu und \fB\-fPIE \-pie\fP zu \fBLDFLAGS\fP. Wenn deaktiviert und
369von GCC hinzugefügt, fügt \fB\-fno\-PIE\fP zu \fBCFLAGS\fP, \fBCXXFLAGS\fP,
370\fBOBJCFLAGS\fP, \fBOBJCXXFLAGS\fP, \fBGCJFLAGS\fP, \fBFFLAGS\fP und \fBFCFLAGS\fP hinzu
371und \fB\-fno\-PIE \-no\-pie\fP zu \fBLDFLAGS\fP.
372
373»Position Independent Executable« (positionsunabhängige Programme) werden
374benötigt, um »Address Space Layout Randomization« (Bereitstellung eines
375zufälligen Adressbereichlayouts) auszunutzen, der von einigen
376Kernelversionen bereitgestellt wird. Während ASLR bereits für Datenbereiche
377auf dem Stapel (Stack) und Heap erzwungen werden kann (brk und mmap), müssen
378die Codebereiche positionsunabhängig übersetzt werden. Laufzeitbibliotheken
379machen dies bereits (\fB\-fPIC\fP), so dass sie ASLR automatisch erhalten, aber
380Programm\-.text\-Regionen müssen mit PIE gebaut werden, um ASLR zu
381erhalten. Wenn dies passiert, sind ROP\- (Return Oriented Programming)
382Angriffe sehr viel schwerer durchzuführen, da es keine statischen Orte mehr
383gibt, zu denen während eines Speicherverfälschungsangriffs hingesprungen
384werden könnte.
385
386PIE ist nicht mit \fB\-fPIC\fP kompatibel, daher muss im Allgemeinen Vorsicht
387beim Bau von Laufzeitbibliotheksobjekten walten gelassen werden. Da aber der
388ausgegebene PIE\-Schalter mittels GCC\-Spezifikationsdateien hinzugefügt wird,
389sollte es immer sicher sein, sie bedingungslos zu setzen, unabhängig von dem
390Objekttyp, der übersetzt oder gelinkt wird.
391
392Statische Bibliotheken können von jedem Programm und anderen statischen
393Bibliotheken benutzt werden. Abhängig von den zum Kompilieren aller Objekte
394innerhalb einer statischen Bibliothek verwandten Schaltern können diese
395Bibliotheken von verschiedenen Gruppen von Objekten verwandt werden:
396
397.RS
398.TP
399keine
400Kann weder in ein PIE\-Programm noch in eine Laufzeitbibliothek gelinkt
401werden.
402.TP
403\fB\-fPIE\fP
404Kann in jedes Programm, aber nicht in eine Laufzeitbibliothek gelinkt werden
405(empfohlen).
406.TP
407\fB\-fPIC\fP
408Kann in jedes Programm und jede Laufzeitbibliothek gelinkt werden.
409.RE
410
411.IP
412Falls es notwendig ist, diese Schalter manuell zu setzen und die
413GGC\-Spezifikations\-Hinzufügung zu umgehen, müssen mehrere Dinge beachtet
414werden. Die bedingungslose und explizite Übergabe von \fB\-fPIE\fP, \fB\-fpie\fP
415oder \fB\-pie\fP an das Bausystem mit Libtool ist sicher, da diese Schalter
416entfernt werden, wenn Laufzeit\-Bibliotheken gebaut werden. Andernfalls
417könnte es bei Projekten, die sowohl Programme wie auch Laufzeit\-Bibliotheken
418bauen, notwendig sein, dass Sie beim Bau der Laufzeit\-Bibliotheken
419sicherstellen, dass \fB\-fPIC\fP immer als letztes an die Kompilierungsschalter
420wie \fBCFLAGS\fP übergeben wird (so dass es jedes frühere \fB\-PIE\fP außer Kraft
421setzen kann) und \fB\-shared\fP als letztes an Link\-Schalter wie \fBLDFLAGS\fP
422übergeben wird (so dass es jedes frühere \fB\-pie\fP außer Kraft setzen
423kann). \fBHinweis\fP: Das sollte mit der Vorgabe\-GCC\-Spezifikationsmaschinerie
424nicht notwendig sein.
425
426.IP
427Zusätzlich können auf einigen Architekturen mit sehr wenigen Registern (dazu
428gehört aber i386 nicht mehr, seitdem in GCC >= 5 Optimierungen
429erfolgten) Leistungsverluste von bis zu 15% in sehr text\-Segment\-lastigen
430Anwendungsfällen auftreten, da PIE über allgemeine Register implementiert
431ist; in den meisten Anwendungsfällen sind dies weniger als 1%. Architekturen
432mit mehr allgemeinen Registern (z.B. Amd64) erfahren nicht diese
433Schlimmstfall\-Strafe.
434.SS Reproduzierbarkeit
435Die Kompilierzeit\-Optionen (weiter unten beschrieben) können dazu verwandt
436werden, die Reproduzierbarkeit zu verbessern oder zusätzliche
437Warnungsmeldungen während der Übersetzung auszugeben. Sie werden für
438Architekturen, die diese unterstützen, standardmäßig aktiviert; die
439Ausnahmen sind unten angegeben.
440.TP
441\fBtimeless\fP
442Diese (standardmäßig aktivierte) Einstellung fügt \fB\-Wdate\-time\fP zu
443\fBCPPFLAGS\fP hinzu. Dies führt zu Warnungen, wenn die Makros \fB__TIME__\fP,
444\fB__DATE__\fP und \fB__TIMESTAMP__\fP verwandt werden.
445.
446.TP
447\fBfixdebugpath\fP
448Diese Einstellung (standardmäßig aktiviert) fügt
449\fB\-fdebug\-prefix\-map=\fP\fIBUILDPATH\fP\fB=.\fP zu \fBCFLAGS\fP, \fBCXXFLAGS\fP,
450\fBOBJCFLAGS\fP, \fBOBJCXXFLAGS\fP, \fBGCJFLAGS\fP, \fBFFLAGS\fP und \fBFCFLAGS\fP hinzu,
451wobei \fBBUILDPATH\fP auf das oberste Verzeichnis des bauenden Pakets gesetzt
452wird. Dies führt dazu, dass der Baupfad aus allen erstellten Debug\-Symbolen
453entfernt wird.
454.
455.SH UMGEBUNG
456Es gibt zwei Gruppen von Umgebungsvariablen, die den gleichen Vorgang
457durchführen. Der erste (DEB_\fISchalter\fP_\fIVorg\fP) sollte niemals innerhalb
458von \fBdebian/rules\fP verwandt werden. Er ist für Benutzer gedacht, die das
459Quellpaket mit anderen Bauschaltern erneut bauen möchten. Der zweite Satz
460(DEB_\fISchalter\fP_MAINT_\fIVorg\fP) sollte nur durch Paketbetreuer in
461\fBdebian/rules\fP verwandt werden, um die entstehenden Bauschalter zu ändern.
462.TP
463\fBDEB_\fP\fISchalter\fP\fB_SET\fP
464.TQ
465\fBDEB_\fP\fISchalter\fP\fB_MAINT_SET\fP
466Diese Variable kann zum Erzwingen des für \fISchalter\fP zurückgegebenen Werts
467verwandt werden.
468.TP
469\fBDEB_\fP\fISchalter\fP\fB_STRIP\fP
470.TQ
471\fBDEB_\fP\fISchalter\fP\fB_MAINT_STRIP\fP
472Diese Variable kann zum Bereitstellen einer durch Leerzeichen getrennten
473Liste von Optionen verwandt werden, die aus dem Satz von \fISchalter\fP
474zurückgelieferten Schaltern entfernt werden.
475.TP
476\fBDEB_\fP\fISchalter\fP\fB_APPEND\fP
477.TQ
478\fBDEB_\fP\fISchalter\fP\fB_MAINT_APPEND\fP
479Diese Variable kann zum Anhängen ergänzender Optionen zum Wert, der von
480\fISchalter\fP zurückgegeben wird, verwandt werden.
481.TP
482\fBDEB_\fP\fISchalter\fP\fB_PREPEND\fP
483.TQ
484\fBDEB_\fP\fISchalter\fP\fB_MAINT_PREPEND\fP
485Diese Variable kann zum Voranstellen ergänzender Optionen zum Wert, der von
486\fISchalter\fP zurückgegeben wird, verwandt werden.
487.TP
488\fBDEB_BUILD_OPTIONS\fP
489.TQ
490\fBDEB_BUILD_MAINT_OPTIONS\fP
491Diese Variablen können von Benutzern oder Betreuern zum Deaktivieren oder
492Aktivieren verschiedener Bereichsfunktionalitäten benutzt werden, die
493Bauschalter beeinflussen. Die Variable \fBDEB_BUILD_MAINT_OPTIONS\fP setzt jede
494Einstellung in den Funktionalitätsbereichen \fBDEB_BUILD_OPTIONS\fP außer
495Kraft. Lesen Sie den Abschnitt \fBFUNKTIONALITÄTSBEREICHE\fP für weitere
496Details.
497.TP
498\fBDEB_VENDOR\fP
499Diese Einstellung definiert den aktuellen Lieferanten. Falls nicht gesetzt,
500wird er aus \fB%PKGCONFDIR%/origins/default\fP ermittelt.
501.TP
502\fBDEB_BUILD_PATH\fP
503Diese Variable setzt den Baupfad (seit Dpkg 1.18.8), der in Funktionalitäten
504wie \fBfixdebugpath\fP verwandt wird, so dass sie durch den Aufrufenden
505gesteuert werden können. Diese Variable ist derzeit spezifisch für Debian
506und Derivative.
507.
508.SH DATEIEN
509.SS Konfigurationsdateien
510.TP
511\fB%PKGCONFDIR%/buildflags.conf\fP
512Systemweite Konfigurationsdatei
513.TP
514\fB$XDG_CONFIG_HOME/dpkg/buildflags.conf\fP oder
515.TQ
516\fB$HOME/.config/dpkg/buildflags.conf\fP
517Benutzer\-Konfigurationsdatei
518.SS Paketierungsunterstützung
519.TP
520\fB%PKGDATADIR%/buildflags.mk\fP
521Makefile\-Schnipsel, das alle von \fBdpkg\-buildflags\fP unterstützten Schalter
522in Variablen laden (und optional exportieren) wird. (seit Dpkg 1.16.1)
523.
524.SH BEISPIELE
525Um Bauschalter an eine Baubefehl in einer Makefile zu übergeben:
526.PP
527.RS 4
528.nf
529$(MAKE) $(shell dpkg\-buildflags \-\-export=cmdline)
530
531\&./configure $(shell dpkg\-buildflags \-\-export=cmdline)
532.fi
533.RE
534.PP
535Um Bauschalter in einem Shell\-Skript oder Shell\-Fragement zu setzen, kann
536\fBeval\fP verwendet werden, um die Ausgabe zu interpretieren und die Schalter
537in die Umgebung zu exportieren:
538.PP
539.RS 4
540.nf
541eval "$(dpkg\-buildflags \-\-export=sh)" && make
542.fi
543.RE
544.PP
545Oder die Positionsparameter zu setzen, die an einen Befehl übergeben werden
546sollen:
547.PP
548.RS 4
549.nf
550eval "set \-\- $(dpkg\-buildflags \-\-export=cmdline)"
551for dir in a b c; do (cd $dir && ./configure "$@" && make); done
552.fi
553.RE
554.
555.SS "Verwendung in debian/rules"
556Sie sollten \fBdpkg\-buildflags\fP aufrufen oder \fBbuildflags.mk\fP in die Datei
557\fBdebian/rules\fP einbinden, um die benötigten Bauschalter, die an das
558Bausystem weitergegeben werden sollen, abzufragen. Beachten Sie, dass ältere
559Versionen von \fBdpkg\-buildpackage\fP (vor Dpkg 1.16.1) diese Variablen
560automatisch exportierten. Allerdings sollten Sie sich nicht darauf
561verlassen, da dies den manuellen Aufruf von \fBdebian/rules\fP nicht korrekt
562ermöglicht.
563.PP
564Für Pakete mit Autoconf\-artigen Bausystemen können Sie die relevanten
565Optionen direkt wie oben gezeigt an Configure oder \fBmake\fP(1) übergeben.
566.PP
567Für andere Bausysteme oder wenn Sie feingranularere Steuerung benötigen
568(welcher Schalter wo weitergegeben wird), können Sie \fB\-\-get\fP
569verwenden. Oder Sie können stattdessen \fBbuildflags.mk\fP einbinden, das sich
570um den Aufruf von \fBdpkg\-buildflags\fP kümmert und die Bauschalter in
571Make\-Variablen speichert.
572.PP
573Falls Sie alle Bauschalter in die Umgebung exportieren möchten (wo sie dann
574vom Baussystem eingelesen werden können):
575.PP
576.RS 4
577.nf
578DPKG_EXPORT_BUILDFLAGS = 1
579include %PKGDATADIR%/buildflags.mk
580.fi
581.RE
582.PP
583Für zusätzliche Steuerung was exportiert wird, können Sie die Variablen
584manuell exportieren (da keine standardmäßig exportiert werden):
585.PP
586.RS 4
587.nf
588include %PKGDATADIR%/buildflags.mk
589export CPPFLAGS CFLAGS LDFLAGS
590.fi
591.RE
592.PP
593Und natürlich können Sie die Schalter manuell an Befehle weitergeben:
594.PP
595.RS 4
596.nf
597include %PKGDATADIR%/buildflags.mk
598build\-arch:
599\& $(CC) \-o hello hello.c $(CPPFLAGS) $(CFLAGS) $(LDFLAGS)
600.fi
601.RE
602.SH ÜBERSETZUNG
603Die deutsche Übersetzung wurde 2004, 2006-2017 von Helge Kreutzmann
604<debian@helgefjell.de>, 2007 von Florian Rehnisch <eixman@gmx.de> und
6052008 von Sven Joachim <svenjoac@gmx.de>
606angefertigt. Diese Übersetzung ist Freie Dokumentation; lesen Sie die
607GNU General Public License Version 2 oder neuer für die Kopierbedingungen.
608Es gibt KEINE HAFTUNG.