Subject: bug#67109: ‘efi32-esp’ image support pulls in host-side code

From: Ludovic Courtès <[email-masked]>
Date: Mon, 27 Nov 2023 10:07:40 +0100

Hi,

Mathieu Othacehe <[email-masked]> skribis:

>> guix system: error: #<gexp (lambda (root . args) (apply
>> initialize-efi32-partition root #:grub-targets #<gexp-input #<gexp
>> (quote ("i386-efi" . "BOOTIA32.EFI")) gnu/system/image.scm:142:28
>> 7fef96f85390>:out> args)) gnu/system/image.scm:146:8 7fef96f85360>:
>> invalid G-expression input
>
> Expressed that way, I no longer have this error and `target` seems to
> take the expected value, WDYT?
>
> (define esp32-partition
>   (partition
>    (inherit esp-partition)
>    (initializer
>     #~(lambda (root . args)
>         (let ((targets '#$(let-system (system target)
>                            (cond ((target-x86? (or target system))
>                                   '("i386-efi". "BOOTIA32.EFI"))
>                                  ((target-arm? (or target system))
>                                   '("arm-efi" . "BOOTARM.EFI"))
>                                  (else #f)))))
>           (apply initialize-efi32-partition root
>                  #:grub-targets targets
>                  args))))))

Am I right that it breaks if we do:

  (let ((targets #$(let-system …
                     #~'("i386-efi". "BOOTIA32.EFI"))))
    …)

?

That would be the “correct” way to do it, but the problem is that the
body of ‘let-system’ is supposed to evaluate to a file-like object,
which is not what we’re trying to do here.

Hmm, annoying.

Thanks,
Ludo’.