gnu: grub: Remove input labels and use gexps.
* gnu/packages/bootloaders.scm (grub)[arguments]: Use gexps. [inputs, native-inputs]: Remove labels. (grub-minimal, grub-coreboot, grub-efi, grub-efi32) (grub-hybrid): Likewise. Change-Id: I2773e6d96d170fae991d9c5db9e10196ea603371 Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>master
parent
e6facbe069
commit
b9c38f26f1
|
@ -128,15 +128,18 @@
|
|||
(("exit 99") "exit 77"))))))
|
||||
(build-system gnu-build-system)
|
||||
(arguments
|
||||
`(#:configure-flags
|
||||
(list #:configure-flags
|
||||
;; Counterintuitively, this *disables* a spurious Python dependency by
|
||||
;; calling the ‘true’ binary instead. Python is only needed during
|
||||
;; bootstrapping (for genptl.py), not when building from a release.
|
||||
(list "PYTHON=true")
|
||||
;; Grub fails to load modules stripped with --strip-unneeded.
|
||||
#:strip-flags '("--strip-debug" "--enable-deterministic-archives")
|
||||
#~(list "PYTHON=true")
|
||||
|
||||
;; GRUB fails to load modules stripped with --strip-unneeded.
|
||||
#:strip-flags
|
||||
#~(list "--strip-debug" "--enable-deterministic-archives")
|
||||
|
||||
#:phases
|
||||
(modify-phases %standard-phases
|
||||
#~(modify-phases %standard-phases
|
||||
(add-after 'unpack 'patch-stuff
|
||||
(lambda* (#:key native-inputs inputs #:allow-other-keys)
|
||||
(substitute* "grub-core/Makefile.in"
|
||||
|
@ -145,17 +148,15 @@
|
|||
;; Give the absolute file name of 'mdadm', used to determine the
|
||||
;; root file system when it's a RAID device. Failing to do that,
|
||||
;; 'grub-probe' silently fails if 'mdadm' is not in $PATH.
|
||||
(when (assoc-ref inputs "mdadm")
|
||||
(let ((mdadm (false-if-exception
|
||||
(search-input-file inputs "/sbin/mdadm"))))
|
||||
(when mdadm
|
||||
(substitute* "grub-core/osdep/linux/getroot.c"
|
||||
(("argv\\[0\\] = \"mdadm\"")
|
||||
(string-append "argv[0] = \""
|
||||
(assoc-ref inputs "mdadm")
|
||||
"/sbin/mdadm\""))))
|
||||
(string-append "argv[0] = \"" mdadm "/sbin/mdadm\"")))))
|
||||
|
||||
;; Make the font visible.
|
||||
(copy-file (assoc-ref (or native-inputs inputs)
|
||||
"unifont")
|
||||
"unifont.bdf.gz")
|
||||
(copy-file #+unifont "unifont.bdf.gz")
|
||||
(system* "gunzip" "unifont.bdf.gz")
|
||||
|
||||
;; Give the absolute file name of 'ckbcomp'.
|
||||
|
@ -191,58 +192,65 @@
|
|||
(substitute* "Makefile.in"
|
||||
(("test_unset grub_func_test")
|
||||
"test_unset")))))
|
||||
|
||||
;; Disable tests on ARM and AARCH64 platforms or when cross-compiling.
|
||||
#:tests? ,(not (or (any (cute string-prefix? <> (or (%current-target-system)
|
||||
(%current-system)))
|
||||
#:tests? (not (or (any (cute string-prefix? <> (%current-system))
|
||||
'("arm" "aarch64"))
|
||||
(%current-target-system)))))
|
||||
(inputs
|
||||
`(("gettext" ,gettext-minimal)
|
||||
(append (list gettext-minimal freetype ncurses
|
||||
|
||||
;; Console-setup's ckbcomp is invoked by grub-kbdcomp. It
|
||||
;; is required for generating alternative keyboard layouts.
|
||||
console-setup)
|
||||
|
||||
;; Depend on LVM2 for libdevmapper, used by 'grub-probe' and
|
||||
;; 'grub-install' to recognize mapped devices (LUKS, etc.)
|
||||
,@(if (member (or (%current-target-system)
|
||||
(if (member (or (%current-target-system)
|
||||
(%current-system))
|
||||
(package-supported-systems lvm2))
|
||||
`(("lvm2" ,lvm2))
|
||||
(list lvm2)
|
||||
'())
|
||||
|
||||
;; Depend on mdadm, which is invoked by 'grub-probe' and 'grub-install'
|
||||
;; to determine whether the root file system is RAID.
|
||||
,@(if (member (or (%current-target-system)
|
||||
;; Depend on mdadm, which is invoked by 'grub-probe' and
|
||||
;; 'grub-install' to determine whether the root file system is
|
||||
;; RAID.
|
||||
(if (member (or (%current-target-system)
|
||||
(%current-system))
|
||||
(package-supported-systems mdadm))
|
||||
`(("mdadm" ,mdadm))
|
||||
(list mdadm)
|
||||
'())
|
||||
|
||||
;; Console-setup's ckbcomp is invoked by grub-kbdcomp. It is required
|
||||
;; for generating alternative keyboard layouts.
|
||||
("console-setup" ,console-setup)
|
||||
|
||||
;; Needed for ‘grub-mount’, the only reliable way to tell whether a given
|
||||
;; file system will be readable by GRUB without rebooting.
|
||||
,@(if (member (or (%current-target-system)
|
||||
;; Needed for ‘grub-mount’, the only reliable way to tell whether
|
||||
;; a given file system will be readable by GRUB without
|
||||
;; rebooting.
|
||||
(if (member (or (%current-target-system)
|
||||
(%current-system))
|
||||
(package-supported-systems fuse-2))
|
||||
`(("fuse" ,fuse-2))
|
||||
'())
|
||||
|
||||
("freetype" ,freetype)
|
||||
;; ("libusb" ,libusb)
|
||||
("ncurses" ,ncurses)))
|
||||
(list fuse-2)
|
||||
'())))
|
||||
(native-inputs
|
||||
`(("pkg-config" ,pkg-config)
|
||||
("unifont" ,unifont)
|
||||
("bison" ,bison)
|
||||
("flex" ,flex)
|
||||
("texinfo" ,texinfo)
|
||||
("help2man" ,help2man)
|
||||
("freetype" ,freetype) ;native version needed for build-grub-mkfont
|
||||
(append (list pkg-config
|
||||
bison
|
||||
flex
|
||||
texinfo
|
||||
help2man
|
||||
freetype ;native version needed for build-grub-mkfont
|
||||
|
||||
;; Dependencies of the test suite.
|
||||
parted
|
||||
xorriso)
|
||||
|
||||
;; For the test suite, the "real" QEMU is needed because several
|
||||
;; targets are used.
|
||||
(if (member (%current-system) (package-supported-systems qemu-minimal))
|
||||
(list qemu-minimal)
|
||||
'())
|
||||
|
||||
;; XXX: When building GRUB 2.02 on 32-bit x86, we need a binutils
|
||||
;; capable of assembling 64-bit instructions. However, our default
|
||||
;; binutils on 32-bit x86 is not 64-bit capable.
|
||||
,@(if (string-match "^i[3456]86-" (%current-system))
|
||||
(if (string-match "^i[3456]86-" (%current-system))
|
||||
(let ((binutils (package/inherit
|
||||
binutils
|
||||
(name "binutils-i386")
|
||||
|
@ -250,18 +258,10 @@
|
|||
(substitute-keyword-arguments (package-arguments binutils)
|
||||
((#:configure-flags flags ''())
|
||||
`(cons "--enable-64-bit-bfd" ,flags)))))))
|
||||
`(("ld-wrapper" ,(make-ld-wrapper "ld-wrapper-i386"
|
||||
#:binutils binutils))
|
||||
("binutils" ,binutils)))
|
||||
'())
|
||||
|
||||
;; Dependencies for the test suite. The "real" QEMU is needed here,
|
||||
;; because several targets are used.
|
||||
("parted" ,parted)
|
||||
,@(if (member (%current-system) (package-supported-systems qemu-minimal))
|
||||
`(("qemu" ,qemu-minimal))
|
||||
'())
|
||||
("xorriso" ,xorriso)))
|
||||
(list (make-ld-wrapper "ld-wrapper-i386"
|
||||
#:binutils binutils)
|
||||
binutils))
|
||||
'())))
|
||||
(home-page "https://www.gnu.org/software/grub/")
|
||||
(synopsis "GRand Unified Boot loader")
|
||||
(description
|
||||
|
@ -286,24 +286,21 @@ menu to select one of the installed operating systems.")
|
|||
(delete "help2man" "texinfo" "parted" "qemu" "xorriso")))
|
||||
(arguments
|
||||
(substitute-keyword-arguments (package-arguments grub)
|
||||
((#:configure-flags _ ''())
|
||||
'(list "PYTHON=true"))
|
||||
((#:configure-flags _ #~'())
|
||||
#~(list "PYTHON=true"))
|
||||
((#:tests? _ #t)
|
||||
#f)
|
||||
((#:phases phases '%standard-phases)
|
||||
`(modify-phases ,phases
|
||||
((#:phases phases #~%standard-phases)
|
||||
#~(modify-phases #$phases
|
||||
(replace 'patch-stuff
|
||||
(lambda* (#:key native-inputs inputs #:allow-other-keys)
|
||||
(substitute* "grub-core/Makefile.in"
|
||||
(("/bin/sh") (which "sh")))
|
||||
(("/bin/sh")
|
||||
(which "sh")))
|
||||
|
||||
;; Make the font visible.
|
||||
(copy-file (assoc-ref (or native-inputs inputs)
|
||||
"unifont")
|
||||
"unifont.bdf.gz")
|
||||
(system* "gunzip" "unifont.bdf.gz")
|
||||
|
||||
#t))))))))
|
||||
(copy-file #+unifont "unifont.bdf.gz")
|
||||
(system* "gunzip" "unifont.bdf.gz")))))))))
|
||||
|
||||
(define-public grub-coreboot
|
||||
(package
|
||||
|
@ -311,14 +308,13 @@ menu to select one of the installed operating systems.")
|
|||
(name "grub-coreboot")
|
||||
(synopsis "GRand Unified Boot loader (Coreboot payload version)")
|
||||
(arguments
|
||||
`(,@(substitute-keyword-arguments (package-arguments grub)
|
||||
((#:phases phases '%standard-phases)
|
||||
`(modify-phases ,phases
|
||||
(substitute-keyword-arguments (package-arguments grub)
|
||||
((#:phases phases #~%standard-phases)
|
||||
#~(modify-phases #$phases
|
||||
(add-before 'check 'disable-broken-tests
|
||||
(lambda _
|
||||
(setenv "DISABLE_HARD_ERRORS" "1")
|
||||
(setenv
|
||||
"XFAIL_TESTS"
|
||||
(setenv "XFAIL_TESTS"
|
||||
(string-join
|
||||
;; TODO: All the tests below use grub shell
|
||||
;; (tests/util/grub-shell.in), and here grub-shell uses
|
||||
|
@ -326,8 +322,7 @@ menu to select one of the installed operating systems.")
|
|||
;; don't have a Coreboot package in Guix yet these tests
|
||||
;; are disabled. See the Guix bug #64667 for more details
|
||||
;; (https://debbugs.gnu.org/cgi/bugreport.cgi?bug=64667).
|
||||
(list
|
||||
"pata_test"
|
||||
(list "pata_test"
|
||||
"ahci_test"
|
||||
"uhci_test"
|
||||
"ehci_test"
|
||||
|
@ -367,10 +362,8 @@ menu to select one of the installed operating systems.")
|
|||
"test_unset"
|
||||
"file_filter_test")
|
||||
" "))))))
|
||||
((#:configure-flags flags
|
||||
''())
|
||||
`(cons* "--with-platform=coreboot"
|
||||
,flags)))))))
|
||||
((#:configure-flags flags #~'())
|
||||
#~(cons* "--with-platform=coreboot" #$flags))))))
|
||||
|
||||
(define-public grub-efi
|
||||
(package
|
||||
|
@ -385,39 +378,38 @@ menu to select one of the installed operating systems.")
|
|||
(modify-inputs (package-native-inputs grub)
|
||||
(delete "parted" "qemu" "xorriso")))
|
||||
(arguments
|
||||
`(;; TODO: Tests need a UEFI firmware for qemu. There is one at
|
||||
;; TODO: Tests need a UEFI firmware for qemu. There is one at
|
||||
;; https://github.com/tianocore/edk2/tree/master/OvmfPkg .
|
||||
;; Search for 'OVMF' in "tests/util/grub-shell.in".
|
||||
,@(substitute-keyword-arguments (package-arguments grub)
|
||||
(substitute-keyword-arguments (package-arguments grub)
|
||||
((#:tests? _ #f) #f)
|
||||
((#:configure-flags flags ''())
|
||||
`(cons* "--with-platform=efi"
|
||||
,@(if (string-prefix? "x86_64"
|
||||
((#:configure-flags flags #~'())
|
||||
#~(cons* "--with-platform=efi"
|
||||
#$@(if (string-prefix? "x86_64"
|
||||
(or (%current-target-system)
|
||||
(%current-system)))
|
||||
'("--enable-stack-protector") ; EFI-only for now
|
||||
'())
|
||||
,flags))
|
||||
#~("--enable-stack-protector") ;EFI-only for now
|
||||
#~())
|
||||
#$flags))
|
||||
((#:phases phases)
|
||||
`(modify-phases ,phases
|
||||
#~(modify-phases #$phases
|
||||
(add-after 'patch-stuff 'use-absolute-efibootmgr-path
|
||||
(lambda* (#:key inputs #:allow-other-keys)
|
||||
(substitute* "grub-core/osdep/unix/platform.c"
|
||||
(("efibootmgr")
|
||||
(search-input-file inputs
|
||||
"/sbin/efibootmgr")))))
|
||||
(search-input-file inputs "/sbin/efibootmgr")))))
|
||||
(add-after 'patch-stuff 'use-absolute-mtools-path
|
||||
(lambda* (#:key inputs #:allow-other-keys)
|
||||
(let ((mtools (assoc-ref inputs "mtools")))
|
||||
(substitute* "util/grub-mkrescue.c"
|
||||
(("\"mformat\"")
|
||||
(string-append "\"" mtools
|
||||
"/bin/mformat\"")))
|
||||
(string-append "\""
|
||||
(search-input-file inputs "/bin/mformat")
|
||||
"\"")))
|
||||
(substitute* "util/grub-mkrescue.c"
|
||||
(("\"mcopy\"")
|
||||
(string-append "\"" mtools
|
||||
"/bin/mcopy\"")))
|
||||
#t))))))))))
|
||||
(string-append "\""
|
||||
(search-input-file inputs "/bin/mcopy")
|
||||
"\"")))))))))))
|
||||
|
||||
(define-public grub-efi32
|
||||
(package
|
||||
|
@ -425,17 +417,19 @@ menu to select one of the installed operating systems.")
|
|||
(name "grub-efi32")
|
||||
(synopsis "GRand Unified Boot loader (UEFI 32bit version)")
|
||||
(arguments
|
||||
`(,@(substitute-keyword-arguments (package-arguments grub-efi)
|
||||
((#:configure-flags flags ''())
|
||||
`(cons*
|
||||
,@(cond ((target-x86?) '("--target=i386"))
|
||||
(substitute-keyword-arguments (package-arguments grub-efi)
|
||||
((#:configure-flags flags #~'())
|
||||
#~(cons* #$@(cond ((target-x86?)
|
||||
#~("--target=i386"))
|
||||
((target-aarch64?)
|
||||
(list "--target=arm"
|
||||
#~("--target=arm"
|
||||
(string-append "TARGET_CC="
|
||||
(cc-for-target "arm-linux-gnueabihf"))))
|
||||
((target-arm?) '("--target=arm"))
|
||||
(else '()))
|
||||
,flags)))))
|
||||
#$(cc-for-target
|
||||
"arm-linux-gnueabihf"))))
|
||||
((target-arm?)
|
||||
#~("--target=arm"))
|
||||
(else #~()))
|
||||
#$flags))))
|
||||
(native-inputs
|
||||
(if (target-aarch64?)
|
||||
(modify-inputs (package-native-inputs grub-efi)
|
||||
|
@ -459,24 +453,26 @@ menu to select one of the installed operating systems.")
|
|||
(prepend grub)))
|
||||
(arguments
|
||||
(substitute-keyword-arguments (package-arguments grub-efi)
|
||||
((#:modules modules `((guix build utils) (guix build gnu-build-system)))
|
||||
((#:modules modules `((guix build utils)
|
||||
(guix build gnu-build-system)))
|
||||
`((ice-9 ftw) ,@modules))
|
||||
((#:phases phases)
|
||||
`(modify-phases ,phases
|
||||
#~(modify-phases #$phases
|
||||
(add-after 'install 'install-non-efi
|
||||
(lambda* (#:key inputs outputs #:allow-other-keys)
|
||||
(let ((input-dir (search-input-directory inputs
|
||||
"/lib/grub"))
|
||||
(let ((input-dir (search-input-directory inputs "/lib/grub"))
|
||||
(output-dir (string-append (assoc-ref outputs "out")
|
||||
"/lib/grub")))
|
||||
(for-each
|
||||
(lambda (basename)
|
||||
(if (not (or (string-prefix? "." basename)
|
||||
(file-exists? (string-append output-dir "/" basename))))
|
||||
(symlink (string-append input-dir "/" basename)
|
||||
(string-append output-dir "/" basename))))
|
||||
(scandir input-dir))
|
||||
#t)))))))))
|
||||
(for-each (lambda (basename)
|
||||
(unless (or (string-prefix? "." basename)
|
||||
(file-exists? (string-append
|
||||
output-dir "/"
|
||||
basename)))
|
||||
(symlink (string-append input-dir "/"
|
||||
basename)
|
||||
(string-append output-dir "/"
|
||||
basename))))
|
||||
(scandir input-dir)))))))))))
|
||||
|
||||
(define-public (make-grub-efi-netboot name subdir)
|
||||
"Make a grub-efi-netboot package named NAME, which will be able to boot over
|
||||
|
|
Reference in New Issue