me
/
guix
Archived
1
0
Fork 0

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
Ludovic Courtès 2024-06-03 22:01:23 +02:00 committed by Maxim Cournoyer
parent e6facbe069
commit b9c38f26f1
No known key found for this signature in database
GPG Key ID: 1260E46482E63562
1 changed files with 254 additions and 258 deletions

View File

@ -128,140 +128,140 @@
(("exit 99") "exit 77")))))) (("exit 99") "exit 77"))))))
(build-system gnu-build-system) (build-system gnu-build-system)
(arguments (arguments
`(#:configure-flags (list #:configure-flags
;; Counterintuitively, this *disables* a spurious Python dependency by ;; Counterintuitively, this *disables* a spurious Python dependency by
;; calling the true binary instead. Python is only needed during ;; calling the true binary instead. Python is only needed during
;; bootstrapping (for genptl.py), not when building from a release. ;; bootstrapping (for genptl.py), not when building from a release.
(list "PYTHON=true") #~(list "PYTHON=true")
;; Grub fails to load modules stripped with --strip-unneeded.
#:strip-flags '("--strip-debug" "--enable-deterministic-archives")
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'patch-stuff
(lambda* (#:key native-inputs inputs #:allow-other-keys)
(substitute* "grub-core/Makefile.in"
(("/bin/sh") (which "sh")))
;; Give the absolute file name of 'mdadm', used to determine the ;; GRUB fails to load modules stripped with --strip-unneeded.
;; root file system when it's a RAID device. Failing to do that, #:strip-flags
;; 'grub-probe' silently fails if 'mdadm' is not in $PATH. #~(list "--strip-debug" "--enable-deterministic-archives")
(when (assoc-ref inputs "mdadm")
(substitute* "grub-core/osdep/linux/getroot.c"
(("argv\\[0\\] = \"mdadm\"")
(string-append "argv[0] = \""
(assoc-ref inputs "mdadm")
"/sbin/mdadm\""))))
;; Make the font visible. #:phases
(copy-file (assoc-ref (or native-inputs inputs) #~(modify-phases %standard-phases
"unifont") (add-after 'unpack 'patch-stuff
"unifont.bdf.gz") (lambda* (#:key native-inputs inputs #:allow-other-keys)
(system* "gunzip" "unifont.bdf.gz") (substitute* "grub-core/Makefile.in"
(("/bin/sh") (which "sh")))
;; Give the absolute file name of 'ckbcomp'. ;; Give the absolute file name of 'mdadm', used to determine the
(substitute* "util/grub-kbdcomp.in" ;; root file system when it's a RAID device. Failing to do that,
(("^ckbcomp ") ;; 'grub-probe' silently fails if 'mdadm' is not in $PATH.
(string-append (let ((mdadm (false-if-exception
(search-input-file inputs "/bin/ckbcomp") (search-input-file inputs "/sbin/mdadm"))))
" "))))) (when mdadm
(add-after 'unpack 'set-freetype-variables (substitute* "grub-core/osdep/linux/getroot.c"
;; These variables need to be set to the native versions of the (("argv\\[0\\] = \"mdadm\"")
;; dependencies because they are used to build programs which are (string-append "argv[0] = \"" mdadm "/sbin/mdadm\"")))))
;; executed during build time.
(lambda* (#:key native-inputs #:allow-other-keys) ;; Make the font visible.
(when (assoc-ref native-inputs "freetype") (copy-file #+unifont "unifont.bdf.gz")
(let ((freetype (assoc-ref native-inputs "freetype"))) (system* "gunzip" "unifont.bdf.gz")
(setenv "BUILD_FREETYPE_LIBS"
(string-append "-L" freetype ;; Give the absolute file name of 'ckbcomp'.
"/lib -lfreetype")) (substitute* "util/grub-kbdcomp.in"
(setenv "BUILD_FREETYPE_CFLAGS" (("^ckbcomp ")
(string-append "-I" freetype (string-append
"/include/freetype2")))))) (search-input-file inputs "/bin/ckbcomp")
(add-before 'check 'disable-flaky-test " ")))))
(lambda _ (add-after 'unpack 'set-freetype-variables
;; This test is unreliable. For more information, see: ;; These variables need to be set to the native versions of the
;; <https://bugs.gnu.org/26936>. ;; dependencies because they are used to build programs which are
(substitute* "Makefile.in" ;; executed during build time.
(("grub_cmd_date grub_cmd_set_date grub_cmd_sleep") (lambda* (#:key native-inputs #:allow-other-keys)
"grub_cmd_date grub_cmd_sleep")))) (when (assoc-ref native-inputs "freetype")
(add-before 'check 'disable-pixel-perfect-test (let ((freetype (assoc-ref native-inputs "freetype")))
(lambda _ (setenv "BUILD_FREETYPE_LIBS"
;; This test compares many screenshots rendered with an older (string-append "-L" freetype
;; Unifont (9.0.06) than that packaged in Guix. "/lib -lfreetype"))
(substitute* "Makefile.in" (setenv "BUILD_FREETYPE_CFLAGS"
(("test_unset grub_func_test") (string-append "-I" freetype
"test_unset"))))) "/include/freetype2"))))))
;; Disable tests on ARM and AARCH64 platforms or when cross-compiling. (add-before 'check 'disable-flaky-test
#:tests? ,(not (or (any (cute string-prefix? <> (or (%current-target-system) (lambda _
(%current-system))) ;; This test is unreliable. For more information, see:
'("arm" "aarch64")) ;; <https://bugs.gnu.org/26936>.
(%current-target-system))))) (substitute* "Makefile.in"
(("grub_cmd_date grub_cmd_set_date grub_cmd_sleep")
"grub_cmd_date grub_cmd_sleep"))))
(add-before 'check 'disable-pixel-perfect-test
(lambda _
;; This test compares many screenshots rendered with an older
;; Unifont (9.0.06) than that packaged in Guix.
(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? <> (%current-system))
'("arm" "aarch64"))
(%current-target-system)))))
(inputs (inputs
`(("gettext" ,gettext-minimal) (append (list gettext-minimal freetype ncurses
;; Depend on LVM2 for libdevmapper, used by 'grub-probe' and ;; Console-setup's ckbcomp is invoked by grub-kbdcomp. It
;; 'grub-install' to recognize mapped devices (LUKS, etc.) ;; is required for generating alternative keyboard layouts.
,@(if (member (or (%current-target-system) console-setup)
(%current-system))
(package-supported-systems lvm2))
`(("lvm2" ,lvm2))
'())
;; Depend on mdadm, which is invoked by 'grub-probe' and 'grub-install' ;; Depend on LVM2 for libdevmapper, used by 'grub-probe' and
;; to determine whether the root file system is RAID. ;; 'grub-install' to recognize mapped devices (LUKS, etc.)
,@(if (member (or (%current-target-system) (if (member (or (%current-target-system)
(%current-system)) (%current-system))
(package-supported-systems mdadm)) (package-supported-systems lvm2))
`(("mdadm" ,mdadm)) (list lvm2)
'()) '())
;; Console-setup's ckbcomp is invoked by grub-kbdcomp. It is required ;; Depend on mdadm, which is invoked by 'grub-probe' and
;; for generating alternative keyboard layouts. ;; 'grub-install' to determine whether the root file system is
("console-setup" ,console-setup) ;; RAID.
(if (member (or (%current-target-system)
(%current-system))
(package-supported-systems mdadm))
(list mdadm)
'())
;; Needed for grub-mount, the only reliable way to tell whether a given ;; Needed for grub-mount, the only reliable way to tell whether
;; file system will be readable by GRUB without rebooting. ;; a given file system will be readable by GRUB without
,@(if (member (or (%current-target-system) ;; rebooting.
(%current-system)) (if (member (or (%current-target-system)
(package-supported-systems fuse-2)) (%current-system))
`(("fuse" ,fuse-2)) (package-supported-systems fuse-2))
'()) (list fuse-2)
'())))
("freetype" ,freetype)
;; ("libusb" ,libusb)
("ncurses" ,ncurses)))
(native-inputs (native-inputs
`(("pkg-config" ,pkg-config) (append (list pkg-config
("unifont" ,unifont) bison
("bison" ,bison) flex
("flex" ,flex) texinfo
("texinfo" ,texinfo) help2man
("help2man" ,help2man) freetype ;native version needed for build-grub-mkfont
("freetype" ,freetype) ;native version needed for build-grub-mkfont
;; XXX: When building GRUB 2.02 on 32-bit x86, we need a binutils ;; Dependencies of the test suite.
;; capable of assembling 64-bit instructions. However, our default parted
;; binutils on 32-bit x86 is not 64-bit capable. xorriso)
,@(if (string-match "^i[3456]86-" (%current-system))
(let ((binutils (package/inherit
binutils
(name "binutils-i386")
(arguments
(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, ;; For the test suite, the "real" QEMU is needed because several
;; because several targets are used. ;; targets are used.
("parted" ,parted) (if (member (%current-system) (package-supported-systems qemu-minimal))
,@(if (member (%current-system) (package-supported-systems qemu-minimal)) (list qemu-minimal)
`(("qemu" ,qemu-minimal)) '())
'())
("xorriso" ,xorriso))) ;; 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))
(let ((binutils (package/inherit
binutils
(name "binutils-i386")
(arguments
(substitute-keyword-arguments (package-arguments binutils)
((#:configure-flags flags ''())
`(cons "--enable-64-bit-bfd" ,flags)))))))
(list (make-ld-wrapper "ld-wrapper-i386"
#:binutils binutils)
binutils))
'())))
(home-page "https://www.gnu.org/software/grub/") (home-page "https://www.gnu.org/software/grub/")
(synopsis "GRand Unified Boot loader") (synopsis "GRand Unified Boot loader")
(description (description
@ -286,24 +286,21 @@ menu to select one of the installed operating systems.")
(delete "help2man" "texinfo" "parted" "qemu" "xorriso"))) (delete "help2man" "texinfo" "parted" "qemu" "xorriso")))
(arguments (arguments
(substitute-keyword-arguments (package-arguments grub) (substitute-keyword-arguments (package-arguments grub)
((#:configure-flags _ ''()) ((#:configure-flags _ #~'())
'(list "PYTHON=true")) #~(list "PYTHON=true"))
((#:tests? _ #t) ((#:tests? _ #t)
#f) #f)
((#:phases phases '%standard-phases) ((#:phases phases #~%standard-phases)
`(modify-phases ,phases #~(modify-phases #$phases
(replace 'patch-stuff (replace 'patch-stuff
(lambda* (#:key native-inputs inputs #:allow-other-keys) (lambda* (#:key native-inputs inputs #:allow-other-keys)
(substitute* "grub-core/Makefile.in" (substitute* "grub-core/Makefile.in"
(("/bin/sh") (which "sh"))) (("/bin/sh")
(which "sh")))
;; Make the font visible. ;; Make the font visible.
(copy-file (assoc-ref (or native-inputs inputs) (copy-file #+unifont "unifont.bdf.gz")
"unifont") (system* "gunzip" "unifont.bdf.gz")))))))))
"unifont.bdf.gz")
(system* "gunzip" "unifont.bdf.gz")
#t))))))))
(define-public grub-coreboot (define-public grub-coreboot
(package (package
@ -311,66 +308,62 @@ menu to select one of the installed operating systems.")
(name "grub-coreboot") (name "grub-coreboot")
(synopsis "GRand Unified Boot loader (Coreboot payload version)") (synopsis "GRand Unified Boot loader (Coreboot payload version)")
(arguments (arguments
`(,@(substitute-keyword-arguments (package-arguments grub) (substitute-keyword-arguments (package-arguments grub)
((#:phases phases '%standard-phases) ((#:phases phases #~%standard-phases)
`(modify-phases ,phases #~(modify-phases #$phases
(add-before 'check 'disable-broken-tests (add-before 'check 'disable-broken-tests
(lambda _ (lambda _
(setenv "DISABLE_HARD_ERRORS" "1") (setenv "DISABLE_HARD_ERRORS" "1")
(setenv (setenv "XFAIL_TESTS"
"XFAIL_TESTS" (string-join
(string-join ;; TODO: All the tests below use grub shell
;; TODO: All the tests below use grub shell ;; (tests/util/grub-shell.in), and here grub-shell uses
;; (tests/util/grub-shell.in), and here grub-shell uses ;; QEMU and a Coreboot image to run the tests. Since we
;; QEMU and a Coreboot image to run the tests. Since we ;; don't have a Coreboot package in Guix yet these tests
;; don't have a Coreboot package in Guix yet these tests ;; are disabled. See the Guix bug #64667 for more details
;; are disabled. See the Guix bug #64667 for more details ;; (https://debbugs.gnu.org/cgi/bugreport.cgi?bug=64667).
;; (https://debbugs.gnu.org/cgi/bugreport.cgi?bug=64667). (list "pata_test"
(list "ahci_test"
"pata_test" "uhci_test"
"ahci_test" "ehci_test"
"uhci_test" "example_grub_script_test"
"ehci_test" "ohci_test"
"example_grub_script_test" "grub_script_eval"
"ohci_test" "grub_script_echo1"
"grub_script_eval" "grub_script_test"
"grub_script_echo1" "grub_script_leading_whitespace"
"grub_script_test" "grub_script_echo_keywords"
"grub_script_leading_whitespace" "grub_script_vars1"
"grub_script_echo_keywords" "grub_script_for1"
"grub_script_vars1" "grub_script_while1"
"grub_script_for1" "grub_script_if"
"grub_script_while1" "grub_script_comments"
"grub_script_if" "grub_script_functions"
"grub_script_comments" "grub_script_continue"
"grub_script_functions" "grub_script_break"
"grub_script_continue" "grub_script_shift"
"grub_script_break" "grub_script_blockarg"
"grub_script_shift" "grub_script_return"
"grub_script_blockarg" "grub_script_setparams"
"grub_script_return" "grub_cmd_date"
"grub_script_setparams" "grub_cmd_set_date"
"grub_cmd_date" "grub_cmd_sleep"
"grub_cmd_set_date" "grub_cmd_regexp"
"grub_cmd_sleep" "grub_cmd_test"
"grub_cmd_regexp" "grub_script_not"
"grub_cmd_test" "grub_cmd_echo"
"grub_script_not" "grub_script_expansion"
"grub_cmd_echo" "grub_script_gettext"
"grub_script_expansion" "grub_script_escape_comma"
"grub_script_gettext" "help_test"
"grub_script_escape_comma" "grub_script_strcmp"
"help_test" "test_sha512sum"
"grub_script_strcmp" "grub_cmd_tr"
"test_sha512sum" "test_unset"
"grub_cmd_tr" "file_filter_test")
"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 (define-public grub-efi
(package (package
@ -385,39 +378,38 @@ menu to select one of the installed operating systems.")
(modify-inputs (package-native-inputs grub) (modify-inputs (package-native-inputs grub)
(delete "parted" "qemu" "xorriso"))) (delete "parted" "qemu" "xorriso")))
(arguments (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 . ;; https://github.com/tianocore/edk2/tree/master/OvmfPkg .
;; Search for 'OVMF' in "tests/util/grub-shell.in". ;; Search for 'OVMF' in "tests/util/grub-shell.in".
,@(substitute-keyword-arguments (package-arguments grub) (substitute-keyword-arguments (package-arguments grub)
((#:tests? _ #f) #f) ((#:tests? _ #f) #f)
((#:configure-flags flags ''()) ((#:configure-flags flags #~'())
`(cons* "--with-platform=efi" #~(cons* "--with-platform=efi"
,@(if (string-prefix? "x86_64" #$@(if (string-prefix? "x86_64"
(or (%current-target-system) (or (%current-target-system)
(%current-system))) (%current-system)))
'("--enable-stack-protector") ; EFI-only for now #~("--enable-stack-protector") ;EFI-only for now
'()) #~())
,flags)) #$flags))
((#:phases phases) ((#:phases phases)
`(modify-phases ,phases #~(modify-phases #$phases
(add-after 'patch-stuff 'use-absolute-efibootmgr-path (add-after 'patch-stuff 'use-absolute-efibootmgr-path
(lambda* (#:key inputs #:allow-other-keys) (lambda* (#:key inputs #:allow-other-keys)
(substitute* "grub-core/osdep/unix/platform.c" (substitute* "grub-core/osdep/unix/platform.c"
(("efibootmgr") (("efibootmgr")
(search-input-file inputs (search-input-file inputs "/sbin/efibootmgr")))))
"/sbin/efibootmgr"))))) (add-after 'patch-stuff 'use-absolute-mtools-path
(add-after 'patch-stuff 'use-absolute-mtools-path (lambda* (#:key inputs #:allow-other-keys)
(lambda* (#:key inputs #:allow-other-keys) (substitute* "util/grub-mkrescue.c"
(let ((mtools (assoc-ref inputs "mtools"))) (("\"mformat\"")
(substitute* "util/grub-mkrescue.c" (string-append "\""
(("\"mformat\"") (search-input-file inputs "/bin/mformat")
(string-append "\"" mtools "\"")))
"/bin/mformat\""))) (substitute* "util/grub-mkrescue.c"
(substitute* "util/grub-mkrescue.c" (("\"mcopy\"")
(("\"mcopy\"") (string-append "\""
(string-append "\"" mtools (search-input-file inputs "/bin/mcopy")
"/bin/mcopy\""))) "\"")))))))))))
#t))))))))))
(define-public grub-efi32 (define-public grub-efi32
(package (package
@ -425,17 +417,19 @@ menu to select one of the installed operating systems.")
(name "grub-efi32") (name "grub-efi32")
(synopsis "GRand Unified Boot loader (UEFI 32bit version)") (synopsis "GRand Unified Boot loader (UEFI 32bit version)")
(arguments (arguments
`(,@(substitute-keyword-arguments (package-arguments grub-efi) (substitute-keyword-arguments (package-arguments grub-efi)
((#:configure-flags flags ''()) ((#:configure-flags flags #~'())
`(cons* #~(cons* #$@(cond ((target-x86?)
,@(cond ((target-x86?) '("--target=i386")) #~("--target=i386"))
((target-aarch64?) ((target-aarch64?)
(list "--target=arm" #~("--target=arm"
(string-append "TARGET_CC=" (string-append "TARGET_CC="
(cc-for-target "arm-linux-gnueabihf")))) #$(cc-for-target
((target-arm?) '("--target=arm")) "arm-linux-gnueabihf"))))
(else '())) ((target-arm?)
,flags))))) #~("--target=arm"))
(else #~()))
#$flags))))
(native-inputs (native-inputs
(if (target-aarch64?) (if (target-aarch64?)
(modify-inputs (package-native-inputs grub-efi) (modify-inputs (package-native-inputs grub-efi)
@ -459,24 +453,26 @@ menu to select one of the installed operating systems.")
(prepend grub))) (prepend grub)))
(arguments (arguments
(substitute-keyword-arguments (package-arguments grub-efi) (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)) `((ice-9 ftw) ,@modules))
((#:phases phases) ((#:phases phases)
`(modify-phases ,phases #~(modify-phases #$phases
(add-after 'install 'install-non-efi (add-after 'install 'install-non-efi
(lambda* (#:key inputs outputs #:allow-other-keys) (lambda* (#:key inputs outputs #:allow-other-keys)
(let ((input-dir (search-input-directory inputs (let ((input-dir (search-input-directory inputs "/lib/grub"))
"/lib/grub")) (output-dir (string-append (assoc-ref outputs "out")
(output-dir (string-append (assoc-ref outputs "out") "/lib/grub")))
"/lib/grub"))) (for-each (lambda (basename)
(for-each (unless (or (string-prefix? "." basename)
(lambda (basename) (file-exists? (string-append
(if (not (or (string-prefix? "." basename) output-dir "/"
(file-exists? (string-append output-dir "/" basename)))) basename)))
(symlink (string-append input-dir "/" basename) (symlink (string-append input-dir "/"
(string-append output-dir "/" basename)))) basename)
(scandir input-dir)) (string-append output-dir "/"
#t))))))))) basename))))
(scandir input-dir)))))))))))
(define-public (make-grub-efi-netboot name subdir) (define-public (make-grub-efi-netboot name subdir)
"Make a grub-efi-netboot package named NAME, which will be able to boot over "Make a grub-efi-netboot package named NAME, which will be able to boot over