[PATCH] gnu: commencement: Use system in %final-inputs.

  • Done
  • quality assurance status badge
Details
3 participants
  • Josselin Poiret
  • Ludovic Courtès
  • Christopher Baines
Owner
unassigned
Submitted by
Christopher Baines
Severity
important
C
C
Christopher Baines wrote on 21 Jul 2023 12:11
(address . guix-patches@gnu.org)
3e0a5d1957c35a9925aab5600ee02b923584a599.1689934305.git.mail@cbaines.net
Otherwise this causes odd issues, I presume arising from when %current-system
differs from the system argument passed to %final-inputs.

* gnu/packages/commencement.scm (%final-inputs): Set %current-system to
system.
---
gnu/packages/commencement.scm | 51 ++++++++++++++++++-----------------
1 file changed, 26 insertions(+), 25 deletions(-)

Toggle diff (67 lines)
diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm
index fe6f025257..e522e70444 100644
--- a/gnu/packages/commencement.scm
+++ b/gnu/packages/commencement.scm
@@ -3459,31 +3459,32 @@ (define-public %final-inputs
;; still use 'package-with-bootstrap-guile' so that the bootstrap tools are
;; used for origins that have patches, thereby avoiding circular
;; dependencies.
- (let ((finalize (compose with-boot6
- package-with-bootstrap-guile)))
- `(,@(map (match-lambda
- ((name package)
- (list name (finalize package))))
- `(("tar" ,tar)
- ("gzip" ,gzip)
- ("bzip2" ,bzip2)
- ("file" ,file)
- ("diffutils" ,diffutils)
- ("patch" ,patch)
- ("findutils" ,findutils)
- ("gawk" ,gawk)))
- ("sed" ,sed-final)
- ("grep" ,grep-final)
- ("xz" ,xz-final)
- ("coreutils" ,coreutils-final)
- ("make" ,gnu-make-final)
- ("bash" ,bash-final)
- ("ld-wrapper" ,ld-wrapper)
- ("binutils" ,binutils-final)
- ("gcc" ,gcc-final)
- ("libc" ,glibc-final)
- ("libc:static" ,glibc-final "static")
- ("locales" ,glibc-utf8-locales-final)))))
+ (parameterize ((%current-system system))
+ (let ((finalize (compose with-boot6
+ package-with-bootstrap-guile)))
+ `(,@(map (match-lambda
+ ((name package)
+ (list name (finalize package))))
+ `(("tar" ,tar)
+ ("gzip" ,gzip)
+ ("bzip2" ,bzip2)
+ ("file" ,file)
+ ("diffutils" ,diffutils)
+ ("patch" ,patch)
+ ("findutils" ,findutils)
+ ("gawk" ,gawk)))
+ ("sed" ,sed-final)
+ ("grep" ,grep-final)
+ ("xz" ,xz-final)
+ ("coreutils" ,coreutils-final)
+ ("make" ,gnu-make-final)
+ ("bash" ,bash-final)
+ ("ld-wrapper" ,ld-wrapper)
+ ("binutils" ,binutils-final)
+ ("gcc" ,gcc-final)
+ ("libc" ,glibc-final)
+ ("libc:static" ,glibc-final "static")
+ ("locales" ,glibc-utf8-locales-final))))))
(define-public canonical-package
(let ((name->package (mlambda (system)

base-commit: 120f1721b2b66e5c9507556267bbfd83945958ce
prerequisite-patch-id: 9576d8ce545492d52fbe016d30103a51a9ddf94f
--
2.41.0
L
L
Ludovic Courtès wrote on 7 Aug 2023 17:02
(name . Christopher Baines)(address . mail@cbaines.net)
87h6pasxof.fsf@gnu.org
Hi!

Christopher Baines <mail@cbaines.net> skribis:

Toggle quote (6 lines)
> Otherwise this causes odd issues, I presume arising from when %current-system
> differs from the system argument passed to %final-inputs.
>
> * gnu/packages/commencement.scm (%final-inputs): Set %current-system to
> system.

Please add a “Fixes …” line in the log.

Toggle quote (9 lines)
> gnu/packages/commencement.scm | 51 ++++++++++++++++++-----------------
> 1 file changed, 26 insertions(+), 25 deletions(-)
>
> diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm
> index fe6f025257..e522e70444 100644
> --- a/gnu/packages/commencement.scm
> +++ b/gnu/packages/commencement.scm
> @@ -3459,31 +3459,32 @@ (define-public %final-inputs

[...]

Toggle quote (2 lines)
> + (parameterize ((%current-system system))

LGTM! I think that was definitely the intent of
0dd293b4d9095137c9952e16ca951f887b7e7018 (Cc’ing Josselin just in
case).

Thanks,
Ludo’.

PS: I believe the reason we cannot just write:

(define/system-dependent %final-inputs …)

is because we have two places where we do:

(module-ref m '%final-inputs)

which wouldn’t work if ‘%final-inputs’ were a macro, as is the case
with ‘define/system-dependent’.
J
J
Josselin Poiret wrote on 9 Aug 2023 09:38
[PATCH] gnu: commencement: Use system in %final-inputs.
b4775df70588bbc6d63073ba019eccb73733eb26.1691566711.git.dev@jpoiret.xyz
From: Christopher Baines <mail@cbaines.net>

Otherwise this causes odd issues, I presume arising from when %current-system
differs from the system argument passed to %final-inputs.

* gnu/packages/commencement.scm (%final-inputs): Set %current-system to
system.
* gnu/packages/base.scm (%final-inputs): Add optional system parameter.
* gnu/ci.scm (base-packages): New procedure to memoize the base packages
depending on system.
(package->job): Pass system to base-packages.

Co-authored-by: Josselin Poiret <dev@jpoiret.xyz>
Signed-off-by: Josselin Poiret <dev@jpoiret.xyz>
---
Hi everyone,

I think the patch itself looks good but it will probably be missing some
additional stuff for CI, see the modified patch here.

Best,

gnu/ci.scm | 46 ++++++++++++++++---------------
gnu/packages/base.scm | 7 ++---
gnu/packages/commencement.scm | 51 ++++++++++++++++++-----------------
3 files changed, 55 insertions(+), 49 deletions(-)

Toggle diff (157 lines)
diff --git a/gnu/ci.scm b/gnu/ci.scm
index 7acd88ed29..df98c8af97 100644
--- a/gnu/ci.scm
+++ b/gnu/ci.scm
@@ -24,6 +24,7 @@ (define-module (gnu ci)
#:use-module (guix build-system channel)
#:use-module (guix config)
#:autoload (guix describe) (package-channels)
+ #:use-module (guix memoization)
#:use-module (guix store)
#:use-module (guix profiles)
#:use-module (guix packages)
@@ -342,29 +343,32 @@ (define job-name
;; Return the name of a package's job.
package-name)
+(define base-packages
+ (mlambda (system)
+ "Return the set of packages considered to be part of the base for SYSTEM."
+ (delete-duplicates
+ (append-map (match-lambda
+ ((_ package _ ...)
+ (match (package-transitive-inputs package)
+ (((_ inputs _ ...) ...)
+ inputs))))
+ (%final-inputs system)))))
+
(define package->job
- (let ((base-packages
- (delete-duplicates
- (append-map (match-lambda
- ((_ package _ ...)
- (match (package-transitive-inputs package)
- (((_ inputs _ ...) ...)
- inputs))))
- (%final-inputs)))))
- (lambda* (store package system #:key (suffix ""))
- "Return a job for PACKAGE on SYSTEM, or #f if this combination is not
+ (lambda* (store package system #:key (suffix ""))
+ "Return a job for PACKAGE on SYSTEM, or #f if this combination is not
valid. Append SUFFIX to the job name."
- (cond ((member package base-packages)
- (package-job store (string-append "base." (job-name package))
- package system #:suffix suffix))
- ((supported-package? package system)
- (let ((drv (package-derivation store package system
- #:graft? #f)))
- (and (substitutable-derivation? drv)
- (package-job store (job-name package)
- package system #:suffix suffix))))
- (else
- #f)))))
+ (cond ((member package (base-packages system))
+ (package-job store (string-append "base." (job-name package))
+ package system #:suffix suffix))
+ ((supported-package? package system)
+ (let ((drv (package-derivation store package system
+ #:graft? #f)))
+ (and (substitutable-derivation? drv)
+ (package-job store (job-name package)
+ package system #:suffix suffix))))
+ (else
+ #f))))
(define %x86-64-micro-architectures
;; Micro-architectures for which we build tuned variants.
diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index 1fdfaf8a57..32bc69e2c4 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -78,7 +78,8 @@ (define-module (gnu packages base)
#:export (glibc
libc-for-target
make-ld-wrapper
- libiconv-if-needed))
+ libiconv-if-needed
+ %final-inputs))
;;; Commentary:
;;;
@@ -1648,10 +1649,10 @@ (define-public (canonical-package package)
(proc (module-ref iface 'canonical-package)))
(proc package)))
-(define-public (%final-inputs)
+(define* (%final-inputs #:optional (system (%current-system)))
"Return the list of \"final inputs\"."
;; Avoid circular dependency by lazily resolving 'commencement'.
(let ((iface (resolve-interface '(gnu packages commencement))))
- ((module-ref iface '%final-inputs) (%current-system))))
+ ((module-ref iface '%final-inputs) system)))
;;; base.scm ends here
diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm
index fe6f025257..e522e70444 100644
--- a/gnu/packages/commencement.scm
+++ b/gnu/packages/commencement.scm
@@ -3459,31 +3459,32 @@ (define-public %final-inputs
;; still use 'package-with-bootstrap-guile' so that the bootstrap tools are
;; used for origins that have patches, thereby avoiding circular
;; dependencies.
- (let ((finalize (compose with-boot6
- package-with-bootstrap-guile)))
- `(,@(map (match-lambda
- ((name package)
- (list name (finalize package))))
- `(("tar" ,tar)
- ("gzip" ,gzip)
- ("bzip2" ,bzip2)
- ("file" ,file)
- ("diffutils" ,diffutils)
- ("patch" ,patch)
- ("findutils" ,findutils)
- ("gawk" ,gawk)))
- ("sed" ,sed-final)
- ("grep" ,grep-final)
- ("xz" ,xz-final)
- ("coreutils" ,coreutils-final)
- ("make" ,gnu-make-final)
- ("bash" ,bash-final)
- ("ld-wrapper" ,ld-wrapper)
- ("binutils" ,binutils-final)
- ("gcc" ,gcc-final)
- ("libc" ,glibc-final)
- ("libc:static" ,glibc-final "static")
- ("locales" ,glibc-utf8-locales-final)))))
+ (parameterize ((%current-system system))
+ (let ((finalize (compose with-boot6
+ package-with-bootstrap-guile)))
+ `(,@(map (match-lambda
+ ((name package)
+ (list name (finalize package))))
+ `(("tar" ,tar)
+ ("gzip" ,gzip)
+ ("bzip2" ,bzip2)
+ ("file" ,file)
+ ("diffutils" ,diffutils)
+ ("patch" ,patch)
+ ("findutils" ,findutils)
+ ("gawk" ,gawk)))
+ ("sed" ,sed-final)
+ ("grep" ,grep-final)
+ ("xz" ,xz-final)
+ ("coreutils" ,coreutils-final)
+ ("make" ,gnu-make-final)
+ ("bash" ,bash-final)
+ ("ld-wrapper" ,ld-wrapper)
+ ("binutils" ,binutils-final)
+ ("gcc" ,gcc-final)
+ ("libc" ,glibc-final)
+ ("libc:static" ,glibc-final "static")
+ ("locales" ,glibc-utf8-locales-final))))))
(define-public canonical-package
(let ((name->package (mlambda (system)
--
2.41.0
L
L
Ludovic Courtès wrote on 9 Aug 2023 23:31
(name . Josselin Poiret)(address . dev@jpoiret.xyz)
87edkboqby.fsf@gnu.org
Hi,

Josselin Poiret <dev@jpoiret.xyz> skribis:

Toggle quote (15 lines)
> From: Christopher Baines <mail@cbaines.net>
>
> Otherwise this causes odd issues, I presume arising from when %current-system
> differs from the system argument passed to %final-inputs.
>
> * gnu/packages/commencement.scm (%final-inputs): Set %current-system to
> system.
> * gnu/packages/base.scm (%final-inputs): Add optional system parameter.
> * gnu/ci.scm (base-packages): New procedure to memoize the base packages
> depending on system.
> (package->job): Pass system to base-packages.
>
> Co-authored-by: Josselin Poiret <dev@jpoiret.xyz>
> Signed-off-by: Josselin Poiret <dev@jpoiret.xyz>

LGTM! Great that you found the (gnu ci) issue.

Thanks,
Ludo’.
L
L
Ludovic Courtès wrote on 18 Aug 2023 15:17
control message for bug #64763
(address . control@debbugs.gnu.org)
87h6owtrq9.fsf@gnu.org
severity 64763 important
quit
L
L
Ludovic Courtès wrote on 18 Aug 2023 16:15
Re: bug#64763: [PATCH] gnu: commencement: Use system in %final-inputs.
(name . Josselin Poiret)(address . dev@jpoiret.xyz)
87o7j4qvwt.fsf_-_@gnu.org
Ludovic Courtès <ludo@gnu.org> skribis:

Toggle quote (19 lines)
> Josselin Poiret <dev@jpoiret.xyz> skribis:
>
>> From: Christopher Baines <mail@cbaines.net>
>>
>> Otherwise this causes odd issues, I presume arising from when %current-system
>> differs from the system argument passed to %final-inputs.
>>
>> * gnu/packages/commencement.scm (%final-inputs): Set %current-system to
>> system.
>> * gnu/packages/base.scm (%final-inputs): Add optional system parameter.
>> * gnu/ci.scm (base-packages): New procedure to memoize the base packages
>> depending on system.
>> (package->job): Pass system to base-packages.
>>
>> Co-authored-by: Josselin Poiret <dev@jpoiret.xyz>
>> Signed-off-by: Josselin Poiret <dev@jpoiret.xyz>
>
> LGTM! Great that you found the (gnu ci) issue.

Pushed on your behalf as 560cb51e7b37e2c6f6fe4b72a3781185c57fdf83.

Thanks again!

Ludo’.
Closed
?