From: "Ludovic Courtès" <ludo@gnu.org>
To: Janneke Nieuwenhuizen <janneke@gnu.org>
Cc: 63789@debbugs.gnu.org
Subject: bug#63789: Native compilation broken on the Hurd (with patch)
Date: Thu, 01 Jun 2023 23:50:13 +0200 [thread overview]
Message-ID: <87edmu97je.fsf@gnu.org> (raw)
In-Reply-To: <87edmzozko.fsf@gnu.org> (Janneke Nieuwenhuizen's message of "Mon, 29 May 2023 18:46:31 +0200")
[-- Attachment #1: Type: text/plain, Size: 6829 bytes --]
Hello!
Janneke Nieuwenhuizen <janneke@gnu.org> skribis:
> The commit
>
> 56759d30d9a817a9c9221c9468a4c4a59c9a4713
> gnu: Switch to GCC 11.
>
> introduced a gratuitous dependency on coreutils-boot0 to gcc-boot0 by
> adding this atypical snippet
>
> (snippet
> #~(begin
> ;; XXX: The GCC test suite contains files with non-ASCII file
> ;; names, which cannot be repacked by BOOTSTRAP-ORIGIN. Nor
> ;; can it be deleted from Guile, so resort to this evil hack.
> #$(origin-snippet (package-source gcc))
> (system* #$(file-append coreutils-boot0 "/bin/rm") "-rf"
> "gcc/testsuite/go.test/test/fixedbugs/issue27836.dir"))))))
>
>
> This is problematic, because coreutils-boot0 doesn't build for the Hurd:
> coreutils needs hurd headers, and our hurd-headers-boot0 depends
> on...coreutils-boot0.
>
> Why was coreutils-boot0 used instead of the canonical
> delete-file-recursively?
That was my first reaction too :-), but it’s explained in the comment:
there are non-ASCII file names that Guile fails to decode (throwing a
decoding error at that point.)
Seeing is believing so I had to try:
--8<---------------cut here---------------start------------->8---
applying '/gnu/store/5705r4ajxl8lav1hz9xm19w75zdcz1n2-gcc-5.0-libvtv-runpath.patch'...
applying '/gnu/store/c2f49hzb4scsqaccfr8vf74f06z0yvp1-gcc-10-tree-sra-union-handling.patch'...
find-files: gcc-11.3.0/gcc/testsuite/go.test/test/fixedbugs/issue27836.dir/Äfoo.go: No such file or directory
Backtrace:
In srfi/srfi-1.scm:
465: 19 [fold #<procedure 14397b0 at ice-9/ftw.scm:451:38 (subdir result+visited)> ...]
In ice-9/ftw.scm:
452: 18 [#<procedure 14397b0 at ice-9/ftw.scm:451:38 (subdir result+visited)> # #]
450: 17 [loop "gcc" "gcc-11.3.0" ...]
In srfi/srfi-1.scm:
465: 16 [fold #<procedure 177df60 at ice-9/ftw.scm:451:38 (subdir result+visited)> ...]
In ice-9/ftw.scm:
452: 15 [#<procedure 177df60 at ice-9/ftw.scm:451:38 (subdir result+visited)> # #]
450: 14 [loop "testsuite" "gcc-11.3.0/gcc" ...]
In srfi/srfi-1.scm:
465: 13 [fold #<procedure 20374e0 at ice-9/ftw.scm:451:38 (subdir result+visited)> ...]
In ice-9/ftw.scm:
452: 12 [#<procedure 20374e0 at ice-9/ftw.scm:451:38 (subdir result+visited)> # #]
450: 11 [loop "go.test" "gcc-11.3.0/gcc/testsuite" ...]
In srfi/srfi-1.scm:
465: 10 [fold #<procedure 27d6a80 at ice-9/ftw.scm:451:38 (subdir result+visited)> ...]
In ice-9/ftw.scm:
452: 9 [#<procedure 27d6a80 at ice-9/ftw.scm:451:38 (subdir result+visited)> # #]
450: 8 [loop "test" "gcc-11.3.0/gcc/testsuite/go.test" ...]
In srfi/srfi-1.scm:
465: 7 [fold #<procedure 208d060 at ice-9/ftw.scm:451:38 (subdir result+visited)> ...]
In ice-9/ftw.scm:
452: 6 [#<procedure 208d060 at ice-9/ftw.scm:451:38 (subdir result+visited)> # #]
450: 5 [loop "fixedbugs" "gcc-11.3.0/gcc/testsuite/go.test/test" ...]
In srfi/srfi-1.scm:
465: 4 [fold #<procedure 1a92e40 at ice-9/ftw.scm:451:38 (subdir result+visited)> ...]
In ice-9/ftw.scm:
452: 3 [#<procedure 1a92e40 at ice-9/ftw.scm:451:38 (subdir result+visited)> # #]
474: 2 [loop "issue27836.dir" ...]
In guix/build/utils.scm:
559: 1 [#<procedure dc3320 at guix/build/utils.scm:555:28 (file stat errno result)> "gcc-11.3.0/gcc/testsuite/go.test/test/fixedbugs/issue27836.dir/Äfoo.go" ...]
In unknown file:
?: 0 [scm-error misc-error #f "~A" ("find-files failed") #f]
ERROR: In procedure scm-error:
ERROR: find-files failed
builder for `/gnu/store/p2wypjic1f26w2gk6dihn3inzfv426i4-gcc-11.3.0.tar.xz.drv' failed with exit code 1
--8<---------------cut here---------------end--------------->8---
When decoded as UTF-8, those file names look like this:
--8<---------------cut here---------------start------------->8---
$ export LC_ALL=en_US.UTF-8
$ tar tvf $(guix build "/gnu/store/pfc1094f3vdc74a6pls7b54m949y5gff-gcc-11.3.0.tar.xz.drv") |grep issue27836
-rw-r--r-- rguenther/users 191 2022-04-21 07:58 gcc-11.3.0/gcc/testsuite/go.test/test/fixedbugs/issue27836.go
drwxr-xr-x rguenther/users 0 2022-04-21 07:58 gcc-11.3.0/gcc/testsuite/go.test/test/fixedbugs/issue27836.dir/
-rw-r--r-- rguenther/users 192 2022-04-21 07:58 gcc-11.3.0/gcc/testsuite/go.test/test/fixedbugs/issue27836.dir/Äfoo.go
-rw-r--r-- rguenther/users 203 2022-04-21 07:58 gcc-11.3.0/gcc/testsuite/go.test/test/fixedbugs/issue27836.dir/Ämain.go
--8<---------------cut here---------------end--------------->8---
> So, until we can correct the gcc-boot0 snippet problem in the next
> rebuild cycle (how does that work now that we don't have core-updates
> anymore?, I made coreutils-boot0 build on the Hurd. See the patch
> below.
Re “how does that work?”, good question! :-)
We should get rid of that hack though.
>>From 37f38eb35fff505da9bfad8cb1f5f250378f7648 Mon Sep 17 00:00:00 2001
> Message-Id: <37f38eb35fff505da9bfad8cb1f5f250378f7648.1685370023.git.janneke@gnu.org>
> From: Janneke Nieuwenhuizen <janneke@gnu.org>
> Date: Mon, 29 May 2023 10:34:42 +0200
> Subject: [PATCH] gnu: commencement: coreutils-boot0: Fix native build for the
> Hurd.
>
> * gnu/packages/patches/coreutils-boot0-hurd_types.patch: New file.
> * gnu/local.mk (dist_patch_DATA): Add it.
> * gnu/packages/commencement.scm (coreutils-boot0)[arguments]: When building
> for the hurd, add new phase 'add-hurd_types.h' and use it. Add
> "ac_cv_member_struct_stat_st_author=no" and -Wl,-rpath for %bootstrap-libc to
> configure flags when building for the Hurd. Add make-flags with
> "IGNORE_UNUSED_LIBRARIES_CFLAGS=" to avoid -Wl,--as-needed, which undoes
> previous rpath option.
> ---
> gnu/local.mk | 1 +
> gnu/packages/commencement.scm | 56 +++++++++----
> .../patches/coreutils-boot0-hurd_types.patch | 82 +++++++++++++++++++
> 3 files changed, 122 insertions(+), 17 deletions(-)
> create mode 100644 gnu/packages/patches/coreutils-boot0-hurd_types.patch
Neat! This is probably okay but I wonder if we can either shrink this
patch or use a different strategy.
I tried a few things; I thought we could get ‘coreutils-boot0’ to build
nothing but ‘rm’ (since the build failure the patch above works around
is in ‘src/copy.c’), but my attempt below doesn’t work: it insists on
building other things, including ‘src/copy.c’. I ran out of time but I
think it should be possible to make it work.
Even better would have been ‘--enable-no-install-program=cp’ but
‘src/copy.c’ is still getting built.
(Time passes…)
Just as I was about to give up, I looked at:
guix graph -e '(@@ (gnu packages commencement) guile-final)' -s i586-gnu -M3 |xdot -
and found the solution:
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Type: text/x-patch, Size: 1055 bytes --]
diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm
index 78cfa4acd0..de3728ae26 100644
--- a/gnu/packages/commencement.scm
+++ b/gnu/packages/commencement.scm
@@ -2333,7 +2333,13 @@ (define gcc-boot0
;; names, which cannot be repacked by BOOTSTRAP-ORIGIN. Nor
;; can it be deleted from Guile, so resort to this evil hack.
#$(origin-snippet (package-source gcc))
- (system* #$(file-append coreutils-boot0 "/bin/rm") "-rf"
+ (system* #$(file-append (let-system system
+ ;; Work around
+ ;; <https://issues.guix.gnu.org/63789>.
+ (if (target-hurd? system)
+ %bootstrap-coreutils&co
+ coreutils-boot0))
+ "/bin/rm") "-rf"
"gcc/testsuite/go.test/test/fixedbugs/issue27836.dir"))))))
(arguments
(cons*
[-- Attachment #3: Type: text/plain, Size: 42 bytes --]
How does that sound? :-)
Ludo’.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #4: Type: text/x-patch, Size: 4025 bytes --]
diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm
index 78cfa4acd0..17745705f7 100644
--- a/gnu/packages/commencement.scm
+++ b/gnu/packages/commencement.scm
@@ -1997,24 +1997,41 @@ (define coreutils-boot0
`(("make" ,gnu-make-boot0)
,@(%bootstrap-inputs+toolchain)))
(arguments
- `(#:tests? #f
- #:implicit-inputs? #f
- #:guile ,%bootstrap-guile
- ,@(package-arguments coreutils)
- ;; The %bootstrap-glibc for aarch64 and armhf doesn't have
- ;; $output/include/linux/prctl.h which causes some binaries
- ;; to fail to build with coreutils-9.0+.
- ,@(if (target-arm?)
- `(#:configure-flags '(,(string-append
- "--enable-no-install-program="
- ;; the defaults to not install.
- "arch,coreutils,hostname"
- ;; fails due to missing headers.
- ",timeout,sort")
- ,@(if (target-arm32?)
- `("--disable-year2038")
- `())))
- '())))))
+ (substitute-keyword-arguments (package-arguments coreutils)
+ ((#:tests? _ #t)
+ #f)
+ ((#:implicit-inputs? _ #t)
+ #f)
+ ((#:guile _ #f)
+ %bootstrap-guile)
+ ((#:configure-flags flags ''())
+ ;; The %bootstrap-glibc for aarch64 and armhf doesn't have
+ ;; $output/include/linux/prctl.h which causes some binaries
+ ;; to fail to build with coreutils-9.0+.
+ (if (target-arm?)
+ `'(,(string-append "--enable-no-install-program="
+ ;; the defaults to not install.
+ "arch,coreutils,hostname"
+ ;; fails due to missing headers.
+ ",timeout,sort")
+ ,@(if (target-arm32?)
+ `("--disable-year2038")
+ `()))
+ ''()))
+ ((#:phases phases '%standard-phases)
+ (if (target-hurd?)
+ `(modify-phases ,phases
+ (add-after 'unpack 'build-nothing-but-rm
+ ;; XXX: Normally we wouldn't depend on coreutils-boot0 for
+ ;; GNU/Hurd; unfortunately, it is used for the gcc-boot0
+ ;; snippet below. Since the snippet needs nothing but 'rm',
+ ;; build just that (thus avoiding build errors in other
+ ;; programs).
+ (lambda _
+ (substitute* "Makefile.in"
+ (("^bin_PROGRAMS = .*")
+ "bin_PROGRAMS = src/rm\n")))))
+ phases))))))
(define diffutils-boot0
(package
diff --git a/guix/packages.scm b/guix/packages.scm
index e26602d589..0802d863b1 100644
--- a/guix/packages.scm
+++ b/guix/packages.scm
@@ -944,6 +944,13 @@ (define* (patch-and-repack source patches
(locales (lookup-input "locales"))
(comp (and=> (compressor source-file-name) lookup-input))
(patches (map instantiate-patch patches)))
+ (define fail-on-error?
+ #t
+ #;(let-system (system target)
+ (pk 'fail? system (->bool (or locales
+ target
+ (not (string-prefix? "-gnu" system)))))))
+
(define build
(with-imported-modules '((guix build utils))
#~(begin
@@ -986,7 +993,7 @@ (define* (patch-and-repack source patches
(format port "~a~%" name))
(find-files directory
#:directories? #t
- #:fail-on-error? #t)))))
+ #:fail-on-error? #$fail-on-error?)))))
(apply invoke #+(file-append tar "/bin/tar")
"cvfa" output
next prev parent reply other threads:[~2023-06-01 21:51 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-29 16:46 bug#63789: Native compilation broken on the Hurd (with patch) Janneke Nieuwenhuizen
2023-06-01 21:50 ` Ludovic Courtès [this message]
2023-06-02 5:27 ` Janneke Nieuwenhuizen
2023-06-02 15:26 ` Ludovic Courtès
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87edmu97je.fsf@gnu.org \
--to=ludo@gnu.org \
--cc=63789@debbugs.gnu.org \
--cc=janneke@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/guix.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.