Subject: [PATCH v3 1/8] packages: Use origin file names as their input labels.

From: Ludovic Courtès <[email-masked]>
Date: Wed, 4 Dec 2024 18:54:22 +0100

* guix/packages.scm (add-input-label): Rely on 'origin-actual-file-name' for
internal inputs labels.
* tests/packages.scm ("this-package-input, origin"): New test.
* gnu/packages/base.scm (tzdata)[inputs]: Reintroduce label.
* gnu/packages/tex.scm (texlive-hyphen-complete)[inputs]: Likewise.
(texlive-newverbs)[native-inputs]: Likewise.

Change-Id: I6ba5352b1b1b8ab810da3730b09cb9db61d6429c
Co-authored-by: Simon Tournier <[email-masked]>
---
 gnu/packages/base.scm | 19 +++++++++++--------
 gnu/packages/tex.scm  | 21 ++++++++++++---------
 guix/packages.scm     |  3 +++
 tests/packages.scm    | 10 +++++++++-
 4 files changed, 35 insertions(+), 18 deletions(-)

diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index b3f54798c4..a5a05e32f0 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -1778,14 +1778,17 @@ (define-public tzdata
                      (delete-file-recursively
                       (string-append out "/share/zoneinfo-leaps")))))
                (delete 'configure))))
-    (inputs (list (origin
-                    (method url-fetch)
-                    (uri (string-append
-                          "https://data.iana.org/time-zones/releases/tzcode"
-                          version ".tar.gz"))
-                    (sha256
-                     (base32
-                      "07hn7hn2klw4dfyr673ril2nrk18198hbfv25gljsvc833hzk9g9")))))
+    (inputs `(("_"
+               ;; Note: The "_" label above is here to avoid a full rebuild.
+               ;; TODO: Remove it on next rebuild cycle.
+               ,(origin
+                  (method url-fetch)
+                  (uri (string-append
+                        "https://data.iana.org/time-zones/releases/tzcode"
+                        version ".tar.gz"))
+                  (sha256
+                   (base32
+                    "07hn7hn2klw4dfyr673ril2nrk18198hbfv25gljsvc833hzk9g9"))))))
     (home-page "https://www.iana.org/time-zones")
     (synopsis "Database of current and historical time zones")
     (description "The Time Zone Database (often called tz or zoneinfo)
diff --git a/gnu/packages/tex.scm b/gnu/packages/tex.scm
index 0444b9270d..9104b079a2 100644
--- a/gnu/packages/tex.scm
+++ b/gnu/packages/tex.scm
@@ -706,14 +706,15 @@ (define-public texlive-hyphen-complete
                      (string-append "File.join(\"" ptex "\"")))
                   (invoke "ruby" "generate-ptex-patterns.rb"))))))))
     (native-inputs
-     (list ruby-2.7
-           ruby-hydra-minimal/pinned
-           ;; Build phase requires "docstrip.tex" from TEXLIVE-LATEX.
-           ;; However, adding this package to native inputs would initiate
-           ;; a circular dependency.  To work around this, use TEXLIVE-LATEX
-           ;; source, then add "docstrip.tex" to TEXINPUTS before build.
-           (package-source texlive-latex)
-           texlive-tex))
+     ;; TODO: Remove input labels on next rebuild cycle.
+     `(("ruby" ,ruby-2.7)
+       ("ruby-hydra-minimal" ,ruby-hydra-minimal/pinned)
+       ;; Build phase requires "docstrip.tex" from TEXLIVE-LATEX.
+       ;; However, adding this package to native inputs would initiate
+       ;; a circular dependency.  To work around this, use TEXLIVE-LATEX
+       ;; source, then add "docstrip.tex" to TEXINPUTS before build.
+       ("_" ,(package-source texlive-latex))
+       ("texlive-tex" ,texlive-tex)))
     (home-page "https://ctan.org/pkg/hyph-utf8")
     (synopsis "Hyphenation patterns expressed in UTF-8")
     (description
@@ -65048,7 +65049,9 @@ (define-public texlive-newverbs
                                                "tex/generic/ydoc/ydocstrip.tex")
                             "build/")
               (setenv "TEXINPUTS" (string-append (getcwd) "/build:")))))))
-    (native-inputs (list (package-source texlive-ydoc)))
+    (native-inputs
+     ;; TODO: Remove input label on next rebuild cycle.
+     `(("_" ,(package-source texlive-ydoc))))
     (home-page "https://ctan.org/pkg/newverbs")
     (synopsis "Define new versions of @code{\\verb}")
     (description
diff --git a/guix/packages.scm b/guix/packages.scm
index 0ce3276051..84f2c6f838 100644
--- a/guix/packages.scm
+++ b/guix/packages.scm
@@ -678,6 +678,9 @@ (define (add-input-label input)
               "_")
          ,obj
          ,@(if (string=? output "out") '() (list output)))))
+    ((? origin? origin)
+     ;; Allow references to origins by their file name.
+     (list (or (origin-actual-file-name origin) "_") origin))
     (x
      `("_" ,x))))
 
diff --git a/tests/packages.scm b/tests/packages.scm
index 7c28e75c45..1d901505aa 100644
--- a/tests/packages.scm
+++ b/tests/packages.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012-2023 Ludovic Courtès <[email-masked]>
+;;; Copyright © 2012-2024 Ludovic Courtès <[email-masked]>
 ;;; Copyright © 2018 Jan (janneke) Nieuwenhuizen <[email-masked]>
 ;;; Copyright © 2021 Maxim Cournoyer <[email-masked]>
 ;;; Copyright © 2021 Maxime Devos <[email-masked]>
@@ -2051,6 +2051,14 @@ (define compressors '(("gzip"  . "gz")
    (dummy-package "a"
      (arguments (this-package-native-input "hello")))))
 
+(test-equal "this-package-input, origin"
+  "http://example.org/foo.tar.gz"
+  (origin-uri
+   (package-arguments
+    (dummy-package "a"
+      (inputs (list (dummy-origin (uri "http://example.org/foo.tar.gz"))))
+      (arguments (this-package-input "foo.tar.gz"))))))
+
 (test-eq "modify-inputs, replace"
   coreutils
   ;; Replace an input; notice that the label in unchanged.
-- 
2.46.0