summary refs log tree commit diff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2013-02-13 21:42:34 +0100
committerLudovic Courtès <ludo@gnu.org>2013-02-14 01:12:24 +0100
commite3b2cf4c7a28807a7225a80eda47dc5f5f7efa70 (patch)
tree4bb7219dd6243b7609509f2bf9706223fdfbaaeb
parent250b0404d7bc6bb6b911d58585df41e876ee42de (diff)
downloadguix-e3b2cf4c7a28807a7225a80eda47dc5f5f7efa70.tar.gz
gnu: guile-static: Use libgc build with `USE_LIBC_PRIVATES'.
* gnu/packages/make-bootstrap.scm (%guile-static): Use libgc build with
  CPPFLAGS=-DUSE_LIBC_PRIVATES.
* gnu/packages/bdw-gc.scm (libgc): Add TODO to always do it.
-rw-r--r--gnu/packages/bdw-gc.scm1
-rw-r--r--gnu/packages/make-bootstrap.scm87
2 files changed, 50 insertions, 38 deletions
diff --git a/gnu/packages/bdw-gc.scm b/gnu/packages/bdw-gc.scm
index 98526512f8..c338eab871 100644
--- a/gnu/packages/bdw-gc.scm
+++ b/gnu/packages/bdw-gc.scm
@@ -35,6 +35,7 @@
              (base32
               "05jwadjbrv8pr7z9cb4miskicxqpxm0pca4h2rg5cgbpajr2bx7b"))))
    (build-system gnu-build-system)
+   ;; TODO: Build with -DUSE_LIBC_PRIVATES (see make-bootstrap.scm).
    (synopsis "The Boehm-Demers-Weiser conservative garbage collector
 for C and C++")
    (description
diff --git a/gnu/packages/make-bootstrap.scm b/gnu/packages/make-bootstrap.scm
index 8275344b6c..9e9ba939da 100644
--- a/gnu/packages/make-bootstrap.scm
+++ b/gnu/packages/make-bootstrap.scm
@@ -28,6 +28,7 @@
   #:use-module (gnu packages compression)
   #:use-module (gnu packages gawk)
   #:use-module (gnu packages guile)
+  #:use-module (gnu packages bdw-gc)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages multiprecision)
   #:use-module (ice-9 match)
@@ -399,44 +400,54 @@
   ;; A statically-linked Guile that is relocatable--i.e., it can search
   ;; .scm and .go files relative to its installation directory, rather
   ;; than in hard-coded configure-time paths.
-  (let ((guile (package (inherit guile-2.0)
-                 (inputs
-                  `(("patch/relocatable"
-                     ,(search-patch "guile-relocatable.patch"))
-                    ("patch/utf8"
-                     ,(search-patch "guile-default-utf8.patch"))
-                    ,@(package-inputs guile-2.0)))
-                 (arguments
-                  `(;; When `configure' checks for ltdl availability, it
-                    ;; doesn't try to link using libtool, and thus fails
-                    ;; because of a missing -ldl.  Work around that.
-                    #:configure-flags '("LDFLAGS=-ldl")
-
-                    #:phases (alist-cons-before
-                              'configure 'static-guile
-                              (lambda _
-                                (substitute* "libguile/Makefile.in"
-                                  ;; Create a statically-linked `guile'
-                                  ;; executable.
-                                  (("^guile_LDFLAGS =")
-                                   "guile_LDFLAGS = -all-static")
-
-                                  ;; Add `-ldl' *after* libguile-2.0.la.
-                                  (("^guile_LDADD =(.*)$" _ ldadd)
-                                   (string-append "guile_LDADD = "
-                                                  (string-trim-right ldadd)
-                                                  " -ldl\n"))))
-                              %standard-phases)
-
-                    ;; Allow Guile to be relocated, as is needed during
-                    ;; bootstrap.
-                    #:patches
-                    (list (assoc-ref %build-inputs "patch/relocatable")
-                          (assoc-ref %build-inputs "patch/utf8"))
-
-                    ;; There are uses of `dynamic-link' in
-                    ;; {foreign,coverage}.test that don't fly here.
-                    #:tests? #f)))))
+  (let* ((libgc (package (inherit libgc)
+                  (arguments
+                   ;; Make it so that we don't rely on /proc.  This is
+                   ;; especially useful in an initrd run before /proc is
+                   ;; mounted.
+                   '(#:configure-flags '("CPPFLAGS=-DUSE_LIBC_PRIVATES")))))
+         (guile (package (inherit guile-2.0)
+                  (inputs
+                   `(("patch/relocatable"
+                      ,(search-patch "guile-relocatable.patch"))
+                     ("patch/utf8"
+                      ,(search-patch "guile-default-utf8.patch"))
+                     ,@(package-inputs guile-2.0)))
+                  (propagated-inputs
+                   `(("bdw-gc" ,libgc)
+                     ,@(alist-delete "bdw-gc"
+                                     (package-propagated-inputs guile-2.0))))
+                  (arguments
+                   `(;; When `configure' checks for ltdl availability, it
+                     ;; doesn't try to link using libtool, and thus fails
+                     ;; because of a missing -ldl.  Work around that.
+                     #:configure-flags '("LDFLAGS=-ldl")
+
+                     #:phases (alist-cons-before
+                               'configure 'static-guile
+                               (lambda _
+                                 (substitute* "libguile/Makefile.in"
+                                   ;; Create a statically-linked `guile'
+                                   ;; executable.
+                                   (("^guile_LDFLAGS =")
+                                    "guile_LDFLAGS = -all-static")
+
+                                   ;; Add `-ldl' *after* libguile-2.0.la.
+                                   (("^guile_LDADD =(.*)$" _ ldadd)
+                                    (string-append "guile_LDADD = "
+                                                   (string-trim-right ldadd)
+                                                   " -ldl\n"))))
+                               %standard-phases)
+
+                     ;; Allow Guile to be relocated, as is needed during
+                     ;; bootstrap.
+                     #:patches
+                     (list (assoc-ref %build-inputs "patch/relocatable")
+                           (assoc-ref %build-inputs "patch/utf8"))
+
+                     ;; There are uses of `dynamic-link' in
+                     ;; {foreign,coverage}.test that don't fly here.
+                     #:tests? #f)))))
     (package-with-explicit-inputs (static-package guile)
                                   %standard-inputs-with-relocatable-glibc
                                   (current-source-location))))