Hello! Janneke Nieuwenhuizen 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 # ...] In ice-9/ftw.scm: 452: 18 [# # #] 450: 17 [loop "gcc" "gcc-11.3.0" ...] In srfi/srfi-1.scm: 465: 16 [fold # ...] In ice-9/ftw.scm: 452: 15 [# # #] 450: 14 [loop "testsuite" "gcc-11.3.0/gcc" ...] In srfi/srfi-1.scm: 465: 13 [fold # ...] In ice-9/ftw.scm: 452: 12 [# # #] 450: 11 [loop "go.test" "gcc-11.3.0/gcc/testsuite" ...] In srfi/srfi-1.scm: 465: 10 [fold # ...] In ice-9/ftw.scm: 452: 9 [# # #] 450: 8 [loop "test" "gcc-11.3.0/gcc/testsuite/go.test" ...] In srfi/srfi-1.scm: 465: 7 [fold # ...] In ice-9/ftw.scm: 452: 6 [# # #] 450: 5 [loop "fixedbugs" "gcc-11.3.0/gcc/testsuite/go.test/test" ...] In srfi/srfi-1.scm: 465: 4 [fold # ...] In ice-9/ftw.scm: 452: 3 [# # #] 474: 2 [loop "issue27836.dir" ...] In guix/build/utils.scm: 559: 1 [# "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 > 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: