From 8c9653b3735749cc16e01c6d0a9de7a89e038a18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Thu, 12 Mar 2015 19:31:07 +0100 Subject: [PATCH] build-system/python: Delay evaluation of the 'python2' package. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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'. --- guix/build-system/python.scm | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/guix/build-system/python.scm b/guix/build-system/python.scm index e8af9f8146..37108650d0 100644 --- a/guix/build-system/python.scm +++ b/guix/build-system/python.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2013, 2014 Ludovic Courtès +;;; Copyright © 2013, 2014, 2015 Ludovic Courtès ;;; Copyright © 2013 Andreas Enge ;;; Copyright © 2013 Nikita Karetnikov ;;; @@ -76,7 +76,10 @@ prepended to the name." (substring name (string-length old-prefix)) name)))) (arguments - (let ((arguments (package-arguments p))) + (let ((arguments (package-arguments p)) + (python (if (promise? python) + (force python) + python))) (if (member #:python arguments) (substitute-keyword-arguments arguments ((#:python p) python)) (append arguments `(#:python ,python))))) @@ -86,7 +89,11 @@ prepended to the name." p))) (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 #:key source inputs native-inputs outputs system target