From 1a04bd44145dda65720ea95c0471d5aa911caf11 Mon Sep 17 00:00:00 2001
From: Vincent Laporte <Vincent.Laporte@gmail.com>
Date: Sun, 4 Nov 2018 06:49:33 +0000
Subject: [PATCH] ocamlPackages.checkseum: init at 0.0.3

Chekseum is an OCaml library which implements ADLER-32 and CRC32C Cyclic
Redundancy Check. It provides 2 implementation, the first in C and the
second in OCaml.

Homepage: https://github.com/mirage/checkseum
---
 .../ocaml-modules/checkseum/default.nix       | 39 +++++++++++++++++++
 pkgs/top-level/ocaml-packages.nix             |  2 +
 2 files changed, 41 insertions(+)
 create mode 100644 pkgs/development/ocaml-modules/checkseum/default.nix

diff --git a/pkgs/development/ocaml-modules/checkseum/default.nix b/pkgs/development/ocaml-modules/checkseum/default.nix
new file mode 100644
index 000000000000..0e348dd65c38
--- /dev/null
+++ b/pkgs/development/ocaml-modules/checkseum/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, ocaml, findlib, dune, alcotest, cmdliner, fmt, optint, rresult }:
+
+if !stdenv.lib.versionAtLeast ocaml.version "4.03"
+then throw "checkseum is not available for OCaml ${ocaml.version}"
+else
+
+# The C implementation is not portable: x86 only
+let hasC = stdenv.isi686 || stdenv.isx86_64; in
+
+stdenv.mkDerivation rec {
+  version = "0.0.3";
+  name = "ocaml${ocaml.version}-checkseum-${version}";
+  src = fetchurl {
+    url = "https://github.com/mirage/checkseum/releases/download/v0.0.3/checkseum-v0.0.3.tbz";
+    sha256 = "12j45zsvil1ynwx1x8fbddhqacc8r1zf7f6h576y3f3yvbg7l1fm";
+  };
+
+  postPatch = stdenv.lib.optionalString (!hasC) ''
+    rm -r bin src-c
+  '';
+
+  buildInputs = [ ocaml findlib dune alcotest cmdliner fmt rresult ];
+  propagatedBuildInputs = [ optint ];
+
+  buildPhase = "dune build";
+
+  doCheck = hasC;
+  checkPhase = "dune runtest";
+
+  inherit (dune) installPhase;
+
+  meta = {
+    homepage = "https://github.com/mirage/checkseum";
+    description = "ADLER-32 and CRC32C Cyclic Redundancy Check";
+    license = stdenv.lib.licenses.mit;
+    maintainers = [ stdenv.lib.maintainers.vbgl ];
+    inherit (ocaml.meta) platforms;
+  };
+}
diff --git a/pkgs/top-level/ocaml-packages.nix b/pkgs/top-level/ocaml-packages.nix
index f2c0f16302e8..e03cb8e8b3b7 100644
--- a/pkgs/top-level/ocaml-packages.nix
+++ b/pkgs/top-level/ocaml-packages.nix
@@ -138,6 +138,8 @@ let
 
     cairo2 = callPackage ../development/ocaml-modules/cairo2 { };
 
+    checkseum = callPackage ../development/ocaml-modules/checkseum { };
+
     cil = callPackage ../development/ocaml-modules/cil { };
 
     cmdliner = callPackage ../development/ocaml-modules/cmdliner { };