From 1f6a5d0f2abb06e4ae57dbcd9fce0511b481518d Mon Sep 17 00:00:00 2001 From: Rutherther Date: Fri, 13 Sep 2024 22:54:32 +0200 Subject: [PATCH] python-next: fix circular dependency and add function to replace python dependencies only Cuts after going out of python dependencies, so stuff higher in the tree won't get replaced as well. --- ruther/packages/python-next.scm | 87 +++++++++++++++++++++++++++++++-- 1 file changed, 82 insertions(+), 5 deletions(-) diff --git a/ruther/packages/python-next.scm b/ruther/packages/python-next.scm index 9627098e33061774049077b0fa29a3bc974da040..844711fc9ab49930ba4a340bb95a286ee8c9f719 100644 --- a/ruther/packages/python-next.scm +++ b/ruther/packages/python-next.scm @@ -3,6 +3,17 @@ #:use-module (guix packages) #:use-module ((guix licenses) #:prefix license:) + #:use-module (ice-9 match) + #:use-module (ice-9 vlist) + #:use-module (ice-9 regex) + + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-9 gnu) + #:use-module (srfi srfi-26) + #:use-module (srfi srfi-34) + #:use-module (srfi srfi-35) + #:use-module (srfi srfi-71) + #:use-module (guix gexp) #:use-module (guix build-system) #:use-module (guix download) @@ -15,7 +26,9 @@ #:use-module (gnu packages check) #:use-module (gnu packages python-check) #:use-module (gnu packages python-build) - #:use-module (gnu packages python-xyz)) + #:use-module (gnu packages python-xyz) + + #:export (replace-python-deps)) (define with-python-3.12-raw (package-input-rewriting `((,python . ,python-3.12)))) @@ -30,6 +43,8 @@ (propagated-inputs (modify-inputs (package-propagated-inputs python-3.12) (append (with-python-3.12-raw python-setuptools)))) + (properties `(('python-3.12- . #t) + ,@(package-properties python-3.12))) (arguments (substitute-keyword-arguments (package-arguments python-3.12) ((#:tests? _ #f) #f)))))) ;; Disabled tests, because this was running forever... @@ -38,7 +53,7 @@ (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 +(define-public python-3.12-cython-0.29.37 (with-python-3.12-no-cython (package/inherit python-cython (name "python-3.12-cython") @@ -49,6 +64,8 @@ (uri (python:pypi-uri "Cython" version)) (sha256 (base32 "1ysca2r23h12ai9wrym4ci0nvgwm3lfijrpj9xfyxbclvnkd84zq")))) + (properties `(('python-3.12- . #t) + ,@(package-properties python-cython))) (arguments (substitute-keyword-arguments (package-arguments python-cython) ((#:tests? _ #f) #f)))))) ;; Failing... I don't know why... @@ -75,15 +92,21 @@ pre-defined variants." variant-property)) (const #f))) + (define replacement-property (string->symbol new-prefix)) + (define (transform p) (cond ;; If VARIANT-PROPERTY is present, use that. ((package-variant p) => force) + ((assq-ref (package-properties p) replacement-property) + p) + ;; Otherwise build the new package object graph. - ((or (eq? (build-system-name (package-build-system p)) (build-system-name python:python-build-system)) - (eq? (build-system-name (package-build-system p)) (build-system-name pyproject:pyproject-build-system))) + ((and + (or (eq? (build-system-name (package-build-system p)) (build-system-name python:python-build-system)) + (eq? (build-system-name (package-build-system p)) (build-system-name pyproject:pyproject-build-system)))) (package/inherit p (location (package-location p)) (name (let ((name (package-name p))) @@ -92,6 +115,8 @@ pre-defined variants." (substring name (string-length old-prefix)) name)))) + (properties `((,replacement-property . #t) + ,@(package-properties p))) (arguments (let ((python (if (promise? python) (force python) @@ -103,10 +128,62 @@ pre-defined variants." (define (cut? p) (or (not (or (eq? (build-system-name (package-build-system p)) (build-system-name python:python-build-system)) (eq? (build-system-name (package-build-system p)) (build-system-name pyproject:pyproject-build-system)))) + (assq-ref (package-properties p) replacement-property) (package-variant p))) (package-mapping transform cut?)) +(define* (replace-python-deps replacements #:key (deep? #t)) + (define table + (fold (lambda (replacement table) + (match replacement + ((spec . proc) + (let ((name version (package-name->name+version spec))) + (vhash-cons name (list version proc) table))))) + vlist-null + replacements)) + + (define (find-replacement package) + (vhash-fold* (lambda (item proc) + (or proc + (match item + ((#f proc) + proc) + ((version proc) + (and (version-prefix? version + (package-version package)) + proc))))) + #f + (package-name package) + table)) + + (define replacement-property + (gensym " package-replacement")) + + (define (rewrite p) + (if (or (assq-ref (package-properties p) replacement-property) + (hidden-package? p)) + p + (match (find-replacement p) + (#f p) + (proc + (let ((new (proc p))) + ;; Mark NEW as already processed. + (package/inherit new + (properties `((,replacement-property . #t) + ,@(package-properties new))))))))) + + (define (cut? p) + (or + (not (or (eq? (build-system-name (package-build-system p)) (build-system-name python:python-build-system)) + (eq? (build-system-name (package-build-system p)) (build-system-name pyproject:pyproject-build-system)))) + ;; (assq-ref (package-properties p) replacement-property) + ;; (find-replacement p) + )) + + (package-mapping rewrite cut? + #:deep? deep?)) + (define with-explicit-python-3.12-single (package-with-explicit-python python-3.12-toolchain "python-" "python-3.12-")) @@ -116,7 +193,7 @@ pre-defined variants." (define with-python-3.12-single (lambda (pkg) (let ((rewritten (with-explicit-python-3.12-single pkg))) - ((package-input-rewriting `((,python-3.12-cython-inner . ,python-3.12-cython))) + ((package-input-rewriting `((,python-3.12-cython-inner . ,python-3.12-cython-0.29.37))) rewritten)))) ;; (define with-python-3.12-single