[PATCH 0/4] Use specific errors for unsupported targets

  • Done
  • quality assurance status badge
Details
4 participants
  • Efraim Flashner
  • Jean-Pierre De Jesus Diaz
  • Ludovic Courtès
  • Christopher Baines
Owner
unassigned
Submitted by
Christopher Baines
Severity
normal
C
C
Christopher Baines wrote on 16 May 16:59 +0200
(address . guix-patches@gnu.org)
878r09ol8z.fsf@cbaines.net
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
-----BEGIN PGP SIGNATURE-----

iQKlBAEBCgCPFiEEPonu50WOcg2XVOCyXiijOwuE9XcFAmZGH2xfFIAAAAAALgAo
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDNF
ODlFRUU3NDU4RTcyMEQ5NzU0RTBCMjVFMjhBMzNCMEI4NEY1NzcRHG1haWxAY2Jh
aW5lcy5uZXQACgkQXiijOwuE9Xc2VQ/+NEugFVSwrjA1aKwpovG4rYnJ2hvWyXyA
sm4fUWzjSlHCbwA7gZYm/1Y3rIsmcnr6HgtDOm3E8GiGdfx4PCOWfOwQ0vGJdJnL
i2C6yOI6DS5o5wwMDJB85o3I7pkkn9HO1fuUPADHm9ea7Zbm4mI1a8FmYednJrQH
4iV7z6UpDVp7LkQ83u2Q5RymGROKb0xhuKwNhKFQ3lt5crXPCOTnLM+bGo/Hh6O+
sHqlcX4v9APkugblsI63/n8QS/6dXwgeDBxvrz6sZyWrI6cTxo5YLMzMw1Z1x/tR
LFyySohpuE2qtRZwaQQqplt5AVP8FGjrUf7PCqwZjJEu+TpeshwRp25TkRv4TdHT
DXplRevF9et/1U336pkpMAOhgyeHu1oUqzr56dPvH6dlB+eUZJqZbcxW2W2rOg63
c7e2qv1ZI0kTMbrWLUk6ig5idsRGK72KkI3BcVCx6+12FYql5EZ2fTITTTTREvvR
2j1IxM8WOIBH0M12gQO+KeUhb5g0rFq6u8uYOtcyjTr492r70U7aGb3ThETDuwFh
1i1U7dDzPmduZRNXuUFSjSKg8aAD9UzFM79IXZsVA/mlW9ZRnH+ymPLzOtpWiU28
9o5WipSqJvYqzK7PkNEYuZtUVZOUUmBMOFUBh4TadJ3gPT1Fk0qIpYhU8VBPpRGq
rtfzCuJl4Gg=
=N3ZT
-----END PGP SIGNATURE-----

C
C
Christopher Baines wrote on 16 May 17:06 +0200
[PATCH 3/4] gnu: cross-libc*: Raise conditions rather than returning #f.
(address . 70985@debbugs.gnu.org)
05efcc4bcf0dc4b270930747d215a97b2bd86761.1715871966.git.mail@cbaines.net
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(-)

Toggle diff (39 lines)
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
C
C
Christopher Baines wrote on 16 May 17:06 +0200
[PATCH 1/4] guix: packages: Add new &package-unsupported-target-error.
(address . 70985@debbugs.gnu.org)
3828bc238a8cc400f9686fe6856c665c31e927dd.1715871966.git.mail@cbaines.net
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(+)

Toggle diff (47 lines)
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
C
C
Christopher Baines wrote on 16 May 17:06 +0200
[PATCH 2/4] gnu: tls: Raise conditions from target->openssl-target.
(address . 70985@debbugs.gnu.org)
1f3d2facacce8938a74c241e051dc43550327cee.1715871966.git.mail@cbaines.net
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(-)

Toggle diff (58 lines)
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
C
C
Christopher Baines wrote on 16 May 17:06 +0200
[PATCH 4/4] guix: build-system: meson: Don't error on unsupported targets.
(address . 70985@debbugs.gnu.org)
1f217c47d4494a29035dd136c2672771990c0eb0.1715871966.git.mail@cbaines.net
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(-)

Toggle diff (138 lines)
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
L
L
Ludovic Courtès wrote on 16 May 17:13 +0200
(name . Christopher Baines)(address . mail@cbaines.net)(address . 70985@debbugs.gnu.org)
87jzjtbxib.fsf@gnu.org
Hi,

Christopher Baines <mail@cbaines.net> writes:

Toggle quote (8 lines)
> 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

[...]

Toggle quote (3 lines)
> + (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’.
L
L
Ludovic Courtès wrote on 16 May 17:15 +0200
Re: [bug#70985] [PATCH 3/4] gnu: cross-libc*: Raise conditions rather than returning #f.
(name . Christopher Baines)(address . mail@cbaines.net)(address . 70985@debbugs.gnu.org)
87h6exbxfn.fsf@gnu.org
Christopher Baines <mail@cbaines.net> writes:

Toggle quote (8 lines)
> 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

[...]

Toggle quote (7 lines)
> - (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’.
L
L
Ludovic Courtès wrote on 16 May 17:16 +0200
Re: [bug#70985] [PATCH 0/4] Use specific errors for unsupported targets
(name . Christopher Baines)(address . mail@cbaines.net)(address . 70985@debbugs.gnu.org)
87eda1bxck.fsf@gnu.org
Christopher Baines <mail@cbaines.net> writes:

Toggle quote (11 lines)
> 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'.
C
C
Christopher Baines wrote on 16 May 18:10 +0200
Re: [bug#70985] [PATCH 4/4] guix: build-system: meson: Don't error on unsupported targets.
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 70985@debbugs.gnu.org)
87r0e1n3fb.fsf@cbaines.net
Ludovic Courtès <ludo@gnu.org> writes:

Toggle quote (19 lines)
> 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?
-----BEGIN PGP SIGNATURE-----

iQKlBAEBCgCPFiEEPonu50WOcg2XVOCyXiijOwuE9XcFAmZGL+hfFIAAAAAALgAo
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDNF
ODlFRUU3NDU4RTcyMEQ5NzU0RTBCMjVFMjhBMzNCMEI4NEY1NzcRHG1haWxAY2Jh
aW5lcy5uZXQACgkQXiijOwuE9XeM9xAAgX33MTDVeDWUVmgzAkuIhcxuWiIC46lI
Bm7F4xXBAP07gpXsyAr+fzjdlK68ETBzRHXVJFRaFZMQnrHQ6JFJiYpLFu+pyrAC
c0vGVRAiJdBJOjdeUSiJ22F7eiMdeJktZ3ucvi90Cm7YcnlcPG8F+Wue0Pe011kH
JmMQs6/4YmrG26m6HLI6KvLNik4W3xOf8Ch+oOgNHDMySqFK3OmwBNDOXnxSdGWM
klh603MvRxwXoHXUNpbBN/JOq2ksEs99bqg1rD4C2P6C8G+PCXgaTt/YIZW99gai
2xtNEib/ouVqIQrnAtd9u2+KTVXktD0c4Bfg/h7rxmrrrzibTtNfqCyRx0lNLida
KqZCDpRhsvCvXdWfCT/1TTYXb4OQzn6xHmLnsqRbSVTmBk9XCzEdePwfzIIdwdGl
FIyqmtIQHpL7P4uVL1NL4yAliS2D9pt8hGMa4OSiibAWEMxceYu6NiXfYhtZ/NoX
GWg8hiIxWq18AZmN+oBjde3oCQNSGkXoVTh10wNNhJdTG+Rywn+VFDcOHK47GIL6
Lu8KDo6yP+x62LtFAwNFdNEIC/sp2CdDSNIMK7szre3uWYvx84yrnj05osHwvmcG
66zQdQjEEsmIS919LtzwKI/2tHT9GT0Cn0v0Hc0axtKxuxJkeEvwpTvxXv3SHG4w
gb3MBCXlSRM=
=Q6Hk
-----END PGP SIGNATURE-----

C
C
Christopher Baines wrote on 16 May 18:16 +0200
Re: [bug#70985] [PATCH 3/4] gnu: cross-libc*: Raise conditions rather than returning #f.
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 70985@debbugs.gnu.org)
87le49n34l.fsf@cbaines.net
Ludovic Courtès <ludo@gnu.org> writes:

Toggle quote (22 lines)
> 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.
-----BEGIN PGP SIGNATURE-----

iQKlBAEBCgCPFiEEPonu50WOcg2XVOCyXiijOwuE9XcFAmZGMWpfFIAAAAAALgAo
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDNF
ODlFRUU3NDU4RTcyMEQ5NzU0RTBCMjVFMjhBMzNCMEI4NEY1NzcRHG1haWxAY2Jh
aW5lcy5uZXQACgkQXiijOwuE9XdE5w//bVPBGIo8sv+MEkKtEtlrIBfIH8jfgS5a
uvU2ZKOfvvLRX0Ywe8EVJ2DDgCfSN96G1/nz7XbmkYBnTdHNu+eUV+/6+RqDxrmG
lSXyz1QvmRNql6kj4V5upp+N6/Uwr0BRummunBcbaJDJJUKtE+bXq5VST0sQMLAa
VDNFN++2kBAoUaCKQpcsh7dGyaApY47K61QWrgpcM5kWH+1luqq31mDlUadzVN8f
laPoOXFxiFOi0nzj0v9pQZOOho35Yl0e0nhSV5u8WO0efj374glQgVhSVwY+AUaC
uRxY/qQaj615pa1bLSGsic+656uviQAuh1aTSuqpCJqORZWemBUcOWAIXgBiO2vh
77NH1A2B8CnRqyehrVVpH/YXwoOozIYY1xO73GIGwDfDU4Qv6oKulZB1qDM4Dt/U
5RNeQKEJQcAQKV09z0ZUrnnSWsibGf1kiFN88ht6CLOL9stbd1sqbvE+7L+I8gYb
Yc3QweqwVEa6H6XbOLpEfpVFSHJ6HSZrhYoeiBXOmfIfOZeebkG7zwzLiaStXTCw
fCFqIXBKBHjUUv8hpuk/AP5dtZEF+y7hngaNH/gOUcoVPj7FokfxzpBSNHNLzRXy
1+AiSHAUmooOET8zagzqKj473GK6T9NMoAOvOd2tFDmBV51VT5XMEwz+UAmuVp7Z
qZcjmsAZQho=
=k2Fx
-----END PGP SIGNATURE-----

J
J
Jean-Pierre De Jesus Diaz wrote on 17 May 11:53 +0200
(address . 70985@debbugs.gnu.org)
CAG1gdUrGa5E7C9hNaJO80cStR+N0uBSmbWTKjsGPzcWar6FXNg@mail.gmail.com
Hello,

Toggle quote (34 lines)
>> 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
C
C
Christopher Baines wrote on 5 Jul 18:05 +0200
[PATCH v2 2/6] gnu: tls: Raise conditions from target->openssl-target.
(address . 70985@debbugs.gnu.org)
a1adbb1da94664e1fa7e7ba9f3d689b0375ab30e.1720195563.git.mail@cbaines.net
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(-)

Toggle diff (58 lines)
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
C
C
Christopher Baines wrote on 5 Jul 18:06 +0200
[PATCH v2 6/6] build-system: go: Properly handle when a target is unsupported.
(address . 70985@debbugs.gnu.org)
16cfdbf20bb508ae12cdba675467a727ba7c1e6b.1720195563.git.mail@cbaines.net
* 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(-)

Toggle diff (30 lines)
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
C
C
Christopher Baines wrote on 5 Jul 18:05 +0200
[PATCH v2 1/6] guix: packages: Add new &package-unsupported-target-error.
(address . 70985@debbugs.gnu.org)
9f11c96f25ba0f8f0c63ad3d6f5d6295035e7cc7.1720195563.git.mail@cbaines.net
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(+)

Toggle diff (47 lines)
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
C
C
Christopher Baines wrote on 5 Jul 18:06 +0200
[PATCH v2 5/6] gnu: rust: Guard against cross-libc returning #f.
(address . 70985@debbugs.gnu.org)
0c15a853521c4a9cfa8f4c3558e3aee9fb0a9d91.1720195563.git.mail@cbaines.net
* 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(-)

Toggle diff (30 lines)
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
C
C
Christopher Baines wrote on 5 Jul 18:06 +0200
[PATCH v2 4/6] build-system: meson: Use a more specific exception.
(address . 70985@debbugs.gnu.org)
24821cf4bf50dbe149edb9413bfb50219f8c5a0e.1720195563.git.mail@cbaines.net
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(-)

Toggle diff (43 lines)
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
C
C
Christopher Baines wrote on 5 Jul 18:06 +0200
[PATCH v2 3/6] guix: packages: Add &unsupported-cross-compilation-target-error.
(address . 70985@debbugs.gnu.org)
e47f9d8e7020f099f5578027ac81ae81c531d046.1720195563.git.mail@cbaines.net
* 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(+)

Toggle diff (48 lines)
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
E
E
Efraim Flashner wrote on 7 Jul 18:26 +0200
Re: [bug#70985] [PATCH v2 5/6] gnu: rust: Guard against cross-libc returning #f.
(name . Christopher Baines)(address . mail@cbaines.net)(address . 70985@debbugs.gnu.org)
ZorBu8Qi1799cAPs@pbp
On Fri, Jul 05, 2024 at 06:06:02PM +0200, Christopher Baines wrote:
Toggle quote (39 lines)
> * 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
-----BEGIN PGP SIGNATURE-----

iQIzBAABCAAdFiEEoov0DD5VE3JmLRT3Qarn3Mo9g1EFAmaKwbEACgkQQarn3Mo9
g1FDqxAAuTyQYrIzorqMoR0Tp1UIpdGlB05+2l/N8jOXhW1hKDgc6LtwmMAP+gyZ
Y+puuSGnhpuJ6CFG1IX4rRuajvkVJHStzo9rpZ7h5RQU/3uPjeaGtRarSJlKX+kq
OhlN0CRTce9jUBBh+yKR0Agg/LyYovFwFe/hP5dMye6WU0a6xHPqVJYMUvM1t4pP
Tnb3mrtPOCMTUJysyqO4+iIqWJhZ54SmEdkFrZylMq2azc3sOw3w2d0yOLbhrqjc
vF294rWVcJUvE0qRgr/SwkTA7JIwRf+IqcrQFYlktyNfj0objTg5A4DIj1NlgsG8
WjKVoHvGYJo3Do5kK2mq2L1fJpXWXKWSckxS+UStVUnGkFFh08cNm25FxUBu4PF9
TE0PUAraUGThhxLOn3zrnUbZIUpcKYCWnBvXROxJswtGCxhAD9kZfYUxT4jhJtY/
XSXzUIhYimlCsqwGaytiCDz6wb22bubCcLy9FveWrfWtC5CxStDgLonnL1lcnQxt
8o6/MiK0GmW2QR/o+e6zEUgOCqhzZHzMYBDA7ec8mERLO7TQM6WxVmtEUSXGNWOM
N5Mi5NnTHjnOr/0ipi6v7jyO8yW7a10fEFKuzpZFiOJp1tnObWOa42+zM0V/dcH0
bZq/PPzscNNZK4w4ZviypvCUpDEIfE+Hqllk04qWMiDpL4sR2wM=
=+WL7
-----END PGP SIGNATURE-----


E
E
Efraim Flashner wrote on 7 Jul 18:57 +0200
(name . Christopher Baines)(address . mail@cbaines.net)(address . 70985@debbugs.gnu.org)
ZorJB5zQBab3rUrt@pbp
On Fri, Jul 05, 2024 at 06:06:02PM +0200, Christopher Baines wrote:
Toggle quote (39 lines)
> * 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
-----BEGIN PGP SIGNATURE-----

iQIzBAABCAAdFiEEoov0DD5VE3JmLRT3Qarn3Mo9g1EFAmaKyQEACgkQQarn3Mo9
g1H4gw//f7HneYmFBzgOhwuy9IrmMO2uGg5N1ULmIOih+hPns9oglOearlIdR5Mo
uNEwsEsP8LlC0/8YBAsgaH3q/Q6rE1tEglV36lmdm2YE+ZDDFfPPQJqVxgtdX7lP
elX3HWppu/q4PUsmtdgd/+qS1QCcaYSWan+e1ZLNMefJzm4/+6FOh+5E0MX0DjrJ
A7vdrH2c1BPqEYmIxv+ipu2okeBMA0FpatUsYDqk6bobxNXuUUzr2AAZd7ErkbE5
xHc8hgyV0/U2Nv+jrAeNP+cbmBFqSmyl+sHfKOeS73nhvD2pujxtgy4/jY1Bv6qG
uHThuL+xVrOF9OgZtFaoOe3UJmvhhmYOkCy4dUuy0wnZ7Ez9H7SShWS1MHA+fWuq
em513Pfm3SzaK/13RwNditDmkMd3bywwwQfW9lY4Ecvb7SM0aFAoI5W7BVfVxc9q
JKH8yARv50dPv2429uhvkQNYb4/IO5IbnJQ7ZzJNjaisX+ovhss1VP4h9cpDUbN6
jo4ps6whYa5s3Hgs9K5BFYAB24M/V5BOmXR3DGuU832zOleoVBBitPW4H9YTwEyr
9t7NYFTLqOBGcixsa4qmg7npFQ8j4PpGmwLdPhJunVCzA/q2oe4scPm9YPj+JYjU
Ju3GhI6+O2gLrmZz9lmSfF1ROklAkCvJGtTCc7X0CfxaStBGba0=
=eUOG
-----END PGP SIGNATURE-----


C
C
Christopher Baines wrote on 9 Jul 11:25 +0200
(name . Efraim Flashner)(address . efraim@flashner.co.il)(address . 70985@debbugs.gnu.org)
87zfqq9atr.fsf@cbaines.net
Efraim Flashner <efraim@flashner.co.il> writes:

Toggle quote (54 lines)
> 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)))))
-----BEGIN PGP SIGNATURE-----

iQKlBAEBCgCPFiEEPonu50WOcg2XVOCyXiijOwuE9XcFAmaNAfBfFIAAAAAALgAo
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDNF
ODlFRUU3NDU4RTcyMEQ5NzU0RTBCMjVFMjhBMzNCMEI4NEY1NzcRHG1haWxAY2Jh
aW5lcy5uZXQACgkQXiijOwuE9XfA0w/+KryaTEjkoqd0m2JxgaqddlGDOAlOHRrj
dAHBE6VlG95UQWje1ldZXqt+Hc/SARcYptaPxJx8mrFPu46LtCpoYnd0w46HOKmR
Y7q09JNt8mljokuXgm9bxDVVKsecMQVpJB9l90Z7JDr+RB/Ye1qayIykl6kQzQfX
JeX5nhzjCh1gJJrlx4fibpMK3QQtIUpYpl01mXEp1mb3B7VU2kNd8NzCKuyL+haX
pjzz4Bplkd4v+uCml3vFLf6+X7Hd6Y7JoYMtiahYaDSPY4O/mSMBkj3dDaJ5oqlI
2+qFphB/d8wYvHLJlra26wKhauqkXzJ/FxvqD+/WU8dySiiq7pLEtwjmkqKS5R8n
L7oXERX60x9WTSdCsiGC+fDbFd12t9i6AqxsjQESuiPC1ynEjDoCZXixj0oSIWSa
mrzBfG8dPE+uS8XSokV4WYQ6AZZ9CrDFM9GmjHx7m6DeB8w3hCWBGIphd3RaHJ0u
YMcCo8p5IIaJI77GOyOOrSu9ET5yY5lsykEi5M8HFVCAVjNgCEivc1ZchtErVhWM
ZYSAGqaDOm+J+Z9XBi/6t698dVc+MrYhBK3sg0OwIeuXWatKDAp+q7ttJqWuZbQr
le1csf/2UUB5wBmuTfb6Q4ypmzxRmD5pXngME/QRbnws+559nWNUPtvcvgWw7sD3
22YxSNnDvjQ=
=LkWP
-----END PGP SIGNATURE-----

E
E
Efraim Flashner wrote on 9 Jul 17:21 +0200
(name . Christopher Baines)(address . mail@cbaines.net)(address . 70985@debbugs.gnu.org)
Zo1VYQlcrrqv6Uld@pbp
Attachment: file
-----BEGIN PGP SIGNATURE-----

iQIzBAABCAAdFiEEoov0DD5VE3JmLRT3Qarn3Mo9g1EFAmaNVVcACgkQQarn3Mo9
g1FelhAAuaFjSYlTyOfHjTwrp1mWT+xSiTxnfwsZEGw68ks0OGrI4X1wslazOBMp
X9zlImVGJwmFSAASzmcEnLYnYbUn5dDMzUPw4qqbLatEFxBoayePXXbj+doFfb9S
hP5JlZn2JFUuzsrvDtIgFNbQ9kKPu6RPKq2nLcZrh3+4Aq2TbRXEzUeJP1zd5oWS
t5N2L6daYkdZ0k+erIXaaT15MyFQN5ZE3/HAkg91WCgwDlyy3h6an2YvmiXhGX6R
W2ovVBr7cIIXEi6UaZbKcL9rq+WTTypm7xISV2gLht5rChYmMfN2Hs+ki8TsIs/F
xSkmeEpFoJOK6rvWUwWjVcPwyW7ZFaFCsbRg9XiSp6lCgpTVnXA3BdaszXg4kHIi
PY6tFXq7itIRLOfCi+Q52OpJWgIk1IMhNHMO1gEpNyF96BkT9OTYtVJgjIhqXZz+
BCbe7bCcu3Y/4vYCr2yQTxATYUEUivmkweTbIEvmeBKwLfnBI0cwLYqFus15ebjv
APlmO6Z0dlVciAYImSMjOC97KcT3ZA/hABR4rsCQjv/I1y5tUG9ZcNlIDeoGRBuX
kI7iEZ/cNbZ745hw1CLK+KLFnaVsQtBUs3AafCIGe9vL9BBIRRzu3qwwcTnrvkRW
xOb430PNsm1ksJzUu10b/OEzI3dNF0vduuHzCC8vIyy9XZi4zkw=
=EJ7r
-----END PGP SIGNATURE-----


C
C
Christopher Baines wrote on 12 Jul 15:41 +0200
[PATCH v3 5/6] gnu: rust: Guard against unsupported rust targets.
(address . 70985@debbugs.gnu.org)
a4b0befc51be866145bc61d7ee8b2423af431f48.1720791705.git.mail@cbaines.net
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(-)

Toggle diff (31 lines)
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
C
C
Christopher Baines wrote on 12 Jul 15:41 +0200
[PATCH v3 1/6] guix: packages: Add new &package-unsupported-target-error.
(address . 70985@debbugs.gnu.org)
7783ce71e892ea74f025323e0a4d323ee8e720fc.1720791705.git.mail@cbaines.net
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(+)

Toggle diff (47 lines)
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
C
C
Christopher Baines wrote on 12 Jul 15:41 +0200
[PATCH v3 4/6] build-system: meson: Use a more specific exception.
(address . 70985@debbugs.gnu.org)
0739930bf7312cde64a1d4f6268b7d332bfa8f5f.1720791705.git.mail@cbaines.net
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(-)

Toggle diff (43 lines)
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
C
C
Christopher Baines wrote on 12 Jul 15:41 +0200
[PATCH v3 2/6] gnu: tls: Raise conditions from target->openssl-target.
(address . 70985@debbugs.gnu.org)
4d8b7bd0e26cfda50e1f772ae9541b97d1c3c128.1720791705.git.mail@cbaines.net
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(-)

Toggle diff (58 lines)
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
C
C
Christopher Baines wrote on 12 Jul 15:41 +0200
[PATCH v3 3/6] guix: packages: Add &unsupported-cross-compilation-target-error.
(address . 70985@debbugs.gnu.org)
e4f4f5606df03ed969189cc9abb6726a3951833f.1720791705.git.mail@cbaines.net
* 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(+)

Toggle diff (48 lines)
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
C
C
Christopher Baines wrote on 12 Jul 15:41 +0200
[PATCH v3 6/6] build-system: go: Properly handle when a target is unsupported.
(address . 70985@debbugs.gnu.org)
839192cfed0df9b57cb43af2bed29c6e022b850a.1720791705.git.mail@cbaines.net
* 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(-)

Toggle diff (30 lines)
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
C
C
Christopher Baines wrote on 12 Jul 15:56 +0200
Re: [bug#70985] [PATCH v2 5/6] gnu: rust: Guard against cross-libc returning #f.
(name . Efraim Flashner)(address . efraim@flashner.co.il)(address . 70985@debbugs.gnu.org)
87msmm7lzf.fsf@cbaines.net
Efraim Flashner <efraim@flashner.co.il> writes:

Toggle quote (52 lines)
>> 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.
-----BEGIN PGP SIGNATURE-----

iQKlBAEBCgCPFiEEPonu50WOcg2XVOCyXiijOwuE9XcFAmaRNfRfFIAAAAAALgAo
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDNF
ODlFRUU3NDU4RTcyMEQ5NzU0RTBCMjVFMjhBMzNCMEI4NEY1NzcRHG1haWxAY2Jh
aW5lcy5uZXQACgkQXiijOwuE9XfXJA//eECVY4KfonaYw6rMT6K7N2he/Vzdthfn
WtILbMmfScaVWbLEwtEwbOKyZbA6XNdYTvKFV27d92I3VSzEVuy75x2h//bL8sYy
RlU1T9FyjzkvUCzemUE463wbnQVenMhOo1rgzRCNFpDNfMQUGnJBZ5RxMfK9zq3X
Z47lf14A5Bk1wg0y9SLzA4w4j4HNhTkfjp/CF9xBe2XkCIAk87lFrLOelOvht3p3
CI5Lhbb5+E2UD0RfX6QrUsJMMG+YYUZ0s1msOr37vo//8eXRBnOJ4jF301y8wr6u
TYZWKK7lB7gARrLA9YXEPP9+8UO2t0smNEPy/3kwtoSoISqInQE8dSXSE4RU4PKl
FC2YDjXcpm1gu65DZz94kqGLhKTsKLJ341Rq6gSSgnmJTsctMOqkO8xYUMYrBHGN
hUjz96CL40lTxP6huhcNkB2KVAw4ZxEu499Ti73x+osb9d2dES8pvNLXMW/vKErH
BpC6wbpm4q5KvI1k57NLNZ7JZbgRb8jkwSmrgu1X5GJVrMwg8QJoAkWPk1CKg+3k
BWx4knblQ5uZkWY3s8HzYx4t2OsJ0mGLAiNF6r5A8GKW1YlqEwL8hJBY2rIXfKRJ
Hf/S4xfx2/GSD+RhGpUEsIwqZsuB2QuTW+p3BKkLVTxX8NLQ3LcgrP9F85bcMlps
jYfPC4qh86Y=
=S+In
-----END PGP SIGNATURE-----

E
E
Efraim Flashner wrote on 12 Jul 16:28 +0200
Re: [bug#70985] [PATCH v3 5/6] gnu: rust: Guard against unsupported rust targets.
(name . Christopher Baines)(address . mail@cbaines.net)(address . 70985@debbugs.gnu.org)
ZpE9dMs_xpTpa89v@pbp
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:
Toggle quote (46 lines)
> 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
-----BEGIN PGP SIGNATURE-----

iQIzBAABCAAdFiEEoov0DD5VE3JmLRT3Qarn3Mo9g1EFAmaRPWwACgkQQarn3Mo9
g1GyLw/9ENHYfAbUz/t6L2R24zjxVVvUykYpqscV1mSRcbJeoG6fCby09IRUO7Lo
/k1ReuqBjpD1swLwj5XSe0B3WOZl6mJ2/oWJgts8f8Gidsqf1Luq7PFnCUpkbuS0
ACB14m6kZ8zCsZGtZTwDheTQ9l2OOOyCPVY+k5nU8t+Y0KZjAkii5KVvLdZc2Gv3
zB4NiTMBYoVT5MXRfqThkx8U5hwvxkwJhaCq49VqIAbg/KDTe+dS3+R4ZDyNQfhz
xSJ34GX6K7UgC1WezU57iYz/3WmeoHznxcIhDlGFjlwhWlE4ptp46PU86Q2CigL4
e7njDBSiaQcjIuPZAtbkx4CUKa1bGHVjebwaC/UnRe5wC4+Up5ICMI/IMae/ongn
Q2av/+5jB9N/FdeFs24G8594r3B/MhKaCDCj+qdU3rp7PxiK7zAIysonqK6drcvp
wVfc5VxUqSUkidJ8D+6cLzZz1QKuF7V5BgdqeTPgtG99bGhvUYWIhGVF2hgwpIt1
JEKl6G8FC3vRiSrUIJbN1SPK0+Cb45q2p8j8iSc7H7SkLV3nuGGruoZlTKx0uCSo
NWzscRAyRlkng8z/sa+nYy14QmvZoUPFeTg7GOWXKJoeRO3US/aqs1fF55ZzoWaY
LpHms0pxJMXvJigsnanxPi+UbBDP3OiXrt+8pmahekEQ2g3EskQ=
=WsDJ
-----END PGP SIGNATURE-----


C
C
Christopher Baines wrote on 18 Jul 16:16 +0200
(name . Efraim Flashner)(address . efraim@flashner.co.il)(address . 70985-done@debbugs.gnu.org)
87sew66b00.fsf@cbaines.net
Efraim Flashner <efraim@flashner.co.il> writes:

Toggle quote (3 lines)
> 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
-----BEGIN PGP SIGNATURE-----

iQKlBAEBCgCPFiEEPonu50WOcg2XVOCyXiijOwuE9XcFAmaZI89fFIAAAAAALgAo
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDNF
ODlFRUU3NDU4RTcyMEQ5NzU0RTBCMjVFMjhBMzNCMEI4NEY1NzcRHG1haWxAY2Jh
aW5lcy5uZXQACgkQXiijOwuE9Xd73Q/+PMZ+DilTANctaqxcG8iJkyhlswQ1jOAu
/qwYwESdhUTAuynx5QkvCAiWnbm0l8Mqtd4WPh8eS7oy80hY3kkca7ddVero+Ryj
/xTvUDDWfNEziDoJiNfgL3eyRjyQ47KR1bMuoiOTRf0qAHnGV4Efdrc3+osQNaCS
9O3MNZSEo1dh+LCfCB8sffw7Ez55/S/2c0A7GtZt9mfKb+15o0rQvVrZ4FNbi46m
nZNMJyPK6Kn/IRsih1wqVZFY1owTjqshIgntVAaxoQexKIEtJk2VIZ5Pgp8fSzTq
2lPI4t8sZ53p9AKdazzOuAGw4TBe5aTXySnKvRsDwy99cA/OKrNu23Sw8XplZ44N
WXW03s9Xfratpx12NcFH22z3OEV5afY8HuCxx1ipcEHD39agT5jlkrF54Bf0daGu
BHkdJQTIooVee50fvYUcd//aJ1SV32//amzPLNpTRhAyjJGFjbQypLMhm1TJcgEm
NwY5TZ2wFWG6M529FCLCos3Iatq2cLI6rCx0pc1LFjaidF5P/LLULzKRYr5pxRNB
huOj+IQKaXb6cMhjGvrK6nO6Zl5p9aioyAGSXuy84g+K1yUxIARygaXIQKZqWXXT
3i8lXAMAPaL7Cyf6i5E+sG4hz2cYCGJ38HXtcfd73lYU8s2RXdlc15C7f9XH3M0N
uoHqpEaF+Bs=
=V/nY
-----END PGP SIGNATURE-----

Closed
?
Your comment

This issue is archived.

To comment on this conversation send an email to 70985@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 70985
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch