dpkg (1.18.25) stretch; urgency=medium
[dpkg] / man / de / dpkg-gensymbols.man
CommitLineData
1479465f
GJ
1.\" dpkg manual page - dpkg-gensymbols(1)
2.\"
3.\" Copyright © 2007-2011 Raphaël Hertzog <hertzog@debian.org>
4.\" Copyright © 2009-2010 Modestas Vainius <modestas@vainius.eu>
5.\" Copyright © 2012-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\-gensymbols 1 %RELEASE_DATE% %VERSION% dpkg\-Programmsammlung
26.nh
27.SH BEZEICHNUNG
28dpkg\-gensymbols \- erstelle Symboldateien (Abhängigkeitsinformationen für
29Laufzeitbibliotheken)
30.
31.SH ÜBERSICHT
32\fBdpkg\-gensymbols\fP [\fIOption\fP …]
33.
34.SH BESCHREIBUNG
35\fBdpkg\-gensymbols\fP durchsucht einen temporären Baubaum (standardmäßig
36debian/tmp), sucht nach Bibliotheken und erstellt eine Datei \fIsymbols\fP, die
37diese beschreibt. Diese Datei wird, falls sie nicht leer ist, in das
38Unterverzeichnis DEBIAN des Baubaums installiert, so dass sie schlussendlich
39in der Steuerinformation des Pakets auftaucht.
40.P
41Beim Erstellen dieser Dateien verwendet es als Eingabe einige vom Betreuer
42bereitgestellte Symboldateien. Es sucht nach den folgenden Dateien (und
43verwendet die erste, die gefunden wird):
44.IP • 4
45debian/\fIPaket\fP.symbols.\fIArchitektur\fP
46.IP • 4
47debian/symbols.\fIArchitektur\fP
48.IP • 4
49debian/\fIPaket\fP.symbols
50.IP • 4
51debian/symbols
52.P
53Der Hauptzweck dieser Dateien besteht darin, die minimale Version
54bereitzustellen, die mit jedem von der Bibliothek bereitgestellten Symbol
55verknüpft ist. Normalerweise entspricht dies der ersten Version des Pakets,
56die dieses Symbol bereitgestellt hat, kann aber vom Betreuer erhöht werden,
57falls die ABI des Symbols ohne Brechen der Rückwärtskompatibilität erweitert
58wurde. Es liegt in der Verwantwortung des Betreuers, diese Dateien aktuell
59zu halten, aber \fBdpkg\-gensymbols\fP hilft dabei.
60.P
61Wenn die erstellten Symboldateien sich von denen, die der Betreuer
62bereitgestellt hat, unterscheiden, wird \fBdpkg\-gensymbols\fP ein Diff zwischen
63den zwei Versionen anzeigen. Falls die Unterschiede desweiteren zu
64gravierend sind, wird es sogar fehlschlagen (Sie können einstellen, wie
65große Unterschiede Sie tolerieren können, sehen Sie hierzu die Option
66\fB\-c\fP).
67.SH "SYMBOLDATEIEN PFLEGEN"
68Die Symboldateien sind nur wirklich nützlich, falls sie die Entwicklung
69eines Paketes über mehrere Veröffentlichungen hinweg wiedergeben. Daher muss
70der Betreuer sie immer aktualisieren, wenn eine neues Symbol hinzugefügt
71wird, so dass die zugeordnete minimale Version der Realität entspricht. Die
72in den Bauprotokollen enthaltenen Diffs können als Startpunkt benutzt
73werden, aber zusätzlich hat der Betreuer sicherzustellen, dass sich das
74Verhalten dieser Symbole nicht derart geändert hat, dass irgendetwas, was
75diese Symbole verwendet und gegen die neue Version gelinkt ist, daran
76hindern würde, mit der alten Version zu funktionieren. Meistens kann der
77Diff direkt auf die Datei debian/\fIPaket\fP.symbols angewandt
78werden. Allerdings werden normalerweise weitere Anpassungen notwendig: es
79wird beispielsweise empfohlen, die Debian\-Revision von der minimalen Version
80zu entfernen, so dass Backports mit einer niedrigeren Versionsnummer aber
81der gleichen Version der Originalautoren immer noch die erstellten
82Abhängigkeiten erfüllen. Falls die Debian\-Revision nicht entfernt werden
83kann, da das Symbol wirklich von der Debian\-spezifischen Änderung
84hinzugefügt wurde, dann sollte der Version ‚\fB~\fP’ angehängt werden.
85.P
86Bevor irgendein Patch auf die Symboldatei angewendet wird, sollte der
87Betreuer zweimal prüfen, dass der Patch vernünftig ist. Öffentliche Symbole
88sollten nicht verschwinden, daher sollte der Patch idealerweise nur neue
89Zeilen hinzufügen.
90.P
91Beachten Sie, dass Sie in Symboldateien Kommentare einfügen können: jede
92Zeile, die mit ‚#’ als ersten Zeichen beginnt, ist ein Kommentar, falls sie
93nicht mit ‚#include’ beginnt (siehe Abschnitt \fBIncludes
94verwenden\fP). Zeilen, die mit ‚#MISSING:’ anfangen, sind besondere
95Kommentare, die verschwundene Symbole dokumentieren.
96.P
97Vergessen Sie nicht, zu überprüfen, ob alte Versionen aktualisiert werden
98müssen. Es gibt für \fBdpkg\-gensymbols\fP keine Möglichkeit, hierzu eine
99Warnung auszugeben. Wird der Diff blind akzeptiert oder wird angenommen,
100dass nichts geändert werden muss, wenn es keinen Diff gibt, ohne auf
101Änderungen zu prüfen, kann dies dazu führen, dass lockere Abhängigkeiten
102erzeugt werden, laut deren mit älteren Versionen gearbeitet werden kann,
103obwohl dies nicht möglich ist. Dies wird zu schwer zu findenden Fehlern bei
104(teilweisen) Upgrades führen.
105.SS "Verwendung der #PACKAGE#\-Ersetzung"
106.P
107In einigen seltenen Fällen unterscheidet sich der Name der Bibliothek auf
108verschiedenen Architekturen. Um zu vermeiden, dass der Paketname in der
109Symboldatei fest kodiert wird, können Sie die Markierung \fI#PACKAGE#\fP
110verwenden. Während der Installation der Symboldatei wird sie durch den
111echten Paketnamen ersetzt. Anders als die Markierung \fI#MINVER#\fP wird
112\fI#PACKAGE#\fP nie in der Symboldatei innerhalb eines Binärpakets auftauchen.
113.SS "Verwendung von Symbolkennzeichnungen"
114.P
115Symbolkennzeichnungen sind nützlich, um Symbole zu markieren, die in
116irgendeiner Weise besonders sind. Jedes Symbol kann eine beliebige Anzahl
117zugeordneter Kennzeichnungen besitzen. Während alle Kennzeichnungen
118ausgewertet und gespeichert werden, werden nur einige von \fBdpkg\-gensymbols\fP
119verstanden und lösen eine Spezialbehandlung der Symbole aus. Lesen Sie den
120Unterabschnit \fBStandardsymbolkennzeichnungen\fP für eine Referenz dieser
121Kennzeichnungen.
122.P
123Kennzeichnungsspezifikationen kommen direkt vor dem Symbolnamen (dazwischen
124sind keine Leerraumzeichen erlaubt). Sie beginnen immer mit einer öffnenden
125Klammer \fB(\fP, enden mit einer schließenden Klammer \fB)\fP und müssen
126mindestens eine Kennzeichnung enthalten. Mehrere Kennzeichnungen werden
127durch das Zeichen \fB|\fP getrennt. Jede Kennzeichnungen kann optional einen
128Wert enthalten, der von der Kennzeichnung durch das Zeichen \fB=\fP getrennt
129wird. Kennzeichennamen und \-werte können beliebige Zeichenketten sein, sie
130dürfen allerdings keine der der besonderen Zeichen \fB)\fP \fB|\fP \fB=\fP
131enthalten. Symbolnamen, die einer Kennzeichnungsspezifikation folgen, können
132optional mit den Zeichen \fB'\fP oder \fB"\fP zitiert werden, um Leerraumzeichen
133darin zu erlauben. Falls keine Kennzeichnungen für das Symbol spezifiziert
134sind, werden Zitatzeichen als Teil des Symbolnamens behandelt, der bis zum
135ersten Leerzeichen geht.
136.P
137 (Kennz1=bin markiert|Name mit Leerraum)"zitiertes gekennz Symbol"@Base 1.0
138 (optional)gekennzeichnet_unzitiertes_Symbol@Base 1.0 1
139 ungekennzeichnetes_Symbol@Base 1.0
140.P
141Das erste Symbol im Beispiel heißt \fIzitiertes gekennz Symbol\fP und hat zwei
142Kennzeichnungen: \fIKennz1\fP mit dem Wert \fIbin markiert\fP und \fIName mit
143Leerraum\fP ohne Wert. Das zweite Symbol heißt
144\fIgekennzeichnet_unzitiertes_Symbol\fP und ist nur mit dem Kennzeichen namens
145\fIoptional\fP gekennzeichnet. Das letzte Symbol ist ein Beispiel eines
146normalen, nicht gekennzeichneten Symbols.
147.P
148Da Symbolkennzeichnungen eine Erweiterung des Formats \fBdeb\-symbols(5)\fP
149sind, können sie nur Teil der in Quellpaketen verwandten Symboldateien sein
150(diese Dateien sollten dann als Vorlagen zum Bau der Symboldateien, die in
151Binärpakete eingebettet werden, gesehen werden). Wenn \fBdpkg\-gensymbols\fP
152ohne die Option \fB\-t\fP aufgerufen wird, wird es alle Symbole ausgeben, die
153zum Format \fBdeb\-symbols\fP(5) kompatibel sind: Es verarbeitet die Symbole
154entsprechend der Anforderungen ihrer Standardkennzeichnungen und entfernt
155alle Kennzeichnungen aus der Ausgabe. Im Gegensatz dazu werden alle Symbole
156und ihre Kennzeichnungen (sowohl die Standardkennzeichnungen als auch die
157unbekannten) im Vorlagenmodus (\fB\-t\fP) in der Ausgabe beibehalten und in
158ihrer Originalform wie sie geladen wurden auch geschrieben.
159.SS Standard\-Symbolkennzeichnungen
160.TP
161\fBoptional\fP
162Ein als »optional« gekennzeichnetes Symbol kann jederzeit von der Bibliothek
163verschwinden und wird nie zum Fehlschlag von \fBdpkg\-gensymbols\fP
164führen. Verschwundene optionale Symbole werden kontinuierlich als MISSING
165(Fehlend) in dem Diff in jeder neuen Paketversion auftauchen. Dieses
166Verhalten dient als Erinnerung für den Betreuer, dass so ein Symbol aus der
167Symboldatei entfernt oder wieder der Bibliothek hinzugefügt werden
168muss. Wenn das optionale Symbol, dass bisher als MISSING bezeichnet gewesen
169war, plötzlich in der nächsten Version wieder auftaucht, wird es wieder auf
170den Status „existing“ (existierend) gebracht, wobei die minimale Version
171unverändert bleibt.
172
173Diese Markierung ist für private Symbole nützlich, deren Verschwinden keinen
174ABI\-Bruch auslöst. Beispielsweise fallen die meisten
175C++\-Template\-Instanziierungen in diese Kategorie. Wie jede andere Markierung
176kann auch diese einen beliebigen Wert haben: sie könnte angeben, warum
177dieses Symbol als optional betrachtet wird.
178.TP
179\fBarch=\fP\fIArchitekturliste\fP
180.TQ
181\fBarch\-bits=\fP\fIArchitektur\-Bits\fP
182.TQ
183\fBarch\-endian=\fP\fIArchitektur\-Endianness\fP
184Diese Markierungen erlauben es, den Satz an Architekturen einzugrenzen, auf
185denen das Symbol existieren sollte. Die Markierungen \fBarch\-bits\fP und
186\fBarch\-endian\fP werden seit Dpkg 1.18.0 unterstützt. Wenn die Symbolliste mit
187den in der Bibliothek entdeckten Symbolen aktualisiert wird, werden alle
188architekturspezifischen Symbole, die nicht auf die aktuelle Host\-Architektur
189passen, so behandelt, als ob sie nicht existierten. Falls ein
190architekturspezifisches Symbol, das auf die aktuelle Host\-Architektur passt,
191in der Bibliothek nicht existiert, werden die normalen Regeln für fehlende
192Symbole angewandt und \fBdpkg\-gensymbols\fP könnte dadurch fehlschlagen. Auf
193der anderen Seite, falls das architekturspezifische Symbol gefunden wurde,
194wenn es nicht existieren sollte (da die aktuelle Host\-Architektur nicht in
195der Markierung aufgeführt ist oder nicht auf die Endianess und Bits passt),
196wird sie architekturneutral gemacht (d.h. die Architektur\-,
197Architektur\-Bits\- und Architektur\-Endianessmarkierungen werden entfernt und
198das Symbol wird im Diff aufgrund dieser Änderung auftauchen), aber es wird
199nicht als neu betrachtet.
200
201Beim Betrieb im standardmäßigen nicht\-Vorlagen\-Modus werden unter den
202architekturspezifischen Symbolen nur die in die Symboldatei geschrieben, die
203auf die aktuelle Host\-Architektur passen. Auf der anderen Seite werden beim
204Betrieb im Vorlagenmodus alle architekturspezifischen Symbole (darunter auch
205die von fremden Architekturen) immer in die Symboldatei geschrieben.
206
207Das Format der \fIArchitekturliste\fP ist das gleiche wie das des Feldes
208\fBBuild\-Depends\fP in \fIdebian/control\fP (außer den einschließenden eckigen
209Klammern []). Beispielsweise wird das erste Symbol aus der folgenden Liste
210nur auf den Architekturen Alpha, Any\-amd64 und Ia64 betrachtet, das zweite
211nur Linux\-Architekturen, während das dritte überall außer auf Armel
212betrachtet wird.
213
214 (arch=alpha any\-amd64 ia64)64bit_specific_symbol@Base 1.0
215 (arch=linux\-any)linux_specific_symbol@Base 1.0
216 (arch=!armel)symbol_armel_does_not_have@Base 1.0
217
218\fIarchitecture\-bits\fP ist entweder \fB32\fP oder \fB64\fP.
219
220 (arch\-bits=32)32bit_specific_symbol@Base 1.0
221 (arch\-bits=64)64bit_specific_symbol@Base 1.0
222
223\fIarchitecture\-endianness\fP ist entweder \fBlittle\fP oder \fBbig\fP.
224
225 (arch\-endian=little)little_endian_specific_symbol@Base 1.0
226 (arch\-endian=big)big_endian_specific_symbol@Base 1.0
227
228Mehrere Einschränkungen können aneinandergehängt werden.
229
230 (arch\-bits=32|arch\-endian=little)32bit_le_symbol@Base 1.0
231.TP
232\fBignore\-blacklist\fP
233dpkg\-gensymbols verfügt über eine interne Ausschußliste (»blacklist«) von
234Symbolen, die nicht in Symboldateien auftauchen sollten, da sie
235normalerweise nur Seiteneffekte von Implementierungsdetails in der
236Werkzeugkette darstellen. Falls Sie aus irgendeinem Grund wollen, dass diese
237Symbole in der Symboldatei aufgenommen werden, sollten Sie das Symbol mit
238\fBignore\-blacklist\fP kennzeichnen. Dies kann für einige grundlegende
239Bibliotheken der Werkzeugkette wie libgcc notwendig sein.
240.TP
241\fBc++\fP
242Gibt \fIc++\fP\-Symbolmuster an. Lesen Sie den Unterabschnitt \fBVerwendung von
243Symbolmuster\fP unten.
244.TP
245\fBsymver\fP
246Gibt \fIsymver\fP (Symbolversion)\-Symbolmuster an. Lesen Sie den Unterabschnitt
247\fBVerwendung von Symbolmuster\fP unten.
248.TP
249\fBregex\fP
250Gibt \fIregex\fP\-Symbolmuster an. Lesen Sie den Unterabschnitt \fBVerwendung von
251Symbolmuster\fP unten.
252.SS "Verwendung von Symbolmustern"
253.P
254Anders als die Standardsymbolspezifikation kann ein Muster mehrere reale
255Symbole aus der Bibliothek abdecken. \fBdpkg\-gensymbols\fP wird versuchen,
256jedes Muster auf jedes reale Symbol, für das \fIkein\fP spezifisches
257Symbolgegenstück in der Symboldatei definiert ist, zu passen. Wann immer das
258erste passende Muster gefunden wurde, werden alle Kennzeichnungen und
259Eigenschaften als Basisspezifikation des Symbols verwandt. Falls keines der
260Muster passt, wird das Symbol als neu betrachtet.
261
262Ein Muster wird als verloren betrachtet, falls es auf kein Symbol in der
263Bibliothek passt. Standardmäßig wird dies ein Versagen von
264\fBdpkg\-gensymbols\fP in der Stufe \fB\-c1\fP oder höher auslösen. Falls der
265Fehlschlag allerdings unerwünscht ist, kann das Muster mit der Kennzeichnung
266\fIoptional\fP markiert werden. Falls das Muster dann auf nichts passt wird es
267im Diff nur als MISSING (fehlend) auftauchen. Desweiteren kann das Muster
268wie jedes Symbol auf die spezielle Architektur mit der Kennzeichnung \fIarch\fP
269beschränkt werden. Bitte lesen Sie den Unterabschnitt \fBStandard
270Symbolkennzeichnungen\fP oben für weitere Informationen.
271
272Muster sind eine Erweiterung des Formats \fBdeb\-symbols\fP(5); sie sind daher
273nur in Symboldatei\-Vorlagen gültig. Die Musterspezifikationssyntax
274unterscheidet sich nicht von der eines spezifischen Symbols. Allerdings
275dient der Symbolnamenteil der Spezifikation als Ausdruck, der gegen
276\fIName@Version\fP eines realen Symbols gepasst wird. Um zwischen den
277verschiedenen Mustertypen zu unterscheiden, wird es typischerweise mit einer
278speziellen Kennzeichnung gekennzeichnet.
279
280Derzeit unterstützt \fBdpkg\-gensymbols\fP drei grundlegene Mustertypen:
281.TP 3
282\fBc++\fP
283Dieses Muster wird durch die Kennzeichnung \fIc++\fP verzeichnet. Es passt nur
284auf die entworrenen (»demangled«) Symbolnamen (wie sie vom Hilfswerkzeug
285\fBc++filt\fP(1) ausgegeben werden). Dieses Muster ist sehr hilfreich um auf
286Symbole zu passen, bei dem die verworrenen (»mangled«) Namen sich auf
287verschiedenen Architekturen unterscheiden während die entworrenen die
288gleichen bleiben. Eine Gruppe solcher Symbole ist \fInon\-virtual thunks\fP, die
289einen architekturspezifischen Versatz in ihren verworrenen Namen eingebettet
290haben. Eine häufige Instanz dieses Falles ist ein virtueller Destruktur, der
291unter rautenförmiger Vererbung ein nicht\-virtuelles Thunk\-Symbol
292benötigt. Selbst wenn beispielsweise _ZThn8_N3NSB6ClassDD1Ev@Base auf 32
293Bit\-Architekturen _ZThn16_N3NSB6ClassDD1Ev@Base auf 64 Bit\-Architekturen
294ist, kann es mit einem einzigen \fIc++\fP\-Muster gepasst werden:
295
296libdummy.so.1 libdummy1 #MINVER#
297 […]
298 (c++)"non\-virtual thunk to NSB::ClassD::~ClassD()@Base" 1.0
299 […]
300
301Der entworrene Name oben kann durch Ausführung folgenden Befehls erhalten
302werden:
303
304 $ echo '_ZThn8_N3NSB6ClassDD1Ev@Base' | c++filt
305
306Bitte beachten Sie, dass per Definition zwar der verworrene Name in der
307Bibliothek eindeutig ist, die aber nicht notwendigerweise für die
308entworrenen Namen zutrifft. Ein Satz von unterschiedlichen realen Symbolen
309können den gleichen entworrenen Namen haben. Beispielsweise ist das der Fall
310bei nicht\-virtuellen Thunk\-Symbolen in komplexen Vererbungskonfigurationen
311oder bei den meisten Konstruktoren und Destruktoren (da g++ typischerweise
312zwei reale Symbole für sie generiert). Da diese Kollisionen aber auf dem
313ABI\-Niveau passieren, sollten sie nicht die Qualität der Symboldatei
314reduzieren.
315.TP
316\fBsymver\fP
317Dieses Muster wird durch die Kennzeichnung \fIsymver\fP verzeichnet. Gut
318betreute Bibliotheken verfügen über versionierte Symbole, wobei jede Version
319zu der Version der Originalautoren passt, in der dieses Symbol hinzugefügt
320wurde. Falls das der Fall ist, können SIe ein \fIsymver\fP\-Muster verwenden, um
321auf jedes zu einer spezifizierten Version zugeordnete Symbol zu
322passen. Beispiel:
323
324libc.so.6 libc6 #MINVER#
325 (symver)GLIBC_2.0 2.0
326 […]
327 (symver)GLIBC_2.7 2.7
328 access@GLIBC_2.0 2.2
329
330Alle Version GLIBC_2.0 und GLIBC_2.7 zugeordneten Symbole werden zu einer
331minimalen Version 2.0 bzw. 2.7 führen, wobei das Symbol access@GLIBC_2.0 die
332Ausnahme darstellt. Es wird zu einer minimalen Abhängigkeit auf libc6
333Version 2.2 führen, obwohl es im Geltungsbereich des Musters
334»(symver)GLIBC_2.0« passt, da spezielle Symbole vor Mustern Vorrang haben.
335
336Bitte beachten Sie, dass Platzhaltermuster im alten Format (angezeigt durch
337»*@version« im Symbolnamenfeld) zwar noch unterstützt werden, sie aber durch
338die Syntax im neuen Format »(symver|optional)version« abgelöst
339wurden. Beispielsweise sollte »*@GLIBC_2.0 2.0« als
340»(symver|optional)GLIBC_2.0 2.0« geschrieben werden, falls das gleiche
341Verhalten benötigt wird.
342.TP
343\fBregex\fP
344Muster mit regulären Ausdrücken werden durch die Kennzeichnung \fIregex\fP
345verzeichnet. Sie passen auf den regulären Ausdruck von Perl, der im
346Symbolnamenfeld angegeben ist. Ein regulärer Ausdruck wird wie er ist
347gepasst. Denken Sie daher daran, ihn mit dem Zeichen \fI^\fP zu beginnen, da er
348ansonsten auf jeden Teil der Zeichenkette des realen Symbols \fIname@version\fP
349passt. Beispiel:
350
351libdummy.so.1 libdummy1 #MINVER#
352 (regex)"^mystack_.*@Base$" 1.0
353 (regex|optional)"private" 1.0
354
355Symbole wie »mystack_new@Base«, »mystack_push@Base«, »mystack_pop@Base«
356usw. werden vom ersten Muster gepasst, während dies z.B. für
357»ng_mystack_new@Base« nicht der Fall ist. Das zweite Muster wird auf alle
358Symbole, die die Zeichenkette »private« in ihren Namen enthalten, passen und
359die gepassten Symbole erben die Kennzeichnung \fIoptional\fP vom Muster.
360.P
361Die oben aufgeführten grundlegenden Muster können \- wo es Sinn ergibt \-
362kombiniert werden. In diesem Fall werden sie in der Reihenfolge verarbeitet,
363in der die Kennzeichnungen angegeben sind. Im Beispiel
364
365 (c++|regex)"^NSA::ClassA::Private::privmethod\ed\e(int\e)@Base" 1.0
366 (regex|c++)N3NSA6ClassA7Private11privmethod\edEi@Base 1.0
367
368werden die Symbole »_ZN3NSA6ClassA7Private11privmethod1Ei@Base« und
369»_ZN3NSA6ClassA7Private11privmethod2Ei@Base« gepasst. Beim Passen der ersten
370Musters wird das rohe Symbol erst als C++\-Symbol entworren, dann wird der
371entworrende Name gegen den regulären Ausdruck gepasst. Auf der anderen Seite
372wird beim Passen des zweiten Musters der reguläre Ausdruck gegen den rohen
373Symbolnamen gepasst, dann wird das Symbol überprüft, ob es ein C++\-Symbol
374ist, indem das Entwirren versucht wird. Ein Fehlschlag eines einfachen
375Musters wird zum Fehlschlag des gesamten Musters führen. Daher wird
376beispielsweise »__N3NSA6ClassA7Private11privmethod\edEi@Base« keines der
377Muster passen, da es kein gültiges C++\-Symbol ist.
378
379Im Allgemeinen werden die Muster in zwei Kategorien eingeteilt: Aliase
380(grundlegende \fIc++\fP\- und \fIsymver\fP\-Muster) und generische Muster (\fIregex\fP
381und alle Kombinationen grundlegender Muster). Passen von grundlegenden
382alias\-basierenden Mustern ist schnell (O(1)), während generische Muster O(N)
383(wobei N die Anzahl der generischen Muster ist) für jedes Symbol ist. Daher
384wird empfohlen, generische Muster nicht zu viel zu verwenden.
385
386Wenn mehrere Muster auf das gleiche Symbol passen, werden Aliase (zuerst
387\fIc++\fP, dann \fIsymver\fP) gegenüber den generischen Mustern
388bevorzugt. Generische Muster werden in der Reihenfolge, in der sie in der
389Symboldateivorlage gefunden werden, gepasst, bis zum ersten Erfolg. Beachten
390Sie aber, dass das manuelle Anordnen der Vorlagendateieinträge nicht
391empfohlen wird, da \fBdpkg\-gensymbols\fP Diffs basierend auf der
392alphanumerischen Reihenfolge ihrer Namen erstellt.
393.SS "Includes verwenden"
394.P
395Wenn der Satz der exportierten Symbolen sich zwischen Architekturen
396unterscheidet, kann es ineffizient werden, eine einzige Symboldatei zu
397verwenden. In diesen Fällen kann sich eine Include\-Direktive in einer Reihe
398von Arten als nützlich erweisen:
399.IP • 4
400Sie können den gemeinsamen Teil in eine externe Datei auslagern und diese
401Datei dann in Ihre \fIPaket\fP.symbols.\fIArch\fP\-Datei mit einer
402include\-Direktive wie folgt einbinden:
403
404#include "\fIPakete\fP.symbols.common"
405.IP •
406Die Include\-Direktive kann auch wie jedes Symbol gekennzeichnet werden:
407
408(Kennzeichen|…|KennzeichenN)#include "einzubindende\-Datei"
409
410Als Ergebnis werden alle Symbole aus \fIeinzubindende\-Datei\fP standardmäßig
411als mit \fIKennzeichen\fP … \fIKennzeichenN\fP gekennzeichnet betrachtet. Sie
412können diese Funktionalität benutzen, um eine gemeinsame Datei
413\fIPaket\fP.symbols zu erstellen, die architekturspezifische Symboldateien
414einbindet:
415
416 common_symbol1@Base 1.0
417 (arch=amd64 ia64 alpha)#include "Paket.symbols.64bit"
418 (arch=!amd64 !ia64 !alpha)#include "Paket.symbols.32bit"
419 common_symbol2@Base 1.0
420.P
421Die Symboldateien werden Zeile für Zeile gelesen und include\-Direktiven
422werden bearbeitet, sobald sie erkannt werden. Das bedeutet, dass der Inhalt
423der Include\-Datei jeden Inhalt überschreiben kann, der vor der
424Include\-Direktive aufgetaucht ist und Inhalt nach der Direktive alles aus
425der Include\-Datei überschreiben kann. Jedes Symbol (oder sogar weitere
426#include\-Direktiven) in der Include\-Datei kann zusätzliche Kennzeichnungen
427spezifizieren oder Werte der vererbtgen Kennzeichnungen in ihrer
428Kennzeichnungsspezifikation überschreiben. Allerdings gibt es keine
429Möglichkeit für ein Symbol, die ererbten Kennzeichnungen zu überschreiben.
430.P
431Eine eingebundene Datei kann die Kopfzeile wiederholen, die den SONAME der
432Bibliothek enthält. In diesem Fall überschreibt sie jede vorher gelesene
433Kopfzeile. Allerdings ist es im Allgemeinen am Besten, die Wiederholung von
434Kopfzeilen zu vermeiden. Ein Weg dies zu erreichen, ist wie folgt:
435.PP
436#include "libirgendwas1.symbols.common"
437 arch_spezifisches_Symbol@Base 1.0
438.SS "Gute Bibliotheksverwaltung"
439.P
440Eine gut verwaltete Bibliothek hat die folgenden Eigenschaften:
441.IP • 4
442seine API ist stabil (öffentliche Symbole entfallen nie, nur neue
443öffentliche Symbole werden hinzugefügt) und inkompatible Änderungen erfolgen
444nur, wenn sich der SONAME ändert,
445.IP • 4
446idealerweise verwendet sie Symbolversionierung, um ABI\-Stabilität trotz
447interner Änderungen und API\-Erweiterungen zu erreichen,
448.IP • 4
449sie exportiert nie private Symbole (als Hilfslösung können diese als
450optional gekennzeichnet werden).
451.P
452Bei der Verwaltung der Symboldatei kann das Auftauchen und Verschwinden von
453Symbolen leicht bemerkt werden. Es ist aber schwieriger, inkompatbile API\-
454und ABI\-Änderungen zu bemerken. Daher sollte der Betreuer intensiv die
455Changelog\-Einträge durchschauen und nach Fällen suchen, in denen die Regeln
456der guten Bibliotheksverwaltung gebrochen wurden. Falls mögliche Probleme
457entdeckt wurden, sollten der Originalautor informiert werden, da eine
458Korrektur vom Originalautor immer besser als eine Debian\-spezifische
459Hilfslösung ist.
460.SH OPTIONEN
461.TP
462\fB\-P\fP\fIPaketbauverzeichnis\fP
463Suche nach \fIPaketbauverzeichnis\fP statt nach debian/tmp.
464.TP
465\fB\-p\fP\fIPaket\fP
466Definiert den Paketnamen. Benötigt, falls mehr als ein binäres Paket in
467debian/control aufgeführt ist (oder falls es keine Datei debian/control
468gibt).
469.TP
470\fB\-v\fP\fIVersion\fP
471Definiert die Paketversion. Standardmäßig wird die Version aus
472debian/changelog ausgelesen. Benötigt, falls der Aufruf außerhalb des
473Quellpaketbaums erfolgt.
474.TP
475\fB\-e\fP\fIBibliotheksdatei\fP
476Nur die explizit aufgeführten Bibliotheken untersuchen statt alle
477öffentlichen Bibliotheken zu finden. Sie können Shell\-Muster, die zur
478Expansion von Pfadnamen verwandt werden (siehe die Handbuchseite
479\fBFile::Glob\fP(3perl) für weitere Details) in \fIBibliotheksdatei\fP verwenden,
480um mehrere Bibliotheken mit einem einzelnen Argument zu passen (andernfalls
481benötigen Sie mehrere \fB\-e\fP).
482.TP
483\fB\-I\fP\fIDateiname\fP
484Verwende \fIDateiname\fP als Referenzdatei, um die Symboldatei zu erstellen,
485die dann im Paket selbst integriert wird.
486.TP
487\fB\-O\fP[\fIDateiname\fP]
488Die erstellte Symbols\-Datei auf die Standardausgabe oder nach \fIDateiname\fP,
489falls angegeben, ausgeben statt in \fBdebian/tmp/DEBIAN/symbols\fP (oder
490\fIPaket\-Bauverzeichnis\fP\fB/DEBIAN/symbols\fP falls \fB\-P\fP verwandt wurde). Falls
491\fIDateiname\fP bereits existiert, wird deren Inhalt als Grundlage für die
492erstellte Symboldatei verwandt. Sie können diese Funktionalität benutzen, um
493eine Symboldatei zu aktualisieren, so dass sie zu einer neueren Version der
494Originalautoren Ihrer Bibliothek passt.
495.TP
496\fB\-t\fP
497Schreibe die Symboldatei im Vorlagenmodus statt im zu \fBdeb\-symbols\fP(5)
498kompatiblen Format. Der Hauptunterschied besteht darin, dass im
499Vorlagenmodus die Symbolnamen und Kennzeichnungen in ihrer Originalform
500geschrieben werden, im Gegensatz zu den verarbeiteten Symbolnamen mit
501entfernen Kennzeichnungen im Kompatibilitätsmodus. Desweiteren könnten
502einige Symbole beim Schreiben einer Standard \fBdeb\-symbols\fP(5)\-Datei
503entfernt werden (gemäß der Verarbeitungsregeln für Kennzeichen), während in
504der Symboldateivorlage immer alle Symbole geschrieben werden.
505.TP
506\fB\-c\fP\fI[0\-4]\fP
507Definiert die Prüfungen, die beim Vergleich der erstellten Symboldatei mit
508der Vorlagendatei als Startpunkt erfolgen sollen. Standardstufe ist
5091. Zunehmende Stufen führen mehr Prüfungen durch und enthalten alle
510Prüfungen der niedrigeren Stufen. Stufe 0 schlägt nie fehl. Stufe 1 schlägt
511fehl, wenn einige Symbole verschwunden sind. Stufe 2 schlägt fehlt, falls
512einige neue Symbole eingeführt wurden. Stufe 3 schlägt fehl, falls einige
513Bibliotheken verschwunden sind. Stufe 4 schlägt fehl, falls einige
514Bibliotheken hinzugekommen sind.
515
516Dieser Wert kann von der Umgebungsvariablen \fBDPKG_GENSYMBOLS_CHECK_LEVEL\fP
517außer Kraft gesetzt werden.
518.TP
519\fB\-q\fP
520Ruhig verhalten und nie einen Diff zwischen der erstellten Symboldatei und
521der als Startpunkt verwandten Vorlagendatei erstellen oder keine Warnungen
522bezüglich neuer/verlorender Bibliotheken oder neuer/verlorender Symbole
523ausgeben. Diese Option deaktiviert nur die informative Ausgabe aber nicht
524die Prüfungen selbst (sehen Sie hierzu die Option \fB\-c\fP).
525.TP
526\fB\-a\fP\fIArchitektur\fP
527Nehme \fIArch\fP als Host\-Architektur beim Verarbeiten der Symboldateien
528an. Verwenden Sie diese Option, um Symboldateien oder Diffs für beliebige
529Architekturen zu erstellen, vorausgesetzt, die Binärprogramme sind bereits
530verfügbar.
531.TP
532\fB\-d\fP
533Debug\-Modus aktivieren. Eine Vielzahl von Nachrichten wird angezeigt, um zu
534erklären, was \fBdpkg\-gensymbols\fP durchführt.
535.TP
536\fB\-V\fP
537Ausführlichen Modus aktivieren. Die erstellte Symboldatei enthält veraltete
538Symbole als Kommentare. Im Vorlagenmodus werden Mustersymbole desweiteren
539von Kommentaren gefolgt, die die echten Symbole aufführen, die auf dieses
540Muster passen.
541.TP
542\fB\-?\fP, \fB\-\-help\fP
543Zeige den Bedienungshinweis und beende.
544.TP
545\fB\-\-version\fP
546Gebe die Version aus und beende sich.
547.
548.SH UMGEBUNG
549.TP
550\fBDPKG_GENSYMBOLS_CHECK_LEVEL\fP
551Setzt die Befehlsüberprüfungsstufe außer Kraft, selbst wenn das
552Befehlszeilenargument \fB\-c\fP übergeben wurde (beachten Sie, dass dies der
553üblichen Konvention widerspricht, demnach Befehlszeilenargumente Vorrang
554über Umgebungsvariablen haben).
555.SH "SIEHE AUCH"
556\fBhttps://people.redhat.com/drepper/symbol\-versioning\fP
557.br
558\fBhttps://people.redhat.com/drepper/goodpractice.pdf\fP
559.br
560\fBhttps://people.redhat.com/drepper/dsohowto.pdf\fP
561.br
562\fBdeb\-symbols\fP(5), \fBdpkg\-shlibdeps\fP(1).
563.SH ÜBERSETZUNG
564Die deutsche Übersetzung wurde 2004, 2006-2017 von Helge Kreutzmann
565<debian@helgefjell.de>, 2007 von Florian Rehnisch <eixman@gmx.de> und
5662008 von Sven Joachim <svenjoac@gmx.de>
567angefertigt. Diese Übersetzung ist Freie Dokumentation; lesen Sie die
568GNU General Public License Version 2 oder neuer für die Kopierbedingungen.
569Es gibt KEINE HAFTUNG.