Nächste: , Vorige: , Nach oben: Software-Entwicklung   [Inhalt][Index]


7.2 Stufe 1: Erstellen mit Guix

Jetzt, wo wir eine Paketdefinition vorliegen haben (siehe Einstieg), können wir sie dann auch gleich benutzen, um Guile mit Guix zu erstellen? Uns fehlt der Eintrag im source-Feld, das wir leer gelassen haben, denn für guix shell spielen nur die inputs unseres Pakets eine Rolle – um die Entwicklungsumgebung zu unserem Paket aufzusetzen –, aber das Paket selber wurde bisher nicht gebraucht.

Wenn wir das Paket mit Guix erstellt bekommen möchten, müssen wir etwas ins source-Feld eintragen, etwa so:

(use-modules (guix)
             (guix git-download)  ;für ‚git-predicate‘
             )

(define vcs-file?
  ;; Wahr zurückliefern, wenn die angegebene Datei unter
  ;; Versionskontrolle steht.
  (or (git-predicate (current-source-directory))
      (const #t)))                                ;es ist kein Git-Checkout

(package
  (name "guile")
  (version "3.0.99-git")                          ;komische Versionsnummer
  (source (local-file "." "guile-checkout"
                      #:recursive? #t
                      #:select? vcs-file?))
  )

Dies sind unsere Änderungen verglichen mit dem vorherigen Abschnitt:

  1. Wir haben (guix git-download) zu unseren importierten Modulen hinzugefügt, damit wir dessen Prozedur git-predicate benutzen können.
  2. Wir haben vcs-file? als Prozedur definiert, die wahr zurückgibt, wenn ihr eine Datei übergeben wird, die unter Versionskontrolle steht. Es gehört sich, den Fall abzufangen, wenn wir uns in keinem Git-Checkout befinden: Dann wird immer wahr geliefert.
  3. Wir setzen source auf local-file – einer rekursiven Kopie des aktuellen Verzeichnisses ("."), eingeschränkt auf solche Dateien, die unter Versionskontrolle gestellt sind (mit #:select?).

Von da an erfüllt guix.scm einen zweiten Zweck: Wir können die Software mit Guix erstellen. Der Vorteil der Erstellung mit Guix ist, dass eine „saubere“ Erstellung durchgeführt wird – Sie können sich sicher sein, das Ergebnis der Erstellung beruht nicht auf Dateien in Ihrem Quellbaum oder anderen Dingen in Ihrem System – und auch, dass Sie viele Möglichkeiten testen können. Als Erstes wäre da eine einfache native Erstellung:

guix build -f guix.scm

Aber auch für ein anderes System können Sie die Erstellung durchführen (unter Umständen müssen Sie erst die Auslagerungsfunktion, siehe Auslagern des Daemons einrichten in Referenzhandbuch zu GNU Guix, oder transparente Emulation, siehe Virtualisierungsdienste in Referenzhandbuch zu GNU Guix, einrichten):

guix build -f guix.scm -s aarch64-linux -s riscv64-linux

… oder Sie cross-kompilieren:

guix build -f guix.scm --target=x86_64-w64-mingw32

Möglich sind auch Paketumwandlungsoptionen, womit Sie Varianten Ihres Pakets testen können (siehe Paketumwandlungsoptionen in Referenzhandbuch zu GNU Guix):

# Wie sieht es aus, wenn wir mit Clang statt GCC erstellen?
guix build -f guix.scm \
  --with-c-toolchain=guile@3.0.99-git=clang-toolchain

# Was ist mit wenig getesteten configure-Befehlszeilenoptionen?
guix build -f guix.scm \
  --with-configure-flag=guile@3.0.99-git=--disable-networking

Praktisch!


Nächste: Stufe 2: Das Repository als Kanal, Vorige: Einstieg, Nach oben: Software-Entwicklung   [Inhalt][Index]