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


7.4 Bonus: Paketvarianten

Jetzt, wo wir es zu einem richtigen Kanal gebracht haben (siehe Stufe 2: Das Repository als Kanal), drängt sich die Frage auf, warum er nur ein Paket enthält. Da geht mehr, denn wir können gleich mehrere Paketvarianten (siehe Paketvarianten definieren in Referenzhandbuch zu GNU Guix) in unserer Datei guile-package.scm festlegen, und zwar Varianten, die wir Entwickler von Guile gerne testen würden – wofür wir oben noch Paketumwandlungsoptionen gebraucht haben. Wir können Sie auf diese Weise eintragen:

;; Dies ist die Datei ‚.guix/modules/guile-package.scm‘.

(define-module (guile-package)
  )

(define-public guile
  )

(define (package-with-configure-flags p flags)
  "Liefert P erweitert um die 'configure'-Optionen in FLAGS."
  (package/inherit p
    (arguments
     (substitute-keyword-arguments (package-arguments p)
       ((#:configure-flags original-flags #~(list))
        #~(append #$original-flags #$flags))))))

(define-public guile-without-threads
  (package
    (inherit (package-with-configure-flags guile
                                           #~(list "--without-threads")))
    (name "guile-without-threads")))

(define-public guile-without-networking
  (package
    (inherit (package-with-configure-flags guile
                                           #~(list "--disable-networking")))
    (name "guile-without-networking")))


;; Das oben definierte Paketobjekt muss am Modulende zurückgeliefert werden.
guile

Sobald wir den Kanal mit guix pull aktiviert haben, können wir diese Varianten als normale Pakete erstellen. Es geht aber auch, einen Befehl wie hier in einem Checkout von Guile auf oberster Ebene auszuführen:

guix build -L $PWD/.guix/modules guile-without-threads