summaryrefslogtreecommitdiff
path: root/guix
diff options
context:
space:
mode:
Diffstat (limited to 'guix')
-rw-r--r--guix/build-system/gnu.scm59
-rw-r--r--guix/build-system/scons.scm4
-rw-r--r--guix/build/scons-build-system.scm9
-rw-r--r--guix/gexp.scm2
4 files changed, 62 insertions, 12 deletions
diff --git a/guix/build-system/gnu.scm b/guix/build-system/gnu.scm
index c9140074b7..3cc89f8852 100644
--- a/guix/build-system/gnu.scm
+++ b/guix/build-system/gnu.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2019 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -57,12 +57,16 @@
'((guix build gnu-build-system)
(guix build utils)))
-(define* (package-with-explicit-inputs p inputs
- #:optional
- (loc (current-source-location))
- #:key (native-inputs '())
- guile)
- "Rewrite P, which is assumed to use GNU-BUILD-SYSTEM, to take INPUTS and
+(define* (package-with-explicit-inputs/deprecated p inputs
+ #:optional
+ (loc (current-source-location))
+ #:key (native-inputs '())
+ guile)
+ "This variant is deprecated because it is inefficient: it memoizes only
+temporarily instead of memoizing across all transformations where INPUTS is
+the same.
+
+Rewrite P, which is assumed to use GNU-BUILD-SYSTEM, to take INPUTS and
NATIVE-INPUTS as explicit inputs instead of the implicit default, and return
it. INPUTS and NATIVE-INPUTS can be either input lists or thunks; in the
latter case, they will be called in a context where the `%current-system' and
@@ -124,6 +128,47 @@ builder, or the distro's final Guile when GUILE is #f."
,@(map rewritten-input
(filtered (package-inputs p)))))))))
+(define* (package-with-explicit-inputs* inputs #:optional guile)
+ "Return a procedure that rewrites the given package and all its dependencies
+so that they use INPUTS (a thunk) instead of implicit inputs."
+ (define (duplicate-filter package-inputs)
+ (let ((names (match (inputs)
+ (((name _ ...) ...)
+ name))))
+ (fold alist-delete package-inputs names)))
+
+ (define (add-explicit-inputs p)
+ (if (and (eq? (package-build-system p) gnu-build-system)
+ (not (memq #:implicit-inputs? (package-arguments p))))
+ (package
+ (inherit p)
+ (inputs (append (inputs)
+ (duplicate-filter (package-inputs p))))
+ (arguments
+ (ensure-keyword-arguments (package-arguments p)
+ `(#:implicit-inputs? #f
+ #:guile ,guile))))
+ p))
+
+ (define (cut? p)
+ (and (eq? (package-build-system p) gnu-build-system)
+ (memq #:implicit-inputs? (package-arguments p))))
+
+ (package-mapping add-explicit-inputs cut?))
+
+(define package-with-explicit-inputs
+ (case-lambda*
+ ((inputs #:optional guile)
+ (package-with-explicit-inputs* inputs guile))
+ ((p inputs #:optional (loc (current-source-location))
+ #:key (native-inputs '()) guile)
+ ;; deprecated
+ (package-with-explicit-inputs/deprecated p inputs
+ loc
+ #:native-inputs
+ native-inputs
+ #:guile guile))))
+
(define (package-with-extra-configure-variable p variable value)
"Return a version of P with VARIABLE=VALUE specified as an extra `configure'
flag, recursively. An example is LDFLAGS=-static. If P already has configure
diff --git a/guix/build-system/scons.scm b/guix/build-system/scons.scm
index 5e76d64180..aad455c419 100644
--- a/guix/build-system/scons.scm
+++ b/guix/build-system/scons.scm
@@ -76,7 +76,9 @@
#:key
(tests? #t)
(scons-flags ''())
+ (build-targets ''())
(test-target "test")
+ (install-targets ''("install"))
(phases '(@ (guix build scons-build-system)
%standard-phases))
(outputs '("out"))
@@ -101,8 +103,10 @@ provides a 'SConstruct' file as its build system."
source))
#:scons-flags ,scons-flags
#:system ,system
+ #:build-targets ,build-targets
#:test-target ,test-target
#:tests? ,tests?
+ #:install-targets ,install-targets
#:phases ,phases
#:outputs %outputs
#:search-paths ',(map search-path-specification->sexp
diff --git a/guix/build/scons-build-system.scm b/guix/build/scons-build-system.scm
index eb013f03b6..17a0b7b877 100644
--- a/guix/build/scons-build-system.scm
+++ b/guix/build/scons-build-system.scm
@@ -29,7 +29,7 @@
;;
;; Code:
-(define* (build #:key outputs (scons-flags '()) (parallel-build? #t) #:allow-other-keys)
+(define* (build #:key outputs (build-targets '()) (scons-flags '()) (parallel-build? #t) #:allow-other-keys)
(let ((out (assoc-ref outputs "out")))
(mkdir-p out)
(apply invoke "scons"
@@ -37,7 +37,8 @@
(list "-j" (number->string
(parallel-job-count)))
(list))
- scons-flags))))
+ scons-flags
+ build-targets))))
(define* (check #:key tests? test-target (scons-flags '()) #:allow-other-keys)
"Run the test suite of a given SCons application."
@@ -46,9 +47,9 @@
(format #t "test suite not run~%"))
#t)
-(define* (install #:key outputs (scons-flags '()) #:allow-other-keys)
+(define* (install #:key outputs (install-targets '("install")) (scons-flags '()) #:allow-other-keys)
"Install a given SCons application."
- (apply invoke "scons" "install" scons-flags))
+ (apply invoke "scons" (append scons-flags install-targets)))
(define %standard-phases
(modify-phases gnu:%standard-phases
diff --git a/guix/gexp.scm b/guix/gexp.scm
index 600750e846..7323277511 100644
--- a/guix/gexp.scm
+++ b/guix/gexp.scm
@@ -1508,7 +1508,7 @@ are searched for in PATH. Return #f when MODULES and EXTENSIONS are empty."
(gexp (eval-when (expand load eval)
;; Augment the load paths and delete duplicates. Do that
;; without loading (srfi srfi-1) or anything.
- (let ((extensions '((ungexp-native-splicing extensions)))
+ (let ((extensions '((ungexp-splicing extensions)))
(prepend (lambda (items lst)
;; This is O(N²) but N is typically small.
(let loop ((items items)