* [bug#70985] [PATCH 0/4] Use specific errors for unsupported targets @ 2024-05-16 14:59 Christopher Baines 2024-05-16 15:06 ` [bug#70985] [PATCH 1/4] guix: packages: Add new &package-unsupported-target-error Christopher Baines ` (4 more replies) 0 siblings, 5 replies; 30+ messages in thread From: Christopher Baines @ 2024-05-16 14:59 UTC (permalink / raw) To: 70985 [-- Attachment #1: Type: text/plain, Size: 1106 bytes --] I think when computing derivations any errors except from a small list should be treated as bugs. This has become more of an issue with the avr, or1k-elf and xtensa-ath9k-elf targets since these targets both seem to not support a large number of packages, and lead to generic errors or crashes. I'm seeing this because logs relating to errors computing package derivations are now taking up most of the data service logs around processing revisions. Christopher Baines (4): guix: packages: Add new &package-unsupported-target-error. gnu: tls: Raise conditions from target->openssl-target. gnu: cross-libc*: Raise conditions rather than returning #f. guix: build-system: meson: Don't error on unsupported targets. gnu/packages/cross-base.scm | 12 +++- gnu/packages/tls.scm | 17 ++++-- guix/build-system/meson.scm | 115 +++++++++++++++++++----------------- guix/packages.scm | 7 +++ guix/ui.scm | 7 +++ 5 files changed, 98 insertions(+), 60 deletions(-) base-commit: 5a624adfd7b14c3717237d137bd0766c77f0f570 -- 2.41.0 [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 987 bytes --] ^ permalink raw reply [flat|nested] 30+ messages in thread
* [bug#70985] [PATCH 1/4] guix: packages: Add new &package-unsupported-target-error. 2024-05-16 14:59 [bug#70985] [PATCH 0/4] Use specific errors for unsupported targets Christopher Baines @ 2024-05-16 15:06 ` Christopher Baines 2024-05-16 15:06 ` [bug#70985] [PATCH 2/4] gnu: tls: Raise conditions from target->openssl-target Christopher Baines ` (2 more replies) 2024-05-16 15:16 ` [bug#70985] [PATCH 0/4] Use specific errors for " Ludovic Courtès ` (3 subsequent siblings) 4 siblings, 3 replies; 30+ messages in thread From: Christopher Baines @ 2024-05-16 15:06 UTC (permalink / raw) To: 70985 Cc: Christopher Baines, Josselin Poiret, Ludovic Courtès, Mathieu Othacehe, Ricardo Wurmus, Simon Tournier, Tobias Geerinckx-Rice Some packages don't support cross building to specific targets, so add a error type to signal this. * guix/packages.scm (&package-unsupported-target-error): New condition type. [package-unsupported-target-error? package-unsupported-target-error-target): New procedures. * guix/ui.scm (call-with-error-handling): Handle this new condition type. Change-Id: Ib47813399e04b20d616a95f545b6aabe25736e92 --- guix/packages.scm | 7 +++++++ guix/ui.scm | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/guix/packages.scm b/guix/packages.scm index abe89cdb07..7fbb8d126b 100644 --- a/guix/packages.scm +++ b/guix/packages.scm @@ -173,6 +173,9 @@ (define-module (guix packages) package-error-invalid-input &package-cross-build-system-error package-cross-build-system-error? + &package-unsupported-target-error + package-unsupported-target-error? + package-unsupported-target-error-target package->bag bag->derivation @@ -850,6 +853,10 @@ (define-condition-type &package-cyclic-dependency-error &package-error (define-condition-type &package-cross-build-system-error &package-error package-cross-build-system-error?) +(define-condition-type &package-unsupported-target-error &package-error + package-unsupported-target-error? + (target package-unsupported-target-error-target)) + (define* (package-full-name package #:optional (delimiter "@")) "Return the full name of PACKAGE--i.e., `NAME@VERSION'. By specifying DELIMITER (a string), you can customize what will appear between the name and diff --git a/guix/ui.scm b/guix/ui.scm index d82fa533cc..0bb1b3b3ba 100644 --- a/guix/ui.scm +++ b/guix/ui.scm @@ -756,6 +756,13 @@ (define (call-with-error-handling thunk) (location->string loc) (package-full-name package) (build-system-name system)))) + ((package-unsupported-target-error? c) + (let* ((package (package-error-package c)) + (loc (package-location package))) + (leave (G_ "~a: ~a: does not support target `~a'~%") + (location->string loc) + (package-full-name package) + (package-unsupported-target-error-target c)))) ((gexp-input-error? c) (let ((input (gexp-error-invalid-input c))) (leave (G_ "~s: invalid G-expression input~%") base-commit: 5a624adfd7b14c3717237d137bd0766c77f0f570 -- 2.41.0 ^ permalink raw reply related [flat|nested] 30+ messages in thread
* [bug#70985] [PATCH 2/4] gnu: tls: Raise conditions from target->openssl-target. 2024-05-16 15:06 ` [bug#70985] [PATCH 1/4] guix: packages: Add new &package-unsupported-target-error Christopher Baines @ 2024-05-16 15:06 ` Christopher Baines 2024-05-16 15:06 ` [bug#70985] [PATCH 3/4] gnu: cross-libc*: Raise conditions rather than returning #f Christopher Baines 2024-05-16 15:06 ` [bug#70985] [PATCH 4/4] guix: build-system: meson: Don't error on unsupported targets Christopher Baines 2 siblings, 0 replies; 30+ messages in thread From: Christopher Baines @ 2024-05-16 15:06 UTC (permalink / raw) To: 70985 Rather than rasising generic errors. * gnu/packages/tls.scm (target->openssl-target): Raise conditions rather than generic errors. (openssl-1.1): Call target->openssl-target with the package. Change-Id: I13c63328cdf6bc177b20879805246ad94ff2665b --- gnu/packages/tls.scm | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm index 719da8e113..f04e171a9b 100644 --- a/gnu/packages/tls.scm +++ b/gnu/packages/tls.scm @@ -84,7 +84,9 @@ (define-module (gnu packages tls) #:use-module (gnu packages time) #:use-module (gnu packages version-control) #:use-module (gnu packages base) - #:use-module (srfi srfi-1)) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-34) + #:use-module (srfi srfi-35)) (define-public libtasn1 (package @@ -390,7 +392,7 @@ (define-public guile2.2-gnutls (modify-inputs (package-inputs guile-gnutls) (replace "guile" guile-2.2))))) -(define (target->openssl-target target) +(define (target->openssl-target pkg target) "Return the value to set CONFIGURE_TARGET_ARCH to when cross-compiling OpenSSL for TARGET." ;; Keep this code outside the build code, @@ -411,7 +413,10 @@ (define (target->openssl-target target) ((target-linux? target) "linux") (else - (error "unsupported openssl target kernel")))) + (raise (condition + (&package-unsupported-target-error + (package pkg) + (target target))))))) (arch (cond ((target-x86-32? target) @@ -438,7 +443,10 @@ (define (target->openssl-target target) ((target-64bit? target) "generic64") (else - (error "unsupported openssl target architecture"))))) + (raise (condition + (&package-unsupported-target-error + (package pkg) + (target target)))))))) (string-append kernel "-" arch)))) (define-public openssl-1.1 @@ -488,6 +496,7 @@ (define-public openssl-1.1 (setenv "CROSS_COMPILE" (string-append target "-")) (setenv "CONFIGURE_TARGET_ARCH" #$(target->openssl-target + this-package (%current-target-system)))))) #~()) #$@(if (target-hurd?) -- 2.41.0 ^ permalink raw reply related [flat|nested] 30+ messages in thread
* [bug#70985] [PATCH 3/4] gnu: cross-libc*: Raise conditions rather than returning #f. 2024-05-16 15:06 ` [bug#70985] [PATCH 1/4] guix: packages: Add new &package-unsupported-target-error Christopher Baines 2024-05-16 15:06 ` [bug#70985] [PATCH 2/4] gnu: tls: Raise conditions from target->openssl-target Christopher Baines @ 2024-05-16 15:06 ` Christopher Baines 2024-05-16 15:15 ` Ludovic Courtès 2024-05-16 15:06 ` [bug#70985] [PATCH 4/4] guix: build-system: meson: Don't error on unsupported targets Christopher Baines 2 siblings, 1 reply; 30+ messages in thread From: Christopher Baines @ 2024-05-16 15:06 UTC (permalink / raw) To: 70985; +Cc: Ludovic Courtès As this means that the error will be clearer for targets which are unsupported. * gnu/packages/cross-base.scm (cross-libc*): Raise conditions rather than returning #f. Change-Id: I820780ad738d85a98950de5608f3019e961ff7c8 --- gnu/packages/cross-base.scm | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm index 2cc5f52e47..0488e397ef 100644 --- a/gnu/packages/cross-base.scm +++ b/gnu/packages/cross-base.scm @@ -46,6 +46,8 @@ (define-module (gnu packages cross-base) #:use-module (guix gexp) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) + #:use-module (srfi srfi-34) + #:use-module (srfi srfi-35) #:use-module (ice-9 match) #:use-module (ice-9 regex) #:export (cross-binutils @@ -671,8 +673,8 @@ (define* (cross-libc* target (xbinutils (cross-binutils target)) (xheaders (cross-kernel-headers target))) "Return LIBC cross-built for TARGET, a GNU triplet. Use XGCC and XBINUTILS -and the cross tool chain. If TARGET doesn't have a standard C library #f is -returned." +and the cross tool chain. If TARGET doesn't have a standard C library an +exception is raised." (match target ((? target-mingw?) (let ((machine (substring target 0 (string-index target #\-)))) @@ -745,7 +747,11 @@ (define* (cross-libc* target ((? target-avr?) (make-avr-libc #:xbinutils xbinutils #:xgcc xgcc)) - (else #f))) + (else + (raise (condition + (&package-unsupported-target-error + (package libc) + (target target))))))) (define* (cross-gcc-toolchain/implementation target #:key -- 2.41.0 ^ permalink raw reply related [flat|nested] 30+ messages in thread
* [bug#70985] [PATCH 3/4] gnu: cross-libc*: Raise conditions rather than returning #f. 2024-05-16 15:06 ` [bug#70985] [PATCH 3/4] gnu: cross-libc*: Raise conditions rather than returning #f Christopher Baines @ 2024-05-16 15:15 ` Ludovic Courtès 2024-05-16 16:16 ` Christopher Baines 0 siblings, 1 reply; 30+ messages in thread From: Ludovic Courtès @ 2024-05-16 15:15 UTC (permalink / raw) To: Christopher Baines; +Cc: 70985 Christopher Baines <mail@cbaines.net> writes: > As this means that the error will be clearer for targets which are > unsupported. > > * gnu/packages/cross-base.scm (cross-libc*): Raise conditions rather than > returning #f. > > Change-Id: I820780ad738d85a98950de5608f3019e961ff7c8 [...] > - (else #f))) > + (else > + (raise (condition > + (&package-unsupported-target-error > + (package libc) > + (target target))))))) What I'm unsure is whether this works with libc-less triplets such as ‘avr’ or ‘or1k-elf’. If it does, LGTM. Ludo’. ^ permalink raw reply [flat|nested] 30+ messages in thread
* [bug#70985] [PATCH 3/4] gnu: cross-libc*: Raise conditions rather than returning #f. 2024-05-16 15:15 ` Ludovic Courtès @ 2024-05-16 16:16 ` Christopher Baines 0 siblings, 0 replies; 30+ messages in thread From: Christopher Baines @ 2024-05-16 16:16 UTC (permalink / raw) To: Ludovic Courtès; +Cc: 70985 [-- Attachment #1: Type: text/plain, Size: 1193 bytes --] Ludovic Courtès <ludo@gnu.org> writes: > Christopher Baines <mail@cbaines.net> writes: > >> As this means that the error will be clearer for targets which are >> unsupported. >> >> * gnu/packages/cross-base.scm (cross-libc*): Raise conditions rather than >> returning #f. >> >> Change-Id: I820780ad738d85a98950de5608f3019e961ff7c8 > > [...] > >> - (else #f))) >> + (else >> + (raise (condition >> + (&package-unsupported-target-error >> + (package libc) >> + (target target))))))) > > What I'm unsure is whether this works with libc-less triplets such as > ‘avr’ or ‘or1k-elf’. Hmm, it seems like this is erroring in some cases where it didn't before, I'm not sure why though. I ended up here through rust-sysroot-for-... since it calls cross-libc. Handling cross-libc returning #f in the packages which use it seems error prone, hence adding the exception inside of cross-libc*. It looks liek cross-gcc-toolchain/implementation is expecting cross-libc to return #f in some cases though, so maybe I need to add a guard there somehow to handle the exception and ignore it, as happens when it returns #f. [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 987 bytes --] ^ permalink raw reply [flat|nested] 30+ messages in thread
* [bug#70985] [PATCH 4/4] guix: build-system: meson: Don't error on unsupported targets. 2024-05-16 15:06 ` [bug#70985] [PATCH 1/4] guix: packages: Add new &package-unsupported-target-error Christopher Baines 2024-05-16 15:06 ` [bug#70985] [PATCH 2/4] gnu: tls: Raise conditions from target->openssl-target Christopher Baines 2024-05-16 15:06 ` [bug#70985] [PATCH 3/4] gnu: cross-libc*: Raise conditions rather than returning #f Christopher Baines @ 2024-05-16 15:06 ` Christopher Baines 2024-05-16 15:13 ` Ludovic Courtès 2 siblings, 1 reply; 30+ messages in thread From: Christopher Baines @ 2024-05-16 15:06 UTC (permalink / raw) To: 70985 Rather than raising generic errors. * guix/build-system/meson.scm (make-machine-alist): Return #f if the triplet is unsupported. (lower): Return #f if the machine alist is #f. Change-Id: If6a1f8d1c2073e43107406ac186aa9c845005a95 --- guix/build-system/meson.scm | 115 +++++++++++++++++++----------------- 1 file changed, 62 insertions(+), 53 deletions(-) diff --git a/guix/build-system/meson.scm b/guix/build-system/meson.scm index bf9ca15ecc..b321417773 100644 --- a/guix/build-system/meson.scm +++ b/guix/build-system/meson.scm @@ -46,39 +46,46 @@ (define (make-machine-alist triplet) "Make an association list describing what should go into the ‘host_machine’ section of the cross file when cross-compiling for TRIPLET." - `((system . ,(cond ((target-hurd? triplet) "gnu") - ((target-linux? triplet) "linux") - ((target-mingw? triplet) "windows") - ((target-avr? triplet) "none") - (#t (error "meson: unknown operating system")))) - (cpu_family . ,(cond ((target-x86-32? triplet) "x86") + (let ((system + (cond + ((target-hurd? triplet) "gnu") + ((target-linux? triplet) "linux") + ((target-mingw? triplet) "windows") + ((target-avr? triplet) "none") + (else #f))) + (cpu-family + (cond ((target-x86-32? triplet) "x86") + ((target-x86-64? triplet) "x86_64") + ((target-arm32? triplet) "arm") + ((target-aarch64? triplet) "aarch64") + ((target-avr? triplet) "avr") + ((target-mips64el? triplet) "mips64") + ((target-powerpc? triplet) + (if (target-64bit? triplet) + "ppc64" + "ppc")) + ((target-riscv64? triplet) "riscv64") + (else #f)))) + (and system + cpu-family + `((system . ,system) + (cpu_family . ,cpu-family) + (cpu . ,(cond ((target-x86-32? triplet) ; i386, ..., i686 + (substring triplet 0 4)) ((target-x86-64? triplet) "x86_64") - ((target-arm32? triplet) "arm") - ((target-aarch64? triplet) "aarch64") + ((target-aarch64? triplet) "armv8-a") + ((target-arm32? triplet) "armv7") ((target-avr? triplet) "avr") - ((target-mips64el? triplet) "mips64") - ((target-powerpc? triplet) - (if (target-64bit? triplet) - "ppc64" - "ppc")) - ((target-riscv64? triplet) "riscv64") - (#t (error "meson: unknown architecture")))) - (cpu . ,(cond ((target-x86-32? triplet) ; i386, ..., i686 - (substring triplet 0 4)) - ((target-x86-64? triplet) "x86_64") - ((target-aarch64? triplet) "armv8-a") - ((target-arm32? triplet) "armv7") - ((target-avr? triplet) "avr") - ;; According to #mesonbuild on OFTC, there does not appear - ;; to be an official-ish list of CPU types recognised by - ;; Meson, the "cpu" field is not used by Meson itself and - ;; most software doesn't look at this field, except perhaps - ;; for selecting optimisations, so set it to something - ;; arbitrary. - (#t "strawberries"))) - (endian . ,(if (target-little-endian? triplet) - "little" - "big")))) + ;; According to #mesonbuild on OFTC, there does not appear + ;; to be an official-ish list of CPU types recognised by + ;; Meson, the "cpu" field is not used by Meson itself and + ;; most software doesn't look at this field, except perhaps + ;; for selecting optimisations, so set it to something + ;; arbitrary. + (#t "strawberries"))) + (endian . ,(if (target-little-endian? triplet) + "little" + "big")))))) (define (make-binaries-alist triplet) "Make an associatoin list describing what should go into @@ -146,29 +153,31 @@ (define* (lower name '() '(#:target)))) - (bag - (name name) - (system system) (target target) - (build-inputs `(("meson" ,meson) - ("ninja" ,ninja) - ,@native-inputs - ,@(if target '() inputs) - ;; Keep the standard inputs of 'gnu-build-system'. - ,@(if target - (standard-cross-packages target 'host) + (and + (make-machine-alist target) + (bag + (name name) + (system system) (target target) + (build-inputs `(("meson" ,meson) + ("ninja" ,ninja) + ,@native-inputs + ,@(if target '() inputs) + ;; Keep the standard inputs of 'gnu-build-system'. + ,@(if target + (standard-cross-packages target 'host) + '()) + ,@(standard-packages))) + (host-inputs `(,@(if source + `(("source" ,source)) '()) - ,@(standard-packages))) - (host-inputs `(,@(if source - `(("source" ,source)) - '()) - ,@(if target inputs '()))) - ;; Keep the standard inputs of 'gnu-buid-system'. - (target-inputs (if target - (standard-cross-packages target 'target) - '())) - (outputs outputs) - (build (if target meson-cross-build meson-build)) - (arguments (strip-keyword-arguments private-keywords arguments)))) + ,@(if target inputs '()))) + ;; Keep the standard inputs of 'gnu-buid-system'. + (target-inputs (if target + (standard-cross-packages target 'target) + '())) + (outputs outputs) + (build (if target meson-cross-build meson-build)) + (arguments (strip-keyword-arguments private-keywords arguments))))) (define* (meson-build name inputs #:key -- 2.41.0 ^ permalink raw reply related [flat|nested] 30+ messages in thread
* [bug#70985] [PATCH 4/4] guix: build-system: meson: Don't error on unsupported targets. 2024-05-16 15:06 ` [bug#70985] [PATCH 4/4] guix: build-system: meson: Don't error on unsupported targets Christopher Baines @ 2024-05-16 15:13 ` Ludovic Courtès 2024-05-16 16:10 ` Christopher Baines 0 siblings, 1 reply; 30+ messages in thread From: Ludovic Courtès @ 2024-05-16 15:13 UTC (permalink / raw) To: Christopher Baines; +Cc: 70985 Hi, Christopher Baines <mail@cbaines.net> writes: > Rather than raising generic errors. > > * guix/build-system/meson.scm (make-machine-alist): Return #f if the triplet > is unsupported. > (lower): Return #f if the machine alist is #f. > > Change-Id: If6a1f8d1c2073e43107406ac186aa9c845005a95 [...] > + (and > + (make-machine-alist target) I think this call is unnecessary (and kinda confusing because ‘make-machine-alist’ is a pure function) because ‘meson-cross-build’ calls ‘make-cross-file’, which calls ‘make-machine-alist’. Ludo’. ^ permalink raw reply [flat|nested] 30+ messages in thread
* [bug#70985] [PATCH 4/4] guix: build-system: meson: Don't error on unsupported targets. 2024-05-16 15:13 ` Ludovic Courtès @ 2024-05-16 16:10 ` Christopher Baines 0 siblings, 0 replies; 30+ messages in thread From: Christopher Baines @ 2024-05-16 16:10 UTC (permalink / raw) To: Ludovic Courtès; +Cc: 70985 [-- Attachment #1: Type: text/plain, Size: 1354 bytes --] Ludovic Courtès <ludo@gnu.org> writes: > Christopher Baines <mail@cbaines.net> writes: > >> Rather than raising generic errors. >> >> * guix/build-system/meson.scm (make-machine-alist): Return #f if the triplet >> is unsupported. >> (lower): Return #f if the machine alist is #f. >> >> Change-Id: If6a1f8d1c2073e43107406ac186aa9c845005a95 > > [...] > >> + (and >> + (make-machine-alist target) > > I think this call is unnecessary (and kinda confusing because > ‘make-machine-alist’ is a pure function) because ‘meson-cross-build’ > calls ‘make-cross-file’, which calls ‘make-machine-alist’. The situation here is that the meson build system does support cross builds, but make-machine-alist calls error for some targets which I'm treating as a bug here, because error isn't really machine readable. I think this line should actually be (or (not target) (make-machine-alist target)) to handle the case where the target is #f, but this is sort of helpful in that it changes the error to the usual error when the build system doesn't support cross builds. This is still far from perfect though as the UI would say that "build system `meson' does not support cross builds", which is obviously wrong, it just doesn't support cross builds for the given target. I'm not sure how to signal this though? [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 987 bytes --] ^ permalink raw reply [flat|nested] 30+ messages in thread
* [bug#70985] [PATCH 0/4] Use specific errors for unsupported targets 2024-05-16 14:59 [bug#70985] [PATCH 0/4] Use specific errors for unsupported targets Christopher Baines 2024-05-16 15:06 ` [bug#70985] [PATCH 1/4] guix: packages: Add new &package-unsupported-target-error Christopher Baines @ 2024-05-16 15:16 ` Ludovic Courtès 2024-05-17 9:53 ` [bug#70985] [PATCH 3/4] gnu: cross-libc*: Raise conditions rather than returning #f Jean-Pierre De Jesus Diaz ` (2 subsequent siblings) 4 siblings, 0 replies; 30+ messages in thread From: Ludovic Courtès @ 2024-05-16 15:16 UTC (permalink / raw) To: Christopher Baines; +Cc: 70985 Christopher Baines <mail@cbaines.net> writes: > I think when computing derivations any errors except from a small list > should be treated as bugs. > > This has become more of an issue with the avr, or1k-elf and > xtensa-ath9k-elf targets since these targets both seem to not support a > large number of packages, and lead to generic errors or crashes. > > I'm seeing this because logs relating to errors computing package > derivations are now taking up most of the data service logs around > processing revisions. Looks to me like a much welcome improvement, modulo the minor issues I commented on. Thanks! Ludo'. ^ permalink raw reply [flat|nested] 30+ messages in thread
* [bug#70985] [PATCH 3/4] gnu: cross-libc*: Raise conditions rather than returning #f. 2024-05-16 14:59 [bug#70985] [PATCH 0/4] Use specific errors for unsupported targets Christopher Baines 2024-05-16 15:06 ` [bug#70985] [PATCH 1/4] guix: packages: Add new &package-unsupported-target-error Christopher Baines 2024-05-16 15:16 ` [bug#70985] [PATCH 0/4] Use specific errors for " Ludovic Courtès @ 2024-05-17 9:53 ` Jean-Pierre De Jesus Diaz 2024-07-05 16:05 ` [bug#70985] [PATCH v2 1/6] guix: packages: Add new &package-unsupported-target-error Christopher Baines 2024-07-12 13:41 ` [bug#70985] [PATCH v3 1/6] guix: packages: Add new &package-unsupported-target-error Christopher Baines 4 siblings, 0 replies; 30+ messages in thread From: Jean-Pierre De Jesus Diaz @ 2024-05-17 9:53 UTC (permalink / raw) To: 70985; +Cc: ludo, mail Hello, >> Christopher Baines <mail@cbaines.net> writes: >> >>> As this means that the error will be clearer for targets which are >>> unsupported. >>> >>> * gnu/packages/cross-base.scm (cross-libc*): Raise conditions rather than >>> returning #f. >>> >>> Change-Id: I820780ad738d85a98950de5608f3019e961ff7c8 >> >> [...] >> >>> - (else #f))) >>> + (else >>> + (raise (condition >>> + (&package-unsupported-target-error >>> + (package libc) >>> + (target target))))))) >> >> What I'm unsure is whether this works with libc-less triplets such as >> ‘avr’ or ‘or1k-elf’. > >Hmm, it seems like this is erroring in some cases where it didn't >before, I'm not sure why though. > >I ended up here through rust-sysroot-for-... since it calls >cross-libc. Handling cross-libc returning #f in the packages which use >it seems error prone, hence adding the exception inside of cross-libc*. > >It looks liek cross-gcc-toolchain/implementation is expecting cross-libc >to return #f in some cases though, so maybe I need to add a guard there >somehow to handle the exception and ignore it, as happens when it >returns #f. This is because some targets as Ludovic mentioned don't have a proper libc, like most *-elf targets. Also, gnu-build-system also depends on cross-libc returning #f to check for those targets that don't have a libc in `cross-standard-packages'. Thanks, Jean-Pierre ^ permalink raw reply [flat|nested] 30+ messages in thread
* [bug#70985] [PATCH v2 1/6] guix: packages: Add new &package-unsupported-target-error. 2024-05-16 14:59 [bug#70985] [PATCH 0/4] Use specific errors for unsupported targets Christopher Baines ` (2 preceding siblings ...) 2024-05-17 9:53 ` [bug#70985] [PATCH 3/4] gnu: cross-libc*: Raise conditions rather than returning #f Jean-Pierre De Jesus Diaz @ 2024-07-05 16:05 ` Christopher Baines 2024-07-05 16:05 ` [bug#70985] [PATCH v2 2/6] gnu: tls: Raise conditions from target->openssl-target Christopher Baines ` (4 more replies) 2024-07-12 13:41 ` [bug#70985] [PATCH v3 1/6] guix: packages: Add new &package-unsupported-target-error Christopher Baines 4 siblings, 5 replies; 30+ messages in thread From: Christopher Baines @ 2024-07-05 16:05 UTC (permalink / raw) To: 70985 Cc: Christopher Baines, Josselin Poiret, Ludovic Courtès, Mathieu Othacehe, Simon Tournier, Tobias Geerinckx-Rice Some packages don't support cross building to specific targets, so add a error type to signal this. * guix/packages.scm (&package-unsupported-target-error): New condition type. [package-unsupported-target-error? package-unsupported-target-error-target): New procedures. * guix/ui.scm (call-with-error-handling): Handle this new condition type. Change-Id: Ib47813399e04b20d616a95f545b6aabe25736e92 --- guix/packages.scm | 7 +++++++ guix/ui.scm | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/guix/packages.scm b/guix/packages.scm index f3a9a61785..e793714f2e 100644 --- a/guix/packages.scm +++ b/guix/packages.scm @@ -173,6 +173,9 @@ (define-module (guix packages) package-error-invalid-input &package-cross-build-system-error package-cross-build-system-error? + &package-unsupported-target-error + package-unsupported-target-error? + package-unsupported-target-error-target package->bag bag->derivation @@ -850,6 +853,10 @@ (define-condition-type &package-cyclic-dependency-error &package-error (define-condition-type &package-cross-build-system-error &package-error package-cross-build-system-error?) +(define-condition-type &package-unsupported-target-error &package-error + package-unsupported-target-error? + (target package-unsupported-target-error-target)) + (define* (package-full-name package #:optional (delimiter "@")) "Return the full name of PACKAGE--i.e., `NAME@VERSION'. By specifying DELIMITER (a string), you can customize what will appear between the name and diff --git a/guix/ui.scm b/guix/ui.scm index d82fa533cc..0bb1b3b3ba 100644 --- a/guix/ui.scm +++ b/guix/ui.scm @@ -756,6 +756,13 @@ (define (call-with-error-handling thunk) (location->string loc) (package-full-name package) (build-system-name system)))) + ((package-unsupported-target-error? c) + (let* ((package (package-error-package c)) + (loc (package-location package))) + (leave (G_ "~a: ~a: does not support target `~a'~%") + (location->string loc) + (package-full-name package) + (package-unsupported-target-error-target c)))) ((gexp-input-error? c) (let ((input (gexp-error-invalid-input c))) (leave (G_ "~s: invalid G-expression input~%") base-commit: 5ee2799cabba4b2d462ac064a98789d7bca07923 -- 2.45.2 ^ permalink raw reply related [flat|nested] 30+ messages in thread
* [bug#70985] [PATCH v2 2/6] gnu: tls: Raise conditions from target->openssl-target. 2024-07-05 16:05 ` [bug#70985] [PATCH v2 1/6] guix: packages: Add new &package-unsupported-target-error Christopher Baines @ 2024-07-05 16:05 ` Christopher Baines 2024-07-05 16:06 ` [bug#70985] [PATCH v2 3/6] guix: packages: Add &unsupported-cross-compilation-target-error Christopher Baines ` (3 subsequent siblings) 4 siblings, 0 replies; 30+ messages in thread From: Christopher Baines @ 2024-07-05 16:05 UTC (permalink / raw) To: 70985 Rather than rasising generic errors. * gnu/packages/tls.scm (target->openssl-target): Raise conditions rather than generic errors. (openssl-1.1): Call target->openssl-target with the package. Change-Id: I13c63328cdf6bc177b20879805246ad94ff2665b --- gnu/packages/tls.scm | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm index 760b917768..fdc003731d 100644 --- a/gnu/packages/tls.scm +++ b/gnu/packages/tls.scm @@ -84,7 +84,9 @@ (define-module (gnu packages tls) #:use-module (gnu packages time) #:use-module (gnu packages version-control) #:use-module (gnu packages base) - #:use-module (srfi srfi-1)) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-34) + #:use-module (srfi srfi-35)) (define-public libtasn1 (package @@ -390,7 +392,7 @@ (define-public guile2.2-gnutls (modify-inputs (package-inputs guile-gnutls) (replace "guile" guile-2.2))))) -(define (target->openssl-target target) +(define (target->openssl-target pkg target) "Return the value to set CONFIGURE_TARGET_ARCH to when cross-compiling OpenSSL for TARGET." ;; Keep this code outside the build code, @@ -411,7 +413,10 @@ (define (target->openssl-target target) ((target-linux? target) "linux") (else - (error "unsupported openssl target kernel")))) + (raise (condition + (&package-unsupported-target-error + (package pkg) + (target target))))))) (arch (cond ((target-x86-32? target) @@ -438,7 +443,10 @@ (define (target->openssl-target target) ((target-64bit? target) "generic64") (else - (error "unsupported openssl target architecture"))))) + (raise (condition + (&package-unsupported-target-error + (package pkg) + (target target)))))))) (string-append kernel "-" arch)))) (define-public openssl-1.1 @@ -488,6 +496,7 @@ (define-public openssl-1.1 (setenv "CROSS_COMPILE" (string-append target "-")) (setenv "CONFIGURE_TARGET_ARCH" #$(target->openssl-target + this-package (%current-target-system)))))) #~()) #$@(if (target-hurd?) -- 2.45.2 ^ permalink raw reply related [flat|nested] 30+ messages in thread
* [bug#70985] [PATCH v2 3/6] guix: packages: Add &unsupported-cross-compilation-target-error. 2024-07-05 16:05 ` [bug#70985] [PATCH v2 1/6] guix: packages: Add new &package-unsupported-target-error Christopher Baines 2024-07-05 16:05 ` [bug#70985] [PATCH v2 2/6] gnu: tls: Raise conditions from target->openssl-target Christopher Baines @ 2024-07-05 16:06 ` Christopher Baines 2024-07-05 16:06 ` [bug#70985] [PATCH v2 4/6] build-system: meson: Use a more specific exception Christopher Baines ` (2 subsequent siblings) 4 siblings, 0 replies; 30+ messages in thread From: Christopher Baines @ 2024-07-05 16:06 UTC (permalink / raw) To: 70985 Cc: Christopher Baines, Josselin Poiret, Ludovic Courtès, Mathieu Othacehe, Simon Tournier, Tobias Geerinckx-Rice * guix/packages.scm (&unsupported-cross-compilation-target-error): New variable. * guix/ui.scm (call-with-error-handling): Handle this new condition type. Change-Id: I9e7782ee4799b5fecb3c890a75008c35c003f55d --- guix/packages.scm | 10 ++++++++++ guix/ui.scm | 7 +++++++ 2 files changed, 17 insertions(+) diff --git a/guix/packages.scm b/guix/packages.scm index e793714f2e..c953db9a03 100644 --- a/guix/packages.scm +++ b/guix/packages.scm @@ -160,6 +160,11 @@ (define-module (guix packages) %cuirass-supported-systems supported-package? + &unsupported-cross-compilation-target-error + unsupported-cross-compilation-target-error? + unsupported-cross-compilation-target-error-build-system + unsupported-cross-compilation-target-error-target + &package-error package-error? package-error-package @@ -834,6 +839,11 @@ (define-syntax-rule (this-package-native-input name) ;; Error conditions. +(define-condition-type &unsupported-cross-compilation-target-error &error + unsupported-cross-compilation-target-error? + (build-system unsupported-cross-compilation-target-error-build-system) + (target unsupported-cross-compilation-target-error-target)) + (define-condition-type &package-error &error package-error? (package package-error-package)) diff --git a/guix/ui.scm b/guix/ui.scm index 0bb1b3b3ba..9db6f6e9d7 100644 --- a/guix/ui.scm +++ b/guix/ui.scm @@ -763,6 +763,13 @@ (define (call-with-error-handling thunk) (location->string loc) (package-full-name package) (package-unsupported-target-error-target c)))) + ((unsupported-cross-compilation-target-error? c) + (let ((build-system + (unsupported-cross-compilation-target-error-build-system c)) + (target (unsupported-cross-compilation-target-error-target c))) + (leave (G_ "the `~a' build system: does not support target `~a'~%") + (build-system-name build-system) + target))) ((gexp-input-error? c) (let ((input (gexp-error-invalid-input c))) (leave (G_ "~s: invalid G-expression input~%") -- 2.45.2 ^ permalink raw reply related [flat|nested] 30+ messages in thread
* [bug#70985] [PATCH v2 4/6] build-system: meson: Use a more specific exception. 2024-07-05 16:05 ` [bug#70985] [PATCH v2 1/6] guix: packages: Add new &package-unsupported-target-error Christopher Baines 2024-07-05 16:05 ` [bug#70985] [PATCH v2 2/6] gnu: tls: Raise conditions from target->openssl-target Christopher Baines 2024-07-05 16:06 ` [bug#70985] [PATCH v2 3/6] guix: packages: Add &unsupported-cross-compilation-target-error Christopher Baines @ 2024-07-05 16:06 ` Christopher Baines 2024-07-05 16:06 ` [bug#70985] [PATCH v2 5/6] gnu: rust: Guard against cross-libc returning #f Christopher Baines 2024-07-05 16:06 ` [bug#70985] [PATCH v2 6/6] build-system: go: Properly handle when a target is unsupported Christopher Baines 4 siblings, 0 replies; 30+ messages in thread From: Christopher Baines @ 2024-07-05 16:06 UTC (permalink / raw) To: 70985 This is handled by (guix ui). * guix/build-system/meson.scm (make-machine-alist): Use a more specific exception. Change-Id: I842ba63739fdefe04460e938c7bc8aa54ea57b96 --- guix/build-system/meson.scm | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/guix/build-system/meson.scm b/guix/build-system/meson.scm index bf9ca15ecc..04d2241c79 100644 --- a/guix/build-system/meson.scm +++ b/guix/build-system/meson.scm @@ -30,6 +30,8 @@ (define-module (guix build-system meson) #:use-module (guix build-system gnu) #:use-module (guix build-system glib-or-gtk) #:use-module (guix packages) + #:use-module (srfi srfi-34) + #:use-module (srfi srfi-35) #:export (%meson-build-system-modules meson-build-system make-cross-file)) @@ -50,7 +52,12 @@ (define (make-machine-alist triplet) ((target-linux? triplet) "linux") ((target-mingw? triplet) "windows") ((target-avr? triplet) "none") - (#t (error "meson: unknown operating system")))) + (else + (raise + (condition + (&unsupported-cross-compilation-target-error + (build-system meson-build-system) + (target triplet))))))) (cpu_family . ,(cond ((target-x86-32? triplet) "x86") ((target-x86-64? triplet) "x86_64") ((target-arm32? triplet) "arm") @@ -62,7 +69,12 @@ (define (make-machine-alist triplet) "ppc64" "ppc")) ((target-riscv64? triplet) "riscv64") - (#t (error "meson: unknown architecture")))) + (else + (raise + (condition + (&unsupported-cross-compilation-target-error + (build-system meson-build-system) + (target triplet))))))) (cpu . ,(cond ((target-x86-32? triplet) ; i386, ..., i686 (substring triplet 0 4)) ((target-x86-64? triplet) "x86_64") -- 2.45.2 ^ permalink raw reply related [flat|nested] 30+ messages in thread
* [bug#70985] [PATCH v2 5/6] gnu: rust: Guard against cross-libc returning #f. 2024-07-05 16:05 ` [bug#70985] [PATCH v2 1/6] guix: packages: Add new &package-unsupported-target-error Christopher Baines ` (2 preceding siblings ...) 2024-07-05 16:06 ` [bug#70985] [PATCH v2 4/6] build-system: meson: Use a more specific exception Christopher Baines @ 2024-07-05 16:06 ` Christopher Baines 2024-07-07 16:26 ` Efraim Flashner 2024-07-07 16:57 ` Efraim Flashner 2024-07-05 16:06 ` [bug#70985] [PATCH v2 6/6] build-system: go: Properly handle when a target is unsupported Christopher Baines 4 siblings, 2 replies; 30+ messages in thread From: Christopher Baines @ 2024-07-05 16:06 UTC (permalink / raw) To: 70985; +Cc: Efraim Flashner * gnu/packages/rust.scm (make-rust-sysroot/implementation): Guard against cross-libc returning #f. Change-Id: Ia0d5c889c6f5cd3478ad985c79feb9ba1c472c29 --- gnu/packages/rust.scm | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm index a385344473..f1de34b277 100644 --- a/gnu/packages/rust.scm +++ b/gnu/packages/rust.scm @@ -73,7 +73,9 @@ (define-module (gnu packages rust) #:use-module (ice-9 match) #:use-module (ice-9 optargs) #:use-module (srfi srfi-1) - #:use-module (srfi srfi-26)) + #:use-module (srfi srfi-26) + #:use-module (srfi srfi-34) + #:use-module (srfi srfi-35)) ;; This is the hash for the empty file, and the reason it's relevant is not ;; the most obvious. @@ -1464,7 +1466,11 @@ (define make-rust-sysroot/implementation (modify-inputs (package-native-inputs base-rust) (prepend (cross-gcc target #:libc (cross-libc target)) - (cross-libc target) + (or (cross-libc target) ; could be #f + (raise (condition + (&package-unsupported-target-error + (package (libc-for-target target)) + (target target))))) (cross-binutils target))))) (properties `((hidden? . #t) -- 2.45.2 ^ permalink raw reply related [flat|nested] 30+ messages in thread
* [bug#70985] [PATCH v2 5/6] gnu: rust: Guard against cross-libc returning #f. 2024-07-05 16:06 ` [bug#70985] [PATCH v2 5/6] gnu: rust: Guard against cross-libc returning #f Christopher Baines @ 2024-07-07 16:26 ` Efraim Flashner 2024-07-07 16:57 ` Efraim Flashner 1 sibling, 0 replies; 30+ messages in thread From: Efraim Flashner @ 2024-07-07 16:26 UTC (permalink / raw) To: Christopher Baines; +Cc: 70985 [-- Attachment #1: Type: text/plain, Size: 2728 bytes --] On Fri, Jul 05, 2024 at 06:06:02PM +0200, Christopher Baines wrote: > * gnu/packages/rust.scm (make-rust-sysroot/implementation): Guard against > cross-libc returning #f. > > Change-Id: Ia0d5c889c6f5cd3478ad985c79feb9ba1c472c29 > --- > gnu/packages/rust.scm | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm > index a385344473..f1de34b277 100644 > --- a/gnu/packages/rust.scm > +++ b/gnu/packages/rust.scm > @@ -73,7 +73,9 @@ (define-module (gnu packages rust) > #:use-module (ice-9 match) > #:use-module (ice-9 optargs) > #:use-module (srfi srfi-1) > - #:use-module (srfi srfi-26)) > + #:use-module (srfi srfi-26) > + #:use-module (srfi srfi-34) > + #:use-module (srfi srfi-35)) > > ;; This is the hash for the empty file, and the reason it's relevant is not > ;; the most obvious. > @@ -1464,7 +1466,11 @@ (define make-rust-sysroot/implementation > (modify-inputs (package-native-inputs base-rust) > (prepend (cross-gcc target > #:libc (cross-libc target)) > - (cross-libc target) > + (or (cross-libc target) ; could be #f > + (raise (condition > + (&package-unsupported-target-error > + (package (libc-for-target target)) > + (target target))))) > (cross-binutils target))))) > (properties > `((hidden? . #t) > -- > 2.45.2 rust does support architectures without a libc, for example the mingw targets a few lines above this snippet. I think it would make more sense to only include (cross-libc target) and not if not. I just tried building zoxide for powerpc-linux-gnu without (cross-libc target) and it tried to link with the x86_64 libc, so it looks like it is necessary where it is available. How about we make this section even worse with: (if (false-if-exception (cross-libc target)) (modify-inputs ... (cross-libc target) ...) (modify-inputs ...)) ; no (cross-libc target) In the meantime, I'll try to figure something out for actually putting everything inside one modify-inputs so we don't have an ever expanding number of them. -- Efraim Flashner <efraim@flashner.co.il> רנשלפ םירפא GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 30+ messages in thread
* [bug#70985] [PATCH v2 5/6] gnu: rust: Guard against cross-libc returning #f. 2024-07-05 16:06 ` [bug#70985] [PATCH v2 5/6] gnu: rust: Guard against cross-libc returning #f Christopher Baines 2024-07-07 16:26 ` Efraim Flashner @ 2024-07-07 16:57 ` Efraim Flashner 2024-07-09 9:25 ` Christopher Baines 1 sibling, 1 reply; 30+ messages in thread From: Efraim Flashner @ 2024-07-07 16:57 UTC (permalink / raw) To: Christopher Baines; +Cc: 70985 [-- Attachment #1: Type: text/plain, Size: 2604 bytes --] On Fri, Jul 05, 2024 at 06:06:02PM +0200, Christopher Baines wrote: > * gnu/packages/rust.scm (make-rust-sysroot/implementation): Guard against > cross-libc returning #f. > > Change-Id: Ia0d5c889c6f5cd3478ad985c79feb9ba1c472c29 > --- > gnu/packages/rust.scm | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm > index a385344473..f1de34b277 100644 > --- a/gnu/packages/rust.scm > +++ b/gnu/packages/rust.scm > @@ -73,7 +73,9 @@ (define-module (gnu packages rust) > #:use-module (ice-9 match) > #:use-module (ice-9 optargs) > #:use-module (srfi srfi-1) > - #:use-module (srfi srfi-26)) > + #:use-module (srfi srfi-26) > + #:use-module (srfi srfi-34) > + #:use-module (srfi srfi-35)) > > ;; This is the hash for the empty file, and the reason it's relevant is not > ;; the most obvious. > @@ -1464,7 +1466,11 @@ (define make-rust-sysroot/implementation > (modify-inputs (package-native-inputs base-rust) > (prepend (cross-gcc target > #:libc (cross-libc target)) > - (cross-libc target) > + (or (cross-libc target) ; could be #f > + (raise (condition > + (&package-unsupported-target-error > + (package (libc-for-target target)) > + (target target))))) > (cross-binutils target))))) > (properties > `((hidden? . #t) > -- > 2.45.2 This will probably work: (native-inputs `((,(string-append "gcc-cross-" target) ,(cross-gcc target #:libc (cross-libc target))) ,(when (false-if-exception (cross-libc target)) `(,(string-append "glibc-cross-" target) ,(cross-libc target))) (,(string-append "binutils-cross-" target) ,(cross-binutils target)) ,(when (target-mingw? target) (if (string=? "i686-w64-mingw32" target) `("mingw-w64-i686-winpthreads" ,mingw-w64-i686-winpthreads) `("mingw-w64-x86_64-winpthreads" ,mingw-w64-x86_64-winpthreads))) ,@(package-native-inputs base-rust))) -- Efraim Flashner <efraim@flashner.co.il> רנשלפ םירפא GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 30+ messages in thread
* [bug#70985] [PATCH v2 5/6] gnu: rust: Guard against cross-libc returning #f. 2024-07-07 16:57 ` Efraim Flashner @ 2024-07-09 9:25 ` Christopher Baines 2024-07-09 15:21 ` Efraim Flashner 0 siblings, 1 reply; 30+ messages in thread From: Christopher Baines @ 2024-07-09 9:25 UTC (permalink / raw) To: Efraim Flashner; +Cc: 70985 [-- Attachment #1: Type: text/plain, Size: 3951 bytes --] Efraim Flashner <efraim@flashner.co.il> writes: > On Fri, Jul 05, 2024 at 06:06:02PM +0200, Christopher Baines wrote: >> * gnu/packages/rust.scm (make-rust-sysroot/implementation): Guard against >> cross-libc returning #f. >> >> Change-Id: Ia0d5c889c6f5cd3478ad985c79feb9ba1c472c29 >> --- >> gnu/packages/rust.scm | 10 ++++++++-- >> 1 file changed, 8 insertions(+), 2 deletions(-) >> >> diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm >> index a385344473..f1de34b277 100644 >> --- a/gnu/packages/rust.scm >> +++ b/gnu/packages/rust.scm >> @@ -73,7 +73,9 @@ (define-module (gnu packages rust) >> #:use-module (ice-9 match) >> #:use-module (ice-9 optargs) >> #:use-module (srfi srfi-1) >> - #:use-module (srfi srfi-26)) >> + #:use-module (srfi srfi-26) >> + #:use-module (srfi srfi-34) >> + #:use-module (srfi srfi-35)) >> >> ;; This is the hash for the empty file, and the reason it's relevant is not >> ;; the most obvious. >> @@ -1464,7 +1466,11 @@ (define make-rust-sysroot/implementation >> (modify-inputs (package-native-inputs base-rust) >> (prepend (cross-gcc target >> #:libc (cross-libc target)) >> - (cross-libc target) >> + (or (cross-libc target) ; could be #f >> + (raise (condition >> + (&package-unsupported-target-error >> + (package (libc-for-target target)) >> + (target target))))) >> (cross-binutils target))))) >> (properties >> `((hidden? . #t) >> -- >> 2.45.2 > > This will probably work: > > (native-inputs > `((,(string-append "gcc-cross-" target) ,(cross-gcc target > #:libc (cross-libc target))) > ,(when (false-if-exception (cross-libc target)) > `(,(string-append "glibc-cross-" target) ,(cross-libc target))) > (,(string-append "binutils-cross-" target) ,(cross-binutils target)) > ,(when (target-mingw? target) > (if (string=? "i686-w64-mingw32" target) > `("mingw-w64-i686-winpthreads" ,mingw-w64-i686-winpthreads) > `("mingw-w64-x86_64-winpthreads" ,mingw-w64-x86_64-winpthreads))) > ,@(package-native-inputs base-rust))) Thanks for taking a look. In the latest patches cross-libc isn't changing to raise an exception (as that ended up being too complicated), so I'm not sure the false-if-exception is going to work. I'd also maybe stick with modify-inputs, as at least that avoids the older inputs style. If I've followed your first email correctly, are you thinking of something like this? (native-inputs (if (target-mingw? target) (modify-inputs (package-native-inputs base-rust) (prepend (cross-gcc target #:libc (cross-libc target)) (cross-binutils target) (if (string=? "i686-w64-mingw32" target) mingw-w64-i686-winpthreads mingw-w64-x86_64-winpthreads))) (modify-inputs (or (and=> (cross-libc target) (lambda (x-libc) (modify-inputs (package-native-inputs base-rust) (prepend x-libc)))) (package-native-inputs base-rust)) (prepend (cross-gcc target #:libc (cross-libc target)) (cross-binutils target))))) [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 987 bytes --] ^ permalink raw reply [flat|nested] 30+ messages in thread
* [bug#70985] [PATCH v2 5/6] gnu: rust: Guard against cross-libc returning #f. 2024-07-09 9:25 ` Christopher Baines @ 2024-07-09 15:21 ` Efraim Flashner 2024-07-12 13:56 ` Christopher Baines 0 siblings, 1 reply; 30+ messages in thread From: Efraim Flashner @ 2024-07-09 15:21 UTC (permalink / raw) To: Christopher Baines; +Cc: 70985 [-- Attachment #1: Type: text/plain, Size: 7254 bytes --] On Tue, Jul 09, 2024 at 11:25:04AM +0200, Christopher Baines wrote: > Efraim Flashner <efraim@flashner.co.il> writes: > > > On Fri, Jul 05, 2024 at 06:06:02PM +0200, Christopher Baines wrote: > >> * gnu/packages/rust.scm (make-rust-sysroot/implementation): Guard against > >> cross-libc returning #f. > >> > >> Change-Id: Ia0d5c889c6f5cd3478ad985c79feb9ba1c472c29 > >> --- > >> gnu/packages/rust.scm | 10 ++++++++-- > >> 1 file changed, 8 insertions(+), 2 deletions(-) > >> > >> diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm > >> index a385344473..f1de34b277 100644 > >> --- a/gnu/packages/rust.scm > >> +++ b/gnu/packages/rust.scm > >> @@ -73,7 +73,9 @@ (define-module (gnu packages rust) > >> #:use-module (ice-9 match) > >> #:use-module (ice-9 optargs) > >> #:use-module (srfi srfi-1) > >> - #:use-module (srfi srfi-26)) > >> + #:use-module (srfi srfi-26) > >> + #:use-module (srfi srfi-34) > >> + #:use-module (srfi srfi-35)) > >> > >> ;; This is the hash for the empty file, and the reason it's relevant is not > >> ;; the most obvious. > >> @@ -1464,7 +1466,11 @@ (define make-rust-sysroot/implementation > >> (modify-inputs (package-native-inputs base-rust) > >> (prepend (cross-gcc target > >> #:libc (cross-libc target)) > >> - (cross-libc target) > >> + (or (cross-libc target) ; could be #f > >> + (raise (condition > >> + (&package-unsupported-target-error > >> + (package (libc-for-target target)) > >> + (target target))))) > >> (cross-binutils target))))) > >> (properties > >> `((hidden? . #t) > >> -- > >> 2.45.2 > > > > This will probably work: > > > > (native-inputs > > `((,(string-append "gcc-cross-" target) ,(cross-gcc target > > #:libc (cross-libc target))) > > ,(when (false-if-exception (cross-libc target)) > > `(,(string-append "glibc-cross-" target) ,(cross-libc target))) > > (,(string-append "binutils-cross-" target) ,(cross-binutils target)) > > ,(when (target-mingw? target) > > (if (string=? "i686-w64-mingw32" target) > > `("mingw-w64-i686-winpthreads" ,mingw-w64-i686-winpthreads) > > `("mingw-w64-x86_64-winpthreads" ,mingw-w64-x86_64-winpthreads))) > > ,@(package-native-inputs base-rust))) > > Thanks for taking a look. In the latest patches cross-libc isn't > changing to raise an exception (as that ended up being too complicated), > so I'm not sure the false-if-exception is going to work. false-if-exception should work. We use it a couple of times in golang packaging to skip the tests if we're building with gccgo. (unless ;; The tests fail when run with gccgo. (false-if-exception (search-input-file inputs "/bin/gccgo")) (apply (assoc-ref %standard-phases 'check) args))))))) > I'd also maybe stick with modify-inputs, as at least that avoids the > older inputs style. > > If I've followed your first email correctly, are you thinking of > something like this? > > (native-inputs > (if (target-mingw? target) > (modify-inputs (package-native-inputs base-rust) > (prepend (cross-gcc target > #:libc (cross-libc target)) > (cross-binutils target) > (if (string=? "i686-w64-mingw32" target) > mingw-w64-i686-winpthreads > mingw-w64-x86_64-winpthreads))) > (modify-inputs (or (and=> (cross-libc target) > (lambda (x-libc) > (modify-inputs > (package-native-inputs base-rust) > (prepend x-libc)))) > (package-native-inputs base-rust)) > (prepend (cross-gcc target > #:libc (cross-libc target)) > (cross-binutils target))))) Thanks, I hate it :) That said, if it works then it's fine. (I lose my confidence from (cross-libc target) getting renamed to x-libc) I played around with it a bit more. The problem is that we can only logic our way around before modify-inputs or inside prepend/append/delete, so options are a bit limited as to what we can do. I came up with the following, which I think should also work: (native-inputs (modify-inputs (package-native-inputs base-rust) (prepend (cross-binutils target)) (prepend (cond ((and (target-mingw? target) (target-x86-32? target)) mingw-w64-i686-winpthreads) ((and (target-mingw? target) (target-x86-64? target)) mingw-w64-x86_64-winpthreads) ((or (target-linux? target) (target-hurd? target)) (cross-libc target)) ;; We need something, and duplicating cross-binutils ;; doesn't cause any problems. (#t (cross-binutils target)))) (prepend (cross-gcc target #:libc (cross-libc target))))) I don't like the '#t' branch of the cond, but it doesn't seem to break anything. And we're explicit about who gets cross-libc. I would like something like the following to work, but some of the inputs get lost (native-inputs (modify-inputs (package-native-inputs base-rust) (prepend (cond ((and (target-mingw? target) (target-x86-32? target)) (cross-gcc target #:libc (cross-libc target)) mingw-w64-i686-winpthreads (cross-binutils target)) ((and (target-mingw? target) (target-x86-64? target)) (cross-gcc target #:libc (cross-libc target)) mingw-w64-x86_64-winpthreads (cross-binutils target)) ((or (target-linux? target) (target-hurd? target)) (cross-gcc target #:libc (cross-libc target)) (cross-libc target) (cross-binutils target)) (else (cross-gcc target #:libc (cross-libc target)) (cross-binutils target)))))) -- Efraim Flashner <efraim@flashner.co.il> רנשלפ םירפא GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 30+ messages in thread
* [bug#70985] [PATCH v2 5/6] gnu: rust: Guard against cross-libc returning #f. 2024-07-09 15:21 ` Efraim Flashner @ 2024-07-12 13:56 ` Christopher Baines 0 siblings, 0 replies; 30+ messages in thread From: Christopher Baines @ 2024-07-12 13:56 UTC (permalink / raw) To: Efraim Flashner; +Cc: 70985 [-- Attachment #1: Type: text/plain, Size: 3266 bytes --] Efraim Flashner <efraim@flashner.co.il> writes: >> I'd also maybe stick with modify-inputs, as at least that avoids the >> older inputs style. >> >> If I've followed your first email correctly, are you thinking of >> something like this? >> >> (native-inputs >> (if (target-mingw? target) >> (modify-inputs (package-native-inputs base-rust) >> (prepend (cross-gcc target >> #:libc (cross-libc target)) >> (cross-binutils target) >> (if (string=? "i686-w64-mingw32" target) >> mingw-w64-i686-winpthreads >> mingw-w64-x86_64-winpthreads))) >> (modify-inputs (or (and=> (cross-libc target) >> (lambda (x-libc) >> (modify-inputs >> (package-native-inputs base-rust) >> (prepend x-libc)))) >> (package-native-inputs base-rust)) >> (prepend (cross-gcc target >> #:libc (cross-libc target)) >> (cross-binutils target))))) > > Thanks, I hate it :) That said, if it works then it's fine. (I lose my > confidence from (cross-libc target) getting renamed to x-libc) > > I played around with it a bit more. The problem is that we can only > logic our way around before modify-inputs or inside > prepend/append/delete, so options are a bit limited as to what we can > do. I came up with the following, which I think should also work: > > (native-inputs > (modify-inputs (package-native-inputs base-rust) > (prepend (cross-binutils target)) > (prepend > (cond ((and (target-mingw? target) > (target-x86-32? target)) > mingw-w64-i686-winpthreads) > ((and (target-mingw? target) > (target-x86-64? target)) > mingw-w64-x86_64-winpthreads) > ((or (target-linux? target) > (target-hurd? target)) > (cross-libc target)) > ;; We need something, and duplicating cross-binutils > ;; doesn't cause any problems. > (#t (cross-binutils target)))) > (prepend (cross-gcc target > #:libc (cross-libc target))))) I looked at this further and actually tried building the derivations for different targets, and realised that there needs to be a platform-rust-target set for it to work. So maybe we don't need to bother with the inputs here and can just add a guard at the top, e.g. (define make-rust-sysroot/implementation (mlambda (target base-rust) + (unless (platform-rust-target (lookup-platform-by-target target)) + (raise + (condition + (&package-unsupported-target-error + (package base-rust) + (target target))))) + I've sent a new patch series to this effect. [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 987 bytes --] ^ permalink raw reply [flat|nested] 30+ messages in thread
* [bug#70985] [PATCH v2 6/6] build-system: go: Properly handle when a target is unsupported. 2024-07-05 16:05 ` [bug#70985] [PATCH v2 1/6] guix: packages: Add new &package-unsupported-target-error Christopher Baines ` (3 preceding siblings ...) 2024-07-05 16:06 ` [bug#70985] [PATCH v2 5/6] gnu: rust: Guard against cross-libc returning #f Christopher Baines @ 2024-07-05 16:06 ` Christopher Baines 4 siblings, 0 replies; 30+ messages in thread From: Christopher Baines @ 2024-07-05 16:06 UTC (permalink / raw) To: 70985; +Cc: Katherine Cox-Buday, Sharlatan Hellseher * guix/build-system/go.scm (go-target): Properly handle when a target is unsupported. Change-Id: Ibc0becb8eb0a712d21116112c44e2bbbb707ddf4 --- guix/build-system/go.scm | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/guix/build-system/go.scm b/guix/build-system/go.scm index 0934fded07..fc53b3be9f 100644 --- a/guix/build-system/go.scm +++ b/guix/build-system/go.scm @@ -33,6 +33,8 @@ (define-module (guix build-system go) #:use-module (ice-9 match) #:use-module (ice-9 regex) #:use-module (srfi srfi-1) + #:use-module (srfi srfi-34) + #:use-module (srfi srfi-35) #:export (%go-build-system-modules go-build go-build-system @@ -101,7 +103,13 @@ (define (go-target target) (_ arch)) (match os ((or "mingw32" "cygwin") "windows") - (_ os)))))) + (_ os)))) + (_ + (raise + (condition + (&unsupported-cross-compilation-target-error + (build-system go-build-system) + (target target))))))) (define %go-build-system-modules ;; Build-side modules imported and used by default. -- 2.45.2 ^ permalink raw reply related [flat|nested] 30+ messages in thread
* [bug#70985] [PATCH v3 1/6] guix: packages: Add new &package-unsupported-target-error. 2024-05-16 14:59 [bug#70985] [PATCH 0/4] Use specific errors for unsupported targets Christopher Baines ` (3 preceding siblings ...) 2024-07-05 16:05 ` [bug#70985] [PATCH v2 1/6] guix: packages: Add new &package-unsupported-target-error Christopher Baines @ 2024-07-12 13:41 ` Christopher Baines 2024-07-12 13:41 ` [bug#70985] [PATCH v3 2/6] gnu: tls: Raise conditions from target->openssl-target Christopher Baines ` (4 more replies) 4 siblings, 5 replies; 30+ messages in thread From: Christopher Baines @ 2024-07-12 13:41 UTC (permalink / raw) To: 70985 Cc: Christopher Baines, Josselin Poiret, Ludovic Courtès, Mathieu Othacehe, Simon Tournier, Tobias Geerinckx-Rice Some packages don't support cross building to specific targets, so add a error type to signal this. * guix/packages.scm (&package-unsupported-target-error): New condition type. [package-unsupported-target-error? package-unsupported-target-error-target): New procedures. * guix/ui.scm (call-with-error-handling): Handle this new condition type. Change-Id: Ib47813399e04b20d616a95f545b6aabe25736e92 --- guix/packages.scm | 7 +++++++ guix/ui.scm | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/guix/packages.scm b/guix/packages.scm index f3a9a61785..e793714f2e 100644 --- a/guix/packages.scm +++ b/guix/packages.scm @@ -173,6 +173,9 @@ (define-module (guix packages) package-error-invalid-input &package-cross-build-system-error package-cross-build-system-error? + &package-unsupported-target-error + package-unsupported-target-error? + package-unsupported-target-error-target package->bag bag->derivation @@ -850,6 +853,10 @@ (define-condition-type &package-cyclic-dependency-error &package-error (define-condition-type &package-cross-build-system-error &package-error package-cross-build-system-error?) +(define-condition-type &package-unsupported-target-error &package-error + package-unsupported-target-error? + (target package-unsupported-target-error-target)) + (define* (package-full-name package #:optional (delimiter "@")) "Return the full name of PACKAGE--i.e., `NAME@VERSION'. By specifying DELIMITER (a string), you can customize what will appear between the name and diff --git a/guix/ui.scm b/guix/ui.scm index d82fa533cc..0bb1b3b3ba 100644 --- a/guix/ui.scm +++ b/guix/ui.scm @@ -756,6 +756,13 @@ (define (call-with-error-handling thunk) (location->string loc) (package-full-name package) (build-system-name system)))) + ((package-unsupported-target-error? c) + (let* ((package (package-error-package c)) + (loc (package-location package))) + (leave (G_ "~a: ~a: does not support target `~a'~%") + (location->string loc) + (package-full-name package) + (package-unsupported-target-error-target c)))) ((gexp-input-error? c) (let ((input (gexp-error-invalid-input c))) (leave (G_ "~s: invalid G-expression input~%") base-commit: d11912ac254d1dd8f5d1f5d67c59d0f6d6b68006 -- 2.45.2 ^ permalink raw reply related [flat|nested] 30+ messages in thread
* [bug#70985] [PATCH v3 2/6] gnu: tls: Raise conditions from target->openssl-target. 2024-07-12 13:41 ` [bug#70985] [PATCH v3 1/6] guix: packages: Add new &package-unsupported-target-error Christopher Baines @ 2024-07-12 13:41 ` Christopher Baines 2024-07-12 13:41 ` [bug#70985] [PATCH v3 3/6] guix: packages: Add &unsupported-cross-compilation-target-error Christopher Baines ` (3 subsequent siblings) 4 siblings, 0 replies; 30+ messages in thread From: Christopher Baines @ 2024-07-12 13:41 UTC (permalink / raw) To: 70985 Rather than rasising generic errors. * gnu/packages/tls.scm (target->openssl-target): Raise conditions rather than generic errors. (openssl-1.1): Call target->openssl-target with the package. Change-Id: I13c63328cdf6bc177b20879805246ad94ff2665b --- gnu/packages/tls.scm | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm index 760b917768..fdc003731d 100644 --- a/gnu/packages/tls.scm +++ b/gnu/packages/tls.scm @@ -84,7 +84,9 @@ (define-module (gnu packages tls) #:use-module (gnu packages time) #:use-module (gnu packages version-control) #:use-module (gnu packages base) - #:use-module (srfi srfi-1)) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-34) + #:use-module (srfi srfi-35)) (define-public libtasn1 (package @@ -390,7 +392,7 @@ (define-public guile2.2-gnutls (modify-inputs (package-inputs guile-gnutls) (replace "guile" guile-2.2))))) -(define (target->openssl-target target) +(define (target->openssl-target pkg target) "Return the value to set CONFIGURE_TARGET_ARCH to when cross-compiling OpenSSL for TARGET." ;; Keep this code outside the build code, @@ -411,7 +413,10 @@ (define (target->openssl-target target) ((target-linux? target) "linux") (else - (error "unsupported openssl target kernel")))) + (raise (condition + (&package-unsupported-target-error + (package pkg) + (target target))))))) (arch (cond ((target-x86-32? target) @@ -438,7 +443,10 @@ (define (target->openssl-target target) ((target-64bit? target) "generic64") (else - (error "unsupported openssl target architecture"))))) + (raise (condition + (&package-unsupported-target-error + (package pkg) + (target target)))))))) (string-append kernel "-" arch)))) (define-public openssl-1.1 @@ -488,6 +496,7 @@ (define-public openssl-1.1 (setenv "CROSS_COMPILE" (string-append target "-")) (setenv "CONFIGURE_TARGET_ARCH" #$(target->openssl-target + this-package (%current-target-system)))))) #~()) #$@(if (target-hurd?) -- 2.45.2 ^ permalink raw reply related [flat|nested] 30+ messages in thread
* [bug#70985] [PATCH v3 3/6] guix: packages: Add &unsupported-cross-compilation-target-error. 2024-07-12 13:41 ` [bug#70985] [PATCH v3 1/6] guix: packages: Add new &package-unsupported-target-error Christopher Baines 2024-07-12 13:41 ` [bug#70985] [PATCH v3 2/6] gnu: tls: Raise conditions from target->openssl-target Christopher Baines @ 2024-07-12 13:41 ` Christopher Baines 2024-07-12 13:41 ` [bug#70985] [PATCH v3 4/6] build-system: meson: Use a more specific exception Christopher Baines ` (2 subsequent siblings) 4 siblings, 0 replies; 30+ messages in thread From: Christopher Baines @ 2024-07-12 13:41 UTC (permalink / raw) To: 70985 Cc: Christopher Baines, Josselin Poiret, Ludovic Courtès, Mathieu Othacehe, Simon Tournier, Tobias Geerinckx-Rice * guix/packages.scm (&unsupported-cross-compilation-target-error): New variable. * guix/ui.scm (call-with-error-handling): Handle this new condition type. Change-Id: I9e7782ee4799b5fecb3c890a75008c35c003f55d --- guix/packages.scm | 10 ++++++++++ guix/ui.scm | 7 +++++++ 2 files changed, 17 insertions(+) diff --git a/guix/packages.scm b/guix/packages.scm index e793714f2e..c953db9a03 100644 --- a/guix/packages.scm +++ b/guix/packages.scm @@ -160,6 +160,11 @@ (define-module (guix packages) %cuirass-supported-systems supported-package? + &unsupported-cross-compilation-target-error + unsupported-cross-compilation-target-error? + unsupported-cross-compilation-target-error-build-system + unsupported-cross-compilation-target-error-target + &package-error package-error? package-error-package @@ -834,6 +839,11 @@ (define-syntax-rule (this-package-native-input name) ;; Error conditions. +(define-condition-type &unsupported-cross-compilation-target-error &error + unsupported-cross-compilation-target-error? + (build-system unsupported-cross-compilation-target-error-build-system) + (target unsupported-cross-compilation-target-error-target)) + (define-condition-type &package-error &error package-error? (package package-error-package)) diff --git a/guix/ui.scm b/guix/ui.scm index 0bb1b3b3ba..9db6f6e9d7 100644 --- a/guix/ui.scm +++ b/guix/ui.scm @@ -763,6 +763,13 @@ (define (call-with-error-handling thunk) (location->string loc) (package-full-name package) (package-unsupported-target-error-target c)))) + ((unsupported-cross-compilation-target-error? c) + (let ((build-system + (unsupported-cross-compilation-target-error-build-system c)) + (target (unsupported-cross-compilation-target-error-target c))) + (leave (G_ "the `~a' build system: does not support target `~a'~%") + (build-system-name build-system) + target))) ((gexp-input-error? c) (let ((input (gexp-error-invalid-input c))) (leave (G_ "~s: invalid G-expression input~%") -- 2.45.2 ^ permalink raw reply related [flat|nested] 30+ messages in thread
* [bug#70985] [PATCH v3 4/6] build-system: meson: Use a more specific exception. 2024-07-12 13:41 ` [bug#70985] [PATCH v3 1/6] guix: packages: Add new &package-unsupported-target-error Christopher Baines 2024-07-12 13:41 ` [bug#70985] [PATCH v3 2/6] gnu: tls: Raise conditions from target->openssl-target Christopher Baines 2024-07-12 13:41 ` [bug#70985] [PATCH v3 3/6] guix: packages: Add &unsupported-cross-compilation-target-error Christopher Baines @ 2024-07-12 13:41 ` Christopher Baines 2024-07-12 13:41 ` [bug#70985] [PATCH v3 5/6] gnu: rust: Guard against unsupported rust targets Christopher Baines 2024-07-12 13:41 ` [bug#70985] [PATCH v3 6/6] build-system: go: Properly handle when a target is unsupported Christopher Baines 4 siblings, 0 replies; 30+ messages in thread From: Christopher Baines @ 2024-07-12 13:41 UTC (permalink / raw) To: 70985 This is handled by (guix ui). * guix/build-system/meson.scm (make-machine-alist): Use a more specific exception. Change-Id: I842ba63739fdefe04460e938c7bc8aa54ea57b96 --- guix/build-system/meson.scm | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/guix/build-system/meson.scm b/guix/build-system/meson.scm index bf9ca15ecc..04d2241c79 100644 --- a/guix/build-system/meson.scm +++ b/guix/build-system/meson.scm @@ -30,6 +30,8 @@ (define-module (guix build-system meson) #:use-module (guix build-system gnu) #:use-module (guix build-system glib-or-gtk) #:use-module (guix packages) + #:use-module (srfi srfi-34) + #:use-module (srfi srfi-35) #:export (%meson-build-system-modules meson-build-system make-cross-file)) @@ -50,7 +52,12 @@ (define (make-machine-alist triplet) ((target-linux? triplet) "linux") ((target-mingw? triplet) "windows") ((target-avr? triplet) "none") - (#t (error "meson: unknown operating system")))) + (else + (raise + (condition + (&unsupported-cross-compilation-target-error + (build-system meson-build-system) + (target triplet))))))) (cpu_family . ,(cond ((target-x86-32? triplet) "x86") ((target-x86-64? triplet) "x86_64") ((target-arm32? triplet) "arm") @@ -62,7 +69,12 @@ (define (make-machine-alist triplet) "ppc64" "ppc")) ((target-riscv64? triplet) "riscv64") - (#t (error "meson: unknown architecture")))) + (else + (raise + (condition + (&unsupported-cross-compilation-target-error + (build-system meson-build-system) + (target triplet))))))) (cpu . ,(cond ((target-x86-32? triplet) ; i386, ..., i686 (substring triplet 0 4)) ((target-x86-64? triplet) "x86_64") -- 2.45.2 ^ permalink raw reply related [flat|nested] 30+ messages in thread
* [bug#70985] [PATCH v3 5/6] gnu: rust: Guard against unsupported rust targets. 2024-07-12 13:41 ` [bug#70985] [PATCH v3 1/6] guix: packages: Add new &package-unsupported-target-error Christopher Baines ` (2 preceding siblings ...) 2024-07-12 13:41 ` [bug#70985] [PATCH v3 4/6] build-system: meson: Use a more specific exception Christopher Baines @ 2024-07-12 13:41 ` Christopher Baines 2024-07-12 14:28 ` Efraim Flashner 2024-07-12 13:41 ` [bug#70985] [PATCH v3 6/6] build-system: go: Properly handle when a target is unsupported Christopher Baines 4 siblings, 1 reply; 30+ messages in thread From: Christopher Baines @ 2024-07-12 13:41 UTC (permalink / raw) To: 70985; +Cc: Efraim Flashner As cross-libc may return #f in this case, and the config.toml file construction will also fail if the platform rust-target is #f.. * gnu/packages/rust.scm (make-rust-sysroot/implementation): Guard against unsupported rust targets. Change-Id: Ia0d5c889c6f5cd3478ad985c79feb9ba1c472c29 --- gnu/packages/rust.scm | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm index a385344473..8119f4560a 100644 --- a/gnu/packages/rust.scm +++ b/gnu/packages/rust.scm @@ -73,7 +73,9 @@ (define-module (gnu packages rust) #:use-module (ice-9 match) #:use-module (ice-9 optargs) #:use-module (srfi srfi-1) - #:use-module (srfi srfi-26)) + #:use-module (srfi srfi-26) + #:use-module (srfi srfi-34) + #:use-module (srfi srfi-35)) ;; This is the hash for the empty file, and the reason it's relevant is not ;; the most obvious. @@ -1309,6 +1311,13 @@ (define*-public (make-rust-sysroot target) (define make-rust-sysroot/implementation (mlambda (target base-rust) + (unless (platform-rust-target (lookup-platform-by-target target)) + (raise + (condition + (&package-unsupported-target-error + (package base-rust) + (target target))))) + (package (inherit base-rust) (name (string-append "rust-sysroot-for-" target)) -- 2.45.2 ^ permalink raw reply related [flat|nested] 30+ messages in thread
* [bug#70985] [PATCH v3 5/6] gnu: rust: Guard against unsupported rust targets. 2024-07-12 13:41 ` [bug#70985] [PATCH v3 5/6] gnu: rust: Guard against unsupported rust targets Christopher Baines @ 2024-07-12 14:28 ` Efraim Flashner 2024-07-18 14:16 ` bug#70985: " Christopher Baines 0 siblings, 1 reply; 30+ messages in thread From: Efraim Flashner @ 2024-07-12 14:28 UTC (permalink / raw) To: Christopher Baines; +Cc: 70985 [-- Attachment #1: Type: text/plain, Size: 1888 bytes --] I like this. We can always add more platforms later with their platform-rust-target later as needed. On Fri, Jul 12, 2024 at 02:41:44PM +0100, Christopher Baines wrote: > As cross-libc may return #f in this case, and the config.toml file > construction will also fail if the platform rust-target is #f.. > > * gnu/packages/rust.scm (make-rust-sysroot/implementation): Guard against > unsupported rust targets. > > Change-Id: Ia0d5c889c6f5cd3478ad985c79feb9ba1c472c29 > --- > gnu/packages/rust.scm | 11 ++++++++++- > 1 file changed, 10 insertions(+), 1 deletion(-) > > diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm > index a385344473..8119f4560a 100644 > --- a/gnu/packages/rust.scm > +++ b/gnu/packages/rust.scm > @@ -73,7 +73,9 @@ (define-module (gnu packages rust) > #:use-module (ice-9 match) > #:use-module (ice-9 optargs) > #:use-module (srfi srfi-1) > - #:use-module (srfi srfi-26)) > + #:use-module (srfi srfi-26) > + #:use-module (srfi srfi-34) > + #:use-module (srfi srfi-35)) > > ;; This is the hash for the empty file, and the reason it's relevant is not > ;; the most obvious. > @@ -1309,6 +1311,13 @@ (define*-public (make-rust-sysroot target) > > (define make-rust-sysroot/implementation > (mlambda (target base-rust) > + (unless (platform-rust-target (lookup-platform-by-target target)) > + (raise > + (condition > + (&package-unsupported-target-error > + (package base-rust) > + (target target))))) > + > (package > (inherit base-rust) > (name (string-append "rust-sysroot-for-" target)) > -- > 2.45.2 > > > -- Efraim Flashner <efraim@flashner.co.il> רנשלפ םירפא GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 30+ messages in thread
* bug#70985: [PATCH v3 5/6] gnu: rust: Guard against unsupported rust targets. 2024-07-12 14:28 ` Efraim Flashner @ 2024-07-18 14:16 ` Christopher Baines 0 siblings, 0 replies; 30+ messages in thread From: Christopher Baines @ 2024-07-18 14:16 UTC (permalink / raw) To: Efraim Flashner; +Cc: 70985-done [-- Attachment #1: Type: text/plain, Size: 268 bytes --] Efraim Flashner <efraim@flashner.co.il> writes: > I like this. We can always add more platforms later with their > platform-rust-target later as needed. Great. Late reply but I went ahead and pushed this to master as 32eda739664901b6df680e79f869e439a326572f. Chris [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 987 bytes --] ^ permalink raw reply [flat|nested] 30+ messages in thread
* [bug#70985] [PATCH v3 6/6] build-system: go: Properly handle when a target is unsupported. 2024-07-12 13:41 ` [bug#70985] [PATCH v3 1/6] guix: packages: Add new &package-unsupported-target-error Christopher Baines ` (3 preceding siblings ...) 2024-07-12 13:41 ` [bug#70985] [PATCH v3 5/6] gnu: rust: Guard against unsupported rust targets Christopher Baines @ 2024-07-12 13:41 ` Christopher Baines 4 siblings, 0 replies; 30+ messages in thread From: Christopher Baines @ 2024-07-12 13:41 UTC (permalink / raw) To: 70985; +Cc: Katherine Cox-Buday, Sharlatan Hellseher * guix/build-system/go.scm (go-target): Properly handle when a target is unsupported. Change-Id: Ibc0becb8eb0a712d21116112c44e2bbbb707ddf4 --- guix/build-system/go.scm | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/guix/build-system/go.scm b/guix/build-system/go.scm index 0934fded07..fc53b3be9f 100644 --- a/guix/build-system/go.scm +++ b/guix/build-system/go.scm @@ -33,6 +33,8 @@ (define-module (guix build-system go) #:use-module (ice-9 match) #:use-module (ice-9 regex) #:use-module (srfi srfi-1) + #:use-module (srfi srfi-34) + #:use-module (srfi srfi-35) #:export (%go-build-system-modules go-build go-build-system @@ -101,7 +103,13 @@ (define (go-target target) (_ arch)) (match os ((or "mingw32" "cygwin") "windows") - (_ os)))))) + (_ os)))) + (_ + (raise + (condition + (&unsupported-cross-compilation-target-error + (build-system go-build-system) + (target target))))))) (define %go-build-system-modules ;; Build-side modules imported and used by default. -- 2.45.2 ^ permalink raw reply related [flat|nested] 30+ messages in thread
end of thread, other threads:[~2024-07-18 14:17 UTC | newest] Thread overview: 30+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-05-16 14:59 [bug#70985] [PATCH 0/4] Use specific errors for unsupported targets Christopher Baines 2024-05-16 15:06 ` [bug#70985] [PATCH 1/4] guix: packages: Add new &package-unsupported-target-error Christopher Baines 2024-05-16 15:06 ` [bug#70985] [PATCH 2/4] gnu: tls: Raise conditions from target->openssl-target Christopher Baines 2024-05-16 15:06 ` [bug#70985] [PATCH 3/4] gnu: cross-libc*: Raise conditions rather than returning #f Christopher Baines 2024-05-16 15:15 ` Ludovic Courtès 2024-05-16 16:16 ` Christopher Baines 2024-05-16 15:06 ` [bug#70985] [PATCH 4/4] guix: build-system: meson: Don't error on unsupported targets Christopher Baines 2024-05-16 15:13 ` Ludovic Courtès 2024-05-16 16:10 ` Christopher Baines 2024-05-16 15:16 ` [bug#70985] [PATCH 0/4] Use specific errors for " Ludovic Courtès 2024-05-17 9:53 ` [bug#70985] [PATCH 3/4] gnu: cross-libc*: Raise conditions rather than returning #f Jean-Pierre De Jesus Diaz 2024-07-05 16:05 ` [bug#70985] [PATCH v2 1/6] guix: packages: Add new &package-unsupported-target-error Christopher Baines 2024-07-05 16:05 ` [bug#70985] [PATCH v2 2/6] gnu: tls: Raise conditions from target->openssl-target Christopher Baines 2024-07-05 16:06 ` [bug#70985] [PATCH v2 3/6] guix: packages: Add &unsupported-cross-compilation-target-error Christopher Baines 2024-07-05 16:06 ` [bug#70985] [PATCH v2 4/6] build-system: meson: Use a more specific exception Christopher Baines 2024-07-05 16:06 ` [bug#70985] [PATCH v2 5/6] gnu: rust: Guard against cross-libc returning #f Christopher Baines 2024-07-07 16:26 ` Efraim Flashner 2024-07-07 16:57 ` Efraim Flashner 2024-07-09 9:25 ` Christopher Baines 2024-07-09 15:21 ` Efraim Flashner 2024-07-12 13:56 ` Christopher Baines 2024-07-05 16:06 ` [bug#70985] [PATCH v2 6/6] build-system: go: Properly handle when a target is unsupported Christopher Baines 2024-07-12 13:41 ` [bug#70985] [PATCH v3 1/6] guix: packages: Add new &package-unsupported-target-error Christopher Baines 2024-07-12 13:41 ` [bug#70985] [PATCH v3 2/6] gnu: tls: Raise conditions from target->openssl-target Christopher Baines 2024-07-12 13:41 ` [bug#70985] [PATCH v3 3/6] guix: packages: Add &unsupported-cross-compilation-target-error Christopher Baines 2024-07-12 13:41 ` [bug#70985] [PATCH v3 4/6] build-system: meson: Use a more specific exception Christopher Baines 2024-07-12 13:41 ` [bug#70985] [PATCH v3 5/6] gnu: rust: Guard against unsupported rust targets Christopher Baines 2024-07-12 14:28 ` Efraim Flashner 2024-07-18 14:16 ` bug#70985: " Christopher Baines 2024-07-12 13:41 ` [bug#70985] [PATCH v3 6/6] build-system: go: Properly handle when a target is unsupported Christopher Baines
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).