~ruther/guix-exprs

1f6a5d0f2abb06e4ae57dbcd9fce0511b481518d — Rutherther 6 months ago fd6ca65
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.
1 files changed, 82 insertions(+), 5 deletions(-)

M ruther/packages/python-next.scm
M ruther/packages/python-next.scm => ruther/packages/python-next.scm +82 -5
@@ 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

Do not follow this link