Package: guix-patches;
Reported by: "zero <at> fedora" <shinyzero0 <at> tilde.club>
Date: Wed, 10 Jan 2024 00:44:02 UTC
Severity: normal
Tags: patch
Done: Ludovic Courtès <ludo <at> gnu.org>
Bug is archived. No further changes may be made.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
From: "zero <at> fedora" <shinyzero0 <at> tilde.club> To: guix-patches <at> gnu.org Cc: "zero <at> fedora" <shinyzero0 <at> tilde.club> Subject: [PATCH] guix: import: cpan: add recursive Date: Wed, 10 Jan 2024 03:41:53 +0300
Change-Id: Id167c7ddd079f4e04650ce7cc1692a9de36cd8fe --- guix/import/cpan.scm | 63 ++++++++++++++++++++++-------------- guix/scripts/import/cpan.scm | 25 +++++++++++--- 2 files changed, 58 insertions(+), 30 deletions(-) diff --git a/guix/import/cpan.scm b/guix/import/cpan.scm index b87736eef6..2090da275d 100644 --- a/guix/import/cpan.scm +++ b/guix/import/cpan.scm @@ -37,12 +37,13 @@ (define-module (guix import cpan) #:use-module (guix utils) #:use-module (guix base32) #:use-module ((guix download) #:select (download-to-store url-fetch)) - #:use-module ((guix import utils) #:select (factorize-uri)) + #:use-module (guix import utils) #:use-module (guix import json) #:use-module (guix packages) #:use-module (guix upstream) #:use-module (guix derivations) #:export (cpan->guix-package + cpan-recursive-import metacpan-url->mirror-url %cpan-updater @@ -284,35 +285,42 @@ (define (cpan-module->sexp release) upstream-input-downstream-name) inputs))))))) - (let ((tarball (with-store store + (let* ((tarball (with-store store (download-to-store store source-url))) - (inputs (cpan-module-inputs release))) - `(package - (name ,(cpan-name->downstream-name name)) - (version ,version) - (source (origin - (method url-fetch) - (uri (string-append ,@(factorize-uri source-url version))) - (sha256 - (base32 - ,(bytevector->nix-base32-string (file-sha256 tarball)))))) - (build-system perl-build-system) - ,@(maybe-inputs 'native-inputs - (filter (upstream-input-type-predicate 'native) - inputs)) - ,@(maybe-inputs 'propagated-inputs - (filter (upstream-input-type-predicate 'propagated) - inputs)) - (home-page ,(cpan-home name)) - (synopsis ,(cpan-release-abstract release)) - (description fill-in-yourself!) - (license ,(string->license (cpan-release-license release)))))) + (inputs (cpan-module-inputs release)) + (sexp + `(package + (name ,(cpan-name->downstream-name name)) + (version ,version) + (source (origin + (method url-fetch) + (uri (string-append ,@(factorize-uri source-url version))) + (sha256 + (base32 + ,(bytevector->nix-base32-string (file-sha256 tarball)))))) + (build-system perl-build-system) + ,@(maybe-inputs 'native-inputs + (filter (upstream-input-type-predicate 'native) + inputs)) + ,@(maybe-inputs 'propagated-inputs + (filter (upstream-input-type-predicate 'propagated) + inputs)) + (home-page ,(cpan-home name)) + (synopsis ,(cpan-release-abstract release)) + (description fill-in-yourself!) + (license ,(string->license (cpan-release-license release)))))) + (values + sexp + (map upstream-input-name inputs)) + )) -(define (cpan->guix-package module-name) +(define* (cpan->guix-package module-name #:key version #:allow-other-keys) "Fetch the metadata for PACKAGE-NAME from metacpan.org, and return the `package' s-expression corresponding to that package, or #f on failure." (let ((release (cpan-fetch (module->name module-name)))) - (and=> release cpan-module->sexp))) + (if release + (cpan-module->sexp release) + (values #f '())))) (define cpan-package? (let ((cpan-rx (make-regexp (string-append "(" @@ -357,6 +365,11 @@ (define* (latest-release package #:key (version #f)) (urls (list url)) (inputs (cpan-module-inputs release))))))) +(define* (cpan-recursive-import package-name) + (recursive-import package-name + #:repo->guix-package cpan->guix-package + #:guix-name (compose cpan-name->downstream-name module->name))) + (define %cpan-updater (upstream-updater (name 'cpan) diff --git a/guix/scripts/import/cpan.scm b/guix/scripts/import/cpan.scm index bdf5a1e423..cab6424068 100644 --- a/guix/scripts/import/cpan.scm +++ b/guix/scripts/import/cpan.scm @@ -43,6 +43,9 @@ (define (show-help) Import and convert the CPAN package for PACKAGE-NAME.\n")) (display (G_ " -h, --help display this help and exit")) + (display (G_ " + -r, --recursive generate package expressions for all Gem packages\ + that are not yet in Guix")) (display (G_ " -V, --version display version information and exit")) (newline) @@ -54,6 +57,9 @@ (define %options (lambda args (show-help) (exit 0))) + (option '(#\r "recursive") #f #f + (lambda (opt name arg result) + (alist-cons 'recursive #t result))) (option '(#\V "version") #f #f (lambda args (show-version-and-exit "guix import cpan"))) @@ -78,11 +84,20 @@ (define (guix-import-cpan . args) (reverse opts)))) (match args ((package-name) - (let ((sexp (cpan->guix-package package-name))) - (unless sexp - (leave (G_ "failed to download meta-data for package '~a'~%") - package-name)) - sexp)) + (let ((sexp + (if (assoc-ref opts 'recursive) + (map (match-lambda + ((and ('package ('name name) . rest) pkg) + `(define-public ,(string->symbol name) + ,pkg)) + (_ #f)) + (cpan-recursive-import package-name)) + (let ((sexp (cpan->guix-package package-name))) + sexp)))) + (unless sexp + (leave (G_ "failed to download meta-data for package '~a'~%") + package-name)) + sexp)) (() (leave (G_ "too few arguments~%"))) ((many ...) base-commit: 931d893c550128591018587c90d2491fd66a11a4 -- 2.43.0
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.