~ruther/guix-local

91097713eecefa10c8a04b5c152adb2e7b8c36bb — Tobias Geerinckx-Rice 2 years ago 11f1d72
gnu: xen: Update package style.

* gnu/packages/virtualization.scm (xen)
[arguments]: Rewrite as G-expressions.  Use SEARCH-INPUT-FILE whenever
possible.  Put SUBSTITUTE* features to use.
[native-inputs, inputs]: Remove input labels.
1 files changed, 153 insertions(+), 167 deletions(-)

M gnu/packages/virtualization.scm
M gnu/packages/virtualization.scm => gnu/packages/virtualization.scm +153 -167
@@ 2291,164 2291,150 @@ DOS or Microsoft Windows.")
                "1cdzpxbihkdn4za8ly0lgkbxrafjzbxjflhfn83kyg4bam1vv7mn"))))
    (build-system gnu-build-system)
    (arguments
     `(#:configure-flags
       (list "--enable-rpath"
             "--disable-qemu-traditional" ; It tries to do "git clone"
             "--disable-rombios" ; would try to "git clone" via etherboot.
             ;; TODO: Re-enable stubdom (it's "more secure" to use it).
             "--disable-stubdom" ; tries to "git clone" old patched newlib.
             (string-append "--with-initddir="
                            (assoc-ref %outputs "out")
                            "/etc/init.d")
             (string-append "--with-system-qemu="
                            (assoc-ref %build-inputs "qemu")
                            "/bin/qemu-system-i386")
             (string-append "--with-system-seabios="
                            (assoc-ref %build-inputs "seabios")
                            "/share/firmware/bios.bin")
             (string-append "--with-system-ovmf="
                            (assoc-ref %build-inputs "ovmf")
                            "/share/firmware/ovmf_ia32.bin"))
       #:make-flags (list "-j" "1"
                          "XEN_BUILD_DATE=Thu Jan  1 01:00:01 CET 1970"
                          "XEN_BUILD_TIME=01:00:01"
                          "XEN_BUILD_HOST="
                          "ETHERBOOT_NICS="
                          "SMBIOS_REL_DATE=01/01/1970"
                          "VGABIOS_REL_DATE=01 Jan 1970"
                          ; QEMU_TRADITIONAL_LOC
                          ; QEMU_UPSTREAM_LOC
                          "SYSCONFIG_DIR=/tmp/etc/default"
                          (string-append "BASH_COMPLETION_DIR="
                                         (assoc-ref %outputs "out")
                                         "/etc/bash_completion.d")
                          (string-append "BOOT_DIR="
                                         (assoc-ref %outputs "out")
                                         "/boot")
                          (string-append "DEBUG_DIR="
                                         (assoc-ref %outputs "out")
                                         "/lib/debug")
                          (string-append "EFI_DIR="
                                         (assoc-ref %outputs "out")
                                         "/lib/efi") ; TODO lib64 ?
                          "MINIOS_UPSTREAM_URL="
                          ;(string-append "DISTDIR="
                          ;               (assoc-ref %outputs "out"))
)
       #:test-target "test"
       #:phases
       (modify-phases %standard-phases
        (add-after 'unpack 'unpack-mini-os
          (lambda* (#:key inputs #:allow-other-keys)
            (copy-recursively (assoc-ref inputs "mini-os") "extras/mini-os")))
        (add-after 'unpack-mini-os 'patch
          (lambda* (#:key inputs outputs #:allow-other-keys)
            (substitute* "tools/firmware/Rules.mk"
             (("override XEN_TARGET_ARCH = x86_32")
              (string-append "override XEN_TARGET_ARCH = x86_32
override CC = " (assoc-ref inputs "cross-gcc") "/bin/i686-linux-gnu-gcc"))
             (("^CFLAGS =$")
              (string-append "CFLAGS=-I" (assoc-ref inputs "cross-libc")
                             "/include\n")))
            (substitute* "config/x86_32.mk"
             (("CFLAGS += -m32 -march=i686")
              (string-append "CFLAGS += -march=i686 -I"
                             (assoc-ref inputs "cross-libc")
                             "/include")))
            ;; /var is not in /gnu/store , so don't try to create it.
            (substitute* '("tools/Makefile"
                           "tools/xenstore/Makefile"
                           "tools/xenpaging/Makefile")
             (("\\$\\(INSTALL_DIR\\) .*XEN_(DUMP|LOG|RUN|LIB|PAGING)_DIR.*")
              "\n")
             (("\\$\\(INSTALL_DIR\\) .*XEN_(RUN|LIB)_STORED.*")
              "\n"))
            ;; Prevent xen from creating /etc .
            (substitute* "tools/examples/Makefile"
             ((" install-readmes") "")
             ((" install-configs") ""))
            ;; Set rpath.
            (substitute* "tools/pygrub/setup.py"
             (("library_dirs =")
              ; TODO: extra_link_args = ['-Wl,-rpath=/opt/foo'],
              (string-append "runtime_library_dirs = ['"
                             (assoc-ref outputs "out")
                             "/lib'],\nlibrary_dirs =")))))
        (add-before 'configure 'patch-xen-script-directory
          (lambda* (#:key outputs #:allow-other-keys)
            (substitute* '("configure"
                           "tools/configure"
                           "docs/configure")
             (("XEN_SCRIPT_DIR=.*")
              (string-append "XEN_SCRIPT_DIR="
                             (assoc-ref outputs "out")
                             "/etc/xen/scripts")))))
        (add-before 'configure 'set-environment-up
          (lambda* (#:key make-flags #:allow-other-keys)
             (define (cross? x)
               (string-contains x "cross-i686-linux"))
             (define (filter-environment! filter-predicate
                                          environment-variable-names)
               (for-each
                (lambda (env-name)
                  (let* ((env-value (getenv env-name))
                         (search-path (search-path-as-string->list env-value))
                         (new-search-path (filter filter-predicate
                                                  search-path))
                         (new-env-value (list->search-path-as-string
                                         new-search-path ":")))
                    (setenv env-name new-env-value)))
                environment-variable-names))
             (setenv "CROSS_C_INCLUDE_PATH" (getenv "C_INCLUDE_PATH"))
             (setenv "CROSS_CPLUS_INCLUDE_PATH" (getenv "CPLUS_INCLUDE_PATH"))
             (setenv "CROSS_LIBRARY_PATH" (getenv "LIBRARY_PATH"))
             (filter-environment! cross?
              '("CROSS_C_INCLUDE_PATH" "CROSS_CPLUS_INCLUDE_PATH"
                "CROSS_LIBRARY_PATH"))
             (filter-environment! (lambda (e) (not (cross? e)))
              '("C_INCLUDE_PATH" "CPLUS_INCLUDE_PATH"
                "LIBRARY_PATH"))
             ;; Guix tries to be helpful and automatically adds
             ;; mini-os-git-checkout/include to the include path,
             ;; but actually we don't want it to be there (yet).
             (filter-environment! (lambda (e)
                                    (not
                                     (string-contains e
                                      "mini-os-git-checkout")))
              '("C_INCLUDE_PATH" "CPLUS_INCLUDE_PATH"
                "LIBRARY_PATH"))
            (setenv "EFI_VENDOR" "guix")))
        (replace 'build
          (lambda* (#:key make-flags #:allow-other-keys)
            (apply invoke "make" "world" make-flags))))))
     (list
      #:configure-flags
      #~(list "--enable-rpath"
              "--disable-qemu-traditional" ; tries to "git clone"
              "--disable-rombios"       ; tries to "git clone" via etherboot
              ;; TODO: Re-enable stubdom (it's "more secure" to use it).
              "--disable-stubdom"    ; tries to "git clone" old patched newlib
              (string-append "--with-initddir=" #$output "/etc/init.d")
              (string-append "--with-system-qemu="
                             (search-input-file %build-inputs
                                                "bin/qemu-system-i386"))
              (string-append "--with-system-seabios="
                             (search-input-file %build-inputs
                                                "share/firmware/bios.bin"))
              (string-append "--with-system-ovmf="
                             (search-input-file %build-inputs
                                                "share/firmware/ovmf_ia32.bin")))
      #:make-flags
      #~(list "-j" "1"
              "XEN_BUILD_DATE=Thu Jan  1 01:00:01 CET 1970"
              "XEN_BUILD_TIME=01:00:01"
              "XEN_BUILD_HOST="
              "ETHERBOOT_NICS="
              "SMBIOS_REL_DATE=01/01/1970"
              "VGABIOS_REL_DATE=01 Jan 1970"
              ;; QEMU_TRADITIONAL_LOC
              ;; QEMU_UPSTREAM_LOC
              "SYSCONFIG_DIR=/tmp/etc/default"
              (string-append "BASH_COMPLETION_DIR=" #$output
                             "/etc/bash_completion.d")
              (string-append "BOOT_DIR=" #$output "/boot")
              (string-append "DEBUG_DIR=" #$output "/lib/debug")
              (string-append "EFI_DIR=" #$output "/lib/efi")
              "MINIOS_UPSTREAM_URL=")
      #:test-target "test"
      #:phases
      #~(modify-phases %standard-phases
          (add-after 'unpack 'unpack-mini-os
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((mini-os (dirname (search-input-file inputs "minios.mk"))))
                (copy-recursively mini-os "extras/mini-os"))))
          (add-after 'unpack-mini-os 'patch
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "tools/firmware/Rules.mk"
                (("override XEN_TARGET_ARCH = x86_32" match)
                 (string-append match "\noverride CC = "
                                (search-input-file inputs
                                                   "bin/i686-linux-gnu-gcc")))
                (("^CFLAGS =$" match)
                 (string-append match " -I" (assoc-ref inputs "cross-libc")
                                "/include\n")))
              (substitute* "config/x86_32.mk"
                (("(CFLAGS += )-m32 -march=i686" _ match)
                 (string-append match "-march=i686 -I"
                                (assoc-ref inputs "cross-libc") "/include")))
              ;; /var is not in /gnu/store, so don't try to create it.
              (substitute* '("tools/Makefile"
                             "tools/xenstore/Makefile"
                             "tools/xenpaging/Makefile")
                (("\\$\\(INSTALL_DIR\\) .*XEN_(DUMP|LOG|RUN|LIB|PAGING)_DIR.*")
                 "\n")
                (("\\$\\(INSTALL_DIR\\) .*XEN_(RUN|LIB)_STORED.*") "\n"))
              ;; Prevent xen from creating /etc.
              (substitute* "tools/examples/Makefile"
                ((" install-(configs|readmes)") ""))
              ;; Set rpath.
              (substitute* "tools/pygrub/setup.py"
                (("library_dirs =" match)
                 ;; TODO: extra_link_args = ['-Wl,-rpath=/opt/foo'],
                 (string-append "runtime_library_dirs = ['" #$output "/lib'],"
                                "\n" match)))))
          (add-before 'configure 'patch-xen-script-directory
            (lambda _
              (substitute* '("configure"
                             "tools/configure"
                             "docs/configure")
                (("(XEN_SCRIPT_DIR=).*" _ match)
                 (string-append match #$output "/etc/xen/scripts")))))
          (add-before 'configure 'set-environment-up
            (lambda* (#:key make-flags #:allow-other-keys)
              (define (cross? x)
                (string-contains x "cross-i686-linux"))
              (define (filter-environment! filter-predicate
                                           environment-variable-names)
                (for-each
                 (lambda (env-name)
                   (let* ((env-value (getenv env-name))
                          (search-path (search-path-as-string->list env-value))
                          (new-search-path (filter filter-predicate
                                                   search-path))
                          (new-env-value (list->search-path-as-string
                                          new-search-path ":")))
                     (setenv env-name new-env-value)))
                 environment-variable-names))
              (setenv "CROSS_C_INCLUDE_PATH" (getenv "C_INCLUDE_PATH"))
              (setenv "CROSS_CPLUS_INCLUDE_PATH" (getenv "CPLUS_INCLUDE_PATH"))
              (setenv "CROSS_LIBRARY_PATH" (getenv "LIBRARY_PATH"))
              (filter-environment! cross?
                                   '("CROSS_C_INCLUDE_PATH"
                                     "CROSS_CPLUS_INCLUDE_PATH"
                                     "CROSS_LIBRARY_PATH"))
              (filter-environment! (lambda (e) (not (cross? e)))
                                   '("C_INCLUDE_PATH" "CPLUS_INCLUDE_PATH"
                                     "LIBRARY_PATH"))
              ;; Guix tries to be helpful and automatically adds
              ;; mini-os-git-checkout/include to the include path,
              ;; but actually we don't want it to be there (yet).
              (filter-environment! (lambda (e)
                                     (not
                                      (string-contains e
                                                       "mini-os-git-checkout")))
                                   '("C_INCLUDE_PATH" "CPLUS_INCLUDE_PATH"
                                     "LIBRARY_PATH"))
              (setenv "EFI_VENDOR" "guix")))
          (replace 'build
            (lambda* (#:key make-flags #:allow-other-keys)
              (apply invoke "make" "world" make-flags))))))
    (inputs
     `(("acpica" ,acpica) ; TODO: patch iasl invocation.
       ("bridge-utils" ,bridge-utils) ; TODO: patch invocations.
       ("glib" ,glib)
       ("iproute" ,iproute) ; TODO: patch invocations.
       ("libaio" ,libaio)
       ("libx11" ,libx11)
       ("yajl" ,yajl)
       ("ncurses" ,ncurses)
       ("openssl" ,openssl)
       ("ovmf" ,ovmf)
       ("pixman" ,pixman)
       ("qemu" ,qemu-minimal)
       ("seabios" ,seabios)
       ("util-linux" ,util-linux "lib") ; uuid
       ; TODO: ocaml-findlib, ocaml-nox.
       ("xz" ,xz) ; for liblzma
       ("zlib" ,zlib)))
     (list acpica                       ; TODO: patch iasl invocation
           bridge-utils                 ; TODO: patch invocations
           glib
           iproute                      ; TODO: patch invocations
           libaio
           libx11
           yajl
           ncurses
           openssl
           ovmf
           pixman
           qemu-minimal
           seabios
           `(,util-linux "lib")         ; uuid
           ;; TODO: ocaml-findlib, ocaml-nox.
           xz                           ; for liblzma
           zlib))
    (native-inputs
     `(("dev86" ,dev86)
       ("bison" ,bison)
       ("cmake" ,cmake-minimal)
       ("figlet" ,figlet)
       ("flex" ,flex)
       ("gettext" ,gettext-minimal)
       ("libnl" ,libnl)
       ("mini-os"
       ,(origin
     (list dev86
       bison
       cmake-minimal
       figlet
       flex
       gettext-minimal
       libnl
       (origin
         (method git-fetch)
         (uri (git-reference
               (url "https://xenbits.xen.org/git-http/mini-os.git")


@@ 2459,17 2445,17 @@ override CC = " (assoc-ref inputs "cross-gcc") "/bin/i686-linux-gnu-gcc"))
               (commit "f57858b7e8ef8dd48394dd08cec2bef3c9fb92f5")))
         (sha256
          (base32 "04y7grxs47amvjcq1rq4jgk174rhid5m2z9w8wrv7rfd2xhazxy1"))
         (file-name (string-append name "-" version "-mini-os-git-checkout"))))
       ("perl" ,perl)
       ; TODO: markdown
       ("pkg-config" ,pkg-config)
       ("python" ,python-2)
       ("wget" ,wget)
       ("cross-gcc" ,(cross-gcc "i686-linux-gnu"
                                #:xbinutils (cross-binutils "i686-linux-gnu")
                                #:libc (cross-libc "i686-linux-gnu")))
       ("cross-libc" ,(cross-libc "i686-linux-gnu")) ; header files
       ("cross-libc-static" ,(cross-libc "i686-linux-gnu") "static")))
         (file-name (string-append name "-" version "-mini-os-git-checkout")))
       perl
       ;; TODO: markdown.
       pkg-config
       python-2
       wget
       (cross-gcc "i686-linux-gnu"
                  #:xbinutils (cross-binutils "i686-linux-gnu")
                  #:libc (cross-libc "i686-linux-gnu"))
       (cross-libc "i686-linux-gnu") ; header files
       `(,(cross-libc "i686-linux-gnu") "static")))
    (home-page "https://xenproject.org/")
    (synopsis "Xen Virtual Machine Monitor")
    (description "This package provides the Xen Virtual Machine Monitor