[bug#62307,core-updates,00/15] Update Hurd and fix build failures

Message ID 87pm90bzva.fsf_-_@gnu.org
State New
Headers

Commit Message

Ludovic Courtès March 22, 2023, 2:54 p.m. UTC
Hi,

Josselin Poiret <dev@jpoiret.xyz> skribis:

> * gnu/packages/base.scm (glibc/fix-for-hurd-cross): New variable.
> (glibc/hurd-headers): Inherit it.
> * gnu/packages/patches/glibc-hurd-add-freestanding-for-configure.patch:
> * gnu/packages/patches/glibc-hurd-add-freestanding-to-cppflags.patch: New files
> * gnu/local.mk (dist_patch_DATA): Register patches.

I’d like to keep this approach (defining a package variant and carrying
Hurd-specific patches) as a last resort.

If I’m not mistaken, we should be able to achieve the same result with a
patch like this one (untested):
How does that sound?

Thanks,
Ludo’.
  

Comments

Ludovic Courtès March 28, 2023, 2:28 p.m. UTC | #1
Hello Guix!

I have good news and bad news.

The bad news is that an image built with:

  ./pre-inst-env guix system image -t hurd-qcow2 \
      gnu/system/examples/bare-hurd.tmpl

fails to boot: it hangs right at:

  (system* "/hurd/mach-defpager")

Basically, ‘system*’ doesn’t work at the early-boot REPL.  This
was not surprising given <https://issues.guix.gnu.org/61095>, but
it is now that I’ve fixed it.  I’ve also confirmed that the same
binary works on a “current” (master) childhurd, which means it
could be something with the new ‘exec’ server or anything in between.
I think we can keep investigating that separately.

The good news is that ‘--target=i586-pc-gnu’ is back to life.  :-)
Compared to Josselin’s initial patch set, I made the following changes:

  • MiG is built from a tarball (which I’ll upload to
    ftp.gnu.org/gnu/guix/mirror after review); building from
    Git introduces a circular dependency in native i586-gnu builds,
    hence the tarball.

  • The glibc ‘configure’ issue is worked around in a less invasive
    way as I proposed earlier.

  • The GCC/libstdc++ patch application is likewise simplified,
    without introducing a world rebuild.

  • ‘system*’ in Guile is fixed.

  • ‘linux-pam’ builds again on GNU/Hurd.

If there are no objections I’d like to push that soonish so we can
move on with the branch.

Thoughts?

Ludo’.

Josselin Poiret (12):
  gnu: gcc@11: Patch libpthread on GNU/Hurd.
  gnu: cross-base: Factor out cross-mig.
  gnu: cross-base: Add cross arguments to hurd derivatives.
  gnu: cross-base: Removed useless inputs to xhurd-core-headers.
  gnu: mig: Update to 1.8+git20220827.
  gnu: gnumach: Update to 1.8+git20220827.
  gnu: hurd: Update to 3ff7053.
  gnu: hurd: Remove useless glibc/hurd-headers input.
  gnu: gnumach, hurd-headers, hurd: Switch to using cross-mig.
  gnu: hurd: Update DDE and use libdde_linux26.
  gnu: mig/32-bit: Remove.
  system: hurd: Use shepherd-0.8 in the package list.

Ludovic Courtès (8):
  gnu: glibc: Work around broken GNU Mach header detection.
  gnu: cross-base: Use gexps for 'cross-gcc-arguments'.
  gnu: linux-pam: Switch to gexps.
  gnu: linux-pam: Allow compilation on GNU/Hurd.
  gnu: guile-static: Switch to gexps.
  gnu: guile: Switch to gexps.
  gnu: guile-readline: Switch to gexps.
  gnu: guile: Fix 'posix_spawn' usage for GNU/Hurd.

 gnu/local.mk                                  |   9 +-
 gnu/packages/base.scm                         |  19 +-
 gnu/packages/cross-base.scm                   | 217 +++--
 gnu/packages/gcc.scm                          |  13 +-
 gnu/packages/guile.scm                        | 190 ++--
 gnu/packages/hurd.scm                         | 307 +++---
 gnu/packages/linux.scm                        |  51 +-
 gnu/packages/make-bootstrap.scm               |  58 +-
 .../gcc-11-libstdc++-hurd-libpthread.patch    |  62 ++
 ...ng-const_mach_port_name_array_t-type.patch |  32 +
 .../patches/guile-hurd-posix-spawn.patch      |  44 +
 ...rd-add-without-rump-configure-option.patch |  82 ++
 gnu/packages/patches/hurd-cross.patch         |  33 -
 ...f-read-write-and-readables-methods-2.patch | 155 +++
 ...-of-read-write-and-readables-methods.patch | 891 ++++++++++++++++++
 gnu/packages/patches/hurd-xattr.patch         |  53 --
 .../patches/mig-cpu.h-generation.patch        |  16 +
 gnu/system/hurd.scm                           |   2 +-
 18 files changed, 1773 insertions(+), 461 deletions(-)
 create mode 100644 gnu/packages/patches/gcc-11-libstdc++-hurd-libpthread.patch
 create mode 100644 gnu/packages/patches/gnumach-add-missing-const_mach_port_name_array_t-type.patch
 create mode 100644 gnu/packages/patches/guile-hurd-posix-spawn.patch
 create mode 100644 gnu/packages/patches/hurd-add-without-rump-configure-option.patch
 delete mode 100644 gnu/packages/patches/hurd-cross.patch
 create mode 100644 gnu/packages/patches/hurd-fix-types-of-read-write-and-readables-methods-2.patch
 create mode 100644 gnu/packages/patches/hurd-fix-types-of-read-write-and-readables-methods.patch
 delete mode 100644 gnu/packages/patches/hurd-xattr.patch
 create mode 100644 gnu/packages/patches/mig-cpu.h-generation.patch


base-commit: 68793b702e4295d011c89e72826fd15ce18e0b95
  
Josselin Poiret March 28, 2023, 5:07 p.m. UTC | #2
Hi Ludo,

Ludovic Courtès <ludo@gnu.org> writes:

> Hello Guix!
>
> I have good news and bad news.
>
> The bad news is that an image built with:
>
>   ./pre-inst-env guix system image -t hurd-qcow2 \
>       gnu/system/examples/bare-hurd.tmpl
>
> fails to boot: it hangs right at:
>
>   (system* "/hurd/mach-defpager")
>
> Basically, ‘system*’ doesn’t work at the early-boot REPL.  This
> was not surprising given <https://issues.guix.gnu.org/61095>, but
> it is now that I’ve fixed it.  I’ve also confirmed that the same
> binary works on a “current” (master) childhurd, which means it
> could be something with the new ‘exec’ server or anything in between.
> I think we can keep investigating that separately.
>
> The good news is that ‘--target=i586-pc-gnu’ is back to life.  :-)
> Compared to Josselin’s initial patch set, I made the following changes:
>
>   • MiG is built from a tarball (which I’ll upload to
>     ftp.gnu.org/gnu/guix/mirror after review); building from
>     Git introduces a circular dependency in native i586-gnu builds,
>     hence the tarball.
>
>   • The glibc ‘configure’ issue is worked around in a less invasive
>     way as I proposed earlier.
>
>   • The GCC/libstdc++ patch application is likewise simplified,
>     without introducing a world rebuild.
>
>   • ‘system*’ in Guile is fixed.
>
>   • ‘linux-pam’ builds again on GNU/Hurd.
>
> If there are no objections I’d like to push that soonish so we can
> move on with the branch.
>
> Thoughts?

Just had a look and built locally.  LGTM!  Great work (even though it's
still unfinished, but that's for another day).

Best,
  
Ludovic Courtès March 30, 2023, 10:48 a.m. UTC | #3
Hi Josselin,

Josselin Poiret <dev@jpoiret.xyz> skribis:

> Just had a look and built locally.  LGTM!  Great work (even though it's
> still unfinished, but that's for another day).

Thanks for testing!  Pushed as 14cd517e0cb8829b06b5a49f91c762c4a0e52eb5.
I uploaded the MiG tarball to ftp.gnu.org/gnu/guix and adjusted the URL
accordingly.

Ludo’.
  

Patch

diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm
index 2959616af6..9db12bcf9f 100644
--- a/gnu/packages/cross-base.scm
+++ b/gnu/packages/cross-base.scm
@@ -577,7 +577,20 @@  (define* (cross-libc* target
            ((#:configure-flags flags)
             `(cons ,(string-append "--host=" target)
                    ,(if (target-hurd? target)
-                        `(cons "--disable-werror" ,flags)
+                        `(cons* "--disable-werror"
+
+                                ;; 'configure' in glibc 2.35 omits to pass
+                                ;; '-ffreestanding' when detecting Mach
+                                ;; headers.  This is fixed in glibc commits
+                                ;; 8b8c768e3c701ed1993789bb46acb8a12c7a93df
+                                ;; and
+                                ;; 7685630b98ca2a3f5de86eadf130993e6cf998a0;
+                                ;; as a workaround, bypass those tests.
+                                "ac_cv_header_mach_mach_types_defs=yes"
+                                "ac_cv_header_mach_mach_types_h=yes"
+                                "ac_cv_header_mach_machine_ndr_def_h=yes"
+                                "libc_cv_mach_task_creation_time=yes"
+                                ,flags)
                         flags)))
            ((#:phases phases)
             `(modify-phases ,phases