summary refs log tree commit diff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2012-06-28 22:38:09 +0200
committerLudovic Courtès <ludo@gnu.org>2012-06-28 22:38:09 +0200
commit900f7267341da3281e937cb0b128b21975574867 (patch)
tree4c87f62a5a0c7a49d05b9776ec7668a4800450f9
parente3ce5d709f3ba6a3f3a94a24c20a9cd87e6bd07d (diff)
downloadguix-900f7267341da3281e937cb0b128b21975574867.tar.gz
Introduce `compile-time-value' and use it.
* guix/utils.scm (compile-time-value): New macro.
  (%nixpkgs-directory): Use it.

* guix/build-system/gnu.scm (%standard-inputs): Likewise.
-rw-r--r--guix/build-system/gnu.scm11
-rw-r--r--guix/utils.scm16
2 files changed, 21 insertions, 6 deletions
diff --git a/guix/build-system/gnu.scm b/guix/build-system/gnu.scm
index 15996d4850..c0eef55ba9 100644
--- a/guix/build-system/gnu.scm
+++ b/guix/build-system/gnu.scm
@@ -33,11 +33,12 @@
 ;; Code:
 
 (define %standard-inputs
-  (map (lambda (name)
-         (list name (nixpkgs-derivation name)))
-       '("gnutar" "gzip" "bzip2" "xz" "diffutils" "patch"
-         "coreutils" "gnused" "gnugrep" "bash"
-         "gcc" "binutils" "gnumake" "glibc")))
+  (compile-time-value
+   (map (lambda (name)
+          (list name (nixpkgs-derivation name)))
+        '("gnutar" "gzip" "bzip2" "xz" "diffutils" "patch"
+          "coreutils" "gnused" "gnugrep" "bash"
+          "gcc" "binutils" "gnumake" "glibc"))))
 
 (define* (gnu-build store name source inputs
                     #:key (outputs '("out")) (configure-flags ''())
diff --git a/guix/utils.scm b/guix/utils.scm
index 05c04b87f1..bcea0193d0 100644
--- a/guix/utils.scm
+++ b/guix/utils.scm
@@ -45,6 +45,7 @@
             nixpkgs-derivation
 
             define-record-type*
+            compile-time-value
             memoize
             gnu-triplet->nix-system
             %current-system))
@@ -376,8 +377,21 @@ starting from the right of S."
 ;;; Nixpkgs.
 ;;;
 
+(define-syntax compile-time-value
+  (syntax-rules ()
+    "Evaluate the given expression at compile time.  The expression must
+evaluate to a simple datum."
+    ((_ exp)
+     (let-syntax ((v (lambda (s)
+                       (let ((val exp))
+                         (syntax-case s ()
+                           (_ #`'#,(datum->syntax s val)))))))
+       v))))
+
 (define %nixpkgs-directory
-  (make-parameter (getenv "NIXPKGS")))
+  (make-parameter
+   ;; Capture the build-time value of $NIXPKGS.
+   (compile-time-value (getenv "NIXPKGS"))))
 
 (define (nixpkgs-derivation attribute)
   "Return the derivation path of ATTRIBUTE in Nixpkgs."