EnglischFranzösischSpanisch

Ad


OnWorks-Favicon

metaconfig – Online in der Cloud

Führen Sie metaconfig im kostenlosen Hosting-Anbieter OnWorks über Ubuntu Online, Fedora Online, den Windows-Online-Emulator oder den MAC OS-Online-Emulator aus

Dies ist der Befehl metaconfig, der beim kostenlosen Hosting-Anbieter OnWorks mit einer unserer zahlreichen kostenlosen Online-Workstations wie Ubuntu Online, Fedora Online, dem Windows-Online-Emulator oder dem MAC OS-Online-Emulator ausgeführt werden kann

PROGRAMM:

NAME/FUNKTION


metaconfig – ein Konfigurationsskriptgenerator

ZUSAMMENFASSUNG


Metaconfig [-dhkmostvwGMV ] [ -L dir ]

BESCHREIBUNG


Metaconfig ist ein Programm, das Konfigurationsskripte generiert. Wenn Sie nicht wissen, was ein
Konfigurieren Sie das Skript. Bitte fahren Sie mit dem fort TUTORIAL Abschnitt dieser Handbuchseite. Falls Sie es wollen
eine vollständige (formale) Beschreibung der Art und Weise der Verwendung Metaconfig und seine Einheiten, schauen Sie sich bitte die an
REFERENCE Abschnitt. Im Folgenden finden Sie eine kurze Einführung und Referenz für Fachkundige
Benutzer.

Metaconfig Funktioniert ab Satz von Einheiten die alles definieren, was metaconfig weiß
Portabilität. Jede Einheit ist in sich geschlossen und muss nirgendwo registriert werden
außer durch Aufnahme in das öffentliche U-Verzeichnis oder Ihr privates U-Verzeichnis. Wenn
Das dist-Paket (zu dem auch metaconfig gehört) wird in LIB installiert, dann im öffentlichen U
Das Verzeichnis ist LIB/dist/mcon/U. Auf diesem Computer ist das LIB-Verzeichnis /usr/share/dist. Dein
Das private U-Verzeichnis, falls vorhanden, befindet sich im Verzeichnis der obersten Ebene Ihres Pakets.
Bevor du laufen kannst Metaconfig Sie müssen mehrere Dinge tun:

· Erstellen Sie durch Ausführen eine .package-Datei im Verzeichnis der obersten Ebene des Pakets packinit.
Dieses Programm fragt Sie nach Ihrem Paket und merkt sich, was Sie ihm mitteilen
Alle Dist-Programme können intelligent sein.

· Konsultieren Sie das Glossar (in LIB/dist/mcon) und schreiben Sie Ihre Shell-Skripte und C-Programme
in Bezug auf die Symbole, die metaconfig zu definieren weiß. Du brauchst es nicht zu sagen
Geben Sie in metaconfig an, welche Symbole Sie verwendet haben, da metaconfig das für Sie herausfinden wird.

· Generieren Sie alle .SH-Skripte, die zum Schreiben von Makefiles oder Shell-Skripten erforderlich sind, die davon abhängen
auf durch Konfigurieren definierte Werte. Es gibt ein Programm namens makeSH das wird dir helfen
Konvertieren Sie ein einfaches Skript in eine script.SH-Vorlage. Es müssen noch einige Bearbeitungen vorgenommen werden
Wird an der resultierenden .SH-Datei durchgeführt, um den variablen Konfigurationsteil in zu verschieben
oberer Teil des Skripts (siehe Inline-Kommentare generiert von makeSH innerhalb Ihrer .SH
Datei).

· Erstellen Sie eine MANIFEST.new-Datei in Ihrem Verzeichnis der obersten Ebene, die alle darin enthaltenen Dateien auflistet
dein Paket. Diese Datei bleibt privat und wird nicht Teil des Finales sein
Verteilung. (Der Einfachheit halber wird die MANIFEST-Datei verwendet von Metaconfig if
Es gibt noch keine MANIFEST.new-Datei.) Der Dateiname sollte jeweils das erste Feld sein
Linie. Nach etwas Leerzeichen können Sie einen kurzen Kommentar hinzufügen, der Ihre Datei beschreibt. Nur
Dort sollten die Quelldateien aufgelistet sein. Die spezielle Datei patchlevel.h (welches ist
werden von den Patch-Tools verwaltet und verwaltet – siehe Klaps(1)) sollte Teil der sein
MANIFEST.new-Datei, wird jedoch von einigen Tools möglicherweise stillschweigend ignoriert. Als Faustregel gilt,
Dort sollten nur von RCS verwaltete Dateien aufgeführt sein patchlevel.h Dateiwesen
eine wichtige Ausnahme.

· Optional können Sie eine MANIFEST-Datei erstellen, bei der es sich um eine exportierte Version handelt
Ihres MANIFEST.new. Diese Datei muss Teil der Veröffentlichung sein, also in beiden aufgeführt sein
Ihr MANIFEST.new und MANIFEST selbst. Einer der Metaconfig Einheiten wissen davon
Datei und erzwingt, dass Configure eine Freigabeprüfung durchführt, um sicherzustellen, dass alle Dateien vorhanden sind
Die dort aufgeführten Dateien sind Teil der Distribution. Die Dateien MANIFEST und MANIFEST.new sollten
eindeutig sein, keine Links.

· Kopieren Sie alle .U-Dateien, die Sie ändern möchten, in Ihr privates U-Verzeichnis. Alle .U-Dateien
in Ihrem privaten U-Verzeichnis wird gegenüber dem im öffentlichen U-Verzeichnis bevorzugt verwendet
Verzeichnis. Eine Möglichkeit, die Aufnahme einer beliebigen Einheit zu erzwingen, besteht beispielsweise darin, die Datei End.U zu kopieren
Datei in Ihr .U-Verzeichnis und fügen Sie den Namen der Einheit hinzu, von der Sie eine Abhängigkeit haben möchten
das Ende der ?MAKE:-Zeile. Bestimmte Einheiten können nämlich NUR auf diese Weise erzwungen werden
diejenigen der Form Warn_*.U und Chk_*.U. Sie können auch bestimmte Standardeinstellungen anpassen
Konfigurieren Sie Variablen, indem Sie Myinit.U in das private U-Verzeichnis Ihres Pakets kopieren und
Festlegen der Variablen in dieser Einheit.

Jetzt sind Sie bereit zum Laufen Metaconfig. Dadurch entsteht ein Einrichtung Datei und optional eine
config_h.SH Datei (wenn Ihre Quellen C-Symbole verwenden). Die generierten Dateien werden
werden bei Bedarf automatisch zu Ihrem MANIFEST.new hinzugefügt. Vergessen Sie nicht, Ihre zu aktualisieren
MANIFEST-Datei.

Um neue Einheiten zu erstellen, gehen Sie wie folgt vor:

· Kopieren Sie eine ähnliche Einheit in eine neue .U-Datei. Der von Ihnen gewählte Name sollte der Name eines sein
Variable, die von der Einheit generiert wird, obwohl dies nur eine Annehmlichkeit für Sie ist, keine
Erfordernis. Es sollte höchstens 12 Zeichen lang sein, um ein Zerhacken des Dateinamens zu verhindern.
Eigentlich sollte es wahrscheinlich 10 oder weniger sein, damit diejenigen, die RCS verwenden möchten, es haben können
a .U,v am Ende ohne zu hacken. Metaconfig verwendet die Groß-/Kleinschreibung des ersten Buchstabens to
Stellen Sie fest, ob tatsächlich eine Variable von dieser Einheit erzeugt wird, also schreiben Sie Ihre nicht groß
Unit-Name, wenn sie eine Shell-Variable erzeugen soll.

· Bearbeiten Sie die neue .U-Datei nach Ihren Wünschen. Die erste ?MAKE:-Zeile zeigt an
Abhängigkeiten; vor dem endgültigen Listendoppelpunkt alle Variablen, die diese Einheit definiert, und
nach dem letzten Doppelpunkt alle Variablen (oder andere Einheiten), von denen diese Einheit abhängt.
Es ist sehr wichtig, dass diese Listen korrekt sind. Wenn eine Abhängigkeit optional ist und a
Damit der Standardwert verwendet werden kann, sollten Sie der Abhängigkeit ein „+“-Zeichen voranstellen. Der
Die entsprechende Einheit wird nicht zur Berechnung des Symbols geladen, es sei denn, dies ist wirklich erforderlich
durch eine andere Einheit.

· Parametrisieren Sie Ihre Einheit so weit wie möglich basierend auf der Shell-Variable, die auf definiert ist
?INIT: Zeilen. Dadurch werden die Variablendefinitionen nach oben in die Init.U-Einheit verschoben
Sie können durch Definitionen in Myinit.U überschrieben werden, das nach Init.U eingefügt wird.

· Fügen Sie die Definition aller gewünschten C-Symbole als ?H:-Zeilen hinzu. Eine Zeile, die mit beginnt
?H:?%<: in der .U-Datei wird genau dann zur eventuellen config.h-Datei hinzugefügt, wenn
metaconfig entscheidet, dass diese Einheit benötigt wird. Das %< steht für den Namen der Einheit,
Dies ist zufällig auch der Name der Datei (ohne .U), wenn Sie dem gefolgt sind
Konvention. Geben Sie immer einen Kommentar zu jeder ?H:-Zeile ein, falls eine der Variablen vorhanden ist
Ersetzungen weiter vorne in der Zeile beginnen einen Kommentar, ohne ihn zu beenden. Jede Shell
Eine Variable, die mit d_ beginnt, kann dies bewirken, seien Sie also vorsichtig. Wenn Sie das ?%<: weglassen, dann
metaconfig wird versuchen, das Symbol zu erkennen, dessen Definition vorab benötigt wird
Aufnahme in config.h.

· Fügen Sie Glossardefinitionen als ?S:-Zeilen für Shell-Variablen und ?C:-Zeilen für C hinzu
Präprozessorvariablen. Beispiele finden Sie in einer aktuellen Einheit. Es ist SEHR wichtig
Beginnen Sie jeden Eintrag mit einem linksbündigen Symbolnamen und beenden Sie jeden Eintrag mit einem ?C:. oder
?S:. Linie. Der Algorithmus, der C-Präprozessor-Symboleinträge für übersetzt
Das Glossar in Kommentare für config.h hängt davon ab.

· Stellen Sie sicher, dass die Reihenfolge aller Ihrer ? Linien ist richtig. Die richtige Reihenfolge ist:

?RCS: und ?X: im Grunde nur Kommentare
?MAKE: Metaconfig-Abhängigkeiten
?Y: Direktive für das Einheitenlayout
?S: Glossar-Shell-Definitionen
?C: Glossar C-Definitionen
?H: config.h-Definitionen
?M: confmagic.h-Definitionen
?W: gesuchte Symbole
?V: sichtbare Symbole
?F: Von diesem Gerät erstellte Dateien
?T: temporäre Shell-Symbole verwendet
?D: Standardwert für optionale Abhängigkeiten
?O: Wird zur Kennzeichnung veralteter Einheiten verwendet
?LINT: Metalint-Hinweise
?INIT: Initialisierungen von Shell-Symbolen

Hier ist ein Beispiel, um die Reihenfolge der Zeilen und die verschiedenen zulässigen Formate zu zeigen:

?RCS: $RCS-Id$
?RCS: Copyright-Informationen
?RCS: $RCS-Log$
?X:
?X: Ein erfundenes Beispiel
?X:
?MAKE:d_one two: three +four Five
?MAKE: -pick add $@ %
?Y:STANDARD
?S:d_one:
?S: Erstes Shell-Symbol, definiert bedingt EINS.
?S:.
?S:zwei:
?S: Zweites Shell-Symbol, Wert für ZWEI.
?S:.
?KEGEL:
?C: Erstes C-Symbol.
?C:.
?C:ZWEI:
?C: Zweites C-Symbol.
?C:.
?H:#$d_one EINS /**/
?H:#define TWO "$two"
?H:#$d_one ONE_TWO "$two"
?H:.
?M:flip: HAS_FLIP
?M:#ifndef HAS_FLIP
?M:#flip(x) flop(x) definieren
?M:#endif
?M:.
?W:%<:one_two
?V:p_eins p_zwei:p_drei
?F:Datei ./ftest !tmp
?T:tmp var
?D:two='undef'
?LINT:Ändere drei
?INIT:two_init='2'
: Es folgt Shell-Code, der die Einheit implementiert
p_one='eins'
p_two='zwei'
p_drei=""

Lassen Sie es mich noch einmal sagen: Die obige Einheitendefinition ist a Fälschung eine, die nur die zeigt
verschiedene Möglichkeiten. Eine solche Einheit würde sowieso wenig Zweck erfüllen ... Noch mehr
Erweiterte Funktionen werden hier nicht beschrieben. Bitte wende dich an die REFERENCE Abschnitt für mehr
alle Informationen.

· Legen Sie das Gerät je nach Bedarf im öffentlichen oder privaten U-Verzeichnis ab.

· Wiederholung Metaconfig.

· Senden Sie Ihr Gerät an [E-Mail geschützt] (Raphael Manfredi) zur Aufnahme in die Masterkopie,
wenn Sie denken, dass es von allgemeinem Interesse ist.

Um ein neues zu lokalisierendes Programm hinzuzufügen:

· Bearbeiten Sie Loc.U und fügen Sie den Namen des Programms sowohl zur Zeile ?MAKE: hinzu (zwischen
zwei Doppelpunkte) und entweder in loclist oder trylist (je nachdem, ob das Programm vorhanden ist).
obligatorisch oder nicht).

· Führen Sie metaconfig erneut aus.

· Senden Sie mir Ihr Gerät zur Aufnahme in die Masterkopie zu, wenn Sie der Meinung sind, dass es sich um ein allgemeines Gerät handelt
Interesse.

Hinweise zum Schreiben von .U-Dateien:

* Verwenden Sie immer „rm -f“, da es Systeme gibt, in denen rm standardmäßig interaktiv ist.

* Verwenden Sie nicht „set -- ...“, da „--“ nicht mit jeder Shell funktioniert. Verwenden Sie „set x ...;
Schicht".

* Verwenden Sie nicht „unset ENV“, da unset nicht vollständig portierbar ist. Sagen Sie stattdessen „ENV=''“.

* Aufgrund des Eunice-Systems immer echo „ “ (mit einem Leerzeichen) verwenden.

* Benutz nur Test mit -r, -w, -f oder -d, da dies die einzigen tragbaren Switches sind. In
Vermeiden Sie insbesondere „test -x“.

* Verwenden Sie nur Programme, die mit V7 geliefert wurden, damit Sie wissen, dass jeder sie hat.

* Verwenden Sie $contains, wenn Sie bedingt grepen möchten, da nicht alle greps a zurückgeben
angemessener Status. Stellen Sie sicher, dass Sie die Ausgabe nach /dev/null umleiten, indem Sie „>/dev/null“ verwenden
2>&1'.

* Verwenden Sie „if test“ anstelle von „if [...]“, da nicht jeder sh das letztere Konstrukt kennt.

* Verwenden Sie das myread-Skript für Eingaben, damit diese Shell-Escapes und Standardwerte ausführen können
Auswertung. Die allgemeine Form ist

Fall „$grimble“ in
'') dflt=452;;
*) dflt="$grimble";;
esac
rp='Wie viele Grimbles hast du?'
. ./myread
grimble="$ans"

* Verwenden Sie das getfile-Skript, wenn Sie nach einem Dateipfadnamen fragen, um optional zu sein
~Namenserweiterung und Plausibilitätsprüfungen. Eine vollständige Beschreibung finden Sie in der Unit „Getfile.U“.

* Setzen Sie immer ein

$startsh

oben in jedem generierten Skript, das gestartet oder als Quelle verwendet wird
Einrichtung.

* Gehen Sie niemals von allgemeinen UNIX-Ismen wie der Tatsache aus, dass eine Objektdatei mit a endet .o und
mit dem ein Bibliotheksname endet .a. Benutze die $_o und $_a Variablen stattdessen (siehe
Unix.U).

* Wenn Sie einen Compile-Link-Execute-Test durchführen, schreiben Sie ihn immer so:

$cc $ccflags $ldflags try.c -o try $libs

weil einige Systeme erfordern, dass Verknüpfungsflags vor dem Kompilieren angegeben werden
Ziel (mit Ausnahme von Trailing-Linking-Bibliotheken).

* Geben Sie wichtige Meldungen zum Dateideskriptor Nr. 4 aus, indem Sie „>&4“ verwenden, um die Ausgabe umzuleiten.
Es werden nur diese Meldungen angezeigt, wenn die -s Schalter gegeben ist Einrichtung auf die
Befehlszeile (Silent-Modus).

* Versuchen Sie immer, auf die spezifischste Art und Weise festzustellen, ob eine Funktion vorhanden ist – tun Sie es nicht
Sagen Sie „if bsd“, wenn Sie libc grepen können. Es gibt viele Hybridsysteme, und
Jedes Feature sollte für sich stehen und fallen.

* Versuchen Sie immer festzustellen, ob eine Funktion auf die allgemeinste Art und Weise vorhanden ist
Andere Pakete können Ihr Gerät verwenden.

* Legen Sie im Zweifelsfall einen Standard fest und fragen Sie nach. Gehen Sie nicht von irgendetwas aus.

* Wenn Sie der Meinung sind, dass der Benutzer falsch liegt, berücksichtigen Sie die Tatsache, dass er möglicherweise Recht hat. Für
Beispielsweise könnte er „Configure“ auf einem anderen System ausführen, als er verwenden möchte
das Endprodukt auf.

Metaconfig reserviert die folgenden Namen in Ihrem Verzeichnis und wenn Sie einen solchen verwenden, benennen Sie ihn
kann verstopfen oder andere unvorhergesehene Auswirkungen haben:

.MT/*
Einrichtung
Gesucht
Überholt
konfigurieren
config_h.SH
confmagic.h
U/*
MANIFEST.neu

Darüber hinaus blockiert „Configure“ möglicherweise diese Namen in dem Verzeichnis, in dem es ausgeführt wird:

UU/*
config.sh
config.h

OPTIONAL


Folgende Optionen werden erkannt von Metaconfig:

-d Aktivieren Sie den Debug-Modus. Nicht wirklich nützlich, es sei denn, Sie debuggen Metaconfig
sich.

-h Hilfenachricht drucken und beenden.

-k Behalten Sie ein temporäres Verzeichnis, damit Sie die von verwendeten Arbeitsdateien überprüfen können
Metaconfig zum bauen deines Einrichtung Skript. Nur beim Debuggen nützlich
Einheiten.

-m Nehmen Sie viel Arbeitsspeicher und Auslagerungsspeicher an. Dadurch wird die Symbolsuche beschleunigt
Quelldateien erheblich zeitaufwändig und auf Kosten des Speichers
Verbrauch...

-o Ordnen Sie veraltete Symbole neuen zu. Benutzen Sie diesen Schalter, wenn Sie noch welche haben
veraltete Symbole in Ihrem Quellcode und möchten (oder können) nicht entfernen
sie vorerst. Die veralteten Symbole werden ansonsten ignoriert
wird Ihnen eine Warnung geben Metaconfig.

-s Schalten Sie den Silent-Modus ein.

-t Verfolgen Sie Symbole, sobald sie gefunden werden.

-v Aktivieren Sie den ausführlichen Modus.

-w Gehen Sie davon aus, dass die gesuchte Datei aktuell ist. Dadurch werden Zeit und Speicher übersprungen
aufwändige Phase des Quellcode-Scannens, bei der nach bekannten Symbolen gesucht wird. Benutze es
Nur wenn Sie wissen, dass sich Ihre Quelldatei in Bezug auf nicht geändert hat
Auswahl von Metaconfig verwendete Symbole.

-G Stellen Sie außerdem ein GNU bereit konfigurieren-ähnliches Frontend zum Generierten Einrichtung
Skript, das ebenfalls in die Distribution aufgenommen werden soll. Dies ist nur ein Wrapper
um die Einrichtung Skript natürlich, aber es macht die Leute mit dem vertraut
GNU-Tool, damit Sie bei einer neuen Distribution nicht verloren gehen.

-L dir Überschreiben Sie den Standardspeicherort der Bibliothek. Normalerweise nur für Metaconfig nützlich
Betreuer können die zu entwickelnden Einheiten lokal verwenden, anstatt die
öffentlich zugängliche. Der dir angegeben ist diejenige, die die Einheiten enthält
U Verzeichnis.

-M Erlauben Sie die Produktion von a confmagic.h Datei, um einige gut automatisch neu zuzuordnen
bekannte Symbole zu einer anderen Alternative, wie z bkopie() wird neu zugeordnet
transparent zu memcpy() wenn nicht verfügbar. Diese Option ist aktiviert
automatisch, wenn a confmagic.h Die Datei befindet sich im Verzeichnis der obersten Ebene.
Entfernen Sie einfach diese Datei, wenn Sie diese Option dauerhaft deaktivieren möchten.

-V Versionsnummer drucken und beenden.

TUTORIAL


Dieser (lange) Abschnitt ist eine Einführung in Metaconfig, in dem wir alles lernen werden
Grundlagen. Wenn Sie bereits wissen, wie man es benutzt Metaconfig, können Sie getrost zum nächsten springen
.

Überblick
Normalerweise haben Sie ein Quellpaket zum Kompilieren auf einer bestimmten Plattform
Um das Haupt-Makefile zu bearbeiten (vorausgesetzt, es gibt eines!), wählen Sie einen C-Compiler
Haben Sie die richtigen Bibliotheken und feuern Sie dann die ab um Befehl. Wenn das Paket angemessen ist
Gut geschrieben, es wird kompiliert (ohne dass eine Warnung eine Option wäre :-). An sich das Letzte
Angesichts der Vielfalt der heute verfügbaren UNIX-Plattformen ist dieser Satz eine echte Leistung
und die Vielfalt der Geschmacksrichtungen bedeutet, dass der Autor der Verpackung tief in die Materie eingestiegen ist
Es ist schwierig, anhand einiger üblicher Versuche, Vermutungen und Täuschungen die richtigen Entscheidungen zu treffen
rund um das System Includes und Types.

Trotz all seines Talents kann der Autor jedoch unmöglich wissen, dass irgendein System über ein System verfügt
fehlerhafter Systemaufruf oder dass in einer Systemstruktur ein ansonsten standardmäßiges Feld fehlt, oder
einfach, ob eine bestimmte Include-Datei existiert oder nicht. Und ich denke nicht an das Implizite
Annahmen, wie der von der zurückgegebene Typ malloc () Funktion oder das Vorhandensein der
umbenennen() Systemaufruf, um nur einige zu nennen. Aber dieses Wissen ist notwendig, um etwas Reales zu erreichen
Portabilität.

Jetzt wollen wir uns nicht selbst misshandeln. Die Nutzung dieser Informationen erfordert größere Fähigkeiten, ist aber möglich
führen zu portableren Programmen, da sie dann systemunabhängig geschrieben werden
und verlässt sich nur auf die Tatsache, dass eine Annahme in einem bestimmten System wahr oder falsch ist,
Jede Annahme hat nichts miteinander zu tun. Das heißt, wir sagen nicht: Wir sind auf einer
BSD-System oder wir sind auf einem USG-System. Das ist heutzutage sowieso zu unscharf. Nein, das wollen wir
Sag zum Quellcode: Dieses System hat das nicht umbenennen() Systemaufruf und malloc ()
gibt a zurück (Leere *) Wert.

Metaconfig ist ein Tool, mit dem Sie genau das tun können, mit dem zusätzlichen Vorteil, dass dies nicht der Fall ist
Wenn alles gut geht, muss das Makefile manuell bearbeitet werden. Durch Laufen Metaconfig, du erschaffst a
Shell-Skript mit dem Namen Einrichtung. Es wurden viele Anstrengungen in das Konfigurationsskript gesteckt
Interna, um sicherzustellen, dass es auf 99 % der derzeit verfügbaren Shells läuft
Schreiben. „Configure“ prüft das Zielsystem und stellt im Zweifelsfall Fragen
Sammeln Sie alle Antworten in einer einzigen Shell-Datei, die wiederum dazu verwendet werden kann
automatisch konfigurierte Makefiles und C-Include-Dateien generieren.

Für Ihre Shell-Skripte steht nur ein begrenzter (aber recht großer) Satz an Symbolen zur Verfügung
und C-Programme. Sie sind alle in der Glossardatei dokumentiert. Alles, was Sie tun müssen, ist zu lernen
Informieren Sie sich über sie und beginnen Sie, sie zur Behebung von Portabilitäts- und Konfigurationsproblemen zu verwenden. Dann,
durch Laufen Metaconfig, wird ein passendes Konfigurationsskript für Ihr Paket generiert.

Das Konfigurationsskript besteht aus mehreren Einheiten (mehr als 300), wobei jede Einheit
Verantwortlich für die Definition einer kleinen Anzahl von Shell- und/oder C-Symbolen. Einheiten werden zusammengebaut
in der letzten Phase zusammen, wobei das Abhängigkeitsdiagramm berücksichtigt wird (eine Einheit benötigt möglicherweise das Ergebnis).
mehrerer anderer Einheiten, die dann im Skript davor platziert werden).

Symbole
Symbole sind das Wichtigste in der Metaconfig Welt. Sie sind die Kleinsten
erkannte Entität, normalerweise ein Wort, und kann am Ende der Konfiguration einen Wert erhalten
Ausführung. Zum Beispiel das C-Präprozessorsymbol HAS_RENAME ist eine Metaconfig Symbol dafür
ist garantiert genau dann definiert, wenn die umbenennen() Systemaufruf vorhanden ist. Ebenfalls,
$ranlib Die Shell-Variable wird entweder auf „:“ oder „ranlib“ gesetzt, je nachdem, ob die
Ruf an die ranlib Zum Bestellen einer Bibliotheksdatei wird ein Programm benötigt. Wie das funktioniert, ist nicht
Im Moment ist es wichtig zu verstehen, dass diese Symbole gegeben sind life
(dh ein Wert) auf Einrichtung Ausführung.

Die Verwendung von Symbolen ist relativ einfach. In einer C-Quelldatei verwenden Sie einfach das Symbol
value, als Präprozessoranweisung (z. B. eine: #ifdef HAS_RENAME) oder, wenn das Symbol
value ist eine Zeichenfolge, direkt wie Sie ein Makro in C verwenden würden. Und in einer Shell-Datei oder einem
Makefile können Sie direkt auf ein Shell-Symbol verweisen.

Eigentlich lüge ich, denn das ist nicht ganz so magisch wie der vorherige Absatz
könnte klingen. In einer C-Datei müssen Sie die von „Configure“ erstellte Datei einbinden config.h Datei und
Sie müssen Ihr Shell-Skript oder Makefile in eine .SH-Datei einbinden und können auf die Shell verweisen
Symbol nur im Variablenersetzungsteil dieser .SH-Datei. Mehr dazu später.

Quelle Mappen
Symbole erscheinen möglicherweise nur in einer begrenzten Anzahl von Quelldateien, weil Metaconfig wird nur
Scannen Sie diese, wenn Sie nach bekannten Symbolen suchen, und versuchen Sie herauszufinden, welche Einheiten benötigt werden.
Sie können C-Symbole in C-Quelldateien verwenden, also Dateien mit a .c, .h, .y or .l Erweiterung und
Shell-Symbole werden nur in .SH-Dateien gesucht.

Um den Wert eines Symbols zu erhalten, muss eine C-Datei das Sonderzeichen enthalten config.h
Datei, die von erstellt wird Einrichtung wenn C-Symbole vorhanden sind. Und .SH-Dateien werden ausgeführt
über eine Shell, wodurch eine neue Datei erstellt wird. Im oberen Abschnitt der .SH-Datei befindet sich jedoch die
besondere config.sh Datei (auch erstellt durch Ausführen Einrichtung) ist bezogen und variabel
Es gelten Auswechslungen. Eigentlich, config.h wird durch Ausführen des erzeugt MetaconfigProduziert
config_h.SH Datei, wiederum unter Verwendung der Variablenersetzung. Also schauen wir uns das an
etwas genauer, da dies das Herzstück des Ganzen ist Konfiguration planen...

Variable Substitution
Es gibt ein Shell-Konstrukt namens hier Dokument Dadurch kann ein Befehl eine Eingabe entgegennehmen
im Skript selbst angegeben. Diese Eingabe wird von der Shell als Doppelklick interpretiert.
Abhängig von der Form des hier aufgeführten Dokuments handelt es sich um eine Zeichenfolge in Anführungszeichen oder eine Zeichenfolge in einfachen Anführungszeichen
Spezifikation.

Um ein Here-Dokument anzugeben, wird das Token „<<“ verwendet, gefolgt von einem einzelnen Bezeichner. Aus
Anschließend bilden die verbleibenden Skriptzeilen die Eingabe für den Befehl, bis hierher
Das Dokument befindet sich in einer eigenen Zeile. Shell-Ersetzung (einschließlich Shell-Variable
Ersetzungen) erfolgt, es sei denn, der Bezeichner ist in einfache Anführungszeichen gesetzt. Zum Beispiel:

var='first'
tar='Sekunde'
echo "--> erstes hier Dokument:"
Katze <
var='$var'
tar='$tar'
EOM
echo "--> zweites Dokument hier:"
Katze <<'EOM'
echo $var
echo $tar
EOM
echo „--> Ende.“

erzeugt, wenn es durch eine Shell ausgeführt wird:

--> erstes Dokument hier:
var='first'
tar='Sekunde'
-> zweites Dokument hier:
echo $var
echo $tar
-> Ende.

Der Inhalt des ersten Dokuments wird interpretiert, während der Inhalt des zweiten Dokuments unverändert ausgegeben wird.
Wie wir gleich sehen werden, sind beide in einem .SH-Skript nützlich.

Die richtigen .NS Scripts
Ein .SH-Skript wird normalerweise durch Ausführen von erstellt MakeSH Skript einer anderen vorhandenen Datei,
Transformieren Datei in ein Datei.SH. Nehmen wir ein einzelnes Beispiel. Hier ist ein kleines Skript
(Nennen wir es intsize), der eine einzelne Nachricht in der Größe ausgibt int Datentyp in C.
Leider ist der Wert darin fest verankert, und zwar:

#!/ Bin / sh
intsize='4'
echo „Auf diesem Rechner ist der int-Typ $intsize bytes“

Lass uns laufen makeSH darauf, indem Sie „makeSH intsize'. Wir bekommen eine Single intsize.SH Datei das
sieht aus wie das:

case $CONFIG in
'')
if test -f config.sh; dann TOP=.;
elif test -f ../config.sh; dann TOP=..;
elif test -f ../../config.sh; dann TOP=../ ..;
elif test -f ../../../config.sh; dann TOP=../../..;
elif test -f ../../../../config.sh; dann TOP=../../../..;
sonst
echo „Kann config.sh nicht finden.“; Ausgang 1
fi
. $TOP/config.sh
;;
esac
: Dies zwingt SH-Dateien dazu, das Ziel im selben Verzeichnis wie die SH-Datei zu erstellen.
: Damit make depend immer weiß, wo SH-Derivate zu finden sind.
Fall "$ 0" in
*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
esac
echo „Intsize wird extrahiert (mit Variablenersetzungen)“
: In diesem Abschnitt der Datei werden Variablenersetzungen vorgenommen.
: Verschieben Sie alles, was Konfigurations-Subs benötigt, von !NO!SUBS! Abschnitt zu !GROK!THIS!.
: Schützen Sie alle Dollarzeichen und Backticks, die nicht interpretiert werden sollen
: indem man einen Backslash voranstellt. Sie können diese Kommentare löschen.
$spitshell >intsize <
$startsh
!GROK!THIS!

: Im Folgenden benötigen Dollars und Backticks keinen zusätzlichen Backslash.
$spitshell >>intsize <<'!NO!SUBS!'
intsize='4'
echo „Auf diesem Rechner ist der int-Typ $intsize bytes“
!KEINE!ABONNEMENTS!
chmod 755 intsize
$eunicefix intsize

Der erste Teil dieses Skripts (im Häuser Anweisung) versucht, die zu finden config.sh
Datei, um sie als Quelle zu verwenden. Der $KONFIG Die Variable ist standardmäßig „false“, wenn „true“ ist
config.sh wurde bereits bezogen (was der Fall wäre, wenn diese Datei von ausgeführt würde).
. Einrichtung selbst, aber lassen Sie uns das Problem hier nicht verwechseln).

Sobald die config.sh Die Datei enthält Quellen und alle Shell-Symbole, die von definiert wurden Einrichtung sind
Satz. Wir wissen, dass eine zweite Case-Anweisung erreicht werden soll, mit der das aktuelle Verzeichnis geändert werden sollte
Pfad verwendet werden, um zu diesem Programm zu gelangen (z. B. wenn wir sagten:sh ../scripts/intsize.SH', Wir
würde zuerst laufen 'cd ../Skripte' vor dem Fortfahren). Wenn Sie das nicht verstehen, tun Sie es nicht
sorge dich darum.

Hier kommt das Interessante. Dieses Skript verwendet die $Spuckschale variabel, und das ist es nicht
etwas, worüber wir ... schon wissen. Wenn Sie die Glossardatei durchsehen, werden Sie das sehen
Dies ist eine Variable, die bekannt ist Metaconfig. Wenn Sie diese Datei zu einem Teil Ihrer Distribution machen
(indem Sie es in die Datei MANIFEST.new aufnehmen, darauf kommen wir später zurück) und ausführen
Metaconfig, dann ist die Einrichtung Das Skript ermittelt einen geeigneten Wert für diese Variable
und es wird eingesetzt config.sh. Gleiches gilt für $startsh und das Geheimnisvolle $eunicefix at
das Ende. Auf einem vernünftigen System ist der relevante Teil von config.sh würde so aussehen:

spitshell='cat'
starteth='#!/ Bin / sh'
eunicefix=':'

Ah! Wir kommen dorthin. Jetzt kommt es mir bekannt vor. Wir stehen vor einer Single Katze Befehl dessen
Die Eingabe stammt aus einem hier variableninterpolierten Dokument, auf dessen Ausgabe umgeleitet wird
intsize. Der Wert wird der von sein $startsh, also '#!/ Bin / sh'. Bisher gut.

Dann erreichen wir hier die zweite Dokumenterweiterung, um den Rest des Skripts zu erhalten. Das
Dabei wird das Dokumentsymbol „hier“ in einfache Anführungszeichen gesetzt, damit der Inhalt angezeigt wird
wörtlich dem beigefügt intsize Datei. Also, indem Sie 'sh intsize.SH', wir bekommen das
folgende Ausgabe:

Intsize extrahieren (mit Variablenersetzungen)

und wenn wir uns die erzeugte intsize-Datei ansehen, sehen wir:

#!/ Bin / sh
intsize='4'
echo „Auf diesem Rechner ist der int-Typ $intsize bytes“

Das ist genau das, was wir am Anfang hatten. Bisher handelt es sich um ein Verfahren ohne Operation ...
Aber wie wunderbar! Es ist so (reiner Zufall, glauben Sie mir!), dass Metaconfig kennt
$intsize Muschelsymbol. Durch Verschieben der Initialisierung von intsize auf die Variable-
interpolierten Bereich des .SH-Skripts und Initialisieren mit dem Einrichtung-berechneter Wert,
und Entfernen der jetzt nutzlosen Kommentare, die von hinzugefügt wurden makeSH, wir bekommen:

case $CONFIG in
'')
if test -f config.sh; dann TOP=.;
elif test -f ../config.sh; dann TOP=..;
elif test -f ../../config.sh; dann TOP=../ ..;
elif test -f ../../../config.sh; dann TOP=../../..;
elif test -f ../../../../config.sh; dann TOP=../../../..;
sonst
echo „Kann config.sh nicht finden.“; Ausgang 1
fi
. $TOP/config.sh
;;
esac
Fall "$ 0" in
*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
esac
echo „Intsize wird extrahiert (mit Variablenersetzungen)“
$spitshell >intsize <
$startsh
intsize='$intsize'
!GROK!THIS!

$spitshell >>intsize <<'!NO!SUBS!'
echo „Auf diesem Rechner ist der int-Typ $intsize bytes“
!KEINE!ABONNEMENTS!
chmod 755 intsize
$eunicefix intsize

Wenn Sie dieses Skript über eine Shell ausführen, wird natürlich erneut dasselbe Skript ausgegeben. Aber falls
wir rennen Einrichtung auf einer Maschine, wo ein int wird als 64-Bit-Größe gespeichert, config.sh werden wir
kompensieren intsize auf 8 und die intsize Das Skript trägt den richtigen Wert und gibt Folgendes aus:

Auf diesem Computer beträgt der int-Typ 8 Byte

welches ist richtig. Glückwunsch! Wir haben gerade ein Shell-Skript konfiguriert!!

Produzieren config.h
Wir können uns nun den Weg ansehen config.h wird daraus hergestellt config_h.SH. Wir wissen das
Laufen Einrichtung produziert eine config.sh Skript (wie genau dies geschieht, ist nicht unbedingt erforderlich
Dies ist hier relevant, aber für die Neugierigen ist es eine weitere Dokumentersetzung hier
Einrichtung selbst). Der config_h.SH selbst wird von gebaut Metaconfig gleichzeitig
Einrichtung vorausgesetzt, Sie verwenden in Ihren Quellen mindestens ein C-Symbol.

Werfen wir einen Blick auf einige Zufällige config_h.SH Datei, um zu sehen, was wirklich passiert:

case $CONFIG in
'')
if test -f config.sh; dann TOP=.;
elif test -f ../config.sh; dann TOP=..;
elif test -f ../../config.sh; dann TOP=../ ..;
elif test -f ../../../config.sh; dann TOP=../../..;
elif test -f ../../../../config.sh; dann TOP=../../../..;
sonst
echo „Kann config.sh nicht finden.“; Ausgang 1
fi
. $TOP/config.sh
;;
esac
Fall "$ 0" in
*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
esac
echo „Config.h wird extrahiert (mit Variablenersetzungen)“
sed < config.h -e 's!^#undef!/define!' -e 's!^#un-def!#undef!'
/*
* Diese Datei wurde durch Ausführen des Skripts config_h.SH erstellt
* erhält seine Werte von config.sh, das im Allgemeinen von erstellt wird
* Konfigurieren ausführen.
*
* Bei Bedarf können Sie dies jederzeit ändern. Beachten Sie jedoch,
* dass durch die erneute Ausführung von config.h.SH alle von Ihnen vorgenommenen Änderungen gelöscht werden.
* Für eine dauerhaftere Änderung bearbeiten Sie config.sh und führen Sie config.h.SH erneut aus.
*/

/* Konfigurationszeit: $cf_time
* Konfiguriert von: $cf_by
* Zielsystem: $myuname
*/

#ifndef _config_h_
#define _config_h_

/* bcopy:
* Dieses Symbol wird memcpy zugeordnet, wenn dies bei der bcopy()-Routine nicht der Fall ist
* zum Kopieren von Zeichenfolgen verfügbar.
*/
/* HAS_BCOPY:
* Dieses Symbol ist definiert, wenn die bcopy()-Routine verfügbar ist
* Speicherblöcke kopieren. Sie sollten dieses Symbol unten nicht verwenden
* normale Umstände und verwenden Sie stattdessen direkt bcopy(), was
* wird memcpy() zugeordnet, wenn bcopy nicht verfügbar ist.
*/
#$d_bcopy HAS_BCOPY /**/
#ifndef HAS_BCOPY
#ifdef bcopy
#un-def bcopy
#endif
#define bcopy(s,d,l) memcpy((d),(s),(l)) /* zugeordnet zu memcpy */
#endif

/* HAS_DUP2:
* Dieses Symbol zeigt, sofern definiert, an, dass die Routine dup2 vorhanden ist
* verfügbar zum Duplizieren von Dateideskriptoren.
*/
#$d_dup2 HAS_DUP2 /**/

/* I_STRING:
* Wenn dieses Symbol definiert ist, zeigt es dem C-Programm an, dass es dies tun soll
* enthalten (USG-Systeme) statt (BSD-Systeme).
*/
#$i_string I_STRING /**/

#endif
!GROK!THIS!

Oben in der Datei erkennen wir das Standard-.SH-Konstrukt, das wir bereits haben
im Detail studiert. Als nächstes folgt die Extraktion der Datei selbst über ein Here-Dokument mit
variable Substitutionen. Allerdings verwenden wir hier kein Plain Katze aber ein Durst stattdessen, da
Wir müssen spontan noch einige weitere Bearbeitungen vornehmen. Wir werden später sehen, warum, also vergessen wir es
gerade darüber.

Wir erreichen nun den führenden Kommentar und die Datei wird mit der Konfigurationszeit getaggt
Zielsystem usw. (die Variablen, die von der Quelle stammen config.sh Datei gewesen
eingerichtet von Einrichtung). Auf diesen Kommentar-Header folgt ein zu schützender „#ifndef“-Schutz
gegen mehrfache Einbindung dieser Datei. Dann kommt das Herzstück der Datei...

Es hilft, das zu wissen $d_* und $i_* Variablen werden entweder auf ' gesetztdefinieren' oder 'undef' durch
Einrichtung, abhängig davon, ob eine Funktion oder eine Include-Datei auf dem System vorhanden ist oder
nicht. Das bedeutet:

#$d_bcopy HAS_BCOPY /**/

Die Zeile wird erweitert auf:

#define HAS_BCOPY /**/

wenn die Variable $d_bcopy auf „define“ gesetzt ist oder:

#undef HAS_BCOPY /**/

wenn $d_bcopy auf „undef“ gesetzt war, weil die Funktion nicht vorhanden war. Das ist jedoch nicht der Fall
was steht da drin config.h Datei wegen der Durst Filter haben wir bereits gesehen,
was die zweite Form umwandeln wird in:

/*#define HAS_BCOPY /**/

Das ist ein praktisches Formular für die spätere Bearbeitung config.h weil Sie nur die entfernen müssen
führendes '/*', wenn Sie überschreiben möchten Einrichtung's Wahl. Ebenso können Sie eine einzelne hinzufügen
„/*“ am Anfang einer „#define“-Zeile, um die Definition eines bestimmten Symbols zu vermeiden.
Aus diesem Grund wird jede Symboldefinition durch ein abschließendes „/**/“ geschützt, um das führende zu schließen
Kommentar geöffnet durch '/*' (Kommentare sind in C nicht verschachtelt).

Nun ist es nett, '#undef' in '/*#define' umzuwandeln, aber wenn wir tatsächlich ein schreiben wollen
'#undef', wir stecken fest... es sei denn, wir schreiben es als '#un-def' und lassen Durst Korrigieren Sie das auf „#undef“.
während der Produktion config.h, was hier tatsächlich getan wird.

Die gleiche Argumentation gilt für diese beiden Zeilen:

#$d_dup2 HAS_DUP2 /**/
#$i_string I_STRING /**/

und vorausgesetzt config.sh definiert:

d_dup2='definieren'
i_string='undef'

wir kommen ins Produzierte config.h:

#define HAS_DUP2 /**/
/*#define I_STRING /**/

Klar wie fließendes Wasser? Gut!

Nun sollte klar sein, dass durch das Einschließen config.h In allen Ihren C-Quelldateien gelangen Sie zu
weiß was Einrichtung hat auf deinem System geraten. Tatsächlich sind Sie es, wenn Sie diese Symbole verwenden
Schreiben von konfiguriertem C-Code, seitdem Metaconfig werden wissen, dass Sie diese Symbole brauchen und werden
ein passendes generieren config_h.SH Datei sowie den gesamten notwendigen Code hinein Einrichtung zu
Berechnen Sie einen geeigneten Wert für sie (indem Sie den zugehörigen Shell-Variablen Werte zuweisen).

Laufen Metaconfig
Konzentrieren wir uns auf die Metaconfig Programm für eine Weile, um zu verstehen, wie es seine Einheiten verwendet und
Ihren Quellcode, um alle benötigten Konfigurationsdateien zu erstellen. Wenn Sie beabsichtigen, neu zu schreiben
Einheiten, sollten Sie das gesamte Schema gut verstehen.

Wenn keine MANIFEST.new-Datei vorhanden ist, Metaconfig Ich werde stattdessen versuchen, die MANIFEST-Datei zu verwenden.
zur Bequemlichkeit. Überall dort, wo MANIFEST.new erwähnt wird, kann es als MANIFEST verstanden werden
vorausgesetzt, dass sich im Stammverzeichnis Ihres Pakets keine MANIFEST.new-Datei befindet.

Vorausgesetzt, Ihre MANIFEST.new-Datei ist ordnungsgemäß eingerichtet und listet alle gewünschten Quelldateien auf
konfigurieren und ausgeführt haben Verpackung in Ihrem Stammquellverzeichnis, um eine zu erstellen
.Paket Datei, Sie können ausführen Metaconfig und Sie erhalten Folgendes:

$ metaconfig
Einheiten orten...
Abhängigkeitslisten aus 312 Einheiten extrahieren...
Extrahieren von Dateinamen (*.[chyl] und *.SH) aus MANIFEST.new...
Erstellen einer Fahndungsdatei...
.[chyl]-Dateien werden nach Symbolen durchsucht...
.SH-Dateien werden nach Symbolen durchsucht...
Berechnung des optimalen Abhängigkeitsgraphen...
Private Make-Datei wird erstellt...
Beladbare Einheiten ermitteln...
Make-Datei wird aktualisiert...
Bestimmen der richtigen Reihenfolge für die Einheiten...
Konfigurieren wird erstellt...
Fertig.

Die erste Phase sucht nach allen Unit-Dateien (die mit .U enden) im öffentlichen Verzeichnis
Zuerst, dann in Ihrem privaten. Wenn Sie eine öffentliche Datei in Ihr privates U-Verzeichnis kopieren
(dh ein Verzeichnis mit dem Namen U auf der obersten Ebene Ihres Pakets), überschreibt es die Öffentlichkeit
Ausführung. Sobald eine Liste aller verfügbaren Einheiten vorliegt, analysiert es diese und extrahiert alle
die ?MAKE:-Zeilen, um mehr über die Abhängigkeiten und die bekannten Shell-Symbole zu erfahren. Es auch
konzentriert sich auf die ?H:-Zeilen, um mehr über die C-Symbole und die erforderlichen Shell-Symbole zu erfahren
berechnet, um einen richtigen Wert für dieses C-Symbol zu erhalten (wir haben also eine andere Ebene von Abhängigkeiten).
Hier).

Als nächstes werden die richtigen Dateinamen aus den MANIFEST.new-Dateien extrahiert und a Gesucht Datei ist
gebaut: Diese Datei listet alle C-Symbole und Shell-Symbole auf, die für dieses Paket benötigt werden. Wir
Scannen Sie zunächst die C-Typ-Dateien nach C-Symbolen und geben Sie dann die Abhängigkeiten an diese weiter
zugehörige Muschelsymbole (gesammelt aus ?H:-Linien). Als nächstes werden .SH-Dateien gescannt und schließlich
Alle Muschelsymbole sind bekannt.

Ein temporäres Makefile wird erstellt und metaconfig versucht dies um alle Muschelsymbole zu sehen
welche Befehle (aufgelistet in der zweiten ?MAKE:-Zeilen) ausgeführt werden und welche Einheiten es sind
wirklich nötig. Optionale Einheiten, die sonst nicht benötigt werden, werden entfernt und ein zweites Makefile erstellt
generiert. Dieses Mal kennen wir alle Einheiten und ihre jeweiligen Befehle, optional
Einheiten wurden entfernt und Standardwerte für ihre Schalensymbole berechnet. Der
Einrichtung Skript kann dann zusammen mit generiert werden config_h.SH. Wir sind fertig.

Conventions
Damit der gesamte Prozess funktioniert, müssen die richtigen Konventionen eingehalten werden. Es gibt einen Fall
Konvention für Einheiten und eine Konvention zur Benennung von Variablen.

Bei allen Einheiten sollte der Anfangsbuchstabe klein geschrieben werden, es sei denn, es handelt sich um Spezialeinheiten. Von
speziell, wir meinen, dass sie nicht wirklich neue Shell-Variablen definieren, die von verwendet werden können
Benutzer in seinen .SH-Dateien, sondern Einheiten, die Skripte oder Shell-Variablen erstellen, die dazu bestimmt sind
intern verwendet werden Einrichtung Skript. Typische Beispiele sind die Init.U Datei, die ist
die Hauptvariableninitialisierung, oder Myread.U was produziert die myread Skript fast verwendet
überall in Einrichtung wann dem Benutzer eine Frage gestellt werden soll.

Nicht-spezielle Einheiten werden dann in zwei verschiedene Gruppen unterteilt: Einheiten, die Variablen definieren
einem C-Symbol und Einheiten zugeordnet, die eigene Shell-Variablen definieren. Die erste Gruppe
ist weiter in Variablen unterteilt, die sich auf Include-Dateien beziehen (ihre Namen beginnen mit i_) und
Variablen, die sich auf andere Definitionen beziehen (Name beginnt mit d_). Die zweite Gruppe hat
Namen, die zum Beispiel für sich selbst stehen cc.U definiert die $cc Shell-Variable, deren Wert ist
der zu verwendende C-Compiler.

Spezialeinheiten reservieren sich manchmal eine vordefinierte Variable und geben „Ergebnisse“ zurück.
in anderen bekannten Variablen. Zum Beispiel die myread Skript erstellt von Myread.U
erwartet die Eingabeaufforderung $rp, die Standardantwort in $dflt und fügt die Benutzerantwort ein $ans.
Dies ist in dieser Handbuchseite nicht dokumentiert: Sie müssen sich das Gerät selbst ansehen
verstehen, welche Variablen verwendet werden und wie die Einheit verwendet werden soll.

Die richtigen Das Glossar
Die Glossardatei wird automatisch von erstellt makegloss Skript, das die extrahiert
Informationen aus den Zeilen ?S:, ?C: und ?MAKE: und formatiert sie alphabetisch um
sortiertes Glossar. Es ist wichtig, das Glossar zu lesen, um zu wissen, um welche Symbole es sich handelt
nutzen dürfen. Das Glossar erklärt Ihnen jedoch nicht, wie Sie sie verwenden. Normalerweise ist das so
wie du willst.

Eines Tages werden Sie wahrscheinlich Ihre eigenen Einheiten schreiben und genug darüber wissen Metaconfig
um dies schnell und effizient zu tun. Vergessen Sie jedoch nie, Ihre Arbeit ordnungsgemäß zu dokumentieren
die Zeilen ?S: und ?C:, sonst können andere Personen es nicht wiederverwenden. Denken Sie daran
Damals hatten Sie als Einstieg nur das Glossar und diese Handbuchseite.

Zusammenfassung
Jetzt, wo du das weißt Metaconfig Grundlagen sollten Sie lesen BESCHREIBUNG Abschnitt, dann
Springe zum REFERENCE Abschnitt, um mehr über alle wichtigen Details zu erfahren, wie zum Beispiel die erlaubten
Syntax für Einheitensteuerzeilen (Zeilen, die mit einem „?“ beginnen) oder die einzelnen MAKE-Befehle
Sie dürfen verwenden.

REFERENCE


Dieser Abschnitt dokumentiert die Interna von Metaconfig, im Grunde die Einheitensyntax, das Besondere
Einheiten, die Sie kennen sollten, und die Hinweisdateien.

Allgemeines Einheit Syntax
Eine Metaconfig-Einheit ist in zwei verschiedene Teile unterteilt. Der Kopfabschnitt (Zeilen beginnend mit
mit '?') und einen Shell-Abschnitt (Code, der in die Datei eingefügt werden soll). Einrichtung Skript). Es ist
Es ist möglich, „?X:“-Kommentare an einer beliebigen Stelle innerhalb der Einheit hinzuzufügen, aber die anderen „?“ Linien (auch
namens Smartgeräte App Linien) haben eine strenge Bestellpolitik.

Wenn eine Kontrollzeile zu lang ist, ist es möglich, eine Fortsetzung zu verwenden, indem man das Finale maskiert
Neue Zeile mit einem Backslash einfügen und mit der nächsten Zeile fortfahren (die dann eingerückt werden sollte).
durch Leerzeichen oder Tabulatoren).

Im Folgenden finden Sie eine formale Beschreibung der einzelnen Steuerleitungen. Außer angegeben
andernfalls ist die Reihenfolge dieser Präsentation die Reihenfolge, die innerhalb der Einheit verwendet werden soll.

?RCS: kostenlos Text
Wird für RCS-Kommentare oben auf dem Gerät verwendet.

?X: jedem Text
Allgemeine Kommentare. Kann überall in der Einheit erscheinen, muss aber im Blocksatz stehen.
Für RCS-Kommentare verwenden Sie bitte das Kommentarformular „?RCS:“.

?MACHEN:Symbol Liste: Abhängigkeit Liste [+optional]
Dies ist die erste Abhängigkeitslinie. Der erste Symbol Liste sollte alle Symbole auflisten
wird von dieser Einheit erstellt (d. h. deren Wert wird vom Shell-Abschnitt der Einheit berechnet).
Symbole sollten durch Leerzeichen getrennt werden. Wenn ein definiertes Symbol nur für den internen Gebrauch bestimmt ist und
sollte nicht im generierten erscheinen config.sh Datei, dann sollte ihr ein vorangestellt werden
'+' (nicht zu verwechseln mit den nachfolgend definierten optionalen Abhängigkeiten). Der Zweite
Ein Teil der Liste (nach dem mittleren „:“) ist die Einheitenabhängigkeit. Es sollte alles auflisten
die benötigten Spezialeinheiten sowie alle von der Shell verwendeten Symbole
Implementierung. Wenn ein Symbol benötigt wird, sein Konfigurationswert jedoch nicht kritisch ist, wird es
kann ein „+“ vorangestellt werden. In diesem Fall spricht man von einer bedingten Abhängigkeit: its
Die entsprechende Einheit wird nur dann geladen, wenn das Symbol tatsächlich anders ist
gesucht; andernfalls wird der Standardwert verwendet.

?MACHEN:Tab Befehl
Den anfänglichen Abhängigkeitszeilen können eine oder mehrere Befehlszeilen folgen. Diese
Befehle werden ausgeführt, wenn das Gerät sie laden soll Einrichtung. Sehen
Weitere Informationen finden Sie im Abschnitt über Make-Befehle. Beachten Sie, dass die führende Tab
Zeichen ist vor dem erforderlich Befehl.

?Y:Layout
Deklarieren Sie eine Layoutanweisung für diese Einheit. Diese Anweisung kann eine der Zeichenfolgen sein
Top, Standard or Boden (Die Groß-/Kleinschreibung spielt keine Rolle, empfohlen wird die Schreibweise
in Großbuchstaben geschrieben). Wenn weggelassen, Standard wird angenommen.

Diese Anweisung ist nur erforderlich, wenn Sie eine Einheit oben oder unten erzwingen möchten
des Erzeugten Einrichtung Skript, sofern die Abhängigkeiten der Einheiten dies zulassen. Wichtig
Fragen können somit zu Beginn forciert werden. Innerhalb derselben Layoutklasse, Einheiten
werden alphabetisch sortiert, mit zwei Sonderfällen für d_*- und i_*-Einheiten, erzwungen
jeweils an der Spitze und am Ende ihrer Klasse (diese sollten jedoch zu der gehören
Standardklasse).

Sie erzwingen an der Spitze eine Einheit, deren Abhängigkeiten dies von allen anderen Einheiten erfordern
Wenn man ihr vorausgeht, erreicht man nichts Interessantes. Daher sollte diese Richtlinie wirklich
kann verwendet werden, um die Priorität einiger interaktiver Einheiten zu erhöhen, die nicht von vielen abhängig sind
andere für den Benutzer sichtbare Symbole, z. B. pfadbezogene Fragen.

?S:Symbolname [(überholt Symbol Liste)]:
Führt ein Muschelsymbol ein. Diese erste Zeile benennt das Symbol, optional gefolgt von einem
Liste zwischen Klammern und Angabe des veralteten Äquivalents. Die veraltet
Symbole werden auf das Neue umgebildet Symbolname wenn die -o Option gegeben ist
Metaconfig.

?S:jedem Text, für Glossar
Im Grunde ein Kommentar, der das Shell-Symbol beschreibt, das von extrahiert wird makegloss
in die Glossardatei eingefügt.

?S:. Schließt den Shell-Symbolkommentar.

?C:Symbolname [~ alias] [(überholt Symbol Liste)]:
Führt ein neues C-Symbol ein. Der alias Name ist der Name, unter dem das C-Symbol angezeigt wird
kontrolliert werden, d. h. wenn die alias Symbol gesucht wird, wird das C-Symbol geschrieben
der config_h.SH Datei. Normalerweise lautet der Alias ​​nur „%<“ (steht für den Namen der Einheit).
und es gibt auch eine ?W:-Zeile, die ein C-Symbol dem zuordnet alias. Auch die relevanten Teile
der ?H:-Zeilen sind explizit durch eine „?%<“-Bedingung geschützt. Siehe das Symbol
Weitere Informationen finden Sie im Aliasing-Absatz. Der Rest der Zeile ist optional
überholt Symbol Liste, die alte Äquivalente für die neuen auflistet Symbolname.

?C:jedem Text, für Glossar und config_h.SH
Im Grunde ein Kommentar, der das C-Symbol beschreibt, das von extrahiert wird makegloss
in die Glossardatei und von Metaconfig in die config_h.SH Datei, wenn das Symbol ist
gesucht (oder ob sein Alias ​​gesucht wird, wenn Symbol-Aliasing verwendet wird).

?C:. Schließt den Kommentar zum C-Symbol.

?H:?Symbol:config_h.SH Zeug
Dies ist die allgemeine Anfrage zur Aufnahme in config_h.SH. Die Zeile wird nur geschrieben, wenn
die Bewachung Symbol ist wirklich gewollt. Diese allgemeine Form wird für das C-Symbol benötigt
Aliasing wurde verwendet. Andernfalls, wenn Sie eines der anderen „Standard“-Formulare verwenden, ist das
Die Bewachung erfolgt automatisch durch Metaconfig sich.

?H:#$d_var VAR "$ var"
Definiert bedingt die VAR C-Symbol in $ var wann ist auf ' gesetztdefinieren'. Impliziert a
'?VAR:' Bewachungsbedingung und Metaconfig automatisch verlinkt VAR zu seinen zwei Schalen
variable Abhängigkeiten (d. h. beides). $d_var und $ var wird als gekennzeichnet wollte if VAR is
wird in C-Quellen verwendet).

?H:#define VAR [optional Text]
Definiert immer die VAR C-Symbol auf einen bestimmten Wert. Impliziert ein '?VAR:' Schutzbedingung.
Zur Unit selbst wird automatisch eine Shell-Abhängigkeit hergestellt.

?H:#define VAR(x,y,z) $ var
Definiert immer das Makro VAR der Wert der $ var Variable. Es liegt an der
Einheit zu gewährleisten $ var hat einen sinnvollen Wert. Eine automatische Abhängigkeit zwischen dem C
Makro VAR und die Shell-Variable wird eingerichtet und die gesamte Zeile wird durch eine geschützt
implizit '?VAR:'.

?H:#$d_var VAR
Bedingt definiert VAR if $d_var ist eingestellt auf 'definieren'. Impliziert ein '?VAR:' bewachen
Zustand. Es wird eine automatische Shell-Abhängigkeit generiert $d_war.

?H:#define VAR "$ var"
Weist dem einen konfigurierten Wert zu VAR C-Symbol. Impliziert ein '?VAR:' Schutzbedingung.
Zum Verknüpfen wird eine automatische Shell-Abhängigkeit generiert VAR und $ var.

?H:. Schließt die config_h.SH Aufnahmewünsche.

?M:C Symbol: C Abhängigkeiten
Führt eine magische Definition des C-Symbols ein, z confmagic.hund definiert die
Schutzsymbol für die verbleibenden ?M:-Definitionen. Diese Zeile impliziert stillschweigend
'?W:%<:C Symbol', d. h. das Gerät wird in die Konfiguration geladen, wenn das C-Symbol erscheint
innerhalb der C-Quellen, unabhängig davon, ob Magie verwendet wird oder nicht. Die C-Abhängigkeiten sind aktiviert
wenn Magie eingesetzt wird, um ihre Definition zu erzwingen config_h.SH. jedoch, wenn
Magie ist nicht verwendet, aber das C-Symbol erscheint in der Quelle ohne das erforderliche C
Abhängigkeiten werden Sie jedes Mal gewarnt, wenn die Wanted-Datei erstellt wird, da dies möglicherweise der Fall ist
ein Portabilitätsproblem (und auch, weil das Gerät bedingungslos geladen werden kann).
Konfigurieren Sie es immer dann, wenn das C-Symbol verwendet wird, unabhängig von den anderen ?C:-Zeilen aus dem
Einheit).

?M:cpp defs
Definiert die magische CPP-Zuordnung, die bei Bedarf in confmagic.h eingeführt werden soll
Symbol verwendet wird. Es gibt ein implizites '?sym' wo bewachen sym ist der Symbolname
definiert durch die führende ?M:-Zeile.

?M:. Schließt die confmagic.h Aufnahmeantrag.

?W:Schale Symbol Liste:C Symbol Liste
Verknüpft das Schicksal der Muschelsymbole mit dem der C-Symbole: Falls eines der C
Wenn die aufgelisteten Symbole gesucht werden, werden alle Shell-Symbole als gesucht markiert. Nützlich für
Erzwingen Sie die Aufnahme einer Einheit (Shell-Symbolliste auf „%<“ gesetzt), wenn einige C
Symbol wird erkannt. Die Shell-Symbolliste kann leer gelassen werden, um von der Seite zu profitieren
Auswirkung der Position des C-Symbols innerhalb des integrierten Präprozessors (Symbol ist definiert
für diesen Vorprozessor, falls er sich in der Quelle befindet). Nach Mustern mit Leerzeichen suchen
darin müssen Sie die C-Symbole in einfache Anführungszeichen setzen, wie in „struct
Zeitzone'.

?V:read-only Symbole:lesen Schreiben Symbole
Dieser Kurs ist ein Metalint Hinweis und sollte nur in Spezialeinheiten verwendet werden, die Granaten exportieren
Variablen. Die Variablen vor dem mittleren „:“ werden schreibgeschützt exportiert (Änderung).
gibt eine Warnung aus), während andere Symbole frei gelesen und geändert werden können.

?F:Dateien erstellt
Diese Zeile dient zwei Zwecken: Sie ist ein Metalint Hinweis und auch ein Platzhalter für
Zukunft jmachen verwenden. Es muss drei Arten von Dateien auflisten: die temporären
die für einen Test erstellt wurden, die privaten UU-Dateien, die im UU-Verzeichnis für später erstellt wurden
Durchsicht und die öffentlichen, die im Stammverzeichnis des Pakets verbleiben. Vorübergehend
Dateien müssen mit einem vorangestellten „!“ aufgeführt werden. Zeichen (bedeutet „Nein! Sie werden nicht wiederverwendet
später!"), sollte privaten UU-Dateien ein „./“ vorangestellt werden (Bedeutung: um sie beispielsweise zu verwenden).
./DateiUnd nicht nur Datei), und öffentliche sollten so benannt werden, wie sie sind.

?T:Schale Provisorien
Ein anderer Metalint Hinweis. In dieser Zeile werden alle als temporäre Variablen verwendeten Shell-Variablen aufgelistet
innerhalb des Gehäusebereichs dieser Einheit.

?D:Symbol='Wert'
Initialisierungswert für Symbole, die als bedingte Abhängigkeiten verwendet werden. Wenn keine ?D:-Zeile vorhanden ist
gefunden, wird stattdessen ein Nullwert verwendet. Der Metalint Das Programm warnt Sie, wenn a
Das Symbol wird mindestens einmal als bedingte Abhängigkeit verwendet und verfügt über kein eigenes Symbol
?D: Initialisierung. Es empfiehlt sich, diese Zeilen auch für eine Null hinzuzufügen
Initialisierung, da sie die möglicherweise optionale Natur eines Symbols betont.

?Ö:jedem Nachricht U wollen
Diese Richtlinie weist darauf hin, dass diese Einheit insgesamt veraltet ist. Wann immer die Verwendung von irgendwelchen
seiner Symbole gemacht wird (oder indirekt über Abhängigkeiten genutzt wird), wird die Meldung ausgegeben
den Bildschirm (auf stderr). Sie können eine oder mehrere Zeilen einfügen. In diesem Fall wird jede Zeile angezeigt
in der richtigen Reihenfolge gedruckt werden.

?FUSSEL:Metalint Hinweise
Siehe die Metalint Auf der Handbuchseite finden Sie eine Erläuterung der möglichen Hinweise
benutzt.

?DRIN:Initialisierung Code
Der in dieser Zeile angegebene Initialisierungscode wird oben in geladen
Einrichtung Skript, sofern die Einheit benötigt wird.

C Symbol Aliasing
Manchmal kann man sich nicht darauf verlassen Metaconfig's eigene Standardauswahl für config_h.SH
Kommentare und C-Symboldefinition. Hier kommt Aliasing ins Spiel. Da ist es eher
schwierig zu erklären ist, werden wir uns ein Beispiel ansehen, um den zugrunde liegenden Mechanismus zu verstehen.

Die d_const.U-Einheit versucht festzustellen, ob Ihr C-Compiler davon weiß oder nicht const
Stichwort. Wenn dies nicht der Fall ist, möchten wir dieses Schlüsselwort einer Nullzeichenfolge zuordnen, damit das
Programm kompilieren. Darüber hinaus möchten wir den Test automatisch auslösen, wenn der const Wort
wird eingesetzt.

Hier sind die relevanten Teile der d_const.U-Einheit:

?MAKE:d_const: cat cc ccflags Setvar
?MAKE: -pick add $@ %
?S:d_const:
?S: Diese Variable definiert bedingt das HASCONST-Symbol, das
?S: zeigt dem C-Programm an, dass dieser C-Compiler davon weiß
?S: const-Typ.
?S:.
?C:HASCONST ~ %<:
?C: Dieses Symbol zeigt, falls definiert, an, dass dieser C-Compiler davon weiß
?C: der const-Typ. Es besteht keine Notwendigkeit, dieses Symbol tatsächlich zu testen
?C: innerhalb Ihrer Programme. Die bloße Verwendung des Schlüsselworts „const“ wird
?C: löst die notwendigen Tests aus.
?C:.
?H:?%<:#$d_const HASCONST /**/
?H:?%<:#ifndef HASCONST
?H:?%<:#define const
?H:?%<:#endif
?H:.
?W:%<:const
?LINT:setze d_const
?LINT:bekannte Konstante
: Nach Schlüsselwort const suchen
Echo " "
echo 'Überprüfe, ob dein C-Compiler „const“ kennt...‘ >&4
/bin/kat >const.c <<'EOCP'
Main()
{
const char *foo;
}
EOCP
if $cc -c $ccflags const.c >/dev/null 2>&1 ; Dann
val="$define"
echo „Ja, das tut es.“
sonst
val="$undef"
echo „Nein, das tut es nicht.“
fi
setze d_const
eval $setvar

Zuerst bemerken wir die Verwendung einer ?W:-Zeile, die im Grunde sagt: „Diese Einheit wird gesucht, wenn die.“
const Schlüsselwort wird in einer C-Datei verwendet.". Um eine bedingte Neuzuordnung vorzunehmen const auf eine Null
String in config.hIch habe mich für eine bedingte Definition entschieden HASCONST $d_const.

Dies wirft jedoch ein Problem auf, da die HASCONST Das Symbol wird im nicht verwendet
Quellen, nur die const Token ist. Und die ?H:-Linie definiert HASCONST ist implizit
bewacht durch „?HASCONST“. Daher müssen wir die explizite Einschränkung „?%<“ hinzufügen, um dies zu erkennen
Metaconfig dass diese Zeilen enthalten sein sollten config_h.SH wann immer das Symbol „%<“ angezeigt wird
wird gesucht (%< bezieht sich hier auf den Namen der Einheit d_const).

Das ist fast perfekt, denn die ?W:-Linie wird es wollen d_const sobald const verwendet wird, dann
Die ?H:-Zeilen werden in die eingefügt config_h.SH Datei. Der Leitkommentar (?C:
Linien) angeschlossen HASCONST wird selbst auch über bewacht HASCONST, dh es hat eine implizite
'?HASCONST'-Einschränkung. Daher die Notwendigkeit Aliasing HASCONST Symbol zu '%<'.

Der restliche Teil der Einheit (der Schalenteil) ist wirklich unkompliziert. Es ist einfach
versucht, ein Beispiel-C-Programm mit zu kompilieren const Stichwort. Wenn es kann, dann wird es es tun
definieren $d_const über das $setvar Funktion (definiert durch die Setvar.U Einheit). Siehe den Absatz
Weitere Informationen finden Sie unter Spezialeinheiten.

Marke Befehle
In der ?MAKE:-Befehlszeile können Sie einen Shell-Befehl schreiben, der unverändert ausgeführt wird, oder einen
besondere -wählen Befehl, der abgefangen wird Metaconfig und analysiert, um zu sehen, was sein sollte
Erledigt. Das führende „-“ dient nur der Verhinderung um verhindert, dass der Befehl fehlschlägt, wenn er zurückgegeben wird
ein Status ungleich Null – er wird nicht wirklich benötigt, da wir „um -n', um das zu lösen
Abhängigkeiten, aber ich rate Ihnen, es beizubehalten, falls es in zukünftigen Versionen obligatorisch wird.
Die Syntax des wählen Befehl ist:

-wählen cmd $@ Zieldatei

woher $@ ist das Standardmakro in Makefiles, das für das aktuelle Ziel (den Namen) steht
der zu bauenden Einheit, wobei die letzte .U-Erweiterung entfernt wurde). Der cmd Teil ist der
präsentieren Metaconfig Befehl, der ausgeführt werden soll, und der Zieldatei ist ein weiterer Parameter, dessen
Die Interpretation hängt davon ab cmd selbst. Außerdem wurde die letzte .U-Erweiterung entfernt und
bezieht sich normalerweise auf eine Unit-Datei, es sei denn, sie beginnt mit „./“, in welchem ​​Fall sie auf eine verweist
dauert ebenfalls 3 Jahre. Das erste Jahr ist das sog. Metaconfig Steuerdateien im '.MT Verzeichnis.

Die verfügbaren Befehle sind:

add Fügt das hinzu Zieldatei zu Einrichtung.

add.Config_sh
Füllt diesen Teil aus Einrichtung Herstellung der config.sh Datei. Nur verwendet
Variablen werden hinzugefügt, bedingte (aus bedingten Abhängigkeiten) jedoch
übersprungen.

add.Null Fügt den Abschnitt hinzu, der alle verwendeten Shell-Variablen mit einer leeren Zeichenfolge initialisiert.

c_h_weed Erzeugt das config_h.SH Datei. Es werden nur die notwendigen Zeilen gedruckt.

cm_h_weed Erzeugt die confmagic.h Datei. Es werden nur die notwendigen Zeilen gedruckt. Das
Der Befehl ist nur aktiviert, wenn der -M Schalter gegeben ist, oder wenn a confmagic.h Datei
ist bereits vorhanden.

close.Config_sh
Fügt das letzte „EOT“-Symbol in einer eigenen Zeile hinzu, um das Here-Dokument zu beenden
Konstrukt, das das erzeugt config.sh Datei.

prepend Fügt dem Ziel den Inhalt voran Zieldatei wenn diese Datei nicht leer ist.

Unkraut Fügt die Einheit hinzu Einrichtung wie die hinzufügen Befehl, aber führen Sie einige zusätzliche Tests durch
um das '?Symbol' Und '%Symbol' Zeilen aus dem Zieldatei wenn das Symbol
nicht gewollt oder bedingt gewollt ist. Die Form „%“ wird nur intern von verwendet
Metaconfig beim Erstellen eigener .U-Dateien im '.MT' Verzeichnis.

wischen Das Gleiche wie hinzufügen wirklich, führt aber eine zusätzliche Makroersetzung durch. Der
Verfügbare Makros werden im beschrieben Festverdrahtet Makros Absatz.

Als Anmerkung, Metaconfig erzeugt a -kond Befehl intern, mit bedingten Bedingungen umzugehen
Abhängigkeiten. Sie sollten es nicht selbst verwenden, aber Sie werden es sehen, wenn Sie es scannen
erzeugt Make-Datei der .MT Verzeichnis.

Festverdrahtet Makros
Die folgenden Makros werden von erkannt wischen Befehl und vor der Aufnahme in ersetzt
Einrichtung:

Die Basisrevisionsnummer des Pakets, abgeleitet von .Paket.

Das aktuelle Datum.


Die E-Mail-Adresse des Betreuers dieses Pakets, abgeleitet von Ihrer
.Paket.


Der Name des Pakets, abgeleitet von Ihrem .Paket Datei.


Der Patch-Level des Metaconfig Programm (veraltet zugunsten von ).


Die SVN-Revisionsstufe des Metaconfig

Die Versionsnummer des Metaconfig

Diese Makros werden hauptsächlich zur Identifizierung verwendet Metaconfig Version, die a generiert hat
besondere Einrichtung Skript und für welches Paket es erstellt wurde. Die E-Mail-Adresse des
Der Betreuer ist in den führenden Anweisungen fest verankert Einrichtung druckt beim Starten.

Aktuelle Metaconfig Versionen verstehen eine viel allgemeinere Syntax der Form:

<$variable>

der zum Zeitpunkt der Konfigurationsgenerierung durch den Wert von ersetzt wird Variable von dir genommen
.Paket Datei. Irgendwann wird das alte festverdrahtete Makroformat verschwinden und <$baserev>
wird ersetzen in allen gelieferten Einheiten.

Spezial Einheit
Die folgenden Spezialeinheiten werden verwendet, um Code zu faktorisieren und eine höhere Ebene bereitzustellen
Funktionalitäten. Sie erstellen entweder ein Shell-Skript, das als Quelle verwendet werden kann, oder eine Shell
Variable, die sein kann eval'ed. Die Parameterübergabe erfolgt ebenfalls über bekannte Variablen
benannt oder anonym wie $1, $2 usw. (was einfach über die Shell eingestellt werden kann). kompensieren
Operator). Wann Einrichtung führt es aus, erstellt es und geht in ein UU Verzeichnis, also alle
Das produzierte Skript liegt dort und beeinträchtigt die Dateien aus Ihrem Paket nicht.

Hier sind die speziellen Einheiten, die Sie kennen sollten, und deren Verwendung.

Cppsym.U
Diese Einheit erstellt ein Shell-Skript namens Cppsym, mit dem ermittelt werden kann
ob ein Symbol in einer Liste durch den C-Präprozessor oder C-Compiler definiert wird, den Sie haben
angegeben. Es kann den Status jedes Symbols bestimmen, obwohl die Symbole in
(Attributliste) lassen sich leichter bestimmen.

Csym.U
Dadurch wird die Shell-Variable $csym festgelegt, die intern von verwendet wird Einrichtung um zu prüfen, ob a
ob das gegebene C-Symbol definiert ist oder nicht. Eine typische Verwendung ist:

Symbolergebnis setzen [-fva] [vorheriges]
eval $csym

Das wird das einstellen Folge Variable auf „true“, wenn die Funktion [-f], Variable [-v] oder
Array [-a] ist definiert, andernfalls „false“. Wenn ein vorheriger Wert angegeben ist und der -r
Schalter bereitgestellt wurde Einrichtung (Siehe Einrichtung Optionen Absatz), dann das
Wert wird ohne Hinterfragung wiederverwendet.

Die Art und Weise, wie diese Berechnung durchgeführt wird, hängt von der Antwort ab, die der Benutzer auf die Frage gibt
Einrichtung werde fragen, ob es eine durchführen soll nm Extraktion oder nicht. Wenn die
Wenn die Extraktion durchgeführt wurde, durchsucht das Gerät lediglich die Symbolliste, andernfalls
Es führt einen Compile-Link-Test durch, es sei denn -r wurde gegeben, um das zuvor berechnete wiederzuverwenden
Wert, natürlich...

End.U
Indem Sie diese Einheit in Ihr Privates kopieren U Verzeichnis und Anhängen von Abhängigkeiten an das
?MAKE: Zeile, Sie können das Laden einer bestimmten Einheit erzwingen Einrichtung auch wenn es nicht so ist
sonst gewollt. Einige Einheiten können nur erzwungen werden Einrichtung dieser Weg.

Filexp.U
Diese Einheit erstellt ein Shell-Skript fileexp Dadurch werden Dateinamen erweitert, die mit beginnen
Tilden. Eine typische Verwendung ist:

exp_name=`./filexp $name`

um den erweiterten Dateinamen zuzuweisen exp_name.

Findhdr.U
Dieses Gerät produziert a findhdr Skript, das zum Auffinden der Header-Dateien verwendet wird
$usrinc oder an anderen fremden Orten mit CPP-Funktionen. Das Skript erhält eine
Fügen Sie einen Dateibasisnamen wie „stdio.h“ oder „sys/file.h“ ein und es wird der vollständige Pfad zurückgegeben
die Include-Datei und einen Nullstatus, falls gefunden, oder eine leere Zeichenfolge und einen Nicht-Null-Status
wenn die Datei nicht gefunden werden konnte.

Getfile.U
Diese Einheit erzeugt einen Teil des Shell-Codes, der beschafft werden muss, um eine Datei zu erhalten
Namen nennen und einige Plausibilitätsprüfungen durchführen. Optional wird eine ~name-Erweiterung durchgeführt.

Um dieses Gerät zu verwenden, $rp und $dflt muss die Frage und die Standardantwort enthalten, die
wird unverändert an die übergeben myread Skript (siehe demnächst). Myread.U). Die $fn
Die Variable steuert die Operation und das Ergebnis wird zurückgegeben $ans.

Um eine Datei oder ein Verzeichnis zu finden, geben Sie „f“ oder „d“ ein f~/. Wenn ein „~“ erscheint, dann ~name
Ersatz ist erlaubt. Wenn ein „/“ erscheint, werden nur absolute Pfadnamen akzeptiert und
~name-Ersetzungen werden vor der Rückgabe immer erweitert. Wenn '+' angegeben ist,
Existenzprüfungen werden übersprungen. Wenn 'n' darin vorkommt $fn, dann darf der Benutzer es tun
antworten Sie mit „keine“.

Normalerweise erfolgt die ~name-Ersetzung auf Anfrage, es sei denn, Sie haben nach Portabilität gefragt.
Es gibt jedoch Situationen, in denen Sie die Portabilität umgehen und dies erzwingen möchten
Auswechslung. Sie können dazu den Buchstaben „e“ (erweitern) verwenden.

Wenn der spezielle Typ „l“ (locate) verwendet wird, dann ist der $fn Variable muss mit einem „:“ enden,
gefolgt von einem Dateibasisnamen. Wenn die Antwort ein Verzeichnis ist, lautet der Basisname der Datei
Wird vor dem Testen auf Dateiexistenz angehängt. Dies ist bei Fragen im Lokalisierungsstil nützlich
so was:

dflt='~news/lib'
: Bei Verwendung von „l“ muss „d“ oder „f“ nicht angegeben werden
fn='l~:aktiv'
rp='Wo ist die aktive Datei?'
. ./eine Datei bekommen
active="$ans"

Darüber hinaus kann der Buchstabe „p“ (Pfad) in Verbindung mit „l“ zur Angabe verwendet werden
eine Datei bekommen dass eine Antwort ohne ein „/“ akzeptiert werden sollte, vorausgesetzt, dass dies der Fall ist
zu dem Zeitpunkt, an dem dieser Wert benötigt wird, im PATH aller sein.

Nützlich ist auch die Möglichkeit, eine Liste der Antworten anzugeben, die akzeptiert werden sollen
wörtlich, unter Umgehung aller Kontrollen. Diese Liste muss in Klammern und Elementen stehen
müssen durch Kommas getrennt werden, ohne dazwischen liegende Leerzeichen. Vergessen Sie nicht, das zu zitieren
Die resultierende Zeichenfolge seit Klammern ist für die Shell von Bedeutung. Zum Beispiel:

dflt='/bin/install'
fn='/fe~(install,./install)'
rp='Welches Installationsprogramm verwenden?'
. ./eine Datei bekommen
install="$ans"

würde es dem Benutzer ermöglichen, nur vollständig qualifizierte Pfade anzugeben, die auf vorhandene Dateien verweisen,
Erlauben Sie aber weiterhin die speziellen Antworten „install“ und „./install“ wie sie sind (vorausgesetzt,
Natürlich wird sich später in der Kette etwas mit ihnen befassen, da dies der Fall ist
nicht dem allgemein erwarteten Rahmen entsprechen).

Wenn die Antwort auf die Frage „keine“ lautet, werden die Existenzprüfungen übersprungen und
Es wird der leere String zurückgegeben. Beachten Sie das seitdem eine Datei bekommen Anrufe myread intern, alle
die verfügbaren Funktionen mit myread Bewerben Sie sich hier um.

Wenn ein vollständig erweiterter Wert benötigt wird (z. B. in einem Makefile), können Sie ihn verwenden
$ansexp Variable, die immer richtig eingerichtet wird eine Datei bekommen als die erweiterte
Version von $ans. Natürlich wird ~name nicht erweitert, wenn Sie dies im nicht zugelassen haben
erster platz in der $fn variabel.

Inhdr.U
Dieses Gerät produziert die $inhdr Shell-Variable, intern verwendet von Einrichtung um zu überprüfen,
ob ein Satz von Headern vorhanden ist oder nicht. Eine typische Verwendung ist:

setze den Header i_header [ header2 i_header2 ... ]
eval $inhdr

Dadurch wird eine Meldung ausgegeben, die besagt, ob der Header gefunden wurde oder nicht, und der wird festgelegt
i_header entsprechend variabel. Wenn mehr als ein Header angegeben ist und der erste
Wenn der Header nicht gefunden wird, versuchen wir es mit dem nächsten, bis die Liste leer ist oder einer gefunden wird.

Inlibc.U
Dieses Gerät produziert die $inlibc Shell-Variable, intern verwendet von Einrichtung um zu überprüfen,
ob eine gegebene C-Funktion definiert ist oder nicht. Eine typische Verwendung ist:

Setze die Funktion d_func
eval $inlibc

Dadurch wird eine Meldung ausgegeben, die besagt, ob die Funktion gefunden und eingestellt wurde oder nicht
$d_func entsprechend. Intern verwendete es die $csym Routine.

Loc.U
Diese wichtige Einheit erstellt ein Shell-Skript loc womit man herausfinden kann, wo
In einer Liste von Verzeichnissen liegt eine bestimmte Datei. Das erste Argument gibt die Datei an
gefunden werden soll, ist das zweite Argument das, was zurückgegeben wird, wenn die Suche fehlschlägt, und das
Reamining-Argumente sind eine Liste von Verzeichnissen, in denen die Datei durchsucht werden soll. Für
Beispiel:

dflt=`./loc sendmail.cf X / Usr / lib /var/lib/sendmail / lib`

würde setzen $dflt zu X wenn nein sendmail.cf Die Datei wurde in den aufgeführten Verzeichnissen gefunden.
oder so ähnlich /usr/lib/sendmail.cf auf einigen Systemen. Siehe auch Getfile.U.

MailAuthor.U
Diese Einheit muss in die ?MAKE:-Zeile Ihres eigenen privaten End.U aufgenommen werden, um sie zu erstellen
es in Einrichtung. Es bietet dem Benutzer optional die Möglichkeit, sich beim Autor zu registrieren
Sie werden benachrichtigt, wenn neue Patches eintreffen, oder erhalten diese automatisch, wenn sie veröffentlicht werden.
Sie müssen installieren Postagent um dies zu tun (mindestens Version 3.0).

MailList.U
Diese Einheit muss in die ?MAKE:-Zeile Ihres eigenen privaten End.U aufgenommen werden, um sie zu erstellen
es in Einrichtung. Es bietet dem Benutzer die Möglichkeit, sich bei einer Mailingliste anzumelden oder abzumelden
wo Diskussionen im Zusammenhang mit dem Paket stattfinden. Du musst laufen packinit
und beantworten Sie die Fragen zur Mailingliste, um die richtigen Variablen in Ihrer Mailingliste einzurichten
.Paket bevor dieses Gerät in Betrieb genommen werden kann.

Myinit.U
Kopieren Sie diese Einheit in Ihr privates U Verzeichnis, um einigen Ihre eigenen Standardwerte hinzuzufügen
interne Variablen. Dieses Gerät wird geladen Einrichtung Immerhin die Standardeinstellung
Initialisierungen wurden durchgeführt.

Myread.U
Dieses Gerät produziert die myread Shell-Skript, das beschafft werden muss, um eine auszuführen
lesen. Es ermöglicht Shell-Escapes, Standardzuweisungen und Parameterauswertungen
dokumentiert in der Instruct.U-Einheit. Es ermöglicht auch eine dynamische Einstellung der -d Option,
die für den Rest der Skriptausführung verwendet wird.

Um dieses Gerät zu verwenden, $rp muss die Frage halten und $dflt sollte die Vorgabe enthalten
Antwort. Die Frage wird vom Skript selbst ausgegeben und das Ergebnis zurückgegeben
der $ans variabel.

Hier ist eine typische Verwendung:

dflt='y'
rp='Frage?'
. ./myread
value="$ans"

Weitere Informationen finden Sie auf dem Gerät selbst.

Oldconfig.U
Diese Einheit muss Teil Ihrer Abhängigkeitszeile ?MAKE: sein, wenn einige Ihrer Einheiten es versuchen
um einen alten Symbolwert wiederzuverwenden. Diese Einheit ist dafür verantwortlich, die alten Antworten zu erhalten
für config.sh oder Bereitstellung nützlicher Hinweise für die Ausführung auf einer bestimmten Plattform
erstes Mal. Siehe die Einrichtung Hinweise Weitere Informationen zu Hinweisen finden Sie im Absatz.

Präfixit.U
Der Zweck dieser Einheit besteht darin, Änderungen im Installationspräfixverzeichnis zu erkennen
Berechnen Sie automatisch passende Vorgaben aus früheren Antworten neu. Es beruht auf der
Wert der $oldprefix Variable, die das vorherige Präfixverzeichnis enthält, wenn es
geändert und ist ansonsten leer. Zum Beispiel, wenn das Präfix von geändert wurde / opt zu
Verzeichnis / usr / local, dann wird das vorherige binäre Installationsverzeichnis geändert
/opt/bin zu / usr / local / bin, oder bleibt unverändert, wenn es beispielsweise so wäre: /Behälter.

Sie müssen anrufen kompensieren vor der Ausstellung einer eval on $prefixit, Wie:

set dflt var [dir]
eval $prefixit

was untergehen würde $dflt zu $ var or $Präfix/Verzeichnis abhängig davon, ob das Präfix bestehen bleibt
gleich oder nicht. Wenn dir ist die Saite keine, ein einzelner Leerzeichenwert in $dflt wird so gehalten
ist, auch wenn sich das Präfix ändert. Wenn dir entfällt, dann $dflt ist auf leer gesetzt
Zeichenfolge, wenn sich das Präfix geändert hat, in $ var Andernfalls.

Präfixup.U
Der Zweck dieser Einheit ähnelt dem von Prefixit.U, dh sie hilft bei der Behebung des Problems
Standardzeichenfolge, um Präfixänderungen zu berücksichtigen. Allerdings ist die Shell-Variable $prefixup,
Bei der Auswertung werden nur ~name-Erweiterungen wiederhergestellt, sollte das Präfix einen solchen Escape verwenden
Mechanismus. Verwenden Sie es als:

dflt setzen
eval $prefixup

bevor Sie über auffordern eine Datei bekommen zum Beispiel. Wenn das Präfix ~name nicht verwendet
Erweiterung, dann wird das oben Genannte ein No-Op sein y variabel, natürlich.

Typedef.U
Dieses Gerät produziert die $typedef Shell-Variable, intern verwendet von Einrichtung um zu überprüfen,
ob eine Typdefinition existiert oder nicht. Eine typische Verwendung ist:

setze typedef val_t default [beinhaltet]
eval $typedef

Dadurch wird die Variable festgelegt val_t auf den Wert von Standard wenn die Typedef nicht gefunden wurde
Zu den aufgelisteten gehören Dateien oder zu typedef wenn gefunden. Wenn keine Include-Dateien vorhanden sind
angegeben, schaut das Gerät rein nur. Nur wenn Sie einige Includes angeben
die werden angeschaut.

Unix.U
Der Zweck dieser Einheit besteht darin, einige der häufigsten UNIX-Ismen über Variablen zu definieren
Dies kann über die Befehlszeile oder über entsprechende Hinweisdateien geändert werden. Insbesondere,
$_exe, $_o und $_a eingestellt sind. Alle Einheiten sollten sich auf beziehen $_o und nicht zu .o direkt.
Der '.' ist Teil dieser Variablen.

Setvar.U
Diese Einheit erzeugt die Variable, die intern von verwendet wird Einrichtung a
definieren/undef-Wert für ein bestimmtes Symbol und gibt eine Warnung aus, wenn er sich plötzlich ändert
von einem vorherigen Wert. Zum Beispiel:

val="$define"
setze d_variable
eval $setvar

Wenn der vorherige $d_variable Wert war ungleich Null und $ Wert ist anders, ein „whoa“
Warnung wird ausgegeben.

Whoa.U
Dieses Gerät produziert die whoa Skript, das eine Warnung ausgibt, wenn das Wert in variabel
wessen Name ist $ var ist nicht derselbe wie sein alter vorheriger Wert $war. Auf
Rückkehr, $td und $tu Halten Sie den richtigen Wert fest definieren or undef Die Variable. Sehen
Beispiele in Inlibc.U.

builtin Präprozessor
Jede Einheit soll darin enthalten sein Einrichtung wird durch einen eingebauten Vorprozessor ausgeführt. Vor-
Prozessoranweisungen werden durch das Zeichen „@“ eingeleitet („#“ ist der Shell-Kommentar).
Charakter). Er funktioniert lediglich wie der C-Präprozessor, ermöglicht jedoch Shell und Perl
entkommt. Hier sind die verfügbaren Funktionen:

@wenn Ausdruck
If Ausdruck wahr ist, fahren Sie mit dem Laden des Codes fort, bis @end, @elsif oder @else.

@elsif Ausdruck
Alternative Wahl. Wenn Ausdruck wahr ist, fahren Sie mit dem Laden des Codes fort, bis @end,
ein anderes @elsif oder @else.

@else Standardcode, der geladen werden soll, wenn @if Ausdruck war falsch und nichts davon
optional @elsif abgeglichen. Laden bis @end.

@end Schließt die von @if geöffnete Anweisung zum bedingten Laden.

@definieren Symbol
Sagt das dem Vorprozessor Symbol ist von nun an definiert.

Das bedingte Ausdruck kann Symbolnamen enthalten (der Wert ist wahr, wenn ein Symbol gewünscht wird oder).
definiert über @definieren oder Shell/Perl-Escapes. Diese Atome können mit dem kombiniert werden
traditionelle boolesche Operatoren '!' für Negation, '&&' für logisches Und und '||' für logisch
oder.

Text in einfachen Klammern ist ein Shell-Test, Text in doppelten Klammern hingegen schon
ein Perl-Test. Nämlich die Ausdrücke:

{ Schale Text }
{{ perl Text }}

werden übersetzt in:

if Schale Text >/dev/null 2>&1; dann Ausgang 0; sonst Ausgang 1; fi
if (perl Text) {exit 0;} else {exit 1;}

und der Exit-Status wird auf die Standardmethode verwendet, um einen booleschen Wert zu erhalten, dh 0 ist wahr und
alles andere ist falsch. Beachten Sie, dass in Perl nur einfache Bedingungen ausgedrückt werden können, bis
Einige komplexe Codes können darin geladen werden Metaconfig und ausgeführt.

Der eingebaute Vorprozessor kann zur Feinabstimmung einiger Einheiten verwendet werden (siehe d_gethname.U für eine
(komplexes Beispiel) abhängig von den tatsächlich vom Programm oder den Dateien verwendeten Symbolen
in der Verteilung vorhanden. Zum Beispiel die Oldconfig.U verwendet einen Test wie:

@if {test -d ../hints}

und Einrichtung enthält nur dann hinweisabhängigen Code, wenn ein vorhanden ist Hinweise Verzeichnis in der
Das Verzeichnis der obersten Ebene des Pakets. Beachten Sie, dass Tests innerhalb des ' ausgeführt werden..MT' Verzeichnis,
daher das benötigte '../' im Test.

Der Vorprozessor kann auch verwendet werden, um zu vermeiden, dass nutzloser Code eingefügt wird, wenn ein Symbol nicht vorhanden ist
definiert. Einheiten, die mehr als ein Symbol definieren, können auf diese Weise geschützt werden (da die Einheit dies ist).
als Ganzes geladen werden), indem symbolabhängiger Code in einem @if/@end-Paar gesammelt wird. Für
Beispiel:

@if I_TIME || I_SYS_TIME || I_SYS_TIME_KERNEL
need_time_h='true'
@anders
need_time_h='false'
@Ende

testet, ob der Quellcode eines der drei steuernden Symbole verwendet
Zeit.h or sys/time.h Inklusion und definieren Sie das Shell-Symbol entsprechend. Das gibt
Einrichtung eine Rückmeldung darüber, was die Quellen benötigen, und vermeiden Sie den Nachteil einer Korrektur
gefrorene Einheiten.

Über die „?W:“-Zeilen können Sie interessante Kombinationen erhalten. Zum Beispiel die i_time.U Einheit
muss wissen, ob die C-Quellen davon Gebrauch machen struct Zeitzone Typ. Daher,
die Linie:

?W::timezone

wird wegen seines Nebeneffekts der Definition des Symbols verwendet Zeitzone für den Vorprozessor. Der
Einheitencode kann dann sagen:

@if Zeitzone
für s_timezone in '-DS_TIMEZONE' ''; Tun
@anders
s_timezone=''
@Ende

... Code mit s_timezone ...

@if Zeitzone
erledigt
@Ende

und haben Sie eine zusätzliche Schleife, die zwei aufeinanderfolgende Werte für versucht s_timezone variabel, aber nur
wenn benötigt.

Überholt Symbole
Veraltete Symbole bleiben erhalten, um den Übergang zu älteren zu erleichtern Metaconfig Einheiten. Es sei denn
-o Schalter übergeben wird Metaconfig sie werden ignoriert. Allerdings ein Überholt Datei wird
generiert werden und Ihnen sagen, welche Dateien diese veralteten Symbole verwenden und was
sind die neuen Symbole, die verwendet werden sollen.

Die Lebensdauer veralteter Symbole beträgt eine vollständige Revision, d. h. sie werden entfernt, wenn die
Die nächste Basisrevision wird veröffentlicht (Patch-Upgrades zählen natürlich nicht). Daher ist es
Es ist ratsam, Ihre Quellen zu übersetzen und so bald wie möglich mit der Verwendung der neuen Symbole zu beginnen.

Einrichtung Hinweise
Es kann vorkommen, dass die interne Konfigurationslogik falsche Entscheidungen trifft. Für
Zum Beispiel auf einer Plattform die vfork() Der Systemaufruf ist vorhanden, aber defekt, also sollte es so sein
nicht verwendet werden. Es ist nicht möglich, dieses Wissen in die Einheiten selbst einzubeziehen, weil
Dabei handelt es sich möglicherweise um ein vorübergehendes Problem, das der Anbieter irgendwann beheben wird, oder um etwas anderes
wurde durch ein neues Betriebssystem-Upgrade eingeführt.

Wie auch immer, für all diese kleinen Probleme, die zu systemspezifisch sind, Metaconfig
Bietet Unterstützung für Hinweisdateien. Um es zu verwenden, müssen Sie eine erstellen Hinweise Verzeichnis in der
Verzeichnis der obersten Ebene des Pakets und halten Sie es bereit, wenn Sie es ausführen Metaconfig. Das wird laden
Hinweisbezogener Teil aus Oldconfig.U.

Von da an können Sie einige der Shell-Variablen voreinstellen Einrichtung Verwendet in einem OS-spezifischen
.sh-Datei. Es ist Code drin Oldconfig.U das versucht zu erraten, welche Hinweisdateien benötigt werden
Berechnen eines Standardnamens basierend auf dem Betriebssystemnamen des Systems, dem Kernelnamen und der Version
Nummer usw. Da sich diese Informationen wahrscheinlich schnell ändern, dokumentiere ich sie nicht
Hier. Sie müssen den Code zurückentwickeln Oldconfig.U.

Wenn Sie Ihr Paket zum ersten Mal veröffentlichen, sollte Ihr Hints-Dateiverzeichnis leer sein. Wenn die
Benutzer Ihres Pakets beschweren sich, dass sie Probleme damit haben Einrichtung Standardmäßig ist a
Bei einem bestimmten System müssen Sie prüfen, ob es sich um ein plattformspezifisches Problem handelt oder um ein
Allgemeines. Im ersteren Fall ist es an der Zeit, eine neue Hinweisdatei einzuführen, während im
Letzteres sollte die entsprechende Einheit überarbeitet werden.

Es ist beispielsweise bekannt, dass SGI-Systeme defekt sind vfork() Systemaufruf, ab diesem Zeitpunkt
Schreiben. Und der entsprechende Hinweisdateiname lautet sgi.sh. Sie müssen also nur noch erstellen
a hints/sgi.sh Datei, in die Sie schreiben:

d_vfork="$define"

was immer neu zugeordnet wird vgabel on Gabel (sehen d_vfork.U). Bei der Ausführung auf SGI-Systemen für
erstes Mal, Einrichtung wird erkennen, dass es eine gibt hints/sgi.sh Datei, und dass wir dabei sind
eine IRIX-Maschine (der Kernelname ist oft /irix), daher wird vorgeschlagen sgi als ein
möglicher Hinweis. Wenn der Benutzer es akzeptiert und seit dem $d_vfork Der Wert wird über geändert
$setvar Anruf, a oh! wird ausgegeben, um zu warnen, dass wir dabei sind, den Wert zu überschreiben
berechnet von Einrichtung.

Beachten Sie, dass Sie keine Angaben machen müssen alle die Hinweise bekannt durch Oldconfig.U. Wenn eine Hinweisdatei vorhanden ist
fehlt, wird es nicht als mögliche Auswahl vorgeschlagen. Die heuristischen Tests wurden zur Berechnung ausgeführt
Die möglichen Hinweiskandidaten sind uneinheitlich. Wenn Sie neue Werte oder andere Tests haben, wenden Sie sich bitte an uns
Schick sie zu mir...

Überschreiben Auswahlmöglichkeiten
Wenn Sie eine erstellen config.over Datei im obersten Verzeichnis, Einrichtung werde dich fragen, ob du
Sie möchten es laden, um die Standardwerte zu überschreiben. Dies erfolgt vor der Erstellung des
config.sh Datei, so dass Sie die Möglichkeit haben, die dort gespeicherten Werte zu patchen.

Dies unterscheidet sich vom Hints-Ansatz dadurch, dass es sich um eine lokale Datei handelt, bei der es sich um den Benutzer handelt
frei, für den eigenen Gebrauch zu erstellen. Sie sollten eine solche Datei nicht selbst bereitstellen, sondern lassen
Der Benutzer weiß von dieser Möglichkeit.

Einrichtung Optionen
Das Einrichtung Das Skript kann mit einigen in der Befehlszeile angegebenen Optionen aufgerufen werden
sein Verhalten leicht ändern. Hier sind die zulässigen Optionen:

-d Verwenden Sie für alle Antworten die Standardeinstellungen.

-e Machen Sie weiter, ohne die Produktion von zu hinterfragen config.sh.

-f Datei Verwenden Sie die angegebene Datei als Standardkonfiguration. Wenn dieser Schalter nicht verwendet wird,
Die Konfiguration wird übernommen config.sh, wenn vorhanden.

-h Hilfenachricht drucken und beenden.

-r Wenn möglich, C-Symbolwert wiederverwenden. Dadurch entfallen die Kosten nm Symbol
Extraktion. Bei der ersten Verwendung (ohne vorherige Konfigurationsdatei)
Einrichtung Ich werde versuchen, ein kleines Programm zu kompilieren und zu verknüpfen, um mehr darüber zu erfahren
das Vorhandensein oder Fehlen eines Symbols.

-s Stiller Modus. Es werden nur Zeichenfolgen angezeigt, die auf Dateideskriptor Nr. 4 gedruckt sind
Bildschirm (das sind die wichtigen Meldungen). Eine vollständige Abschaltung ist nicht möglich
jede Ausgabe, aber Sie können 'Einrichtung -ders > / dev / null 2> & 1'um voll zu sein
Batch-Lauf ohne Ausgabe und ohne Benutzerinteraktion erforderlich.

-D Symbol=Wert
Vordefiniert Symbol das angegebene tragen Wert. Es ist auch möglich, „-D
Symbol', das den Standardwert 'define' verwendet.

-E Stoppen Sie am Ende der Konfigurationsfragen, nachdem Sie a erstellt haben
config.sh. Dies führt nicht zu 'um abhängen' oder .SH-Dateien extrahieren.

-K Sachkundiger Benutzer. Wenn Sie diese Option nutzen, wissen Sie, was Sie tun und
deshalb, die config.sh Die Datei wird immer so behandelt, als wäre sie vorgesehen
wiederverwendet, auch wenn es möglicherweise auf einem fremden System erzeugt wurde. Es auch
verhindert einen Abbruch, wenn Einrichtung erkennt einen unbrauchbaren C-Compiler oder einen falschen Satz
von C-Flags. Weitere Verknüpfungen können durch diese Option auch im aktiviert werden
Zukunft. Diese Option ist im dokumentiert Einrichtung Nutzungsnachricht, um uns daran zu erinnern
über seine Existenz, aber die gegebene Beschreibung ist hoffentlich kryptisch genug.
:-)

-O Über a angegebene Werte zulassen -D or -U um Einstellungen von allen geladenen zu überschreiben
Konfigurationsdatei. Dies ist nicht das Standardverhalten, da das Vorrangige dies tut
nicht auf Variablen übertragen werden, die von den Variablen abgeleitet sind, die Sie gerade ändern.
Natürlich ohne -O, die Einstellung erfolgt nur, wenn keine Konfigurationsdatei vorhanden ist
geladen, was sicher ist, da abgeleitete Variablen noch nicht berechnet wurden ...

-S Führen Sie eine Variablenersetzung für alle .SH-Dateien durch. Sie können es mit dem kombinieren
-f wechseln Sie, um eine beliebige Konfiguration zu verbreiten.

-U symbol=
Voreinstellungen Symbol einen leeren Wert tragen. Es ist auch möglich, „-U Symbol'
was eingestellt wird Symbol zu „undef“.

-V Drucken Sie die Versionsnummer aus Metaconfig das hat das erzeugt Einrichtung Skript
und verlassen.

Laufen Arbeitsumfeld
Beim Start, Einrichtung erstellt ein lokales UU Verzeichnis und läuft von dort aus. Das Verzeichnis
wird entfernt, wenn „Configure“ endet, aber das bedeutet, dass Sie das Skript von einem Ort aus ausführen müssen, an dem
Sie können schreiben, also nicht aus einem schreibgeschützten Dateisystem.

Du kannst rennen Einrichtung aus der Ferne, wie in:

../Paket/Konfigurieren

um Quellen zu konfigurieren, die lokal nicht vorhanden sind. Alle generierten Dateien werden eingefügt
das Verzeichnis, in dem Sie das Skript ausführen. Diese Magie wird dank src.U vollbracht
Einheit, die die Einstellung vornimmt $Quelle und $rsrc Variablen, die auf die Paketquellen verweisen. Das
Der Pfad ist vollständig oder relativ, je nachdem, ob Einrichtung wurde über ein vollständiges oder aufgerufen
relativer Pfad.

Aus dem Inneren der UU Unterverzeichnis, das Sie verwenden können $rsrc um auf die Quelldateien (Einheiten) zuzugreifen
Linkhinweise, die sich auf Quelldateien beziehen, müssen immer diesen Mechanismus verwenden und nicht davon ausgehen
(Datei befindet sich im übergeordneten Verzeichnis). Alle Makefiles sollten die Variable $src verwenden
als Zeiger auf die Quellen oben im Build-Verzeichnis (wo Einrichtung es läuft),
entweder direkt oder über eine VPATH-Einstellung.

Beim Laufen Einrichtung Remote werden die .SH-Dateien nicht in das Build-Verzeichnis extrahiert
im Quellbaum. Es erfordert jedoch eine Art um Unterstützung, um kompilieren zu können
Dinge in einem Build-Verzeichnis, während die Quellen woanders liegen.

Die richtigen Magic Neudefinitionen
Durch die Nutzung der -M Wechseln, einige magische Neuzuordnungen können innerhalb eines stattfinden confmagic.h
Datei. Diese Datei muss anschließend eingefügt werden config.h, natürlich, aber auch nach all dem
weitere benötigte Include-Dateien. Nämlich:

#include „config.h“
...
... Sonstiges Einschlüsse ...
...
#include „confmagic.h“

Typischerweise confmagic.h Ich werde versuchen, eine Neuzuordnung durchzuführen bcopy() on memcpy() wenn nein bcopy() is
lokal verfügbar oder umwandelbar vgabel in Gabel wenn nötig, was es nutzlos macht
Kümmere dich um die HAS_VFORK Symbol.

Dieser Konfigurationszauber ist in der Glossardatei dokumentiert.

Einheit Template
Es gibt eine Reihe von Einheitenvorlagen im Metaconfig Quellverzeichnis, die dazu bestimmt sind
von einem (noch nicht geschriebenen) Programm verwendet werden, um schnell neue Einheiten für verschiedene Arten zu erstellen
Situationen. Keine Dokumentation für dieses unvollendete Projekt, aber ich dachte, ich würde es erwähnen
in der Handbuchseite, falls Sie es selbst machen und dann beitragen möchten ...

AUTOREN


Larry Wall[E-Mail geschützt] > für Version 2.0.
Harlan Stenn[E-Mail geschützt] > für wichtige Geräteerweiterungen.
Raphael Manfredi[E-Mail geschützt] >.
Viele andere Mitwirkende für die Metaconfig Einheiten. Eine Liste finden Sie in der Kreditakte.

Verwenden Sie Metaconfig online über die Dienste von onworks.net


Kostenlose Server & Workstations

Laden Sie Windows- und Linux-Apps herunter

Linux-Befehle

Ad