diff --git a/pkgs/development/tools/ocaml/ocamlformat/default.nix b/pkgs/development/tools/ocaml/ocamlformat/default.nix index 069f0471595d..5b607d3d6c64 100644 --- a/pkgs/development/tools/ocaml/ocamlformat/default.nix +++ b/pkgs/development/tools/ocaml/ocamlformat/default.nix @@ -1,19 +1,49 @@ -{ lib, fetchurl, ocamlPackages }: +{ lib, fetchurl, fetchzip, ocamlPackages }: -with ocamlPackages; buildDunePackage rec { - pname = "ocamlformat"; - version = "0.15.0"; +with ocamlPackages; - minimumOCamlVersion = "4.06"; +let + mkOCamlformat = { + version, + sha256, + buildInputs, + useDune2 ? true, + tarballName ? "ocamlformat-${version}.tbz", + # The 'src' argument can be removed when 0.11.0 is pruned + src ? fetchurl { + url = "https://github.com/ocaml-ppx/ocamlformat/releases/download/${version}/${tarballName}"; + inherit sha256; + } + }: + buildDunePackage rec { + pname = "ocamlformat"; - useDune2 = true; + minimumOCamlVersion = "4.06"; - src = fetchurl { - url = "https://github.com/ocaml-ppx/ocamlformat/releases/download/${version}/ocamlformat-${version}.tbz"; - sha256 = "0190vz59n6ma9ca1m3syl3mc8i1smj1m3d8x1jp21f710y4llfr6"; - }; + inherit src version useDune2 buildInputs; - buildInputs = [ + meta = { + homepage = "https://github.com/ocaml-ppx/ocamlformat"; + description = "Auto-formatter for OCaml code"; + maintainers = [ lib.maintainers.Zimmi48 lib.maintainers.marsam ]; + license = lib.licenses.mit; + }; + }; + + post_0_11_buildInputs = [ + base + cmdliner + fpath + ocaml-migrate-parsetree + odoc + re + stdio + uuseg + uutf + ]; + + post_0_14_buildInputs = [ + base cmdliner fpath ocaml-migrate-parsetree @@ -25,11 +55,62 @@ with ocamlPackages; buildDunePackage rec { fix menhir ]; +in - meta = { - homepage = "https://github.com/ocaml-ppx/ocamlformat"; - description = "Auto-formatter for OCaml code"; - maintainers = [ lib.maintainers.Zimmi48 lib.maintainers.marsam ]; - license = lib.licenses.mit; +# Older versions should be removed when their usage decrease +# This script scraps Github looking for OCamlformat's options and versions usage: +# https://gist.github.com/Julow/110dc94308d6078225e0665e3eccd433 + +rec { + ocamlformat_0_11_0 = mkOCamlformat rec { + version = "0.11.0"; + src = fetchzip { + url = "https://github.com/ocaml-ppx/ocamlformat/archive/0.11.0.tar.gz"; + inherit sha256; + }; + sha256 = "0zvjn71jd4d3znnpgh0yphb2w8ggs457b6bl6cg1fmpdgxnds6yx"; + useDune2 = false; + buildInputs = post_0_11_buildInputs; }; + + ocamlformat_0_12 = mkOCamlformat { + version = "0.12"; + sha256 = "1zi8x597dhp2822j6j28s84yyiqppl7kykpwqqclx6ybypvlzdpj"; + useDune2 = false; + buildInputs = post_0_11_buildInputs; + }; + + ocamlformat_0_13_0 = mkOCamlformat rec { + version = "0.13.0"; + sha256 = "0ki2flqi3xkhw9mfridivb6laxm7gml8rj9qz42vqmy9yx76jjxq"; + tarballName = "ocamlformat-${version}-2.tbz"; + useDune2 = false; + buildInputs = post_0_11_buildInputs; + }; + + ocamlformat_0_14_0 = mkOCamlformat { + version = "0.14.0"; + sha256 = "070c0x6z5y0lyls56zm34g8lyc093wkr0jfp50dvrkr9fk1sx2wi"; + buildInputs = post_0_14_buildInputs; + }; + + ocamlformat_0_14_1 = mkOCamlformat { + version = "0.14.1"; + sha256 = "03wn46xib63748157xchj7gflkw5000fcjw6n89h9g82q9slazaa"; + buildInputs = post_0_14_buildInputs; + }; + + ocamlformat_0_14_2 = mkOCamlformat { + version = "0.14.2"; + sha256 = "16phz1sg9b070p6fm8d42j0piizg05vghdjmw8aj7xm82b1pm7sz"; + buildInputs = post_0_14_buildInputs; + }; + + ocamlformat_0_15_0 = mkOCamlformat { + version = "0.15.0"; + sha256 = "0190vz59n6ma9ca1m3syl3mc8i1smj1m3d8x1jp21f710y4llfr6"; + buildInputs = post_0_14_buildInputs; + }; + + ocamlformat = ocamlformat_0_15_0; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 1b889c44f29c..8b4b3ee5237b 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -9549,7 +9549,10 @@ in ocaml-crunch = ocamlPackages.crunch.bin; - ocamlformat = callPackage ../development/tools/ocaml/ocamlformat { }; + inherit (callPackage ../development/tools/ocaml/ocamlformat { }) + ocamlformat # latest version + ocamlformat_0_11_0 ocamlformat_0_12 ocamlformat_0_13_0 ocamlformat_0_14_0 + ocamlformat_0_14_1 ocamlformat_0_14_2 ocamlformat_0_15_0; orc = callPackage ../development/compilers/orc { };