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


7.1 Einstieg

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 -CP

So 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 wie Makefiles 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]