summary refs log tree commit diff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2012-11-05 23:50:05 +0100
committerLudovic Courtès <ludo@gnu.org>2012-11-05 23:51:09 +0100
commit53dcd5eea1479ad5bde7e6d17793687c83c54ad8 (patch)
treeb65f85c83b230fe7c8cd2dec00bc0a8f6f63d90a
parentbca114d5282847eb2e0f44ff065ad48adf7f5504 (diff)
downloadguix-53dcd5eea1479ad5bde7e6d17793687c83c54ad8.tar.gz
build-system/gnu: Add `static-libgcc-package' & supporting procedure.
* guix/build-system/gnu.scm (package-with-extra-configure-variable,
  static-libgcc-package): New procedures.
-rw-r--r--guix/build-system/gnu.scm43
1 files changed, 42 insertions, 1 deletions
diff --git a/guix/build-system/gnu.scm b/guix/build-system/gnu.scm
index 994b386e5c..9d94680d93 100644
--- a/guix/build-system/gnu.scm
+++ b/guix/build-system/gnu.scm
@@ -27,7 +27,9 @@
   #:use-module (ice-9 match)
   #:export (gnu-build
             gnu-build-system
-            package-with-explicit-inputs))
+            package-with-explicit-inputs
+            package-with-extra-configure-variable
+            static-libgcc-package))
 
 ;; Commentary:
 ;;
@@ -77,6 +79,45 @@ when GUILE is #f."
               ,@(map rewritten-input
                      (filtered-inputs (package-inputs p)))))))
 
+(define (package-with-extra-configure-variable p variable value)
+  "Return a version of P with VARIABLE=VALUE specified as an extra
+`configure' flag.  An example is LDFLAGS=-static.  If P already has
+configure flags for VARIABLE, the associated value is augmented."
+  (let loop ((p p))
+    (define (rewritten-inputs inputs)
+      (map (match-lambda
+            ((name (? package? p) sub ...)
+             `(,name ,(loop p) ,@sub))
+            (input input))
+           inputs))
+
+    (package (inherit p)
+      (arguments
+       (lambda (system)
+         (let ((args (match (package-arguments p)
+                       ((? procedure? proc)
+                        (proc system))
+                       (x x))))
+          (substitute-keyword-arguments args
+            ((#:configure-flags flags)
+             (let* ((var= (string-append variable "="))
+                    (len  (string-length var=)))
+               `(cons ,(string-append var= value)
+                      (map (lambda (flag)
+                             (if (string-prefix? ,var= flag)
+                                 (string-append
+                                  ,(string-append var= value " ")
+                                  (substring flag ,len))
+                                 flag))
+                           ,flags))))))))
+      (inputs (rewritten-inputs (package-inputs p)))
+      (propagated-inputs (rewritten-inputs (package-propagated-inputs p))))))
+
+(define (static-libgcc-package p)
+  "A version of P linked with `-static-gcc'."
+  (package-with-extra-configure-variable p "LDFLAGS" "-static-libgcc"))
+
+
 (define %store
   ;; Store passed to STANDARD-INPUTS.
   (make-parameter #f))