From 5f51601bd90ae05547313a36cce590c26bd6a6b2 Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou Date: Tue, 6 Jun 2023 13:49:00 +0200 Subject: guix: texlive importer ignores dependencies unnecessary in Guix. * guix/import/texlive.scm (translate-depends): New function. (tlpdb->package): Use new function. * tests/texlive.scm (%fake-tlpdb): Add test data. ("texlive->guix-package, translate dependencies"): ("texlive->guix-package, lonely `hyphen-base' dependency and ARCH"): New tests. --- guix/import/texlive.scm | 45 ++++++++++++++++++++++++++++++++------------- 1 file changed, 32 insertions(+), 13 deletions(-) (limited to 'guix/import') diff --git a/guix/import/texlive.scm b/guix/import/texlive.scm index 36c6f3efb1..3b0f5cf5c1 100644 --- a/guix/import/texlive.scm +++ b/guix/import/texlive.scm @@ -125,6 +125,33 @@ (chr (char-downcase chr))) name))) +(define* (translate-depends depends #:optional texlive-only) + "Translate TeX Live packages DEPENDS into their equivalent Guix names +in `(gnu packages tex)' module, without \"texlive-\" prefix. The function +also removes packages not necessary in Guix. + +When TEXLIVE-ONLY is true, only TeX Live packages are returned." + (delete-duplicates + (filter-map (match-lambda + ;; Hyphenation. Every TeX Live package is replaced with + ;; "hyphen-complete", unless "hyphen-base" is the sole + ;; dependency. + ("hyphen-base" + (and (not (member "hyph-utf8" depends)) + "hyphen-base")) + ((or (? (cut string-prefix? "hyphen-" <>)) + "hyph-utf8" "dehyph" "dehyph-exptl" "ruhyphen" "ukrhyph") + (and (not texlive-only) "hyphen-complete")) + ;; Binaries placeholders are ignored. + ((? (cut string-suffix? ".ARCH" <>)) #f) + ;; So are TeX Live specific packages. + ((or (? (cut string-prefix? "texlive-" <>)) + "tlshell" "texlive.infra") + #f) + ;; Others. + (name name)) + depends))) + (define (tlpdb-file) (define texlive-bin ;; Resolve this variable lazily so that (gnu packages ...) does not end up @@ -293,11 +320,7 @@ of those files are returned that are unexpectedly installed." (locations locs) (revision %texlive-revision))) ;; Ignore arch-dependent packages. - (filtered-depends - (or (and=> (assoc-ref data 'depend) - (lambda (inputs) - (remove (cut string-suffix? ".ARCH" <>) inputs))) - '())) + (depends (or (assoc-ref data 'depend) '())) (source (with-store store (download-multi-svn-to-store store ref (string-append name "-svn-multi-checkout"))))) @@ -352,16 +375,12 @@ of those files are returned that are unexpectedly installed." runfiles))) '((native-inputs (list texlive-metafont)))) '()) - ,@(match filtered-depends + ,@(match (translate-depends depends) (() '()) (inputs `((propagated-inputs - (list ,@(filter-map - (lambda (tex-name) - (let ((name (guix-name tex-name))) - (string->symbol name))) - ;; Sort inputs alphabetically. - (reverse inputs))))))) + (list ,@(map (compose string->symbol guix-name) + (sort inputs string string->license) (else #f)))) - filtered-depends)))) + (translate-depends depends #t))))) (define texlive->guix-package (memoize -- cgit v1.2.3