Nächste: Stufe 1: Erstellen mit Guix, Nach oben: Software-Entwicklung [Inhalt][Index]
Wie lässt sich also ein Repository „guixifizieren“? Unser erster Schritt
ist, wie wir sehen konnten, eine Datei guix.scm im obersten
Verzeichnis des fraglichen Repositorys unterzubringen. Nehmen wir
Guile als Beispiel in diesem
Kapitel; es ist in Scheme (zum größten Teil) und in C geschrieben und ist
von anderer Software abhängig – einer C-Compiler-Toolchain,
C-Bibliotheken, Autoconf und seinen Freunden, LaTeX und so weiter. Daraus
ergibt sich eine guix.scm, die ziemlich wie andere Paketdefinitionen
auch aussieht (siehe Pakete definieren in Referenzhandbuch zu
GNU Guix), nur fehlt das define-public
am Anfang:
;; Die ‚guix.scm‘-Datei für Guile, gedacht für ‚guix shell‘. (use-modules (guix) (guix build-system gnu) ((guix licenses) #:prefix license:) (gnu packages autotools) (gnu packages base) (gnu packages bash) (gnu packages bdw-gc) (gnu packages compression) (gnu packages flex) (gnu packages gdb) (gnu packages gettext) (gnu packages gperf) (gnu packages libffi) (gnu packages libunistring) (gnu packages linux) (gnu packages pkg-config) (gnu packages readline) (gnu packages tex) (gnu packages texinfo) (gnu packages version-control)) (package (name "guile") (version "3.0.99-git") ;komische Versionsnummer (source #f) ;keine Quelle (build-system gnu-build-system) (native-inputs (append (list autoconf automake libtool gnu-gettext flex texinfo texlive-base ;für "make pdf" texlive-epsf gperf git gdb strace readline lzip pkg-config) ;; Zum Cross-Kompilieren ist eine native Version desselben ;; Guiles notwendig. (if (%current-target-system) (list this-package) '()))) (inputs (list libffi bash-minimal)) (propagated-inputs (list libunistring libgc)) (native-search-paths (list (search-path-specification (variable "GUILE_LOAD_PATH") (files '("share/guile/site/3.0"))) (search-path-specification (variable "GUILE_LOAD_COMPILED_PATH") (files '("lib/guile/3.0/site-ccache"))))) (synopsis "Scheme implementation intended especially for extensions") (description "Guile is the GNU Ubiquitous Intelligent Language for Extensions, and it's actually a full-blown Scheme implementation!") (home-page "https://www.gnu.org/software/guile/") (license license:lgpl3+))
Das ist schon ein bisschen aufwendig, aber wenn jemand an Guile hacken will, braucht sie bloß noch das hier aufzurufen:
guix shell
Sie findet sich in einer Shell wieder, wo es alle Abhängigkeiten von Guile
gibt: die oben aufgeführten Abhängigkeiten und außerdem implizite
Abhängigkeiten wie die GCC-Toolchain, GNU Make, sed, grep und so
weiter. Siehe Aufruf von guix shell in Referenzhandbuch zu GNU
Guix für weitere Informationen zu guix shell
.
Empfehlung des Hauses: Wir legen Ihnen nahe, Entwicklungsumgebungen mit diesem Befehl anzulegen:
guix shell --container --link-profile… oder kurz:
guix shell -CPSo erhält man eine Shell in einem isolierten Container und alle Abhängigkeiten finden sich in
$HOME/.guix-profile
, was die Nutzung von Zwischenspeichern wie config.cache (siehe Cache Files in Autoconf) erleichtert und wodurch absolute Dateinamen, die in erzeugten Dateien wieMakefile
s und Ähnlichem festgehalten werden, gültig bleiben. Die Tatsache, dass die Shell in einem Container läuft, erlaubt Ihnen ein Gefühl der Sicherheit: Nichts außer dem aktuellen Verzeichnis und Guiles Abhängigkeiten ist in dieser isolierten Umgebung sichtbar; nichts vom System kann Ihre Arbeit störend beeinflussen.
Nächste: Stufe 1: Erstellen mit Guix, Nach oben: Software-Entwicklung [Inhalt][Index]