diff --git a/pkgs/development/ocaml-modules/0install-solver/default.nix b/pkgs/development/ocaml-modules/0install-solver/default.nix new file mode 100644 index 000000000000..2801fbf47b89 --- /dev/null +++ b/pkgs/development/ocaml-modules/0install-solver/default.nix @@ -0,0 +1,30 @@ +{ + lib, + buildDunePackage, + fetchFromGitHub, + ounit2, +}: + +buildDunePackage (finalAttrs: { + pname = "0install-solver"; + version = "2.18"; + + src = fetchFromGitHub { + owner = "0install"; + repo = "0install"; + tag = "v${finalAttrs.version}"; + hash = "sha256-CxADWMYZBPobs65jeyMQjqu3zmm2PgtNgI/jUsYUp8I="; + }; + + doCheck = true; + checkInputs = [ + ounit2 + ]; + + meta = { + description = "Package dependency solver"; + license = lib.licenses.lgpl21; + maintainers = [ lib.maintainers.stepbrobd ]; + homepage = "https://0install.net"; + }; +}) diff --git a/pkgs/development/ocaml-modules/opam-0install-cudf/default.nix b/pkgs/development/ocaml-modules/opam-0install-cudf/default.nix new file mode 100644 index 000000000000..3fc260f43ead --- /dev/null +++ b/pkgs/development/ocaml-modules/opam-0install-cudf/default.nix @@ -0,0 +1,50 @@ +{ + lib, + buildDunePackage, + fetchFromGitHub, + _0install-solver, + alcotest, + cudf, +}: + +buildDunePackage (finalAttrs: { + pname = "opam-0install-cudf"; + version = "0.5.0"; + + src = fetchFromGitHub { + owner = "ocaml-opam"; + repo = "opam-0install-cudf"; + rev = "v${finalAttrs.version}"; + hash = "sha256-TETfvR1Di4c8CylsKnMal/GfQcqMSr36o7511u1bYYs="; + }; + + propagatedBuildInputs = [ + cudf + _0install-solver + ]; + + doCheck = true; + checkInputs = [ + alcotest + ]; + + meta = { + homepage = "https://github.com/ocaml-opam/opam-0install-cudf"; + description = "Opam solver using 0install backend using the CUDF interface"; + longDescription = '' + Opam's default solver is designed to maintain a set of packages + over time, minimising disruption when installing new programs and + finding a compromise solution across all packages. + + In many situations (e.g. CI, local roots or duniverse builds) this + is not necessary, and we can get a solution much faster by using + a different algorithm. + + This package provides a generic solver library which uses 0install's + solver library. The library uses the CUDF library in order to interface + with opam as it is the format common used to talk to all the supported solvers. + ''; + license = lib.licenses.isc; + maintainers = [ lib.maintainers.stepbrobd ]; + }; +}) diff --git a/pkgs/development/ocaml-modules/opam-client/default.nix b/pkgs/development/ocaml-modules/opam-client/default.nix new file mode 100644 index 000000000000..9840c87c2894 --- /dev/null +++ b/pkgs/development/ocaml-modules/opam-client/default.nix @@ -0,0 +1,33 @@ +{ + lib, + buildDunePackage, + base64, + cmdliner, + opam, + opam-repository, + opam-solver, + opam-state, + re, +}: + +buildDunePackage { + pname = "opam-client"; + + inherit (opam) src version; + + configureFlags = [ "--disable-checks" ]; + + propagatedBuildInputs = [ + base64 + cmdliner + opam-repository + opam-solver + opam-state + re + ]; + + meta = opam.meta // { + description = "Actions on the opam root, switches, installations, and front-end"; + maintainers = with lib.maintainers; [ stepbrobd ]; + }; +} diff --git a/pkgs/development/ocaml-modules/opam-solver/default.nix b/pkgs/development/ocaml-modules/opam-solver/default.nix new file mode 100644 index 000000000000..8dd328cda640 --- /dev/null +++ b/pkgs/development/ocaml-modules/opam-solver/default.nix @@ -0,0 +1,35 @@ +{ + lib, + buildDunePackage, + cudf, + dose3, + mccs, + opam, + opam-0install-cudf, + opam-format, + re, + z3, +}: + +buildDunePackage { + pname = "opam-solver"; + + inherit (opam) src version; + + configureFlags = [ "--disable-checks" ]; + + propagatedBuildInputs = [ + cudf + dose3 + mccs + opam-0install-cudf + opam-format + re + z3 + ]; + + meta = opam.meta // { + description = "This library is based on the Cudf and Dose libraries, and handles calls to the external solver from opam"; + maintainers = with lib.maintainers; [ stepbrobd ]; + }; +} diff --git a/pkgs/development/ocaml-modules/oui/default.nix b/pkgs/development/ocaml-modules/oui/default.nix new file mode 100644 index 000000000000..98c9d2e12c73 --- /dev/null +++ b/pkgs/development/ocaml-modules/oui/default.nix @@ -0,0 +1,60 @@ +{ + lib, + buildDunePackage, + fetchFromGitHub, + cmdliner, + fmt, + markup, + ocaml-crunch, + opam-client, + opam-format, + ppx_deriving_yojson, + ppx_expect, + yojson, +}: + +buildDunePackage (finalAttrs: { + pname = "oui"; + version = "0-unstable-2025-10-08"; + + minimalOCamlVersion = "4.10"; + + src = fetchFromGitHub { + owner = "OCamlPro"; + repo = "ocaml-universal-installer"; + rev = "2fe2e33c3f8e1744fdd4dab04458043451bf9f62"; + hash = "sha256-ALQIQ3Ab1Gs2xST9OwsO5IxixzgKlUg7uHZvfHMbv7Q="; + }; + + nativeBuildInputs = [ + ocaml-crunch + ]; + + propagatedBuildInputs = [ + cmdliner + fmt + markup + opam-client + opam-format + ppx_deriving_yojson + yojson + ]; + + # upstream tests are matching full library paths + doCheck = false; + checkInputs = [ + ppx_expect + ]; + + meta = { + homepage = "https://github.com/OCamlPro/ocaml-universal-installer"; + description = "A tool that builds standalone installers for your OCaml applications"; + longDescription = '' + oui is a command-line tool that generates standalone installers for + Linux, Windows and macOS from your OCaml and non OCaml binaries. + ''; + license = lib.licenses.lgpl21; + maintainers = [ lib.maintainers.stepbrobd ]; + mainProgram = "opam-oui"; + }; +}) diff --git a/pkgs/top-level/ocaml-packages.nix b/pkgs/top-level/ocaml-packages.nix index ccbe15b7ee9b..6463b9a32430 100644 --- a/pkgs/top-level/ocaml-packages.nix +++ b/pkgs/top-level/ocaml-packages.nix @@ -1580,16 +1580,22 @@ let omd = callPackage ../development/ocaml-modules/omd { }; + opam-0install-cudf = callPackage ../development/ocaml-modules/opam-0install-cudf { }; + opam-core = callPackage ../development/ocaml-modules/opam-core { inherit (pkgs) opam; }; + opam-client = callPackage ../development/ocaml-modules/opam-client { }; + opam-file-format = callPackage ../development/ocaml-modules/opam-file-format { }; opam-format = callPackage ../development/ocaml-modules/opam-format { }; opam-repository = callPackage ../development/ocaml-modules/opam-repository { }; + opam-solver = callPackage ../development/ocaml-modules/opam-solver { }; + opam-state = callPackage ../development/ocaml-modules/opam-state { }; opium = callPackage ../development/ocaml-modules/opium { }; @@ -1614,6 +1620,8 @@ let otr = callPackage ../development/ocaml-modules/otr { }; + oui = callPackage ../development/ocaml-modules/oui { }; + ounit = callPackage ../development/ocaml-modules/ounit { }; ounit2 = callPackage ../development/ocaml-modules/ounit2 { }; @@ -2219,6 +2227,10 @@ let zmq-lwt = callPackage ../development/ocaml-modules/zmq/lwt.nix { }; + ### _ ### + + _0install-solver = callPackage ../development/ocaml-modules/0install-solver { }; + ### Exceptional packages kept out of order ### # Libs