build-system/python: Delay evaluation of the 'python2' package.
This fixes a bug whereby uses of 'package-with-python2' at the top-level in modules other than (gnu packages python) could lead to an "Unbound variable: python2" error due to the circular references. Reported by Tomáš Čech. * guix/build-system/python.scm (package-with-explicit-python)[arguments]: Check whether PYTHON is a promise, and force it if it is. (package-with-python2): Wrap 'default-python2' call in 'delay'.
This commit is contained in:
parent
9751c39a6d
commit
8c9653b373
|
@ -1,5 +1,5 @@
|
||||||
;;; GNU Guix --- Functional package management for GNU
|
;;; GNU Guix --- Functional package management for GNU
|
||||||
;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org>
|
;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
|
||||||
;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
|
;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
|
||||||
;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
|
;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
|
||||||
;;;
|
;;;
|
||||||
|
@ -76,7 +76,10 @@ prepended to the name."
|
||||||
(substring name (string-length old-prefix))
|
(substring name (string-length old-prefix))
|
||||||
name))))
|
name))))
|
||||||
(arguments
|
(arguments
|
||||||
(let ((arguments (package-arguments p)))
|
(let ((arguments (package-arguments p))
|
||||||
|
(python (if (promise? python)
|
||||||
|
(force python)
|
||||||
|
python)))
|
||||||
(if (member #:python arguments)
|
(if (member #:python arguments)
|
||||||
(substitute-keyword-arguments arguments ((#:python p) python))
|
(substitute-keyword-arguments arguments ((#:python p) python))
|
||||||
(append arguments `(#:python ,python)))))
|
(append arguments `(#:python ,python)))))
|
||||||
|
@ -86,7 +89,11 @@ prepended to the name."
|
||||||
p)))
|
p)))
|
||||||
|
|
||||||
(define package-with-python2
|
(define package-with-python2
|
||||||
(cut package-with-explicit-python <> (default-python2) "python-" "python2-"))
|
;; Note: delay call to 'default-python2' until after the 'arguments' field
|
||||||
|
;; of packages is accessed to avoid a circular dependency when evaluating
|
||||||
|
;; the top-level of (gnu packages python).
|
||||||
|
(cut package-with-explicit-python <> (delay (default-python2))
|
||||||
|
"python-" "python2-"))
|
||||||
|
|
||||||
(define* (lower name
|
(define* (lower name
|
||||||
#:key source inputs native-inputs outputs system target
|
#:key source inputs native-inputs outputs system target
|
||||||
|
|
Loading…
Reference in New Issue