* [bug#66640] [PATCH 0/2] Build profile hooks for the right system
[not found] <87bkfcdlwi.fsf@gnu.org>
@ 2023-10-19 14:48 ` Ludovic Courtès
2023-10-19 14:53 ` [bug#66640] [PATCH 1/2] packages: Add ‘system’ parameter for ‘set-guile-for-build’ Ludovic Courtès
` (3 more replies)
0 siblings, 4 replies; 9+ messages in thread
From: Ludovic Courtès @ 2023-10-19 14:48 UTC (permalink / raw)
To: 66640
Cc: Ludovic Courtès, Tobias Geerinckx-Rice, Josselin Poiret,
65225, Christopher Baines, Josselin Poiret, Ludovic Courtès,
Mathieu Othacehe, Ricardo Wurmus, Simon Tournier,
Tobias Geerinckx-Rice
Hello Guix,
This fixes <https://issues.guix.gnu.org/65225>, ensuring that profile
hooks are built for the right system. It does so by passing each
profile hook the targeted system.
Thoughts?
Thanks,
Ludo'.
Ludovic Courtès (2):
packages: Add ‘system’ parameter for ‘set-guile-for-build’.
profiles: Hooks honor the #:system parameter of ‘profile-derivation’.
gnu/bootloader.scm | 5 +++--
guix/channels.scm | 3 ++-
guix/packages.scm | 7 ++++---
guix/profiles.scm | 49 ++++++++++++++++++++++++++++++----------------
tests/profiles.scm | 24 ++++++++++++++++++++++-
5 files changed, 64 insertions(+), 24 deletions(-)
base-commit: 8d6b3dd0b863ccada887da8cd347727dd04cb456
--
2.41.0
^ permalink raw reply [flat|nested] 9+ messages in thread
* [bug#66640] [PATCH 1/2] packages: Add ‘system’ parameter for ‘set-guile-for-build’.
2023-10-19 14:48 ` [bug#66640] [PATCH 0/2] Build profile hooks for the right system Ludovic Courtès
@ 2023-10-19 14:53 ` Ludovic Courtès
2023-10-19 14:53 ` [bug#66640] [PATCH 2/2] profiles: Hooks honor the #:system parameter of ‘profile-derivation’ Ludovic Courtès
` (2 subsequent siblings)
3 siblings, 0 replies; 9+ messages in thread
From: Ludovic Courtès @ 2023-10-19 14:53 UTC (permalink / raw)
To: 66640
Cc: Ludovic Courtès, Christopher Baines, Josselin Poiret,
Ludovic Courtès, Mathieu Othacehe, Ricardo Wurmus,
Simon Tournier, Tobias Geerinckx-Rice
* guix/packages.scm (set-guile-for-build): Add ‘system’ parameter.
---
guix/packages.scm | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/guix/packages.scm b/guix/packages.scm
index f70fad695e..e2e82692ad 100644
--- a/guix/packages.scm
+++ b/guix/packages.scm
@@ -2022,11 +2022,12 @@ (define* (package-output store package
;;; Monadic interface.
;;;
-(define (set-guile-for-build guile)
+(define* (set-guile-for-build guile #:optional system)
"This monadic procedure changes the Guile currently used to run the build
-code of derivations to GUILE, a package object."
+code of derivations to GUILE, a package object, compiled for SYSTEM."
(lambda (store)
- (let ((guile (package-derivation store guile)))
+ (let ((guile (package-derivation store guile
+ (or system (%current-system)))))
(values (%guile-for-build guile) store))))
(define* (package-file package
--
2.41.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [bug#66640] [PATCH 2/2] profiles: Hooks honor the #:system parameter of ‘profile-derivation’.
2023-10-19 14:48 ` [bug#66640] [PATCH 0/2] Build profile hooks for the right system Ludovic Courtès
2023-10-19 14:53 ` [bug#66640] [PATCH 1/2] packages: Add ‘system’ parameter for ‘set-guile-for-build’ Ludovic Courtès
@ 2023-10-19 14:53 ` Ludovic Courtès
2023-10-20 22:46 ` bug#65225: ‘guix shell --system=ALIEN’ builds for both systems Maxim Cournoyer
[not found] ` <875y2xlj5r.fsf@gmail.com>
3 siblings, 0 replies; 9+ messages in thread
From: Ludovic Courtès @ 2023-10-19 14:53 UTC (permalink / raw)
To: 66640
Cc: Ludovic Courtès, Tobias Geerinckx-Rice, Christopher Baines,
Josselin Poiret, Ludovic Courtès, Mathieu Othacehe,
Ricardo Wurmus, Simon Tournier, Tobias Geerinckx-Rice
Fixes <https://issues.guix.gnu.org/65225>.
* guix/profiles.scm (info-dir-file, package-cache-file)
(info-dir-file, ghc-package-cache-file, ca-certificate-bundle)
(emacs-subdirs, gdk-pixbuf-loaders-cache-file, glib-schemas)
(gtk-icon-themes, gtk-im-modules, linux-module-database)
(xdg-desktop-database, xdg-mime-database, fonts-dir-file)
(manual-database, manual-database/optional): Add optional #:system
parameter and pass it to ‘gexp->derivation’.
(profile-derivation): Pass HOOK a second parameter, SYSTEM.
* gnu/bootloader.scm (efi-bootloader-profile)[efi-bootloader-profile-hook]:
Add optional #:system parameter and pass it to ‘gexp->derivation’.
* guix/channels.scm (package-cache-file): Likewise.
* tests/profiles.scm ("profile-derivation, #:system, and hooks"): New
test.
Reported-by: Tobias Geerinckx-Rice <me@tobias.gr>
---
gnu/bootloader.scm | 5 +++--
guix/channels.scm | 3 ++-
guix/profiles.scm | 49 ++++++++++++++++++++++++++++++----------------
tests/profiles.scm | 24 ++++++++++++++++++++++-
4 files changed, 60 insertions(+), 21 deletions(-)
diff --git a/gnu/bootloader.scm b/gnu/bootloader.scm
index 2c36d8c6cf..ba06de7618 100644
--- a/gnu/bootloader.scm
+++ b/gnu/bootloader.scm
@@ -2,7 +2,7 @@
;;; Copyright © 2017 David Craven <david@craven.ch>
;;; Copyright © 2017, 2020, 2022 Mathieu Othacehe <othacehe@gnu.org>
;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
-;;; Copyright © 2019, 2021 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2019, 2021, 2023 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2022 Josselin Poiret <dev@jpoiret.xyz>
;;; Copyright © 2022 Reza Alizadeh Majd <r.majd@pantherx.org>
@@ -335,7 +335,7 @@ (define (efi-bootloader-profile packages files hooks)
local-file, etc., or package contents produced with file-append.
HOOKS lists additional hook functions to modify the profile."
- (define (efi-bootloader-profile-hook manifest)
+ (define* (efi-bootloader-profile-hook manifest #:optional system)
(define build
(with-imported-modules '((guix build utils))
#~(begin
@@ -383,6 +383,7 @@ (define (efi-bootloader-profile packages files hooks)
(gexp->derivation "efi-bootloader-profile"
build
+ #:system system
#:local-build? #t
#:substitutable? #f
#:properties
diff --git a/guix/channels.scm b/guix/channels.scm
index 681adafc6c..f01903642d 100644
--- a/guix/channels.scm
+++ b/guix/channels.scm
@@ -926,7 +926,7 @@ (define* (channel-instances->manifest instances #:key system)
(entries -> (map instance->entry instances derivations)))
(return (manifest entries))))
-(define (package-cache-file manifest)
+(define* (package-cache-file manifest #:optional system)
"Build a package cache file for the instance in MANIFEST. This is meant to
be used as a profile hook."
;; Note: Emit a profile in format version 3, which was introduced in 2017
@@ -961,6 +961,7 @@ (define (package-cache-file manifest)
(gexp->derivation-in-inferior "guix-package-cache" build
profile
+ #:system system
;; If the Guix in PROFILE is too old and
;; lacks 'guix repl', don't build the cache
diff --git a/guix/profiles.scm b/guix/profiles.scm
index fea766879d..5d2fb8dc64 100644
--- a/guix/profiles.scm
+++ b/guix/profiles.scm
@@ -993,7 +993,7 @@ (define* (manifest-lookup-package manifest name #:optional version)
(anym %store-monad
entry-lookup-package (manifest-entries manifest)))
-(define (info-dir-file manifest)
+(define* (info-dir-file manifest #:optional system)
"Return a derivation that builds the 'dir' file for all the entries of
MANIFEST."
(define texinfo ;lazy reference
@@ -1051,13 +1051,14 @@ (define (info-dir-file manifest)
'#$(manifest-inputs manifest)))))))
(gexp->derivation "info-dir" build
+ #:system system
#:local-build? #t
#:substitutable? #f
#:properties
`((type . profile-hook)
(hook . info-dir))))
-(define (ghc-package-cache-file manifest)
+(define* (ghc-package-cache-file manifest #:optional system)
"Return a derivation that builds the GHC 'package.cache' file for all the
entries of MANIFEST, or #f if MANIFEST does not have any GHC packages."
(define ghc ;lazy reference
@@ -1108,6 +1109,7 @@ (define (ghc-package-cache-file manifest)
(if (any (cut string-prefix? "ghc" <>)
(map manifest-entry-name (manifest-entries manifest)))
(gexp->derivation "ghc-package-cache" build
+ #:system system
#:local-build? #t
#:substitutable? #f
#:properties
@@ -1115,7 +1117,7 @@ (define (ghc-package-cache-file manifest)
(hook . ghc-package-cache)))
(return #f))))
-(define (ca-certificate-bundle manifest)
+(define* (ca-certificate-bundle manifest #:optional system)
"Return a derivation that builds a single-file bundle containing the CA
certificates in the /etc/ssl/certs sub-directories of the packages in
MANIFEST. Single-file bundles are required by programs such as Git and Lynx."
@@ -1179,13 +1181,14 @@ (define (ca-certificate-bundle manifest)
#t))))))
(gexp->derivation "ca-certificate-bundle" build
+ #:system system
#:local-build? #t
#:substitutable? #f
#:properties
`((type . profile-hook)
(hook . ca-certificate-bundle))))
-(define (emacs-subdirs manifest)
+(define* (emacs-subdirs manifest #:optional system)
(define build
(with-imported-modules (source-module-closure
'((guix build profiles)
@@ -1219,13 +1222,14 @@ (define (emacs-subdirs manifest)
(newline port)
#t)))))))
(gexp->derivation "emacs-subdirs" build
+ #:system system
#:local-build? #t
#:substitutable? #f
#:properties
`((type . profile-hook)
(hook . emacs-subdirs))))
-(define (gdk-pixbuf-loaders-cache-file manifest)
+(define* (gdk-pixbuf-loaders-cache-file manifest #:optional system)
"Return a derivation that produces a loaders cache file for every gdk-pixbuf
loaders discovered in MANIFEST."
(define gdk-pixbuf ;lazy reference
@@ -1264,6 +1268,7 @@ (define (gdk-pixbuf-loaders-cache-file manifest)
(if gdk-pixbuf
(gexp->derivation "gdk-pixbuf-loaders-cache-file" build
+ #:system system
#:local-build? #t
#:substitutable? #f
#:properties
@@ -1271,7 +1276,7 @@ (define (gdk-pixbuf-loaders-cache-file manifest)
(hook . gdk-pixbuf-loaders-cache-file)))
(return #f))))
-(define (glib-schemas manifest)
+(define* (glib-schemas manifest #:optional system)
"Return a derivation that unions all schemas from manifest entries and
creates the Glib 'gschemas.compiled' file."
(define glib ; lazy reference
@@ -1318,6 +1323,7 @@ (define (glib-schemas manifest)
;; Don't run the hook when there's nothing to do.
(if %glib
(gexp->derivation "glib-schemas" build
+ #:system system
#:local-build? #t
#:substitutable? #f
#:properties
@@ -1325,7 +1331,7 @@ (define (glib-schemas manifest)
(hook . glib-schemas)))
(return #f))))
-(define (gtk-icon-themes manifest)
+(define* (gtk-icon-themes manifest #:optional system)
"Return a derivation that unions all icon themes from manifest entries and
creates the GTK+ 'icon-theme.cache' file for each theme."
(define gtk+ ; lazy reference
@@ -1377,6 +1383,7 @@ (define (gtk-icon-themes manifest)
;; Don't run the hook when there's nothing to do.
(if %gtk+
(gexp->derivation "gtk-icon-themes" build
+ #:system system
#:local-build? #t
#:substitutable? #f
#:properties
@@ -1384,7 +1391,7 @@ (define (gtk-icon-themes manifest)
(hook . gtk-icon-themes)))
(return #f))))
-(define (gtk-im-modules manifest)
+(define* (gtk-im-modules manifest #:optional system)
"Return a derivation that builds the cache files for input method modules
for both major versions of GTK+."
@@ -1454,6 +1461,7 @@ (define (gtk-im-modules manifest)
#t))))
(if (or gtk+ gtk+-2)
(gexp->derivation "gtk-im-modules" gexp
+ #:system system
#:local-build? #t
#:substitutable? #f
#:properties
@@ -1461,7 +1469,7 @@ (define (gtk-im-modules manifest)
(hook . gtk-im-modules)))
(return #f)))))
-(define (linux-module-database manifest)
+(define* (linux-module-database manifest #:optional system)
"Return a derivation that unites all the kernel modules of the manifest
and creates the dependency graph of all these kernel modules.
@@ -1511,13 +1519,14 @@ (define (linux-module-database manifest)
(_ (error "Specified Linux kernel and Linux kernel modules
are not all of the same version"))))))))
(gexp->derivation "linux-module-database" build
+ #:system system
#:local-build? #t
#:substitutable? #f
#:properties
`((type . profile-hook)
(hook . linux-module-database))))
-(define (xdg-desktop-database manifest)
+(define* (xdg-desktop-database manifest #:optional system)
"Return a derivation that builds the @file{mimeinfo.cache} database from
desktop files. It's used to query what applications can handle a given
MIME type."
@@ -1551,6 +1560,7 @@ (define (xdg-desktop-database manifest)
;; Don't run the hook when 'glib' is not referenced.
(if glib
(gexp->derivation "xdg-desktop-database" build
+ #:system system
#:local-build? #t
#:substitutable? #f
#:properties
@@ -1558,7 +1568,7 @@ (define (xdg-desktop-database manifest)
(hook . xdg-desktop-database)))
(return #f))))
-(define (xdg-mime-database manifest)
+(define* (xdg-mime-database manifest #:optional system)
"Return a derivation that builds the @file{mime.cache} database from manifest
entries. It's used to query the MIME type of a given file."
(define shared-mime-info ; lazy reference
@@ -1605,6 +1615,7 @@ (define (xdg-mime-database manifest)
;; Don't run the hook when there are no GLib based applications.
(if glib
(gexp->derivation "xdg-mime-database" build
+ #:system system
#:local-build? #t
#:substitutable? #f
#:properties
@@ -1615,7 +1626,7 @@ (define (xdg-mime-database manifest)
;; Several font packages may install font files into same directory, so
;; fonts.dir and fonts.scale file should be generated here, instead of in
;; packages.
-(define (fonts-dir-file manifest)
+(define* (fonts-dir-file manifest #:optional system)
"Return a derivation that builds the @file{fonts.dir} and @file{fonts.scale}
files for the fonts of the @var{manifest} entries."
(define mkfontscale
@@ -1676,6 +1687,7 @@ (define (fonts-dir-file manifest)
directories)))))))
(gexp->derivation "fonts-dir" build
+ #:system system
#:modules '((guix build utils)
(guix build union)
(srfi srfi-26))
@@ -1685,7 +1697,7 @@ (define (fonts-dir-file manifest)
`((type . profile-hook)
(hook . fonts-dir))))
-(define (manual-database manifest)
+(define* (manual-database manifest #:optional system)
"Return a derivation that builds the manual page database (\"mandb\") for
the entries in MANIFEST."
(define gdbm-ffi
@@ -1761,23 +1773,24 @@ (define (manual-database manifest)
(force-output))))))
(gexp->derivation "manual-database" build
+ #:system system
#:substitutable? #f
#:local-build? #t
#:properties
`((type . profile-hook)
(hook . manual-database))))
-(define (manual-database/optional manifest)
+(define* (manual-database/optional manifest #:optional system)
"Return a derivation to build the manual database of MANIFEST, but only if
MANIFEST contains the \"man-db\" package. Otherwise, return #f."
;; Building the man database (for "man -k") is expensive and rarely used.
;; Build it only if the profile also contains "man-db".
(mlet %store-monad ((man-db (manifest-lookup-package manifest "man-db")))
(if man-db
- (manual-database manifest)
+ (manual-database manifest system)
(return #f))))
-(define (texlive-font-maps manifest)
+(define* (texlive-font-maps manifest #:optional system)
"Return a derivation that builds the TeX Live font maps for the entries in
MANIFEST."
(define entry->texlive-input
@@ -1898,6 +1911,7 @@ (define (texlive-font-maps manifest)
;; incomplete modular TeX Live installations to generate errors.
(if (any texlive-scripts-entry? (manifest-entries manifest))
(gexp->derivation "texlive-font-maps" build
+ #:system system
#:substitutable? #f
#:local-build? #t
#:properties
@@ -1977,7 +1991,8 @@ (define* (profile-derivation manifest
(extras (if (null? (manifest-entries manifest))
(return '())
(mapm/accumulate-builds (lambda (hook)
- (hook manifest))
+ (hook manifest
+ system))
hooks))))
(define extra-inputs
(filter-map (lambda (drv)
diff --git a/tests/profiles.scm b/tests/profiles.scm
index 9ad03f2b24..9c419ada93 100644
--- a/tests/profiles.scm
+++ b/tests/profiles.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013-2022 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013-2023 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2014 Alex Kost <alezost@gmail.com>
;;;
;;; This file is part of GNU Guix.
@@ -382,6 +382,28 @@ (define glibc
(_ (built-derivations (list drv))))
(return (file-exists? (string-append bindir "/guile")))))
+(test-assertm "profile-derivation, #:system, and hooks"
+ ;; Make sure all the profile hooks are built for the system specified with
+ ;; #:system, even if that does not match (%current-system).
+ ;; See <https://issues.guix.gnu.org/65225>.
+ (mlet* %store-monad
+ ((system -> (if (string=? (%current-system) "riscv64-linux")
+ "x86_64-linux"
+ "riscv64-linux"))
+ (entry -> (package->manifest-entry packages:coreutils))
+ (_ (set-guile-for-build (default-guile) system))
+ (drv (profile-derivation (manifest (list entry))
+ #:system system))
+ (refs (references* (derivation-file-name drv))))
+ (return (and (string=? (derivation-system drv) system)
+ (pair? refs)
+ (every (lambda (ref)
+ (or (not (string-suffix? ".drv" ref))
+ (let ((drv (read-derivation-from-file ref)))
+ (string=? (derivation-system drv)
+ system))))
+ refs)))))
+
(test-assertm "profile-derivation relative symlinks, one entry"
(mlet* %store-monad
((entry -> (package->manifest-entry %bootstrap-guile))
--
2.41.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* bug#65225: ‘guix shell --system=ALIEN’ builds for both systems
2023-10-19 14:48 ` [bug#66640] [PATCH 0/2] Build profile hooks for the right system Ludovic Courtès
2023-10-19 14:53 ` [bug#66640] [PATCH 1/2] packages: Add ‘system’ parameter for ‘set-guile-for-build’ Ludovic Courtès
2023-10-19 14:53 ` [bug#66640] [PATCH 2/2] profiles: Hooks honor the #:system parameter of ‘profile-derivation’ Ludovic Courtès
@ 2023-10-20 22:46 ` Maxim Cournoyer
2023-10-23 10:16 ` Simon Tournier
[not found] ` <875y2xlj5r.fsf@gmail.com>
3 siblings, 1 reply; 9+ messages in thread
From: Maxim Cournoyer @ 2023-10-20 22:46 UTC (permalink / raw)
To: Ludovic Courtès
Cc: Josselin Poiret, 65225, Mathieu Othacehe, Tobias Geerinckx-Rice,
Ricardo Wurmus, Christopher Baines, Simon Tournier, guix-patches
Hi,
Ludovic Courtès <ludo@gnu.org> writes:
> Hello Guix,
>
> This fixes <https://issues.guix.gnu.org/65225>, ensuring that profile
> hooks are built for the right system. It does so by passing each
> profile hook the targeted system.
>
> Thoughts?
>
> Thanks,
> Ludo'.
>
> Ludovic Courtès (2):
> packages: Add ‘system’ parameter for ‘set-guile-for-build’.
> profiles: Hooks honor the #:system parameter of ‘profile-derivation’.
>
> gnu/bootloader.scm | 5 +++--
> guix/channels.scm | 3 ++-
> guix/packages.scm | 7 ++++---
> guix/profiles.scm | 49 ++++++++++++++++++++++++++++++----------------
> tests/profiles.scm | 24 ++++++++++++++++++++++-
> 5 files changed, 64 insertions(+), 24 deletions(-)
I see the cover letter, but not the patches :-). Where did they go?
--
Thanks,
Maxim
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#65225: ‘guix shell --system=ALIEN’ builds for both systems
2023-10-20 22:46 ` bug#65225: ‘guix shell --system=ALIEN’ builds for both systems Maxim Cournoyer
@ 2023-10-23 10:16 ` Simon Tournier
2023-10-23 14:29 ` Maxim Cournoyer
0 siblings, 1 reply; 9+ messages in thread
From: Simon Tournier @ 2023-10-23 10:16 UTC (permalink / raw)
To: Maxim Cournoyer, Ludovic Courtès
Cc: Josselin Poiret, 65225, Mathieu Othacehe, Tobias Geerinckx-Rice,
Ricardo Wurmus, Christopher Baines, guix-patches
Hi Maxim,
On Fri, 20 Oct 2023 at 18:46, Maxim Cournoyer <maxim.cournoyer@gmail.com> wrote:
> I see the cover letter, but not the patches :-). Where did they go?
They are in #66640 [1]. The cover letter had been CC:
65225@debbugs.gnu.org, I guess.
1: https://issues.guix.gnu.org/issue/66640
Cheers,
simon
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#65225: ‘guix shell --system=ALIEN’ builds for both systems
2023-10-23 10:16 ` Simon Tournier
@ 2023-10-23 14:29 ` Maxim Cournoyer
0 siblings, 0 replies; 9+ messages in thread
From: Maxim Cournoyer @ 2023-10-23 14:29 UTC (permalink / raw)
To: Simon Tournier
Cc: Josselin Poiret, 65225, Mathieu Othacehe, Ludovic Courtès,
Tobias Geerinckx-Rice, Ricardo Wurmus, Christopher Baines,
guix-patches
Hi Simon,
Simon Tournier <zimon.toutoune@gmail.com> writes:
> Hi Maxim,
>
> On Fri, 20 Oct 2023 at 18:46, Maxim Cournoyer <maxim.cournoyer@gmail.com> wrote:
>
>> I see the cover letter, but not the patches :-). Where did they go?
>
> They are in #66640 [1]. The cover letter had been CC:
> 65225@debbugs.gnu.org, I guess.
Thanks!
--
Maxim
^ permalink raw reply [flat|nested] 9+ messages in thread
* [bug#66640] [PATCH 0/2] Build profile hooks for the right system
[not found] ` <875y2xlj5r.fsf@gmail.com>
@ 2023-10-23 19:53 ` Ludovic Courtès
2023-10-24 18:34 ` Simon Tournier
0 siblings, 1 reply; 9+ messages in thread
From: Ludovic Courtès @ 2023-10-23 19:53 UTC (permalink / raw)
To: Simon Tournier
Cc: Josselin Poiret, 65225, Mathieu Othacehe, Tobias Geerinckx-Rice,
Ricardo Wurmus, 66640, Christopher Baines
Simon Tournier <zimon.toutoune@gmail.com> skribis:
> Do I understand correctly when I consider that
> ’(efi-bootloader-profile-hook manifest)’ pass #false as ’system’ and
> then it is ’set-guile-for-build’ that sets ’(%current-system)’?
Yes.
> Somehow, my question is about the readability of default values.
>
> Why not,
>
> #:system (or system (%current-system))
>
> for all the hooks?
Because that value would be captured at call time rather than at
monadic-bind time. See Josselin’s excellent explanation of this trap:
https://issues.guix.gnu.org/65225#4-lineno34
HTH!
Ludo’.
^ permalink raw reply [flat|nested] 9+ messages in thread
* [bug#66640] [PATCH 0/2] Build profile hooks for the right system
2023-10-23 19:53 ` [bug#66640] [PATCH 0/2] Build profile hooks for the right system Ludovic Courtès
@ 2023-10-24 18:34 ` Simon Tournier
2023-10-27 23:36 ` bug#66640: " Ludovic Courtès
0 siblings, 1 reply; 9+ messages in thread
From: Simon Tournier @ 2023-10-24 18:34 UTC (permalink / raw)
To: Ludovic Courtès
Cc: Josselin Poiret, 65225, Mathieu Othacehe, Tobias Geerinckx-Rice,
Ricardo Wurmus, 66640, Christopher Baines
Hi,
On Mon, 23 Oct 2023 at 21:53, Ludovic Courtès <ludo@gnu.org> wrote:
> Because that value would be captured at call time rather than at
> monadic-bind time. See Josselin’s excellent explanation of this trap:
>
> https://issues.guix.gnu.org/65225#4-lineno34
Yeah, all clear. Thank you.
Before the patch:
--8<---------------cut here---------------start------------->8---
$ guix shell --system=riscv64-linux sterm --no-grafts --rebuild-cache --dry-run 2>&1 | grep profile
/gnu/store/0l02iwcq3bzh38qykg70ygy5cf5c2hml-profile.drv
$ guix repl
GNU Guile 3.0.9
Copyright (C) 1995-2023 Free Software Foundation, Inc.
Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'.
This program is free software, and you are welcome to redistribute it
under certain conditions; type `,show c' for details.
Enter `,help' for help.
scheme@(guix-user)> ,run-in-store (references* "/gnu/store/0l02iwcq3bzh38qykg70ygy5cf5c2hml-profile.drv")
$1 = ("/gnu/store/4zg87dbcf7mcr82jlbfsbqqffn1miaml-ca-certificate-bundle.drv"
"/gnu/store/5myp281kr169dag03plk5wy0s1jmkk40-emacs-subdirs.drv"
"/gnu/store/7s9j9ns9mmfg0vg8wpjvjj0x8rrq992f-info-dir.drv"
"/gnu/store/8q36aw38kr2879ll9zrn3cg7w5xpxmjd-module-import"
"/gnu/store/bvnibpf0kfk2w4vh069q97mk98q3pwbz-profile-builder"
"/gnu/store/fw22lk3vnal8477lpbi0f5wfgh8i1w6f-fonts-dir.drv"
"/gnu/store/j0vmqz44kmsp8jhpxw8wa4jq60rjfgaj-module-import-compiled.drv"
"/gnu/store/s38y5afcy2bwzsspqsz2n4riiqy77gr4-sterm-20200306.drv"
"/gnu/store/x6qzhxy1wilipnlygi508l9yvz66dlvs-glibc-utf8-locales-2.35.drv"
"/gnu/store/zraigp7miin3vzr5dcbr4i9rvds0i07r-guile-3.0.9.drv")
scheme@(guix-user)> $1
;;; <stdin>:4:0: warning: possibly unbound variable `$1'
$2 = ("/gnu/store/4zg87dbcf7mcr82jlbfsbqqffn1miaml-ca-certificate-bundle.drv" "/gnu/store/5myp281kr169dag03plk5wy0s1jmkk40-emacs-subdirs.drv" "/gnu/store/7s9j9ns9mmfg0vg8wpjvjj0x8rrq992f-info-dir.drv" "/gnu/store/8q36aw38kr2879ll9zrn3cg7w5xpxmjd-module-import" "/gnu/store/bvnibpf0kfk2w4vh069q97mk98q3pwbz-profile-builder" "/gnu/store/fw22lk3vnal8477lpbi0f5wfgh8i1w6f-fonts-dir.drv" "/gnu/store/j0vmqz44kmsp8jhpxw8wa4jq60rjfgaj-module-import-compiled.drv" "/gnu/store/s38y5afcy2bwzsspqsz2n4riiqy77gr4-sterm-20200306.drv" "/gnu/store/x6qzhxy1wilipnlygi508l9yvz66dlvs-glibc-utf8-locales-2.35.drv" "/gnu/store/zraigp7miin3vzr5dcbr4i9rvds0i07r-guile-3.0.9.drv")
scheme@(guix-user)> ,pp (map (lambda (drv) (list drv (or (not (string-suffix? ".drv" drv)) (derivation-system (read-derivation-from-file drv))))) $1)
$3 = (("/gnu/store/4zg87dbcf7mcr82jlbfsbqqffn1miaml-ca-certificate-bundle.drv"
"x86_64-linux")
("/gnu/store/5myp281kr169dag03plk5wy0s1jmkk40-emacs-subdirs.drv"
"x86_64-linux")
("/gnu/store/7s9j9ns9mmfg0vg8wpjvjj0x8rrq992f-info-dir.drv"
"x86_64-linux")
("/gnu/store/8q36aw38kr2879ll9zrn3cg7w5xpxmjd-module-import"
#t)
("/gnu/store/bvnibpf0kfk2w4vh069q97mk98q3pwbz-profile-builder"
#t)
("/gnu/store/fw22lk3vnal8477lpbi0f5wfgh8i1w6f-fonts-dir.drv"
"x86_64-linux")
("/gnu/store/j0vmqz44kmsp8jhpxw8wa4jq60rjfgaj-module-import-compiled.drv"
"riscv64-linux")
("/gnu/store/s38y5afcy2bwzsspqsz2n4riiqy77gr4-sterm-20200306.drv"
"riscv64-linux")
("/gnu/store/x6qzhxy1wilipnlygi508l9yvz66dlvs-glibc-utf8-locales-2.35.drv"
"riscv64-linux")
("/gnu/store/zraigp7miin3vzr5dcbr4i9rvds0i07r-guile-3.0.9.drv"
"x86_64-linux"))
--8<---------------cut here---------------end--------------->8---
After the patch:
--8<---------------cut here---------------start------------->8---
$ ./pre-inst-env guix shell --system=riscv64-linux sterm --no-grafts --rebuild-cache --dry-run 2>&1 | grep profile
/gnu/store/1nnji4fr8mgpsal0rcnzbdjdm4p04yk3-profile.drv
$ guix repl
GNU Guile 3.0.9
Copyright (C) 1995-2023 Free Software Foundation, Inc.
Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'.
This program is free software, and you are welcome to redistribute it
under certain conditions; type `,show c' for details.
Enter `,help' for help.
scheme@(guix-user)> ,run-in-store (references* "/gnu/store/1nnji4fr8mgpsal0rcnzbdjdm4p04yk3-profile.drv")
$1 = ("/gnu/store/2ff9j170rckkr2zs0l6sf4bbkx7fk5vc-profile-builder"
"/gnu/store/5mi4ij2vf5cxhsbh52n04h48mvc6z6r8-module-import-compiled.drv"
"/gnu/store/5sbcg8siv5jzzbdy4m7bfravpxg95j7h-emacs-subdirs.drv"
"/gnu/store/7rz0kd6bigj3gdlp9l4z1v91sxy43bib-fonts-dir.drv"
"/gnu/store/8l03g4sg271c0wc2axhpn689r6faa0ij-info-dir.drv"
"/gnu/store/94ad504y18rg0d1kgznlj0ib1l56ljxl-ca-certificate-bundle.drv"
"/gnu/store/w314gb2gc9z6jd9ng7gpn88zvhhsax09-sterm-20200306.drv"
"/gnu/store/x6qzhxy1wilipnlygi508l9yvz66dlvs-glibc-utf8-locales-2.35.drv"
"/gnu/store/y545dx7df92al3yz1a9swnf0lhjg9igi-module-import"
"/gnu/store/zb3vrbwv8qx9430n839ljbalnik8019g-guile-3.0.9.drv")
scheme@(guix-user)> $1
;;; <stdin>:2:0: warning: possibly unbound variable `$1'
$2 = ("/gnu/store/2ff9j170rckkr2zs0l6sf4bbkx7fk5vc-profile-builder" "/gnu/store/5mi4ij2vf5cxhsbh52n04h48mvc6z6r8-module-import-compiled.drv" "/gnu/store/5sbcg8siv5jzzbdy4m7bfravpxg95j7h-emacs-subdirs.drv" "/gnu/store/7rz0kd6bigj3gdlp9l4z1v91sxy43bib-fonts-dir.drv" "/gnu/store/8l03g4sg271c0wc2axhpn689r6faa0ij-info-dir.drv" "/gnu/store/94ad504y18rg0d1kgznlj0ib1l56ljxl-ca-certificate-bundle.drv" "/gnu/store/w314gb2gc9z6jd9ng7gpn88zvhhsax09-sterm-20200306.drv" "/gnu/store/x6qzhxy1wilipnlygi508l9yvz66dlvs-glibc-utf8-locales-2.35.drv" "/gnu/store/y545dx7df92al3yz1a9swnf0lhjg9igi-module-import" "/gnu/store/zb3vrbwv8qx9430n839ljbalnik8019g-guile-3.0.9.drv")
scheme@(guix-user)> ,pp (map (lambda (drv) (list drv (or (not (string-suffix? ".drv" drv)) (derivation-system (read-derivation-from-file drv))))) $1)
$3 = (("/gnu/store/2ff9j170rckkr2zs0l6sf4bbkx7fk5vc-profile-builder"
#t)
("/gnu/store/5mi4ij2vf5cxhsbh52n04h48mvc6z6r8-module-import-compiled.drv"
"riscv64-linux")
("/gnu/store/5sbcg8siv5jzzbdy4m7bfravpxg95j7h-emacs-subdirs.drv"
"riscv64-linux")
("/gnu/store/7rz0kd6bigj3gdlp9l4z1v91sxy43bib-fonts-dir.drv"
"riscv64-linux")
("/gnu/store/8l03g4sg271c0wc2axhpn689r6faa0ij-info-dir.drv"
"riscv64-linux")
("/gnu/store/94ad504y18rg0d1kgznlj0ib1l56ljxl-ca-certificate-bundle.drv"
"riscv64-linux")
("/gnu/store/w314gb2gc9z6jd9ng7gpn88zvhhsax09-sterm-20200306.drv"
"riscv64-linux")
("/gnu/store/x6qzhxy1wilipnlygi508l9yvz66dlvs-glibc-utf8-locales-2.35.drv"
"riscv64-linux")
("/gnu/store/y545dx7df92al3yz1a9swnf0lhjg9igi-module-import"
#t)
("/gnu/store/zb3vrbwv8qx9430n839ljbalnik8019g-guile-3.0.9.drv"
"x86_64-linux"))
--8<---------------cut here---------------end--------------->8---
Therefore, it seems fixing the issue. All the x86_64-linux above are
turned as riscv64-linux. However, still a naive question:
Why ’guile’ is not? Is it expected?
If not, does it mean that some ’set-guile-for-build’ is missing?
Cheers,
simon
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#66640: [PATCH 0/2] Build profile hooks for the right system
2023-10-24 18:34 ` Simon Tournier
@ 2023-10-27 23:36 ` Ludovic Courtès
0 siblings, 0 replies; 9+ messages in thread
From: Ludovic Courtès @ 2023-10-27 23:36 UTC (permalink / raw)
To: Simon Tournier
Cc: Josselin Poiret, 65225, Mathieu Othacehe, Tobias Geerinckx-Rice,
Ricardo Wurmus, 66640-done, Christopher Baines
Hi,
Simon Tournier <zimon.toutoune@gmail.com> skribis:
> ("/gnu/store/zb3vrbwv8qx9430n839ljbalnik8019g-guile-3.0.9.drv"
> "x86_64-linux"))
>
> Therefore, it seems fixing the issue. All the x86_64-linux above are
> turned as riscv64-linux. However, still a naive question:
>
> Why ’guile’ is not? Is it expected?
Oh, that’s another bug, this one in ‘guix shell’ (missing argument for
‘package-derivation’).
I pushed this:
344e39c928 profiles: Hooks honor the #:system parameter of ‘profile-derivation’.
9d4b720e1f packages: Add ‘system’ parameter for ‘set-guile-for-build’.
b3ec2a0d37 environment: Honor ‘-s’ for guile-for-build.
Thanks for reviewing and reporting the issue!
Ludo’.
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2023-10-27 23:37 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <87bkfcdlwi.fsf@gnu.org>
2023-10-19 14:48 ` [bug#66640] [PATCH 0/2] Build profile hooks for the right system Ludovic Courtès
2023-10-19 14:53 ` [bug#66640] [PATCH 1/2] packages: Add ‘system’ parameter for ‘set-guile-for-build’ Ludovic Courtès
2023-10-19 14:53 ` [bug#66640] [PATCH 2/2] profiles: Hooks honor the #:system parameter of ‘profile-derivation’ Ludovic Courtès
2023-10-20 22:46 ` bug#65225: ‘guix shell --system=ALIEN’ builds for both systems Maxim Cournoyer
2023-10-23 10:16 ` Simon Tournier
2023-10-23 14:29 ` Maxim Cournoyer
[not found] ` <875y2xlj5r.fsf@gmail.com>
2023-10-23 19:53 ` [bug#66640] [PATCH 0/2] Build profile hooks for the right system Ludovic Courtès
2023-10-24 18:34 ` Simon Tournier
2023-10-27 23:36 ` bug#66640: " Ludovic Courtès
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).