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."