summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2018-11-18 23:12:36 +0100
committerLudovic Courtès <ludo@gnu.org>2018-11-18 23:12:36 +0100
commit2d546858b139e5fcf2cbdf9958a17fd98803ac4c (patch)
treed4949e03ad6e44bbd49220fa02f25645ed700454
parent8504d1922240b29815fd3e1e231e27da391338cd (diff)
gnu: hurd: Build against glibc 2.28.
Version 2.28 of glibc is the first in a long time that fully supports GNU/Hurd. This change updates the Hurd and Mach to provide the features glibc 2.28 expects and adjusts the cross-compilation tool chain for "i586-pc-gnu". * gnu/packages/base.scm (glibc/linux): Rename to... (glibc): ... this. [propagated-inputs]: Add 'hurd-target?' case. [arguments]: Use '--disable-werror' when 'hurd-target?'. Add 'augment-libc.so' phase when 'hurd-target?'. [native-inputs]: Add MIG and PERL when 'hurd-target?'. (glibc/hurd, glibc-for-target): Remove (glibc/hurd-headers): Inherit from GLIBC, not GLIBC/HURD. [arguments]: Remove "--enable-obsolete-rpc" configure flag and 'patch-configure-script' phase. * gnu/packages/cross-base.scm (cross-kernel-headers)[xglibc/hurd-headers]: Move 'set-cross-headers-path' after 'unpack'. * gnu/packages/cross-base.scm (cross-libc)[cross-libc-for-target]: Remove. Pass "--disable-werror" when TARGET matches 'hurd-triplet?'. * gnu/packages/hurd.scm (hurd-target?, patch-url): New procedures. (gnumach-headers)[source](patches, modules, snippet): New fields. (hurd-headers): Use Git commit 98b3390. [native-inputs]: Add AUTOCONF and AUTOMAKE. [arguments]: Add "ac_cv_func_*" configure flags. (hurd-minimal)[native-inputs]: Remove. [arguments]: In 'build' phase, build "include/assert-backtrace.h" first.
-rw-r--r--gnu/packages/base.scm139
-rw-r--r--gnu/packages/cross-base.scm18
-rw-r--r--gnu/packages/hurd.scm136
3 files changed, 138 insertions, 155 deletions
diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index 3a1186673e..60f8051dc6 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -577,7 +577,9 @@ store.")
(export make-ld-wrapper)
-(define-public glibc/linux
+(define-public glibc
+ ;; This is the GNU C Library, used on GNU/Linux and GNU/Hurd. Prior to
+ ;; version 2.28, GNU/Hurd used a different glibc branch.
(package
(name "glibc")
;; Note: Always use a dot after the minor version since various places rely
@@ -608,8 +610,13 @@ store.")
(build-system gnu-build-system)
;; Glibc's <limits.h> refers to <linux/limit.h>, for instance, so glibc
- ;; users should automatically pull Linux headers as well.
- (propagated-inputs `(("kernel-headers" ,linux-libre-headers)))
+ ;; users should automatically pull Linux headers as well. On GNU/Hurd,
+ ;; libc provides <hurd.h>, which includes a bunch of Hurd and Mach headers,
+ ;; so both should be propagated.
+ (propagated-inputs
+ (if (hurd-target?)
+ `(("hurd-core-headers" ,hurd-core-headers))
+ `(("kernel-headers" ,linux-libre-headers))))
(outputs '("out" "debug"
"static")) ;9 MiB of .a files
@@ -664,7 +671,13 @@ store.")
;; Use our Bash instead of /bin/sh.
(string-append "BASH_SHELL="
(assoc-ref %build-inputs "bash")
- "/bin/bash"))
+ "/bin/bash")
+
+ ;; On GNU/Hurd we get discarded-qualifiers warnings for
+ ;; 'device_write_inband' among other things. Ignore them.
+ ,@(if (hurd-target?)
+ '("--disable-werror")
+ '()))
#:tests? #f ; XXX
#:phases (modify-phases %standard-phases
@@ -769,7 +782,18 @@ store.")
(filter linker-script?
(map (cut string-append slib "/" <>)
files)))
- #t))))))
+ #t)))
+
+ ,@(if (hurd-target?)
+ '((add-after 'install 'augment-libc.so
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out")))
+ (substitute* (string-append out "/lib/libc.so")
+ (("/[^ ]+/lib/libc.so.0.3")
+ (string-append out "/lib/libc.so.0.3"
+ " libmachuser.so libhurduser.so"))))
+ #t)))
+ '()))))
(inputs `(("static-bash" ,static-bash)))
@@ -778,7 +802,12 @@ store.")
(native-inputs `(("texinfo" ,texinfo)
("perl" ,perl)
("bison" ,bison)
- ("gettext" ,gettext-minimal)))
+ ("gettext" ,gettext-minimal)
+
+ ,@(if (hurd-target?)
+ `(("mig" ,mig)
+ ("perl" ,perl))
+ '())))
(native-search-paths
;; Search path for packages that provide locale data. This is useful
@@ -800,89 +829,6 @@ with the Linux kernel.")
(license lgpl2.0+)
(home-page "https://www.gnu.org/software/libc/")))
-(define-public glibc/hurd
- ;; The Hurd's libc variant.
- (package (inherit glibc/linux)
- (name "glibc-hurd")
- (version "2.23")
- (source (origin
- (method url-fetch)
- (uri (string-append "http://alpha.gnu.org/gnu/hurd/glibc-"
- version "-hurd+libpthread-20161218" ".tar.gz"))
- (sha256
- (base32
- "0vpdv05j6j3ria5bw8gp468i64gij94cslxkxj9xkfgi6p615b8p"))))
-
- ;; Libc provides <hurd.h>, which includes a bunch of Hurd and Mach headers,
- ;; so both should be propagated.
- (propagated-inputs `(("hurd-core-headers" ,hurd-core-headers)))
- (native-inputs
- `(,@(package-native-inputs glibc/linux)
- ("mig" ,mig)
- ("perl" ,perl)))
-
- (arguments
- (substitute-keyword-arguments (package-arguments glibc/linux)
- ((#:phases original-phases)
- ;; Add libmachuser.so and libhurduser.so to libc.so's search path.
- ;; See <http://lists.gnu.org/archive/html/bug-hurd/2015-07/msg00051.html>.
- `(modify-phases ,original-phases
- (add-after 'install 'augment-libc.so
- (lambda* (#:key outputs #:allow-other-keys)
- (let* ((out (assoc-ref outputs "out")))
- (substitute* (string-append out "/lib/libc.so")
- (("/[^ ]+/lib/libc.so.0.3")
- (string-append out "/lib/libc.so.0.3" " libmachuser.so" " libhurduser.so"))))
- #t))
- (add-after 'pre-configure 'pre-configure-set-pwd
- (lambda _
- ;; Use the right 'pwd'.
- (substitute* "configure"
- (("/bin/pwd") "pwd"))
- #t))
- (replace 'build
- (lambda _
- ;; Force mach/hurd/libpthread subdirs to build first in order to avoid
- ;; linking errors.
- ;; See <https://lists.gnu.org/archive/html/bug-hurd/2016-11/msg00045.html>
- (let ((flags (list "-j" (number->string (parallel-job-count)))))
- (define (make target)
- (apply invoke "make" target flags))
- (make "mach/subdir_lib")
- (make "hurd/subdir_lib")
- (make "libpthread/subdir_lib")
- (apply invoke "make" flags))))))
- ((#:configure-flags original-configure-flags)
- `(append (list "--host=i586-pc-gnu"
-
- ;; We need this to get a working openpty() function.
- "--enable-pt_chown"
-
- ;; <https://lists.gnu.org/archive/html/bug-hurd/2016-10/msg00033.html>
- "--disable-werror"
-
- ;; nscd fails to build for GNU/Hurd:
- ;; <https://lists.gnu.org/archive/html/bug-hurd/2014-07/msg00006.html>.
- ;; Disable it.
- "--disable-nscd")
- (filter (lambda (flag)
- (not (string-prefix? "--enable-kernel=" flag)))
- ,original-configure-flags)))))
- (synopsis "The GNU C Library (GNU Hurd variant)")
- (supported-systems %hurd-systems)))
-
-(define* (glibc-for-target #:optional
- (target (or (%current-target-system)
- (%current-system))))
- "Return the glibc for TARGET, GLIBC/LINUX for a Linux host or
-GLIBC/HURD for a Hurd host"
- (match target
- ((or "i586-pc-gnu" "i586-gnu") glibc/hurd)
- (_ glibc/linux)))
-
-(define-syntax glibc
- (identifier-syntax (glibc-for-target)))
-
;; Below are old libc versions, which we use mostly to build locale data in
;; the old format (which the new libc cannot cope with.)
@@ -1121,18 +1067,17 @@ command.")
(license gpl3+))) ; some files are under GPLv2+
(define-public glibc/hurd-headers
- (package (inherit glibc/hurd)
+ (package (inherit glibc)
(name "glibc-hurd-headers")
(outputs '("out"))
(propagated-inputs `(("gnumach-headers" ,gnumach-headers)
("hurd-headers" ,hurd-headers)))
(arguments
- (substitute-keyword-arguments (package-arguments glibc/hurd)
+ (substitute-keyword-arguments (package-arguments glibc)
;; We just pass the flags really needed to build the headers.
((#:configure-flags _)
`(list "--enable-add-ons"
- "--host=i586-pc-gnu"
- "--enable-obsolete-rpc"))
+ "--host=i586-pc-gnu"))
((#:phases _)
'(modify-phases %standard-phases
(replace 'install
@@ -1147,13 +1092,7 @@ command.")
(open-output-file
(string-append out "/include/gnu/stubs.h"))))
#t))
- (delete 'build) ; nothing to build
- (add-before 'configure 'patch-configure-script
- (lambda _
- ;; Use the right 'pwd'.
- (substitute* "configure"
- (("/bin/pwd") "pwd"))
- #t))))))))
+ (delete 'build))))))) ; nothing to build
(define-public tzdata
(package
diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm
index bbd779ae4e..2fcb7fb36b 100644
--- a/gnu/packages/cross-base.scm
+++ b/gnu/packages/cross-base.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2014, 2015, 2018 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2016 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
@@ -356,7 +356,7 @@ target that libc."
,@(package-arguments glibc/hurd-headers))
((#:phases phases)
`(modify-phases ,phases
- (add-before 'pre-configure 'set-cross-headers-path
+ (add-after 'unpack 'set-cross-headers-path
(lambda* (#:key inputs #:allow-other-keys)
(let* ((mach (assoc-ref inputs "gnumach-headers"))
(hurd (assoc-ref inputs "hurd-headers"))
@@ -426,17 +426,9 @@ target that libc."
(xheaders (cross-kernel-headers target)))
"Return a libc cross-built for TARGET, a GNU triplet. Use XGCC and
XBINUTILS and the cross tool chain."
- (define (cross-libc-for-target target)
- "Return libc depending on TARGET."
- (match target
- ((or "i586-pc-gnu" "i586-gnu") glibc/hurd)
- (_ glibc/linux)))
-
- ;; Use (cross-libc-for-target ...) to determine the correct libc to use.
-
(if (cross-newlib? target)
(native-libc target)
- (let ((libc (cross-libc-for-target target)))
+ (let ((libc glibc))
(package (inherit libc)
(name (string-append "glibc-cross-" target))
(arguments
@@ -457,7 +449,9 @@ XBINUTILS and the cross tool chain."
,@(package-arguments libc))
((#:configure-flags flags)
`(cons ,(string-append "--host=" target)
- ,flags))
+ ,(if (hurd-triplet? target)
+ `(cons "--disable-werror" ,flags)
+ flags)))
((#:phases phases)
`(modify-phases ,phases
(add-before 'configure 'set-cross-kernel-headers-path
diff --git a/gnu/packages/hurd.scm b/gnu/packages/hurd.scm
index d6c1fb5e64..938cb116ca 100644
--- a/gnu/packages/hurd.scm
+++ b/gnu/packages/hurd.scm
@@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2014, 2015, 2016, 2017 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
+;;; Copyright © 2018 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -24,17 +25,25 @@
#:use-module (guix utils)
#:use-module (guix build-system gnu)
#:use-module (guix build-system trivial)
+ #:use-module (gnu packages autotools)
#:use-module (gnu packages flex)
#:use-module (gnu packages bison)
#:use-module (gnu packages perl)
#:use-module (gnu packages base)
#:use-module (guix git-download)
- #:export (hurd-triplet?))
+ #:export (hurd-triplet?
+ hurd-target?))
(define (hurd-triplet? triplet)
(and (string-suffix? "-gnu" triplet)
(not (string-contains triplet "linux"))))
+(define (hurd-target?)
+ "Return true if the cross-compilation target or the current system is
+GNU/Hurd."
+ (or (and=> (%current-target-system) hurd-triplet?)
+ (string-suffix? (%current-system) "-gnu")))
+
(define (gnumach-source-url version)
(string-append "mirror://gnu/gnumach/gnumach-"
version ".tar.gz"))
@@ -43,6 +52,10 @@
(string-append "mirror://gnu/hurd/hurd-"
version ".tar.gz"))
+(define (patch-url repository commit)
+ (string-append "https://git.savannah.gnu.org/cgit/hurd/" repository
+ ".git/patch/?id=" commit))
+
(define-public gnumach-headers
(package
(name "gnumach-headers")
@@ -53,7 +66,24 @@
(uri (gnumach-source-url version))
(sha256
(base32
- "02hygsfpd2dljl5lg1vjjg9pizi9jyxd4aiiqzjshz6jax62jm9f"))))
+ "02hygsfpd2dljl5lg1vjjg9pizi9jyxd4aiiqzjshz6jax62jm9f"))
+ (patches (list (origin
+ ;; This patch adds <mach/vm_wire.h>, which defines the
+ ;; VM_WIRE_* constants needed by glibc 2.28.
+ (method url-fetch)
+ (uri (patch-url "gnumach" "2b0f19f602e08fd9d37268233b962674fd592634"))
+ (sha256
+ (base32
+ "01iajnwsmka0w9hwjkxxijc4xfhwqbvlkw1w8n71hpnhfixd0y28"))
+ (file-name "gnumach-vm-wire-header.patch"))))
+ (modules '((guix build utils)))
+ (snippet
+ '(begin
+ ;; Actually install vm_wire.h.
+ (substitute* "Makefile.in"
+ (("^include_mach_HEADERS =")
+ "include_mach_HEADERS = include/mach/vm_wire.h"))
+ #t))))
(build-system gnu-build-system)
(arguments
`(#:phases
@@ -110,56 +140,71 @@ communication.")
(license gpl2+)))
(define-public hurd-headers
- (package
- (name "hurd-headers")
- (version "0.9")
- (source (origin
- (method url-fetch)
- (uri (hurd-source-url version))
- (sha256
- (base32
- "1nw9gly0n7pyv3cpfm4mmxy4yccrx4g0lyrvd3vk2vil26jpbggw"))))
- (build-system gnu-build-system)
- (native-inputs
- `(("mig" ,mig)))
- (arguments
- `(#:phases
- (modify-phases %standard-phases
- (replace 'install
- (lambda _
- (invoke "make" "install-headers" "no_deps=t")))
- (delete 'build))
+ ;; Resort to a post-0.9 snapshot that provides the 'file_utimens' and
+ ;; 'file_exec_paths' RPCs that glibc 2.28 expects.
+ (let ((revision "0")
+ (commit "98b33905c89b7e5c309c74ae32302a5745901a6e"))
+ (package
+ (name "hurd-headers")
+ (version "0.9")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://git.savannah.gnu.org/git/hurd/hurd.git")
+ (commit commit)))
+ (sha256
+ (base32
+ "1mj22sxgscas2675vrbxr477mwbxdj68pqcrh65lbir8qlssrgrf"))
+ (file-name (git-file-name name version))))
+ (build-system gnu-build-system)
+ (native-inputs
+ `(("mig" ,mig)
+ ("autoconf" ,autoconf)
+ ("automake" ,automake)))
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (replace 'install
+ (lambda _
+ (invoke "make" "install-headers" "no_deps=t")))
+ (delete 'build))
- #:configure-flags '(;; Pretend we're on GNU/Hurd; 'configure' wants
- ;; that.
- ,@(if (%current-target-system)
- '()
- '("--host=i586-pc-gnu"))
+ #:configure-flags '( ;; Pretend we're on GNU/Hurd; 'configure' wants
+ ;; that.
+ ,@(if (%current-target-system)
+ '()
+ '("--host=i586-pc-gnu"))
- ;; Reduce set of dependencies.
- "--without-parted"
- "--disable-ncursesw"
- "--disable-test"
- "--without-libbz2"
- "--without-libz"
- ;; Skip the clnt_create check because it expects
- ;; a working glibc causing a circular dependency.
- "ac_cv_search_clnt_create=no")
+ ;; Reduce set of dependencies.
+ "--without-parted"
+ "--disable-ncursesw"
+ "--disable-test"
+ "--without-libbz2"
+ "--without-libz"
+ ;; Skip the clnt_create check because it expects
+ ;; a working glibc causing a circular dependency.
+ "ac_cv_search_clnt_create=no"
- #:tests? #f))
- (home-page "https://www.gnu.org/software/hurd/hurd.html")
- (synopsis "GNU Hurd headers")
- (description
- "This package provides C headers of the GNU Hurd, used to build the GNU C
+ ;; Annihilate the checks for the 'file_exec_paths'
+ ;; & co. libc functions to avoid "link tests are
+ ;; not allowed after AC_NO_EXECUTABLES" error.
+ "ac_cv_func_file_exec_paths=no"
+ "ac_cv_func_exec_exec_paths=no"
+ "ac_cv_func__hurd_exec_paths=no"
+ "ac_cv_func_file_futimens=no")
+
+ #:tests? #f))
+ (home-page "https://www.gnu.org/software/hurd/hurd.html")
+ (synopsis "GNU Hurd headers")
+ (description
+ "This package provides C headers of the GNU Hurd, used to build the GNU C
Library and other user programs.")
- (license gpl2+)))
+ (license gpl2+))))
(define-public hurd-minimal
(package (inherit hurd-headers)
(name "hurd-minimal")
(inputs `(("glibc-hurd-headers" ,glibc/hurd-headers)))
- (native-inputs
- `(("mig" ,mig)))
(arguments
(substitute-keyword-arguments (package-arguments hurd-headers)
((#:phases _)
@@ -178,6 +223,11 @@ Library and other user programs.")
#t)))
(replace 'build
(lambda _
+ ;; Install <assert-backtrace.h> & co.
+ (invoke "make" "-Clibshouldbeinlibc"
+ "../include/assert-backtrace.h")
+
+ ;; Build libihash.
(invoke "make" "-Clibihash" "libihash.a")))))))
(home-page "https://www.gnu.org/software/hurd/hurd.html")
(synopsis "GNU Hurd libraries")