From 48b76bd10cbeb5c6ff46ea668c9445f7711bbc3e Mon Sep 17 00:00:00 2001
From: Allan Blanchard <allan.blanchard@cea.fr>
Date: Fri, 18 Feb 2022 11:40:34 +0100
Subject: [PATCH] [ci] Fix camlzip version

---
 nix/camlzip.nix | 77 +++++++++++++++++++++++++++++++++++++++++++++++++
 nix/pkgs.nix    |  1 +
 2 files changed, 78 insertions(+)
 create mode 100644 nix/camlzip.nix

diff --git a/nix/camlzip.nix b/nix/camlzip.nix
new file mode 100644
index 00000000000..2750726714b
--- /dev/null
+++ b/nix/camlzip.nix
@@ -0,0 +1,77 @@
+{lib, stdenv, fetchurl, zlib, ocaml, findlib}:
+
+let
+  param =
+    if lib.versionAtLeast ocaml.version "4.07"
+    then {
+      version = "1.11";
+      url = "https://github.com/xavierleroy/camlzip/archive/rel111.tar.gz";
+      sha256 = "0dzdspqp9nzx8wyhclbm68dykvfj6b97c8r7b47dq4qw7vgcbfzz";
+      patches = [];
+      postPatchInit = ''
+        true
+      '';
+    } else if lib.versionAtLeast ocaml.version "4.02"
+    then {
+      version = "1.10";
+      url = "https://github.com/xavierleroy/camlzip/archive/rel110.tar.gz";
+      sha256 = "X0YcczaQ3lFeJEiTIgjSSZ1zi32KFMtmZsP0FFpyfbI=";
+      patches = [];
+      postPatchInit = ''
+        cp META-zip META-camlzip
+        echo 'directory="../zip"' >> META-camlzip
+      '';
+    } else {
+      version = "1.05";
+      download_id = "1037";
+      url = "http://forge.ocamlcore.org/frs/download.php/${param.download_id}/camlzip-${param.version}.tar.gz";
+      sha256 = "930b70c736ab5a7ed1b05220102310a0a2241564786657abe418e834a538d06b";
+      patches = [./makefile_1_05.patch];
+      postPatchInit = ''
+        substitute ${./META} META --subst-var-by VERSION "${param.version}"
+      '';
+    };
+in
+
+stdenv.mkDerivation {
+  pname = "camlzip";
+  version = param.version;
+
+  src = fetchurl {
+    inherit (param) url;
+    inherit (param) sha256;
+  };
+
+  buildInputs = [ ocaml findlib ];
+
+  propagatedBuildInputs = [zlib];
+
+  inherit (param) patches;
+
+  createFindlibDestdir = true;
+
+  postPatch = param.postPatchInit + ''
+    substituteInPlace Makefile \
+      --subst-var-by ZLIB_LIBDIR "${zlib.out}/lib" \
+      --subst-var-by ZLIB_INCLUDE "${zlib.dev}/include"
+  '';
+
+  buildFlags = [ "all" "allopt" ];
+
+  postInstall = ''
+    ln -s $out/lib/ocaml/${ocaml.version}/site-lib/{,caml}zip
+  '';
+
+  meta = with lib; {
+    homepage = "http://cristal.inria.fr/~xleroy/software.html#camlzip";
+    description = "A library for handling ZIP and GZIP files in OCaml";
+    longDescription = ''
+      This Objective Caml library provides easy access to compressed files in
+      ZIP and GZIP format, as well as to Java JAR files.  It provides functions
+      for reading from and writing to compressed files in these formats.
+    '';
+    license = "LGPL+linking exceptions";
+    platforms = ocaml.meta.platforms or [];
+    maintainers = with maintainers; [ maggesi ];
+  };
+}
diff --git a/nix/pkgs.nix b/nix/pkgs.nix
index 3c699b49509..407a1ce6688 100644
--- a/nix/pkgs.nix
+++ b/nix/pkgs.nix
@@ -2,6 +2,7 @@ let
   sources = import ./sources.nix {};
   ocamlOverlay = oself: osuper: {
     # External Packages
+    camlzip = oself.callPackage ./camlzip.nix {};
     why3 = oself.callPackage ./why3.nix {};
     # Builds
     frama-c = oself.callPackage ./frama-c.nix {};
-- 
GitLab