From 30bea7286cf3c493083072791358befc2cbe9313 Mon Sep 17 00:00:00 2001 From: Rutherther Date: Sat, 10 Aug 2024 18:25:31 +0200 Subject: [PATCH] feat: add python-3.12 support for overriding packages --- ruther/packages/python-3.12.scm | 121 ++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 ruther/packages/python-3.12.scm diff --git a/ruther/packages/python-3.12.scm b/ruther/packages/python-3.12.scm new file mode 100644 index 0000000..1d8d0c7 --- /dev/null +++ b/ruther/packages/python-3.12.scm @@ -0,0 +1,121 @@ +(define-module (ruther packages python-3.12) + #:use-module (gnu) + #:use-module (guix packages) + #:use-module ((guix licenses) #:prefix license:) + + #:use-module (guix gexp) + #:use-module (guix download) + #:use-module (guix utils) + #:use-module ((guix build-system copy) #:prefix copy:) + #:use-module ((guix build-system python) #:prefix python:) + #:use-module ((guix build-system pyproject) #:prefix pyproject:) + #:use-module (gnu packages sphinx) + #:use-module (gnu packages python) + #:use-module (gnu packages check) + #:use-module (gnu packages python-check) + #:use-module (gnu packages python-build) + #:use-module (gnu packages python-xyz)) + +(define with-python-3.12-raw + (package-input-rewriting `((,python . ,python-3.12)))) + +(define-public python-3.12-wrapped + ((@@ (gnu packages python) wrap-python3) python-3.12)) + +(define-public python-3.12-toolchain + ((@@ (gnu packages python) wrap-python3) + (package/inherit python-3.12 + (name "python-next-toolchain") + (propagated-inputs + (modify-inputs (package-propagated-inputs python-3.12) + (append (with-python-3.12-raw python-setuptools)))) + (arguments + (substitute-keyword-arguments (package-arguments python-3.12) + ((#:tests? _ #f) #f)))))) ;; Disabled tests, because this was running forever... + +(define with-python-3.12-no-cython + (package-input-rewriting `((,python . ,python-3.12-toolchain)))) + +;; Cython is dependency of a lot of packages, let's update it here +(define-public python-3.12-cython + (with-python-3.12-no-cython + (package/inherit python-cython + (version "0.29.37") + (source + (origin + (method url-fetch) + (uri (python:pypi-uri "Cython" version)) + (sha256 + (base32 "1ysca2r23h12ai9wrym4ci0nvgwm3lfijrpj9xfyxbclvnkd84zq")))) + (arguments + (substitute-keyword-arguments (package-arguments python-cython) + ((#:tests? _ #f) #f)))))) ;; Failing... I don't know why... + +;; This is changed a bit compared to the original function from Guix. +;; This one also works for pyproject +(define* (package-with-explicit-python python old-prefix new-prefix + #:key variant-property) + "Return a procedure of one argument, P. The procedure creates a package with +the same fields as P, which is assumed to use PYTHON-BUILD-SYSTEM, such that +it is compiled with PYTHON instead. The inputs are changed recursively +accordingly. If the name of P starts with OLD-PREFIX, this is replaced by +NEW-PREFIX; otherwise, NEW-PREFIX is prepended to the name. + +When VARIANT-PROPERTY is present, it is used as a key to search for +pre-defined variants of this transformation recorded in the 'properties' field +of packages. The property value must be the promise of a package. This is a +convenient way for package writers to force the transformation to use +pre-defined variants." + (define package-variant + (if variant-property + (lambda (package) + (assq-ref (package-properties package) + variant-property)) + (const #f))) + + (define (transform p) + (cond + ;; If VARIANT-PROPERTY is present, use that. + ((package-variant p) + => force) + + ;; Otherwise build the new package object graph. + ((or (eq? (package-build-system p) python:python-build-system) + (eq? (package-build-system p) pyproject:pyproject-build-system)) + (package/inherit p + (location (package-location p)) + (name (let ((name (package-name p))) + (string-append new-prefix + (if (string-prefix? old-prefix name) + (substring name + (string-length old-prefix)) + name)))) + (arguments + (let ((python (if (promise? python) + (force python) + python))) + (ensure-keyword-arguments (package-arguments p) + `(#:python ,python)))))) + (else p))) + + (define (cut? p) + (or (not (and (eq? (package-build-system p) python:python-build-system) + (eq? (package-build-system p) pyproject:pyproject-build-system))) + (package-variant p))) + + (package-mapping transform cut?)) + +(define with-python-3.12-single + (lambda (x) + ((package-input-rewriting `((,python-cython . ,python-3.12-cython) + ;; TODO: put more stuff here, if there is something + ;; that's a common dependenc that will get broken on + ;; Python 3.12 + )) + ((package-with-explicit-python python-3.12-toolchain "python-" "python-3.12-") x)))) + +(define-public (with-python-3.12 el) + (if + (list? el) + (map with-python-3.12 el) + (with-python-3.12-single el))) -- 2.48.1