Vorige: package
-Referenz, Nach oben: Pakete definieren [Inhalt][Index]
origin
-ReferenzIn diesem Abschnitt werden Paketursprünge – englisch
Origins – beschrieben. Eine origin
-Deklaration legt Daten
fest, die „produziert“ werden müssen – normalerweise heißt das
heruntergeladen. Die Hash-Prüfsumme von deren Inhalt muss dabei im Voraus
bekannt sein. Ursprünge werden in erster Linie benutzt, um den Quellcode von
Paketen zu repräsentieren (siehe Pakete definieren). Aus diesem Grund
können Sie mit der origin
-Form Patches angeben, die auf den
ursprünglichen Quellcode angewandt werden sollen, oder auch Schnipsel von
Code, der Veränderungen daran vornimmt.
Mit diesem Datentyp wird ein Ursprung, von dem Quellcode geladen werden kann, beschrieben.
uri
Ein Objekt, was die URI des Quellcodes enthält. Der Objekttyp hängt von der
Methode
ab (siehe unten). Zum Beispiel sind, wenn die
url-fetch-Methode aus (guix download)
benutzt wird, die
gültigen Werte für uri
: eine URL dargestellt als Zeichenkette oder
eine Liste solcher URLs.
method
Eine monadische Prozedur, um die angegebene URL zu benutzen. Die Prozedur
muss mindestens drei Argumente akzeptieren: den Wert des uri
-Feldes,
den Hash-Algorithmus und den Hash-Wert, der im hash
-Feld angegeben
wird. Sie muss ein Store-Objekt oder eine Ableitung in der Store-Monade
liefern (siehe Die Store-Monade). Die meisten Methoden liefern eine
Ableitung mit fester Ausgabe (siehe Ableitungen).
Zu den häufig benutzten Methoden gehören url-fetch
, das Daten von
einer URL lädt, und git-fetch
, das Daten aus einem Git-Repository
lädt (siehe unten).
sha256
Ein Byte-Vektor mit dem SHA-256-Hash des Quellcodes. Seine Funktion ist
dieselbe wie das Angeben eines content-hash
-SHA256-Objekts im weiter
unten beschriebenen hash
-Feld.
hash
Das content-hash
-Objekt des Quellcodes. Siehe unten für eine
Erklärung, wie Sie content-hash
benutzen.
Diese Informationen liefert Ihnen der Befehl guix download
(siehe
guix download
aufrufen) oder guix hash
(siehe guix hash
aufrufen).
file-name
(Vorgabe: #f
)Der Dateiname, unter dem der Quellcode abgespeichert werden soll. Wenn er
auf #f
steht, wird ein vernünftiger Name automatisch gewählt. Falls
der Quellcode von einer URL geladen wird, wird der Dateiname aus der URL
genommen. Wenn der Quellcode von einem Versionskontrollsystem bezogen wird,
empfiehlt es sich, den Dateinamen ausdrücklich anzugeben, weil dann keine
sprechende Benennung automatisch gefunden werden kann.
patches
(Vorgabe: '()
)Eine Liste von Dateinamen, Ursprüngen oder dateiähnlichen Objekten (siehe dateiartige Objekte) mit Patches, welche auf den Quellcode anzuwenden sind.
Die Liste von Patches kann nicht von Parametern der Erstellung
abhängen. Insbesondere kann sie nicht vom Wert von %current-system
oder %current-target-system
abḧängen.
snippet
(Vorgabe: #f
)Ein im Quellcode-Verzeichnis auszuführender G-Ausdruck (siehe G-Ausdrücke) oder S-Ausdruck. Hiermit kann der Quellcode bequem modifiziert werden, manchmal ist dies bequemer als mit einem Patch.
patch-flags
(Vorgabe: '("-p1")
)Eine Liste der Befehlszeilenoptionen, die dem patch
-Befehl übergeben
werden sollen.
patch-inputs
(Vorgabe: #f
)Eingabepakete oder -ableitungen für den Patch-Prozess. Bei #f
werden
die üblichen Patcheingaben wie GNU Patch bereitgestellt.
modules
(Vorgabe: '()
)Eine Liste von Guile-Modulen, die während des Patch-Prozesses und während
der Ausführung des snippet
-Felds geladen sein sollen.
patch-guile
(Vorgabe: #f
)Welches Guile-Paket für den Patch-Prozess benutzt werden soll. Bei #f
wird ein vernünftiger Vorgabewert angenommen.
Erzeugt ein Inhaltshash-Objekt für den gegebenen Algorithmus und
benutzt dabei den Wert als dessen Hashwert. Wenn kein
Algorithmus angegeben wird, wird sha256
angenommen.
Als Wert kann ein Zeichenketten-Literal, was base32-dekodiert wird, oder ein Byte-Vektor angegeben werden.
Folgende Formen sind äquivalent:
(content-hash "05zxkyz9bv3j9h0xyid1rhvh3klhsmrpkf3bcs6frvlgyr2gwilj") (content-hash "05zxkyz9bv3j9h0xyid1rhvh3klhsmrpkf3bcs6frvlgyr2gwilj" sha256) (content-hash (base32 "05zxkyz9bv3j9h0xyid1rhvh3klhsmrpkf3bcs6frvlgyr2gwilj")) (content-hash (base64 "kkb+RPaP7uyMZmu4eXPVkM4BN8yhRd8BTHLslb6f/Rc=") sha256)
Als interne Implementierung wird für content-hash
derzeit ein Makro
benutzt. Es überprüft, wenn möglich, zum Zeitpunkt der Makroumschreibung, ob
die Angaben in Ordnung sind, z.B. ob der Wert die richtige Größe für
den angegebenen Algorithmus hat.
Wie wir oben gesehen haben, hängt es von der im method
-Feld
angegebenen Methode ab, wie die in einem Paketursprung verwiesenen Daten
geladen werden. Das Modul (guix download)
stellt die am häufigsten
benutzte Methode zur Verfügung, nämlich url-fetch
, die im Folgenden
beschrieben wird.
Daten von der URL lädt (einer Zeichenkette oder Liste von Zeichenketten für alternativ mögliche URLs). Es wird erwartet, dass die Daten Hash als Prüfsumme haben, gemäß dem Algorithmus, der in Hash-Algo (einem Symbol) angegebenen wurde. Nach Vorgabe ergibt sich der Dateiname aus dem Basisnamen der URL; optional kann in name ein anderslautender Name festgelegt werden. Wenn executable? wahr ist, wird die heruntergeladene Datei als ausführbar markiert.
Wenn eine der URL mit mirror://
beginnt, wird der „Host Part“ an
deren Anfang als Name eines Spiegelserver-Schemas aufgefasst, wie es in
%mirror-file steht.
Alternativ wird, wenn die URL mit file://
beginnt, der zugehörige
Dateiname in den Store eingefügt und zurückgeliefert.
Ebenso ist im Modul (guix git-download)
die git-fetch
-Methode
für Paketursprünge definiert. Sie lädt Daten aus einem Repository des
Versionskontrollsystems Git. Der Datentyp git-reference
beschreibt
dabei das Repository und den daraus zu ladenden Commit.
Liefert eine Ableitung mit fester Ausgabe, die Ref lädt, ein
<git-reference>
-Objekt. Es wird erwartet, dass die Ausgabe rekursiv
die Prüfsumme Hash aufweist (ein „rekursiver Hash“) gemäß dem Typ
Hash-Algo (einem Symbol). Als Dateiname wird name verwendet,
oder ein generischer Name, falls name #f
ist.
Dieser Datentyp steht für eine Git-Referenz, die git-fetch
laden
soll.
url
Die URL des zu klonenden Git-Repositorys.
commit
Diese Zeichenkette gibt entweder den zu ladenden Commit an (als Zeichenkette
aus Hexadezimalzeichen) oder sie entspricht dem zu ladenden Tag. Sie können
auch eine „kurze“ Commit-Zeichenkette oder einen Bezeichner wie von
git describe
, z.B. v1.0.1-10-g58d7909c97
, verwenden.
recursive?
(Vorgabe: #f
)Dieser boolesche Wert gibt an, ob Git-Submodule rekursiv geladen werden sollen.
Im folgenden Beispiel wird der Tag v2.10
des Repositorys für
GNU Hello bezeichnet:
(git-reference
(url "https://git.savannah.gnu.org/git/hello.git")
(commit "v2.10"))
Das ist äquivalent zu folgender Referenz, wo der Commit ausdrücklich benannt wird:
(git-reference
(url "https://git.savannah.gnu.org/git/hello.git")
(commit "dc7dc56a00e48fe6f231a58f6537139fe2908fb9"))
Bei Mercurial-Repositorys finden Sie im Modul (guix hg-download)
Definitionen für die Methode hg-fetch
für Paketursprünge sowie den
Datentyp hg-reference
. Mit ihnen wird das Versionskontrollsystem
Mercurial unterstützt.
<hg-reference>
-Objekt. Es wird erwartet, dass die Ausgabe rekursiv
die Prüfsumme Hash aufweist (ein „rekursiver Hash“) gemäß dem Typ
Hash-Algo (einem Symbol). Als Dateiname wird Name verwendet,
oder ein generischer Name, falls Name #false
ist.
Vorige: package
-Referenz, Nach oben: Pakete definieren [Inhalt][Index]