diff --git a/nix/camlzip.nix b/nix/camlzip.nix new file mode 100644 index 0000000000000000000000000000000000000000..2750726714bfb9c8817ecd11ad7c9a874a3f5a19 --- /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 3c699b49509d62e78cedc9621668c3cc8a0afe69..407a1ce6688364747cf7d863fe0b68f4843f6a3f 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 {};