From bb038283c449c6ab37e32d9164a26602d23d2eee Mon Sep 17 00:00:00 2001
From: John Wiegley <johnw@newartisans.com>
Date: Sun, 12 Nov 2017 09:34:06 -0800
Subject: [PATCH] coqPackages.metalib: New expression

---
 .../coq-modules/metalib/default.nix           | 53 +++++++++++++++++++
 pkgs/top-level/all-packages.nix               |  1 +
 2 files changed, 54 insertions(+)
 create mode 100644 pkgs/development/coq-modules/metalib/default.nix

diff --git a/pkgs/development/coq-modules/metalib/default.nix b/pkgs/development/coq-modules/metalib/default.nix
new file mode 100644
index 000000000000..0304cb48b3b9
--- /dev/null
+++ b/pkgs/development/coq-modules/metalib/default.nix
@@ -0,0 +1,53 @@
+{ stdenv, fetchgit, coq, ocamlPackages, haskellPackages, which, ott
+}:
+
+stdenv.mkDerivation rec {
+  name = "metalib-${coq.coq-version}-${version}";
+  version = "20170713";
+
+  src = fetchgit {
+    url = https://github.com/plclub/metalib.git;
+    rev = "44e40aa082452dd333fc1ca2d2cc55311519bd52";
+    sha256 = "1pra0nvx69q8d4bvpcvh9ngic1cy6z1chi03x56nisfqnc61b6y9";
+  };
+
+  # The 'lngen' command-line utility is built from Haskell sources
+  lngen = with haskellPackages; mkDerivation {
+    pname = "lngen";
+    version = "0.0.1";
+    src = fetchgit {
+      url = https://github.com/plclub/lngen;
+      rev = "ea73ad315de33afd25f87ca738c71f358f1cd51c";
+      sha256 = "1a0sj8n3lmsl1wlnqfy176k9lb9s8rl422bvg3ihl2i70ql8wisd";
+    };
+    isLibrary = true;
+    isExecutable = true;
+    libraryHaskellDepends = [ base containers mtl parsec syb ];
+    executableHaskellDepends = [ base ];
+    homepage = https://github.com/plclub/lngen;
+    description = "Tool for generating Locally Nameless definitions and proofs in Coq, working together with Ott";
+    license = stdenv.lib.licenses.mit;
+  };
+
+  buildInputs = [ coq.ocaml coq.camlp5 which coq lngen ott ]
+    ++ (with ocamlPackages; [ findlib ]);
+  propagatedBuildInputs = [ coq ];
+
+  enableParallelBuilding = true;
+
+  buildPhase = ''
+    (cd Metalib; make)
+  '';
+
+  installPhase = ''
+    (cd Metalib; make -f CoqSrc.mk DSTROOT=/ COQLIB=$out/lib/coq/${coq.coq-version}/ install)
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/plclub/metalib;
+    license = licenses.mit;
+    maintainers = [ maintainers.jwiegley ];
+    platforms = coq.meta.platforms;
+  };
+
+}
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index f9f9d16514cd..3905452fae8a 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -18714,6 +18714,7 @@ with pkgs;
     HoTT = callPackage ../development/coq-modules/HoTT {};
     interval = callPackage ../development/coq-modules/interval {};
     mathcomp = callPackage ../development/coq-modules/mathcomp { };
+    metalib = callPackage ../development/coq-modules/metalib { };
     paco = callPackage ../development/coq-modules/paco {};
     ssreflect = callPackage ../development/coq-modules/ssreflect { };
     QuickChick = callPackage ../development/coq-modules/QuickChick {};