From c9fd013956718c4d3178608b3eca6392b6f5cea3 Mon Sep 17 00:00:00 2001
From: Manolis Ragkousis
Date: Sat, 27 Sep 2014 20:07:19 +0300
Subject: [PATCH 1/4] gnu: base: Add glibc-hurd and hurd-minimal.
Reinstates commit bc046a94, among other things.
* gnu/packages/base.scm (glibc/hurd, glibc/hurd-headers): New variables.
* gnu/packages/hurd.scm (hurd-minimal): New variable.
* gnu/packages/patches/glibc-make-4.0.patch: New file.
* gnu/packages/patches/glibc-hurd-extern-inline.patch: New file.
* gnu/packages/patches/libpthread-glibc-preparation.patch: New file.
* gnu/packages/patches/hurd-minimal.patch: New file.
* gnu-system.am (dist_patch_DATA): Add them.
Co-authored-by: Ludovic Courtès
---
gnu-system.am | 4 +
gnu/packages/base.scm | 104 +++++++++++++++++++++
gnu/packages/hurd.scm | 67 ++++++++++++-
.../patches/glibc-hurd-extern-inline.patch | 34 +++++++
gnu/packages/patches/glibc-make-4.0.patch | 12 +++
gnu/packages/patches/hurd-minimal.patch | 22 +++++
.../patches/libpthread-glibc-preparation.patch | 59 ++++++++++++
7 files changed, 301 insertions(+), 1 deletion(-)
create mode 100644 gnu/packages/patches/glibc-hurd-extern-inline.patch
create mode 100644 gnu/packages/patches/glibc-make-4.0.patch
create mode 100644 gnu/packages/patches/hurd-minimal.patch
create mode 100644 gnu/packages/patches/libpthread-glibc-preparation.patch
diff --git a/gnu-system.am b/gnu-system.am
index a46647e..d649223 100644
--- a/gnu-system.am
+++ b/gnu-system.am
@@ -395,6 +395,8 @@ dist_patch_DATA = \
gnu/packages/patches/glibc-ldd-x86_64.patch \
gnu/packages/patches/glibc-mips-dangling-vfork-ref.patch \
gnu/packages/patches/gmp-arm-asm-nothumb.patch \
+ gnu/packages/patches/glibc-make-4.0.patch \
+ gnu/packages/patches/glibc-hurd-extern-inline.patch \
gnu/packages/patches/gnunet-fix-scheduler.patch \
gnu/packages/patches/gnunet-fix-tests.patch \
gnu/packages/patches/gobject-introspection-absolute-shlib-path.patch \
@@ -412,6 +414,7 @@ dist_patch_DATA = \
gnu/packages/patches/gtkglext-disable-disable-deprecated.patch \
gnu/packages/patches/hop-bigloo-4.0b.patch \
gnu/packages/patches/irrlicht-mesa-10.patch \
+ gnu/packages/patches/hurd-minimal.patch \
gnu/packages/patches/jbig2dec-ignore-testtest.patch \
gnu/packages/patches/kmod-module-directory.patch \
gnu/packages/patches/libarchive-CVE-2013-0211.patch \
@@ -429,6 +432,7 @@ dist_patch_DATA = \
gnu/packages/patches/libvpx-fix-armhf-link.patch \
gnu/packages/patches/libvpx-fix-ssse3-quantize.patch \
gnu/packages/patches/libvpx-vp9-out-of-bounds-access.patch \
+ gnu/packages/patches/libpthread-glibc-preparation.patch \
gnu/packages/patches/lm-sensors-hwmon-attrs.patch \
gnu/packages/patches/lua51-liblua-so.patch \
gnu/packages/patches/luit-posix.patch \
diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index be33cb2..556eb47 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -4,6 +4,7 @@
;;; Copyright © 2012 Nikita Karetnikov
;;; Copyright © 2014 Mark H Weaver
;;; Copyright © 2014 Alex Kost
+;;; Copyright © 2014 Manolis Fragkiskos Ragkousis
;;;
;;; This file is part of GNU Guix.
;;;
@@ -32,9 +33,13 @@
#:use-module (gnu packages perl)
#:use-module (gnu packages linux)
#:use-module (gnu packages texinfo)
+ #:use-module (gnu packages gettext)
+ #:use-module (gnu packages hurd)
#:use-module (gnu packages pkg-config)
+ #:use-module (guix utils)
#:use-module (guix packages)
#:use-module (guix download)
+ #:use-module (guix git-download)
#:use-module (guix build-system gnu))
;;; Commentary:
@@ -520,6 +525,105 @@ with the Linux kernel.")
(license lgpl2.0+)
(home-page "http://www.gnu.org/software/libc/")))
+(define-public glibc/hurd
+ (package (inherit glibc)
+ (name "glibc-hurd")
+ (version "2.18")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "git://git.sv.gnu.org/hurd/glibc")
+ (commit "a9d8d3808f18de4da9b587e9bdfb6cca4704344b")))
+ (sha256
+ (base32
+ "0jmczzdyps5syhrqyf7lgl3h77br8s74qw0417jp8b4f29ks7pbz"))
+ (file-name (string-append name "-" version))
+ (patches (map search-patch
+ '("glibc-make-4.0.patch"
+ "glibc-hurd-extern-inline.patch")))))
+
+ ;; Libc provides , which includes a bunch of Hurd and Mach headers,
+ ;; so both should be propagated.
+ (propagated-inputs `(("gnumach-headers" ,gnumach-headers)
+ ("hurd-headers" ,hurd-headers)
+ ("hurd-minimal" ,hurd-minimal)))
+ (native-inputs
+ `(,@(package-native-inputs glibc)
+ ("patch/libpthread-patch" ,(search-patch "libpthread-glibc-preparation.patch"))
+ ("mig" ,mig)
+ ("perl" ,perl)
+ ("libpthread" ,(origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "git://git.sv.gnu.org/hurd/libpthread")
+ (commit "f517024dce3e21c525a7b634eab61302d6b99150")))
+ (sha256
+ (base32
+ "0yqfm1hfqlyjzqv3mgf9a3mh4qxx1mqkzn5xiac2vlvji8nns35y"))
+ (file-name "libpthread")))))
+
+ (arguments
+ `(#:modules ((guix build utils)
+ (guix build gnu-build-system))
+ ,@(substitute-keyword-arguments (package-arguments glibc)
+ ((#:configure-flags cf)
+ `(append (list "--host=i686-pc-gnu"
+
+ ;; nscd fails to build for GNU/Hurd:
+ ;; .
+ ;; Disable it.
+ "--disable-nscd")))
+ ((#:phases phases)
+ `(alist-cons-after
+ 'unpack 'prepare-libpthread
+ (lambda* (#:key inputs #:allow-other-keys)
+ (copy-recursively (assoc-ref inputs "libpthread") "libpthread")
+
+ (system* "patch" "-p1" "-i"
+ (assoc-ref %build-inputs "patch/libpthread-patch"))
+
+ ;; Make the file writable.
+ (chmod "bits/pthreadtypes.h" #o666)
+ (copy-recursively "libpthread/sysdeps/generic/bits" "bits"))
+ ,phases)))))))
+
+(define-public glibc/hurd-headers
+ (package (inherit glibc/hurd)
+ (name "glibc-hurd-headers")
+ (outputs '("out"))
+ (arguments
+ (substitute-keyword-arguments (package-arguments glibc/hurd)
+ ;; We just pass the flags really needed to build the headers.
+ ((#:configure-flags _)
+ `(list "--enable-add-ons"
+ "--host=i686-pc-gnu"
+ "--enable-obsolete-rpc"))
+ ((#:phases _)
+ '(alist-replace
+ 'install
+ (lambda* (#:key outputs #:allow-other-keys)
+ (and (zero? (system* "make" "install-headers"))
+
+ ;; Make an empty stubs.h to work around not being able to
+ ;; produce a valid stubs.h and causing the build to fail. See
+ ;; .
+ (let ((out (assoc-ref outputs "out")))
+ (close-port
+ (open-output-file
+ (string-append out "/include/gnu/stubs.h"))))))
+
+ ;; Nothing to build.
+ (alist-delete
+ 'build
+
+ (alist-cons-before
+ 'configure 'pre-configure
+ (lambda _
+ ;; Use the right 'pwd'.
+ (substitute* "configure"
+ (("/bin/pwd") "pwd")))
+ %standard-phases))))))))
+
(define-public tzdata
(package
(name "tzdata")
diff --git a/gnu/packages/hurd.scm b/gnu/packages/hurd.scm
index 8ac78d3..5108114 100644
--- a/gnu/packages/hurd.scm
+++ b/gnu/packages/hurd.scm
@@ -20,11 +20,14 @@
#:use-module (guix licenses)
#:use-module (guix download)
#:use-module (guix packages)
+ #:use-module (gnu packages)
#:use-module (guix build-system gnu)
#:use-module (gnu packages flex)
#:use-module (gnu packages bison)
#:use-module (gnu packages perl)
- #:use-module (gnu packages autotools))
+ #:use-module (gnu packages autotools)
+ #:use-module (gnu packages base)
+ #:use-module (guix git-download))
(define-public gnumach-headers
(package
@@ -128,3 +131,65 @@ communication.")
"This package provides C headers of the GNU Hurd, used to build the GNU C
Library and other user programs.")
(license gpl2+)))
+
+(define-public hurd-minimal
+ (package
+ (name "hurd-minimal")
+ (version "0.5")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "git://git.savannah.gnu.org/hurd/hurd")
+ (commit "a5ca1de1eb575294dbc865a2c4ff643efc117ef4")))
+ (sha256
+ (base32
+ "17vqdlpy1ifw4ijhc3ydkp8p5d406c7aq4ghpmg4a1h1wlwy32kr"))
+ (file-name (string-append name "-" version))
+ (patches (list (search-patch "hurd-minimal.patch")))))
+ (build-system gnu-build-system)
+ (inputs `(("glibc-hurd-headers" ,glibc/hurd-headers)))
+ (native-inputs
+ `(("autoconf" ,(autoconf-wrapper))
+ ("mig" ,mig)))
+
+ (arguments
+ `(#:phases (alist-replace
+ 'install
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out")))
+ ;; We need to copy libihash.a to the output directory manually,
+ ;; since there is no target for that in the makefile.
+ (mkdir-p (string-append out "/include"))
+ (copy-file "libihash/ihash.h"
+ (string-append out "/include/ihash.h"))
+ (mkdir-p (string-append out "/lib"))
+ (copy-file "libihash/libihash.a"
+ (string-append out "/lib/libihash.a"))
+ #t))
+ (alist-replace
+ 'build
+ (lambda _
+ (zero? (system* "make" "-Clibihash" "libihash.a")))
+ (alist-cons-before
+ 'configure 'bootstrap
+ (lambda _
+ (zero? (system* "autoreconf" "-vfi")))
+ %standard-phases)))
+ #:configure-flags '(;; Pretend we're on GNU/Hurd; 'configure' wants
+ ;; that.
+ "--host=i686-pc-gnu"
+
+ ;; Reduce set of dependencies.
+ "--disable-ncursesw"
+ "--disable-test"
+ "--without-libbz2"
+ "--without-libz"
+ "--without-parted")
+ #:tests? #f))
+ (home-page "http://www.gnu.org/software/hurd/hurd.html")
+ (synopsis "GNU Hurd libraries")
+ (description
+ "This package provides libihash, needed to build the GNU C
+Library for GNU/Hurd")
+ (license gpl2+)))
diff --git a/gnu/packages/patches/glibc-hurd-extern-inline.patch b/gnu/packages/patches/glibc-hurd-extern-inline.patch
new file mode 100644
index 0000000..f13903c
--- /dev/null
+++ b/gnu/packages/patches/glibc-hurd-extern-inline.patch
@@ -0,0 +1,34 @@
+This changes the way _EXTERN_INLINE is defined so we can
+avoid external definition errors.
+https://lists.gnu.org/archive/html/bug-hurd/2014-04/msg00002.html
+
+diff --git a/signal/sigsetops.c b/signal/sigsetops.c
+index 0317662..b92c296 100644
+--- a/signal/sigsetops.c
++++ b/signal/sigsetops.c
+@@ -3,7 +3,9 @@
+
+ #include
+
+-#define _EXTERN_INLINE
++#ifndef _EXTERN_INLINE
++#define _EXTERN_INLINE __extern_inline
++#endif
+ #ifndef __USE_EXTERN_INLINES
+ # define __USE_EXTERN_INLINES 1
+ #endif
+
+This fixes the error @node found before @end deftypefun
+
+diff --git a/manual/contrib.texi b/manual/contrib.texi
+index 3b9d23c..376b40d 100644
+--- a/manual/contrib.texi
++++ b/manual/contrib.texi
+@@ -1,3 +1,4 @@
address@hidden deftypefun
+ @node Contributors, Free Manuals, Platform, Top
+ @c %MENU% Who wrote what parts of the GNU C Library
+ @appendix Contributors to @theglibc{}
+--
+1.9.2
+
diff --git a/gnu/packages/patches/glibc-make-4.0.patch b/gnu/packages/patches/glibc-make-4.0.patch
new file mode 100644
index 0000000..d83de1d
--- /dev/null
+++ b/gnu/packages/patches/glibc-make-4.0.patch
@@ -0,0 +1,12 @@
+Allow libc to be compiled with GNU Make 4.0.
+
+--- glibc-2.18/configure 2013-08-11 00:52:55.000000000 +0200
++++ glibc-2.18/configure 2013-10-16 16:53:09.000000000 +0200
+@@ -4772,7 +4772,7 @@ $as_echo_n "checking version of $MAKE...
+ ac_prog_version=`$MAKE --version 2>&1 | sed -n 's/^.*GNU Make[^0-9]*\([0-9][0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+- 3.79* | 3.[89]*)
++ 3.79* | 3.[89]* | 4.*)
+ ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+ *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
diff --git a/gnu/packages/patches/hurd-minimal.patch b/gnu/packages/patches/hurd-minimal.patch
new file mode 100644
index 0000000..b551d5c
--- /dev/null
+++ b/gnu/packages/patches/hurd-minimal.patch
@@ -0,0 +1,22 @@
+We want to build the Hurd's libihash very early so that we can then
+build libc. Because of that, we cannot link against libc, and thus
+we miss 'clnt_create' and friends.
+
+See .
+
+diff --git a/configure.ac b/configure.ac
+index f8856db..a381219 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -297,9 +297,9 @@ AC_SUBST([XKB_BASE])
+ AC_DEFINE_UNQUOTED([X11_PREFIX], "$X11_PREFIX")
+ AC_SUBST([X11_KEYSYMDEF_H])
+
+-# Check for Sun RPC headers and library.
++# Check only for Sun RPC headers. We do not need the library yet.
+ AC_CHECK_HEADER([rpc/types.h], [HAVE_SUN_RPC=yes], [HAVE_SUN_RPC=no])
+-AC_SEARCH_LIBS([clnt_create], [], [:], [HAVE_SUN_RPC=no])
++# AC_SEARCH_LIBS([clnt_create], [], [:], [HAVE_SUN_RPC=no])
+ AC_SUBST([HAVE_SUN_RPC])
+
+ if test -f ./$ac_unique_file; then
diff --git a/gnu/packages/patches/libpthread-glibc-preparation.patch b/gnu/packages/patches/libpthread-glibc-preparation.patch
new file mode 100644
index 0000000..1897248
--- /dev/null
+++ b/gnu/packages/patches/libpthread-glibc-preparation.patch
@@ -0,0 +1,59 @@
+This patch helps to integrate the Hurd's libpthread as a libc add-on.
+
+It writes the configure file, removes an rpc call not yet
+implemented on the version of gnumach we use and defines
+a missing macro.
+
+diff --git a/libpthread/configure b/libpthread/configure
+new file mode 100644
+index 0000000..2cdbc71
+--- /dev/null
++++ b/libpthread/configure
+@@ -0,0 +1,2 @@
++libc_add_on_canonical=libpthread
++libc_add_on_subdirs=.
+--
+1.9.0
+
+We are using a version of GNU Mach that lacks 'thread_terminate_release'
+(not introduced yet). The 'thread_terminate' RPC call will be enough for
+our needs.
+See .
+
+diff --git a/libpthread/sysdeps/mach/pt-thread-terminate.c b/libpthread/sysdeps/mach/pt-thread-terminate.c
+index 6672065..129a611 100644
+--- a/libpthread/sysdeps/mach/pt-thread-terminate.c
++++ b/libpthread/sysdeps/mach/pt-thread-terminate.c
+@@ -70,9 +70,9 @@ __pthread_thread_terminate (struct __pthread *thread)
+ __mach_port_destroy (__mach_task_self (), wakeup_port);
+
+ /* Terminate and release all that's left. */
+- err = __thread_terminate_release (kernel_thread, mach_task_self (),
+- kernel_thread, reply_port,
+- stackaddr, stacksize);
++ /* err = __thread_terminate_release (kernel_thread, mach_task_self (), */
++ /* kernel_thread, reply_port, */
++ /* stackaddr, stacksize); */
+
+ /* The kernel does not support it yet. Leak but at least terminate
+ correctly. */
+--
+1.9.2
+
+The __PTHREAD_SPIN_LOCK_INITIALIZER definition is missing, so we
+define it to __SPIN_LOCK_INITIALIZER which already exists.
+See .
+
+diff --git a/libpthread/sysdeps/mach/bits/spin-lock.h b/libpthread/sysdeps/mach/bits/spin-lock.h
+index 537dac9..fca0e5a 100644
+--- a/libpthread/sysdeps/mach/bits/spin-lock.h
++++ b/libpthread/sysdeps/mach/bits/spin-lock.h
+@@ -30,7 +30,7 @@ typedef __spin_lock_t __pthread_spinlock_t;
+
+ /* Initializer for a spin lock object. */
+ #ifndef __PTHREAD_SPIN_LOCK_INITIALIZER
+-#error __PTHREAD_SPIN_LOCK_INITIALIZER undefined: should be defined by .
++#define __PTHREAD_SPIN_LOCK_INITIALIZER __SPIN_LOCK_INITIALIZER
+ #endif
+
+ __END_DECLS
--
2.3.0