From 9d236f823273be2557bd23c0c8f74c085206d010 Mon Sep 17 00:00:00 2001
From: Allan Blanchard <allan.blanchard@cea.fr>
Date: Wed, 7 Aug 2024 16:00:22 +0200
Subject: [PATCH] [nix] upgrade camlp5 for OCaml 5.2

---
 nix/camlp5.nix | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++
 nix/pkgs.nix   |  1 +
 2 files changed, 69 insertions(+)
 create mode 100644 nix/camlp5.nix

diff --git a/nix/camlp5.nix b/nix/camlp5.nix
new file mode 100644
index 0000000000..9f6055677e
--- /dev/null
+++ b/nix/camlp5.nix
@@ -0,0 +1,68 @@
+{ lib, stdenv, fetchFromGitHub, ocaml, findlib, perl, makeWrapper
+, rresult, bos, re, camlp-streams
+, legacy ? false
+}:
+
+if lib.versionOlder ocaml.version "4.02"
+then throw "camlp5 is not available for OCaml ${ocaml.version}"
+else
+
+let params =
+  if lib.versionAtLeast ocaml.version "4.12" && !legacy
+  then rec {
+    version = "8.03.00";
+
+    src = fetchFromGitHub {
+      owner = "camlp5";
+      repo = "camlp5";
+      rev = version;
+      hash = "sha256-hu/279gBvUc7Z4jM6EHiar6Wm4vjkGXl+7bxowj+vlM=";
+    };
+
+    nativeBuildInputs = [ makeWrapper ocaml findlib perl ];
+    buildInputs = [ bos re rresult ];
+    propagatedBuildInputs = [ camlp-streams ];
+
+  } else rec {
+    version = "7.14";
+    src = fetchFromGitHub {
+      owner = "camlp5";
+      repo = "camlp5";
+      rev = "rel${builtins.replaceStrings [ "." ] [ "" ] version}";
+      sha256 = "1dd68bisbpqn5lq2pslm582hxglcxnbkgfkwhdz67z4w9d5nvr7w";
+    };
+    nativeBuildInputs = [ ocaml perl ];
+  }
+; in
+
+stdenv.mkDerivation (params // {
+
+  pname = "ocaml${ocaml.version}-camlp5";
+
+  strictDeps = true;
+
+  prefixKey = "-prefix ";
+
+  preConfigure = ''
+    configureFlagsArray=(--strict --libdir $out/lib/ocaml/${ocaml.version}/site-lib)
+    patchShebangs ./config/find_stuffversion.pl etc/META.pl
+  '';
+
+  buildFlags = [ "world.opt" ];
+
+  dontStrip = true;
+
+  meta = with lib; {
+    description = "Preprocessor-pretty-printer for OCaml";
+    longDescription = ''
+      Camlp5 is a preprocessor and pretty-printer for OCaml programs.
+      It also provides parsing and printing tools.
+    '';
+    homepage = "https://camlp5.github.io/";
+    license = licenses.bsd3;
+    platforms = ocaml.meta.platforms or [];
+    maintainers = with maintainers; [
+      maggesi vbgl
+    ];
+  };
+})
diff --git a/nix/pkgs.nix b/nix/pkgs.nix
index f55744624c..9cc6a87b52 100644
--- a/nix/pkgs.nix
+++ b/nix/pkgs.nix
@@ -3,6 +3,7 @@ let
   ocamlOverlay = oself: osuper: {
     # External Packages
     alt-ergo = oself.callPackage ./alt-ergo.nix {};
+    camlp5 = oself.callPackage ./camlp5.nix {};
     combinetura = oself.callPackage ./combinetura.nix {};
     mlmpfr = oself.callPackage ./mlmpfr.nix {};
     why3 = oself.callPackage ./why3.nix {};
-- 
GitLab