guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

01/01: gnu: base: Add glibc-hurd and hurd-minimal.


From: Ludovic Courtès
Subject: 01/01: gnu: base: Add glibc-hurd and hurd-minimal.
Date: Wed, 19 Nov 2014 10:25:05 +0000

civodul pushed a commit to branch wip-hurd
in repository guix.

commit 4625cbe124066dde15fa3b151766694b530e9010
Author: Manolis Ragkousis <address@hidden>
Date:   Sat Sep 27 20:07:19 2014 +0300

    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 <address@hidden>
---
 gnu-system.am                                      |    4 +
 gnu/packages/base.scm                              |  103 ++++++++++++++++++++
 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, 300 insertions(+), 1 deletions(-)

diff --git a/gnu-system.am b/gnu-system.am
index e774f50..6609ecf 100644
--- a/gnu-system.am
+++ b/gnu-system.am
@@ -336,6 +336,8 @@ dist_patch_DATA =                                           
\
   gnu/packages/patches/glib-tests-timer.patch                  \
   gnu/packages/patches/glibc-bootstrap-system.patch            \
   gnu/packages/patches/glibc-ldd-x86_64.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-cc.patch          \
@@ -350,6 +352,7 @@ dist_patch_DATA =                                           
\
   gnu/packages/patches/guix-test-networking.patch              \
   gnu/packages/patches/gtkglext-disable-disable-deprecated.patch \
   gnu/packages/patches/hop-bigloo-4.0b.patch                   \
+  gnu/packages/patches/hurd-minimal.patch                      \
   gnu/packages/patches/icu4c-test-date-format.patch            \
   gnu/packages/patches/inkscape-stray-comma.patch               \
   gnu/packages/patches/jbig2dec-ignore-testtest.patch          \
@@ -362,6 +365,7 @@ dist_patch_DATA =                                           
\
   gnu/packages/patches/libtool-skip-tests.patch                        \
   gnu/packages/patches/libtool-skip-tests-for-mips.patch       \
   gnu/packages/patches/libssh-CVE-2014-0017.patch              \
+  gnu/packages/patches/libpthread-glibc-preparation.patch      \
   gnu/packages/patches/lm-sensors-hwmon-attrs.patch            \
   gnu/packages/patches/luit-posix.patch                                \
   gnu/packages/patches/m4-gets-undeclared.patch                        \
diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index fe2f0f0..6c0235c 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2014 Andreas Enge <address@hidden>
 ;;; Copyright © 2012 Nikita Karetnikov <address@hidden>
 ;;; Copyright © 2014 Mark H Weaver <address@hidden>
+;;; Copyright © 2014 Manolis Fragkiskos Ragkousis <address@hidden>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -31,9 +32,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:
@@ -499,6 +504,104 @@ 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 <hurd.h>, 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
+     (substitute-keyword-arguments (package-arguments glibc)
+       ((#:configure-flags cf)
+        `(append (list "--host=i686-pc-gnu"
+
+                       ;; nscd fails to build for GNU/Hurd:
+                       ;; 
<https://lists.gnu.org/archive/html/bug-hurd/2014-07/msg00006.html>.
+                       ;; Disable it.
+                       "--disable-nscd")
+                 ,cf))
+       ((#: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
+                 ;; 
<http://lists.gnu.org/archive/html/guix-devel/2014-04/msg00233.html>.
+                 (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 aed6f66..e989a37 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 <features.h>
+ 
+-#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 <http://lists.gnu.org/archive/html/bug-hurd/2014-04/msg00116.html>.
+
+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 <http://lists.gnu.org/archive/html/bug-hurd/2014-05/msg00127.html>.
+
+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 <http://lists.gnu.org/archive/html/commit-hurd/2009-04/msg00006.html>.
+  
+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 
<lock-intern.h>.
++#define __PTHREAD_SPIN_LOCK_INITIALIZER __SPIN_LOCK_INITIALIZER
+ #endif
+ 
+ __END_DECLS



reply via email to

[Prev in Thread] Current Thread [Next in Thread]