From bc23b0837d38c90185d2dab2954b273082c9b8d4 Mon Sep 17 00:00:00 2001
From: Allan Blanchard <allan.blanchard@cea.fr>
Date: Wed, 16 Mar 2022 15:35:18 +0100
Subject: [PATCH] [nix] Ocaml Dune 3 overlay

---
 nix/dune-dyn.nix          | 20 ++++++++++++++++++++
 nix/dune-ordering.nix     | 19 +++++++++++++++++++
 nix/dune-private-libs.nix | 20 ++++++++++++++++++++
 nix/dune-stdune.nix       | 20 ++++++++++++++++++++
 nix/frama-c.nix           | 20 +++++++++++++++++---
 nix/pkgs.nix              | 37 +++++++++++++++++++++++++++++++++++++
 nix/sources.json          |  6 +++---
 7 files changed, 136 insertions(+), 6 deletions(-)
 create mode 100644 nix/dune-dyn.nix
 create mode 100644 nix/dune-ordering.nix
 create mode 100644 nix/dune-private-libs.nix
 create mode 100644 nix/dune-stdune.nix

diff --git a/nix/dune-dyn.nix b/nix/dune-dyn.nix
new file mode 100644
index 00000000000..663d90c0a8b
--- /dev/null
+++ b/nix/dune-dyn.nix
@@ -0,0 +1,20 @@
+{ lib, buildDunePackage, dune_2, dune-ordering, pp }:
+
+buildDunePackage rec {
+  pname = "dyn";
+
+  useDune2 = true;
+
+  inherit (dune_2) src version patches;
+  buildInputs = dune_2.buildInputs ++ [ dune-ordering pp ] ;
+
+  minimumOCamlVersion = "4.08";
+
+  dontAddPrefix = true;
+
+  meta = with lib; {
+    description = "Private libraries of Dune";
+    maintainers = [];
+    license = licenses.mit;
+  };
+}
diff --git a/nix/dune-ordering.nix b/nix/dune-ordering.nix
new file mode 100644
index 00000000000..5c5ee063667
--- /dev/null
+++ b/nix/dune-ordering.nix
@@ -0,0 +1,19 @@
+{ lib, buildDunePackage, dune_2 }:
+
+buildDunePackage rec {
+  pname = "ordering";
+
+  useDune2 = true;
+
+  inherit (dune_2) src version patches;
+
+  minimumOCamlVersion = "4.08";
+
+  dontAddPrefix = true;
+
+  meta = with lib; {
+    description = "Private libraries of Dune";
+    maintainers = [];
+    license = licenses.mit;
+  };
+}
diff --git a/nix/dune-private-libs.nix b/nix/dune-private-libs.nix
new file mode 100644
index 00000000000..57ab7265ec0
--- /dev/null
+++ b/nix/dune-private-libs.nix
@@ -0,0 +1,20 @@
+{ lib, buildDunePackage, dune_2, csexp, pp, dune-dyn, dune-stdune, dune-ordering }:
+
+buildDunePackage rec {
+  pname = "dune-private-libs";
+
+  useDune2 = true;
+
+  inherit (dune_2) src version patches;
+  buildInputs = dune_2.buildInputs ++ [ dune-stdune dune-dyn dune-ordering csexp pp ] ;
+
+  minimumOCamlVersion = "4.08";
+
+  dontAddPrefix = true;
+
+  meta = with lib; {
+    description = "Private libraries of Dune";
+    maintainers = [ maintainers.marsam ];
+    license = licenses.mit;
+  };
+}
diff --git a/nix/dune-stdune.nix b/nix/dune-stdune.nix
new file mode 100644
index 00000000000..f203355847f
--- /dev/null
+++ b/nix/dune-stdune.nix
@@ -0,0 +1,20 @@
+{ lib, buildDunePackage, dune_2, dune-ordering, dune-dyn, csexp, pp }:
+
+buildDunePackage rec {
+  pname = "stdune";
+
+  useDune2 = true;
+
+  inherit (dune_2) src version patches;
+  buildInputs = dune_2.buildInputs ++ [ dune-ordering dune-dyn csexp pp ] ;
+
+  minimumOCamlVersion = "4.08";
+
+  dontAddPrefix = true;
+
+  meta = with lib; {
+    description = "Private libraries of Dune";
+    maintainers = [];
+    license = licenses.mit;
+  };
+}
diff --git a/nix/frama-c.nix b/nix/frama-c.nix
index b2c05af1256..c03f5616024 100644
--- a/nix/frama-c.nix
+++ b/nix/frama-c.nix
@@ -11,11 +11,25 @@
 , autoconf
 , findlib
 # Frama-C build
+, apron
+, camlzip
+, dune_3
+, dune-site-3
 , graphviz
+, lablgtk3
+, lablgtk3-sourceview3
 , ltl2ba
-, ocamlPackages
+, menhirLib
+, mlgmpidl
+, ocaml
+, ocamlgraph
+, ppx_deriving
+, ppx_deriving_yojson
+, yojson
 , which
 , why3
+, zarith
+, zmq
 # Frama-C extra (other targets do not reconfigure)
 , dos2unix
 , doxygen
@@ -37,11 +51,11 @@ stdenv.mkDerivation rec {
     wrapGAppsHook
   ];
 
-  buildInputs = with ocamlPackages; [
+  buildInputs = [
     apron
     camlzip
     dune_3
-    dune-site
+    dune-site-3
     findlib
     graphviz
     lablgtk3
diff --git a/nix/pkgs.nix b/nix/pkgs.nix
index 46ce47e4a8d..410524ec23f 100644
--- a/nix/pkgs.nix
+++ b/nix/pkgs.nix
@@ -8,6 +8,43 @@ let
     ocp-indent = oself.callPackage ./ocp-indent.nix {};
     psmt2-frontend = oself.callPackage ./psmt2-frontend.nix {};
     why3 = oself.callPackage ./why3.nix {};
+    # Nix + Dune 3
+    dune-build-3 =
+      osuper.buildDunePackage.override {
+        dune_2 = oself.dune_3;
+      };
+    dune-ordering-3 =
+      oself.callPackage ./dune-ordering.nix {
+        dune_2 = oself.dune_3;
+        buildDunePackage = oself.dune-build-3;
+      };
+    dune-dyn-3 =
+      oself.callPackage ./dune-dyn.nix {
+        dune_2 = oself.dune_3;
+        buildDunePackage = oself.dune-build-3;
+        dune-ordering = oself.dune-ordering-3;
+      };
+    dune-stdune-3 =
+      oself.callPackage ./dune-stdune.nix {
+        dune_2 = oself.dune_3;
+        buildDunePackage = oself.dune-build-3;
+        dune-ordering = oself.dune-ordering-3;
+        dune-dyn = oself.dune-dyn-3;
+      };
+    dune-private-libs-3 =
+      oself.callPackage ./dune-private-libs.nix {
+        dune_2 = oself.dune_3;
+        buildDunePackage = oself.dune-build-3;
+        dune-ordering = oself.dune-ordering-3;
+        dune-stdune = oself.dune-stdune-3;
+        dune-dyn = oself.dune-dyn-3;
+      };
+    dune-site-3 =
+      osuper.dune-site.override {
+        dune_2 = oself.dune_3;
+        buildDunePackage = oself.dune-build-3;
+        dune-private-libs = oself.dune-private-libs-3;
+      };
     # Builds
     frama-c = oself.callPackage ./frama-c.nix {};
     lint = oself.callPackage ./lint.nix {};
diff --git a/nix/sources.json b/nix/sources.json
index 660c236a9c0..7611438ae2e 100644
--- a/nix/sources.json
+++ b/nix/sources.json
@@ -29,10 +29,10 @@
         "homepage": "https://github.com/NixOS/nixpkgs",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "18bd82edcc752d6a0e6cce1401ba0c81353a03ca",
-        "sha256": "0wcc8y7c055hlx20m8x0ap6kqalfrfiw2addvlnvxlw69299rci0",
+        "rev": "73ad5f9e147c0d2a2061f1d4bd91e05078dc0b58",
+        "sha256": "01j7nhxbb2kjw38yk4hkjkkbmz50g3br7fgvad6b1cjpdvfsllds",
         "type": "tarball",
-        "url": "https://github.com/NixOS/nixpkgs/archive/18bd82edcc752d6a0e6cce1401ba0c81353a03ca.tar.gz",
+        "url": "https://github.com/NixOS/nixpkgs/archive/73ad5f9e147c0d2a2061f1d4bd91e05078dc0b58.tar.gz",
         "url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
     },
     "why3": {
-- 
GitLab