diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm index ce89281..aa2d15c 100644 --- a/gnu/packages/python.scm +++ b/gnu/packages/python.scm @@ -28,6 +28,7 @@ #:use-module (gnu packages patchelf) #:use-module (guix packages) #:use-module (guix download) + #:use-module (guix utils) #:use-module (guix build-system gnu) #:use-module (guix build-system python) #:use-module (guix build-system trivial)) @@ -215,9 +216,7 @@ using Python 2.4 or higher and provides access to the Olson timezone database.") (license x11))) (define-public python2-pytz - (package (inherit python-pytz) - (name "python2-pytz") - (arguments (append (package-arguments python-pytz) `(#:python ,python-2))))) + (package-with-python2 python-pytz)) (define-public python-babel (package @@ -233,7 +232,8 @@ using Python 2.4 or higher and provides access to the Olson timezone database.") "03vmr54jq5vf3qw6kpdv7cdk7x7i2jhzyf1mawv2gk8zrxg0hfja")))) (build-system python-build-system) (inputs - `(("python-pytz" ,python-pytz))) + `(("python-pytz" ,python-pytz) + ("openssl" ,openssl))) (arguments `(#:tests? #f)) ; no test target (home-page "http://babel.edgewall.org/") (synopsis @@ -246,9 +246,12 @@ access to various locale display names, localized number and date formatting, etc. ") (license bsd-3))) +;; (define-public python2-babel +;; (package (inherit python-babel) +;; (name "python2-babel") +;; (inputs +;; `(("python2-pytz" ,python2-pytz))) +;; (arguments (append (package-arguments python-babel) `(#:python ,python-2))))) + (define-public python2-babel - (package (inherit python-babel) - (name "python2-babel") - (inputs - `(("python2-pytz" ,python2-pytz))) - (arguments (append (package-arguments python-babel) `(#:python ,python-2))))) + (package-with-python2 python-babel)) diff --git a/guix/build-system/python.scm b/guix/build-system/python.scm index 7ac93b2..a704d35 100644 --- a/guix/build-system/python.scm +++ b/guix/build-system/python.scm @@ -41,6 +41,56 @@ (let ((python (resolve-interface '(gnu packages python)))) (module-ref python 'python-wrapper))) +(define (default-python2) + "Return the default Python 2 package." + (let ((python (resolve-interface '(gnu packages python)))) + (module-ref python 'python-2))) + +(define-public (package-with-python2 p) + "Create a package with the same fields as P, which is assumed to use +PYTHON-BUILD-SYSTEM and to be compiled with the default python, such that +it is compiled with python 2 instead. The name of P is prefixed with +\"python2-\"; a potential existing prefix \"python-\" is dropped." + (let ((rewrite (lambda (x) + ;; procedure taking a two-element list ("name" package) + ;; and returning a two element list + ;; ("name" (package-with-python2 package)) + (let ((name (car x)) + (content (car (cdr x)))) + (list name + (if (package? content) + (package-with-python2 content) + content))))) + (build-system (package-build-system p))) + (package (inherit p) + (name + (let ((name (package-name p))) + (if (eq? build-system python-build-system) + (string-append "python2-" + (if (string-prefix? "python-" name) + (substring name 7) + name)) + name))) + (arguments + (let ((arguments (package-arguments p)) + (python2 (default-python2))) + (if (eq? build-system python-build-system) + (if (member #:python arguments) + (substitute-keyword-arguments arguments ((#:python p) python2)) + (append arguments `(#:python ,python2))) + arguments))) + (inputs + (let ((inputs (package-inputs p))) + (if (null? inputs) + '() + (map rewrite inputs)))) + (native-inputs + (let ((native-inputs (package-native-inputs p))) + (if (null? native-inputs) + '() + (map rewrite native-inputs))))))) + + (define* (python-build store name source inputs #:key (python (default-python))