Subject: [PATCH ocaml-team v4 8/9] gnu: Add opam-installer.

From: pukkamustard <[email-masked]>
Date: Fri, 28 Jul 2023 11:08:30 +0000

* gnu/packages/ocaml.scm (opam-installer): New variable.
  (ocaml-down, ocaml-topkg, ocaml-rresult, ocaml-mtime, ocaml-fmt,
  ocaml-astring, ocaml-react, ocaml-hmap, ocaml-logs, ocaml-fpath, ocaml-bos,
  ocaml-xmlm, ocaml-uchar, ocaml-uutf, ocaml-uunf, ocaml-jsonm, ocaml-ptime,
  ocaml-uuidm, ocaml-tsdl, ocaml-uucp, ocaml-uucd, ocaml-uuseg,
  ocaml-afl-persistent) [native-inputs]: Replace opam with opam-installer.
---
 gnu/packages/ocaml.scm | 90 ++++++++++++++++++++++++++----------------
 1 file changed, 55 insertions(+), 35 deletions(-)

diff --git a/gnu/packages/ocaml.scm b/gnu/packages/ocaml.scm
index 0d78f4d864..90fedc2e88 100644
--- a/gnu/packages/ocaml.scm
+++ b/gnu/packages/ocaml.scm
@@ -780,7 +780,7 @@ (define-public ocaml-down
        ,#~(list "build" "--lib-dir"
                 (string-append #$output "/lib/ocaml/site-lib"))))
     (native-inputs
-     (list ocaml-findlib ocamlbuild ocaml-topkg opam))
+     (list ocaml-findlib ocamlbuild ocaml-topkg opam-installer))
     (home-page "https://erratique.ch/software/down")
     (synopsis "OCaml toplevel (REPL) upgrade")
     (description "Down is an unintrusive user experience upgrade for the
@@ -901,6 +901,27 @@ (define ocaml-opam-format
                  #:tests? #f
                  #:phases %standard-phases))))
 
+(define-public opam-installer
+  (package
+    (inherit ocaml-opam-core)
+    (name "opam-installer")
+    (native-inputs (list ocaml-opam-format
+                         ocaml-cmdliner))
+    (inputs '())
+    (propagated-inputs '())
+    (arguments `(#:package "opam-installer"
+                 ;; requires all of opam
+                 #:tests? #f))
+    (synopsis "Tool for installing OCaml packages")
+    (description "@var{opam-installer} is a tool for installing OCaml packages
+based on @code{.install} files defined by the OPAM package manager.  It is
+useful for installing OCaml packages without requiring the entirety of
+OPAM.")
+    (properties
+     ;; opam-installer is used as a tool and not as a library, we can use the
+     ;; OCaml 4.14 compiled opam until opam is compatible with OCaml 5.0.
+     `((ocaml5.0-variant . ,(delay opam-installer))))))
+
 (define ocaml-opam-repository
   (package
     (inherit ocaml-opam-core)
@@ -2325,7 +2346,7 @@ (define-public ocaml-topkg
                 "11ycfk0prqvifm9jca2308gw8a6cjb1hqlgfslbji2cqpan09kpq"))))
     (build-system ocaml-build-system)
     (native-inputs
-     (list opam ocamlbuild))
+     (list opam-installer ocamlbuild))
     (propagated-inputs
      `(("result" ,ocaml-result)))
     (arguments
@@ -2355,7 +2376,7 @@ (define-public ocaml-rresult
                 "0h2mjyzhay1p4k7n0mzaa7hlc7875kiy6m1i3r1n03j6hddpzahi"))))
     (build-system ocaml-build-system)
     (native-inputs
-     (list opam ocamlbuild))
+     (list opam-installer ocamlbuild))
     (propagated-inputs
      `(("topkg" ,ocaml-topkg)))
     (arguments
@@ -2470,7 +2491,7 @@ (define-public ocaml-mtime
                 "1ss4w3qxsfp51d88r0j7dzqs05dbb1xdx11hn1jl9cvd03ma0g9z"))))
     (build-system ocaml-build-system)
     (native-inputs
-     (list ocamlbuild opam))
+     (list ocamlbuild opam-installer))
     (propagated-inputs
      `(("topkg" ,ocaml-topkg)))
     (arguments
@@ -2600,13 +2621,13 @@ (define-public ocaml-fmt
                   "0q8j2in2473xh7k4hfgnppv9qy77f2ih89yp6yhpbp92ba021yzi"))))
     (build-system ocaml-build-system)
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)
-       ("opam" ,opam)
-       ("topkg" ,ocaml-topkg)))
+     (list ocamlbuild
+           opam-installer
+           ocaml-topkg))
     (propagated-inputs
-     `(("cmdliner" ,ocaml-cmdliner)
-       ("ocaml-stdlib-shims" ,ocaml-stdlib-shims)
-       ("ocaml-uchar" ,ocaml-uchar)))
+     (list ocaml-cmdliner
+           ocaml-stdlib-shims
+           ocaml-uchar))
     (arguments `(#:tests? #f
                  #:build-flags (list "build" "--with-base-unix" "true"
                                      "--with-cmdliner" "true")
@@ -2647,9 +2668,9 @@ (define-public ocaml-astring
                   "1ykhg9gd3iy7zsgyiy2p9b1wkpqg9irw5pvcqs3sphq71iir4ml6"))))
     (build-system ocaml-build-system)
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)
-       ("opam" ,opam)
-       ("topkg" ,ocaml-topkg)))
+     (list ocamlbuild
+           opam-installer
+           ocaml-topkg))
     (arguments
      `(#:tests? #f
        #:build-flags (list "build")
@@ -2869,7 +2890,7 @@ (define-public ocaml-react
                   "16cg4byj8lfbbw96dhh8sks5y9n1c3fshz7f2p8m7wgisqax7bf4"))))
     (build-system ocaml-build-system)
     (native-inputs
-     (list ocamlbuild opam ocaml-topkg))
+     (list ocamlbuild opam-installer ocaml-topkg))
     (arguments
      `(#:tests? #f
        #:build-flags (list "build")
@@ -2993,7 +3014,7 @@ (define-public ocaml-hmap
        #:phases
        (modify-phases %standard-phases
          (delete 'configure))))
-    (native-inputs (list ocaml-topkg ocamlbuild opam))
+    (native-inputs (list ocaml-topkg ocamlbuild opam-installer))
     (home-page "https://erratique.ch/software/hmap")
     (synopsis "Heterogeneous value maps for OCaml")
     (description
@@ -3455,7 +3476,7 @@ (define-public ocaml-logs
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     (list ocamlbuild opam))
+     (list ocamlbuild opam-installer))
     (propagated-inputs
      `(("fmt" ,ocaml-fmt)
        ("lwt" ,ocaml-lwt)
@@ -3489,7 +3510,7 @@ (define-public ocaml-fpath
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     (list ocamlbuild opam))
+     (list ocamlbuild opam-installer))
     (propagated-inputs
      `(("topkg" ,ocaml-topkg)
        ("astring" ,ocaml-astring)))
@@ -3519,7 +3540,7 @@ (define-public ocaml-bos
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     (list ocamlbuild opam))
+     (list ocamlbuild opam-installer))
     (propagated-inputs
      `(("topkg" ,ocaml-topkg)
        ("astring" ,ocaml-astring)
@@ -3593,7 +3614,7 @@ (define-public ocaml-xmlm
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     (list ocamlbuild ocaml-topkg opam))
+     (list ocamlbuild ocaml-topkg opam-installer))
     (home-page "https://erratique.ch/software/xmlm")
     (synopsis "Streaming XML codec for OCaml")
     (description "Xmlm is a streaming codec to decode and encode the XML data
@@ -3734,7 +3755,7 @@ (define-public ocaml-uchar
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     (list ocamlbuild opam))
+     (list ocamlbuild opam-installer))
     (home-page "https://github.com/ocaml/uchar")
     (synopsis "Compatibility library for OCaml's Uchar module")
     (description "The uchar package provides a compatibility library for the
@@ -3760,9 +3781,9 @@ (define-public ocaml-uutf
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)
-       ("opam" ,opam)
-       ("topkg" ,ocaml-topkg)))
+     (list ocamlbuild
+           opam-installer
+           ocaml-topkg))
     (propagated-inputs
      `(("uchar" ,ocaml-uchar)
        ("cmdliner" ,ocaml-cmdliner)))
@@ -3807,7 +3828,7 @@ (define-public ocaml-uunf
              #t)))))
     (native-inputs
      `(("ocamlbuild" ,ocamlbuild)
-       ("opam" ,opam)
+       ("opam-installer" ,opam-installer)
        ("topkg" ,ocaml-topkg)
        ;; Test data is otherwise downloaded with curl
        ("NormalizationTest.txt"
@@ -3848,9 +3869,9 @@ (define-public ocaml-jsonm
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     `(("ocamlbuild" ,ocamlbuild)
-       ("opam" ,opam)
-       ("topkg" ,ocaml-topkg)))
+     (list ocamlbuild
+           opam-installer
+           ocaml-topkg))
     (propagated-inputs
      `(("uutf" ,ocaml-uutf)
        ("cmdliner" ,ocaml-cmdliner)))
@@ -4268,7 +4289,7 @@ (define-public ocaml-ptime
        #:phases (modify-phases %standard-phases
                   (delete 'configure))))
     (propagated-inputs (list ocaml-result js-of-ocaml))
-    (native-inputs (list ocaml-findlib ocamlbuild ocaml-topkg opam))
+    (native-inputs (list ocaml-findlib ocamlbuild ocaml-topkg opam-installer))
     (home-page "https://erratique.ch/software/ptime")
     (synopsis "POSIX time for OCaml")
     (description
@@ -5275,7 +5296,7 @@ (define-public ocaml-uuidm
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     (list ocamlbuild opam))
+     (list ocamlbuild opam-installer))
     (propagated-inputs
      `(("cmdliner" ,ocaml-cmdliner)
        ("topkg" ,ocaml-topkg)))
@@ -5921,7 +5942,7 @@ (define-public ocaml-tsdl
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     (list ocamlbuild ocaml-astring opam pkg-config))
+     (list ocamlbuild ocaml-astring opam-installer pkg-config))
     (inputs
      `(("topkg" ,ocaml-topkg)
        ("sdl2" ,sdl2)
@@ -9641,7 +9662,7 @@ (define-public ocaml-uucd
     (propagated-inputs
      (list ocaml-xmlm))
     (native-inputs
-     (list opam ocaml-findlib ocamlbuild ocaml-topkg))
+     (list opam-installer ocaml-findlib ocamlbuild ocaml-topkg))
     (home-page "https://erratique.ch/software/uucd")
     (synopsis "Unicode character database decoder for OCaml")
     (description "Uucd is an OCaml module to decode the data of the Unicode
@@ -9669,7 +9690,7 @@ (define-public ocaml-uucp
        (modify-phases %standard-phases
          (delete 'configure))))
     (native-inputs
-     (list opam
+     (list opam-installer
            ocaml-findlib
            ocamlbuild
            ocaml-topkg
@@ -9703,7 +9724,7 @@ (define-public ocaml-uuseg
     (propagated-inputs
      (list ocaml-uucp ocaml-uutf ocaml-cmdliner))
     (native-inputs
-     (list opam ocaml-findlib ocamlbuild ocaml-topkg))
+     (list opam-installer ocaml-findlib ocamlbuild ocaml-topkg))
     (home-page "https://erratique.ch/software/uuseg")
     (synopsis "Unicode text segmentation for OCaml")
     (description "Uuseg is an OCaml library for segmenting Unicode text.  It
@@ -10164,8 +10185,7 @@ (define-public ocaml-afl-persistent
              (invoke "./build.sh")))
          ;; XXX: The tests are already run in the build.sh script.
          (delete 'check))))
-    (native-inputs
-     `(("opam" ,opam)))
+    (native-inputs (list opam-installer))
     (home-page "https://github.com/stedolan/ocaml-afl-persistent")
     (synopsis "Use afl-fuzz in persistent mode")
     (description
-- 
2.40.1