about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/ocaml-modules
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2019-09-20 19:56:04 +0000
committerAlyssa Ross <hi@alyssa.is>2019-09-28 14:40:49 +0000
commit36bedbe5c162bab9e7ef702f353ae399fdfd0518 (patch)
treefb2926eee09fe0714683074758276739e9e5cda9 /nixpkgs/pkgs/development/ocaml-modules
parent47852a9ef0e62a2d565f9ec0fba2a3ae77c44221 (diff)
parent262b328b0bad0c4b97ed495679208e4a2eb87704 (diff)
downloadnixlib-36bedbe5c162bab9e7ef702f353ae399fdfd0518.tar
nixlib-36bedbe5c162bab9e7ef702f353ae399fdfd0518.tar.gz
nixlib-36bedbe5c162bab9e7ef702f353ae399fdfd0518.tar.bz2
nixlib-36bedbe5c162bab9e7ef702f353ae399fdfd0518.tar.lz
nixlib-36bedbe5c162bab9e7ef702f353ae399fdfd0518.tar.xz
nixlib-36bedbe5c162bab9e7ef702f353ae399fdfd0518.tar.zst
nixlib-36bedbe5c162bab9e7ef702f353ae399fdfd0518.zip
Merge commit '262b328b0bad0c4b97ed495679208e4a2eb87704'
Diffstat (limited to 'nixpkgs/pkgs/development/ocaml-modules')
-rw-r--r--nixpkgs/pkgs/development/ocaml-modules/bap/default.nix14
-rw-r--r--nixpkgs/pkgs/development/ocaml-modules/biniou/1.0.nix2
-rw-r--r--nixpkgs/pkgs/development/ocaml-modules/bistro/default.nix10
-rw-r--r--nixpkgs/pkgs/development/ocaml-modules/containers/default.nix2
-rw-r--r--nixpkgs/pkgs/development/ocaml-modules/cryptokit/default.nix2
-rw-r--r--nixpkgs/pkgs/development/ocaml-modules/elina/default.nix2
-rw-r--r--nixpkgs/pkgs/development/ocaml-modules/gen/default.nix2
-rw-r--r--nixpkgs/pkgs/development/ocaml-modules/gg/default.nix2
-rw-r--r--nixpkgs/pkgs/development/ocaml-modules/janestreet/0.12.nix466
-rw-r--r--nixpkgs/pkgs/development/ocaml-modules/janestreet/janePackage_0_12.nix19
-rw-r--r--nixpkgs/pkgs/development/ocaml-modules/lacaml/default.nix2
-rw-r--r--nixpkgs/pkgs/development/ocaml-modules/llvm/default.nix10
-rw-r--r--nixpkgs/pkgs/development/ocaml-modules/logs/default.nix2
-rw-r--r--nixpkgs/pkgs/development/ocaml-modules/mtime/default.nix2
-rw-r--r--nixpkgs/pkgs/development/ocaml-modules/nocrypto/default.nix4
-rw-r--r--nixpkgs/pkgs/development/ocaml-modules/ocaml-result/default.nix2
-rw-r--r--nixpkgs/pkgs/development/ocaml-modules/ocsigen-server/default.nix2
-rw-r--r--nixpkgs/pkgs/development/ocaml-modules/opam-file-format/default.nix2
-rw-r--r--nixpkgs/pkgs/development/ocaml-modules/otfm/default.nix2
-rw-r--r--nixpkgs/pkgs/development/ocaml-modules/otr/default.nix2
-rw-r--r--nixpkgs/pkgs/development/ocaml-modules/ppx_deriving_protobuf/default.nix23
-rw-r--r--nixpkgs/pkgs/development/ocaml-modules/ppx_deriving_yojson/default.nix4
-rw-r--r--nixpkgs/pkgs/development/ocaml-modules/ppx_tools/default.nix2
-rw-r--r--nixpkgs/pkgs/development/ocaml-modules/rpclib/default.nix27
-rw-r--r--nixpkgs/pkgs/development/ocaml-modules/sawja/default.nix2
-rw-r--r--nixpkgs/pkgs/development/ocaml-modules/tls/default.nix2
-rw-r--r--nixpkgs/pkgs/development/ocaml-modules/tsdl/default.nix2
-rw-r--r--nixpkgs/pkgs/development/ocaml-modules/uucd/default.nix2
-rw-r--r--nixpkgs/pkgs/development/ocaml-modules/uucp/default.nix2
-rw-r--r--nixpkgs/pkgs/development/ocaml-modules/uunf/default.nix2
-rw-r--r--nixpkgs/pkgs/development/ocaml-modules/uuseg/default.nix2
-rw-r--r--nixpkgs/pkgs/development/ocaml-modules/uutf/default.nix2
-rw-r--r--nixpkgs/pkgs/development/ocaml-modules/vg/default.nix2
-rw-r--r--nixpkgs/pkgs/development/ocaml-modules/xmlm/default.nix2
-rw-r--r--nixpkgs/pkgs/development/ocaml-modules/xtmpl/default.nix2
-rw-r--r--nixpkgs/pkgs/development/ocaml-modules/xtmpl/jsoo.patch26
36 files changed, 612 insertions, 43 deletions
diff --git a/nixpkgs/pkgs/development/ocaml-modules/bap/default.nix b/nixpkgs/pkgs/development/ocaml-modules/bap/default.nix
index 30e3687676ab..0766e6e8a8c5 100644
--- a/nixpkgs/pkgs/development/ocaml-modules/bap/default.nix
+++ b/nixpkgs/pkgs/development/ocaml-modules/bap/default.nix
@@ -1,11 +1,15 @@
 { stdenv, fetchFromGitHub, fetchurl
 , ocaml, findlib, ocamlbuild, ocaml_oasis,
- bitstring, camlzip, cmdliner, core_kernel, ezjsonm, fileutils, ocaml_lwt, ocamlgraph, ocurl, re, uri, zarith, piqi, piqi-ocaml, uuidm, llvm_38, frontc, ounit, ppx_jane, parsexp,
- utop,
+ bitstring, camlzip, cmdliner, core_kernel, ezjsonm, fileutils, ocaml_lwt, ocamlgraph, ocurl, re, uri, zarith, piqi, piqi-ocaml, uuidm, llvm, frontc, ounit, ppx_jane, parsexp,
+ utop, libxml2,
  ppx_tools_versioned,
  which, makeWrapper, writeText
 }:
 
+if stdenv.lib.versionAtLeast core_kernel.version "0.12"
+then throw "BAP needs core_kernel-0.11 (hence OCaml ≤ 4.06)"
+else
+
 stdenv.mkDerivation rec {
   name = "ocaml${ocaml.version}-bap-${version}";
   version = "1.6.0";
@@ -31,8 +35,8 @@ stdenv.mkDerivation rec {
   nativeBuildInputs = [ which makeWrapper ];
 
   buildInputs = [ ocaml findlib ocamlbuild ocaml_oasis
-                  llvm_38 ppx_tools_versioned
-                  utop ];
+                  llvm ppx_tools_versioned
+                  utop libxml2 ];
 
   propagatedBuildInputs = [ bitstring camlzip cmdliner ppx_jane core_kernel ezjsonm fileutils ocaml_lwt ocamlgraph ocurl re uri zarith piqi parsexp
                             piqi-ocaml uuidm frontc ounit ];
@@ -51,7 +55,7 @@ stdenv.mkDerivation rec {
 
   disableIda = "--disable-ida --disable-fsi-benchmark";
 
-  configureFlags = [ "--enable-everything ${disableIda}" "--with-llvm-config=${llvm_38}/bin/llvm-config" ];
+  configureFlags = [ "--enable-everything ${disableIda}" "--with-llvm-config=${llvm}/bin/llvm-config" ];
 
   BAPBUILDFLAGS = "-j $(NIX_BUILD_CORES)";
 
diff --git a/nixpkgs/pkgs/development/ocaml-modules/biniou/1.0.nix b/nixpkgs/pkgs/development/ocaml-modules/biniou/1.0.nix
index d2d3159cde14..2584c5ad8b3f 100644
--- a/nixpkgs/pkgs/development/ocaml-modules/biniou/1.0.nix
+++ b/nixpkgs/pkgs/development/ocaml-modules/biniou/1.0.nix
@@ -28,7 +28,7 @@ stdenv.mkDerivation rec {
 
   meta = with stdenv.lib; {
     description = "A binary data format designed for speed, safety, ease of use and backward compatibility as protocols evolve";
-    homepage = "${webpage}";
+    homepage = webpage;
     license = licenses.bsd3;
     maintainers = [ maintainers.vbgl ];
     platforms = ocaml.meta.platforms or [];
diff --git a/nixpkgs/pkgs/development/ocaml-modules/bistro/default.nix b/nixpkgs/pkgs/development/ocaml-modules/bistro/default.nix
index b3dddec511c4..d6a1cac17195 100644
--- a/nixpkgs/pkgs/development/ocaml-modules/bistro/default.nix
+++ b/nixpkgs/pkgs/development/ocaml-modules/bistro/default.nix
@@ -1,22 +1,22 @@
 { lib, fetchFromGitHub, buildDunePackage
-, core, lwt ? ocaml_lwt, ocaml_lwt, ocamlgraph, rresult, tyxml
+, base64, bos, core, lwt_react, ocamlgraph, rresult, tyxml
 }:
 
 buildDunePackage rec {
   pname = "bistro";
-  version = "0.4.0";
+  version = "0.5.0";
   src = fetchFromGitHub {
     owner = "pveber";
     repo = pname;
     rev = "v${version}";
-    sha256 = "0bxnggm4nkyl2iqwj4f5afw8lj5miq2rqsc9qfrlmg4g4rr3zh1c";
+    sha256 = "114gq48cpj2mvycypa9lfyqqb26wa2gkdfwkcqhnx7m6sdwv9a38";
   };
 
-  buildInputs = [ lwt ocamlgraph rresult tyxml ];
+  buildInputs = [ base64 bos lwt_react ocamlgraph rresult tyxml ];
 
   propagatedBuildInputs = [ core ];
 
-  minimumOCamlVersion = "4.04";
+  minimumOCamlVersion = "4.07";
 
   meta = {
     inherit (src.meta) homepage;
diff --git a/nixpkgs/pkgs/development/ocaml-modules/containers/default.nix b/nixpkgs/pkgs/development/ocaml-modules/containers/default.nix
index 214721fa0906..98fd7fc46cf6 100644
--- a/nixpkgs/pkgs/development/ocaml-modules/containers/default.nix
+++ b/nixpkgs/pkgs/development/ocaml-modules/containers/default.nix
@@ -16,7 +16,7 @@ stdenv.mkDerivation {
   src = fetchFromGitHub {
     owner = "c-cube";
     repo = "ocaml-containers";
-    rev = "${version}";
+    rev = version;
     sha256 = "1wbarxphdrxvy7qsdp4p837h1zrv0z83pgs5lbz2h3kdnyvz2f1i";
   };
 
diff --git a/nixpkgs/pkgs/development/ocaml-modules/cryptokit/default.nix b/nixpkgs/pkgs/development/ocaml-modules/cryptokit/default.nix
index 8180373a3dd9..8181433e1ee7 100644
--- a/nixpkgs/pkgs/development/ocaml-modules/cryptokit/default.nix
+++ b/nixpkgs/pkgs/development/ocaml-modules/cryptokit/default.nix
@@ -30,7 +30,7 @@ stdenv.mkDerivation {
 
   buildFlags = "setup.data build";
 
-  preBuild = "mkdir -p $out/lib/ocaml/${ocaml.version}/site-lib/cryptokit";
+  preBuild = "mkdir -p $out/lib/ocaml/${ocaml.version}/site-lib/stublibs";
 
   meta = {
     homepage = http://pauillac.inria.fr/~xleroy/software.html;
diff --git a/nixpkgs/pkgs/development/ocaml-modules/elina/default.nix b/nixpkgs/pkgs/development/ocaml-modules/elina/default.nix
index 44bfeb2d4740..b41743f542d8 100644
--- a/nixpkgs/pkgs/development/ocaml-modules/elina/default.nix
+++ b/nixpkgs/pkgs/development/ocaml-modules/elina/default.nix
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
   configureFlags = [
     "--use-apron"
     "--use-opam"
-    "--apron-prefix" "${apron}"
+    "--apron-prefix" apron
   ]
   ++ stdenv.lib.optional stdenv.isDarwin "--absolute-dylibs"
   ;
diff --git a/nixpkgs/pkgs/development/ocaml-modules/gen/default.nix b/nixpkgs/pkgs/development/ocaml-modules/gen/default.nix
index 348f0cf2170b..626e6321acf8 100644
--- a/nixpkgs/pkgs/development/ocaml-modules/gen/default.nix
+++ b/nixpkgs/pkgs/development/ocaml-modules/gen/default.nix
@@ -8,7 +8,7 @@ stdenv.mkDerivation {
   src = fetchFromGitHub {
     owner = "c-cube";
     repo = "gen";
-    rev = "${version}";
+    rev = version;
     sha256 = "14b8vg914nb0yp1hgxzm29bg692m0gqncjj43b599s98s1cwl92h";
   };
 
diff --git a/nixpkgs/pkgs/development/ocaml-modules/gg/default.nix b/nixpkgs/pkgs/development/ocaml-modules/gg/default.nix
index 5fb9131ef095..d4c28be2f798 100644
--- a/nixpkgs/pkgs/development/ocaml-modules/gg/default.nix
+++ b/nixpkgs/pkgs/development/ocaml-modules/gg/default.nix
@@ -35,7 +35,7 @@ stdenv.mkDerivation {
       matrices, quaternions, axis aligned boxes, colors, color spaces, and
       raster data.
     '';
-    homepage = "${webpage}";
+    homepage = webpage;
     platforms = ocaml.meta.platforms or [];
     license = licenses.bsd3;
     maintainers = [ maintainers.jirkamarsik ];
diff --git a/nixpkgs/pkgs/development/ocaml-modules/janestreet/0.12.nix b/nixpkgs/pkgs/development/ocaml-modules/janestreet/0.12.nix
new file mode 100644
index 000000000000..4089b24ca228
--- /dev/null
+++ b/nixpkgs/pkgs/development/ocaml-modules/janestreet/0.12.nix
@@ -0,0 +1,466 @@
+{ janePackage
+, ctypes
+, num
+, octavius
+, ppxlib
+, re
+, openssl
+}:
+
+rec {
+
+  ocaml-compiler-libs = janePackage {
+    pname = "ocaml-compiler-libs";
+    hash = "0g9y1ljjsj1nw0lz460ivb6qmz9vhcmfl8krlmqfrni6pc7b0r6f";
+    meta.description = "OCaml compiler libraries repackaged";
+  };
+
+  sexplib0 = janePackage {
+    pname = "sexplib0";
+    hash = "13xdd0pvypxqn0ldwdgikmlinrp3yfh8ixknv1xrpxbx3np4qp0g";
+    meta.description = "Library containing the definition of S-expressions and some base converters";
+  };
+
+  base = janePackage {
+    pname = "base";
+    version = "0.12.2";
+    hash = "0gl89zpgsf3n30nb6v5cns27g2bfg4rf3s2427gqvwbkr5gcf7ri";
+    meta.description = "Full standard library replacement for OCaml";
+    propagatedBuildInputs = [ sexplib0 ];
+  };
+
+  stdio = janePackage {
+    pname = "stdio";
+    hash = "1pn8jjcb79n6crpw7dkp68s4lz2mw103lwmfslil66f05jsxhjhg";
+    meta.description = "Standard IO library for OCaml";
+    propagatedBuildInputs = [ base ];
+  };
+
+  ppx_sexp_conv = janePackage {
+    pname = "ppx_sexp_conv";
+    hash = "0idzp1kzds0gnilschzs9ydi54if8y5xpn6ajn710vkipq26qcld";
+    meta.description = "[@@deriving] plugin to generate S-expression conversion functions";
+    propagatedBuildInputs = [ ppxlib ];
+  };
+
+  ppx_here = janePackage {
+    pname = "ppx_here";
+    hash = "07qbchwif1i9ii8z7v1bib57d3mjv0b27i8iixw78i83wnsycmdx";
+    meta.description = "Expands [%here] into its location";
+    propagatedBuildInputs = [ ppxlib ];
+  };
+
+  ppx_compare = janePackage {
+    pname = "ppx_compare";
+    hash = "0n1ax4k2smhps9hc2v58lc06a0fgimwvbi1aj4x78vwh5j492bys";
+    meta.description = "Generation of comparison functions from types";
+    propagatedBuildInputs = [ ppxlib ];
+  };
+
+  ppx_assert = janePackage {
+    pname = "ppx_assert";
+    hash = "0as6mzr6ki2a9d4k6132p9dskn0qssla1s7j5rkzp75bfikd0ip8";
+    meta.description = "Assert-like extension nodes that raise useful errors on failure";
+    propagatedBuildInputs = [ ppx_compare ppx_here ppx_sexp_conv ];
+  };
+
+  ppx_inline_test = janePackage {
+    pname = "ppx_inline_test";
+    hash = "0nyz411zim94pzbxm2l2v2l9jishcxwvxhh142792g2s18r4vn50";
+    meta.description = "Syntax extension for writing in-line tests in ocaml code";
+    propagatedBuildInputs = [ ppxlib ];
+  };
+
+  ppx_custom_printf = janePackage {
+    pname = "ppx_custom_printf";
+    version = "0.12.1";
+    hash = "0q7591agvd3qy9ihhbyk4db48r0ng7yxspfj8afxxiawl7k5bas6";
+    meta.description = "Printf-style format-strings for user-defined string conversion";
+    propagatedBuildInputs = [ ppx_sexp_conv ];
+  };
+
+  fieldslib = janePackage {
+    pname = "fieldslib";
+    hash = "0dlgr7cimqmjlcymk3bdcyzqzvdy12q5lqa844nqix0k2ymhyphf";
+    meta.description = "Syntax extension to define first class values representing record fields, to get and set record fields, iterate and fold over all fields of a record and create new record values";
+    propagatedBuildInputs = [ base ];
+  };
+
+  ppx_fields_conv = janePackage {
+    pname = "ppx_fields_conv";
+    hash = "0flrdyxdfcqcmdrbipxdjq0s3djdgs7z5pvjdycsvs6czbixz70v";
+    meta.description = "Generation of accessor and iteration functions for ocaml records";
+    propagatedBuildInputs = [ fieldslib ppxlib ];
+  };
+
+  variantslib = janePackage {
+    pname = "variantslib";
+    hash = "1cclb5magk63gyqmkci8abhs05g2pyhyr60a2c1bvmig0faqcnsf";
+    meta.description = "Part of Jane Street's Core library";
+    propagatedBuildInputs = [ base ];
+  };
+
+  ppx_variants_conv = janePackage {
+    pname = "ppx_variants_conv";
+    hash = "05j9bgra8xq6fcp12ch3z9vjrk139p2wrcjjcs4h52n5hhc8vzbz";
+    meta.description = "Generation of accessor and iteration functions for ocaml variant types";
+    propagatedBuildInputs = [ variantslib ppxlib ];
+  };
+
+  ppx_expect = janePackage {
+    pname = "ppx_expect";
+    hash = "1wawsbjfkri4sw52n8xqrzihxc3xfpdicv3ahz83a1rsn4lb8j5q";
+    meta.description = "Cram like framework for OCaml";
+    propagatedBuildInputs = [ ppx_assert ppx_custom_printf ppx_fields_conv ppx_inline_test ppx_variants_conv re ];
+  };
+
+  ppx_enumerate = janePackage {
+    pname = "ppx_enumerate";
+    hash = "08zfpq6bdm5lh7xj9k72iz9f2ihv3aznl3nypw3x78vz1chj8dqa";
+    meta.description = "Generate a list containing all values of a finite type";
+    propagatedBuildInputs = [ ppxlib ];
+  };
+
+  ppx_hash = janePackage {
+    pname = "ppx_hash";
+    hash = "1dfsfvhiyp1mnf24mr93svpdn432kla0y7x631lssacxxp2sadbg";
+    meta.description = "A ppx rewriter that generates hash functions from type expressions and definitions";
+    propagatedBuildInputs = [ ppx_compare ppx_sexp_conv ];
+  };
+
+  ppx_js_style = janePackage {
+    pname = "ppx_js_style";
+    hash = "1lz931m3qdv3yzqy6dnb8fq1d99r61w0n7cwf3b9fl9rhk0pggwh";
+    meta.description = "Code style checker for Jane Street Packages";
+    propagatedBuildInputs = [ octavius ppxlib ];
+  };
+
+  ppx_base = janePackage {
+    pname = "ppx_base";
+    hash = "0vd96rp2l084iamkwmvizzhl9625cagjb6gzzbir06czii5mlq2p";
+    meta.description = "Base set of ppx rewriters";
+    propagatedBuildInputs = [ ppx_enumerate ppx_hash ppx_js_style ];
+  };
+
+  ppx_bench = janePackage {
+    pname = "ppx_bench";
+    hash = "1ib81irawxzq091bmpi50z0kmpx6z2drg14k2xcgmwbb1d4063xn";
+    meta.description = "Syntax extension for writing in-line benchmarks in ocaml code";
+    propagatedBuildInputs = [ ppx_inline_test ];
+  };
+
+  ppx_sexp_message = janePackage {
+    pname = "ppx_sexp_message";
+    hash = "0yskd6v48jc6wa0nhg685kylh1n9qb6b7d1wglr9wnhl9sw990mc";
+    meta.description = "A ppx rewriter for easy construction of s-expressions";
+    propagatedBuildInputs = [ ppx_here ppx_sexp_conv ];
+  };
+
+  splittable_random = janePackage {
+    pname = "splittable_random";
+    hash = "1wpyz7807cgj8b50gdx4rw6f1zsznp4ni5lzjbnqdwa66na6ynr4";
+    meta.description = "PRNG that can be split into independent streams";
+    propagatedBuildInputs = [ base ppx_assert ppx_bench ppx_sexp_message ];
+  };
+
+  ppx_let = janePackage {
+    pname = "ppx_let";
+    hash = "146dmyzkbmafa3giz69gpxccvdihg19cvk4xsg8krbbmlkvdda22";
+    meta.description = "Monadic let-bindings";
+    propagatedBuildInputs = [ ppxlib ];
+  };
+
+  base_quickcheck = janePackage {
+    pname = "base_quickcheck";
+    hash = "1la6qgq1zwmfyq1hqy6i337w435ym5yqgx2ygk86qip6nws0s6r3";
+    meta.description = "Randomized testing framework, designed for compatibility with Base";
+    propagatedBuildInputs = [ ppx_base ppx_fields_conv ppx_let splittable_random ];
+  };
+
+  ppx_stable = janePackage {
+    pname = "ppx_stable";
+    hash = "15zvf66wlkvz0yd4bkvndkpq74dj20jv1qkljp9n52hh7d0f9ykh";
+    meta.description = "Stable types conversions generator";
+    propagatedBuildInputs = [ ppxlib ];
+  };
+
+  bin_prot = janePackage {
+    pname = "bin_prot";
+    hash = "0hh6s7g9s004z35hsr8z6nw5phlcvcd6g2q3bj4f0s1s0anlsswm";
+    meta.description = "A binary protocol generator";
+    propagatedBuildInputs = [ ppx_compare ppx_custom_printf ppx_fields_conv ppx_variants_conv ];
+  };
+
+  ppx_bin_prot = janePackage {
+    pname = "ppx_bin_prot";
+    version = "0.12.1";
+    hash = "1j0kjgmv58dmg3x5dj5zrfbm920rwq21lvkkaqq493y76cd0x8xg";
+    meta.description = "Generation of bin_prot readers and writers from types";
+    propagatedBuildInputs = [ bin_prot ppx_here ];
+  };
+
+  ppx_fail = janePackage {
+    pname = "ppx_fail";
+    hash = "0krsv6z9gi0ifxmw5ss6gwn108qhywyhbs41an10x9d5zpgf4l1n";
+    meta.description = "Add location to calls to failwiths";
+    propagatedBuildInputs = [ ppx_here ];
+  };
+
+  jst-config = janePackage {
+    pname = "jst-config";
+    hash = "0yxcz13vda1mdh9ah7qqxwfxpcqang5sgdssd8721rszbwqqaw93";
+    meta.description = "Compile-time configuration for Jane Street libraries";
+    buildInputs = [ ppx_assert ];
+  };
+
+  ppx_optcomp = janePackage {
+    pname = "ppx_optcomp";
+    hash = "0bdbx01kz0174g1szdhv3mcfqxqqf2frxq7hk13xaf6fsz04kwmj";
+    meta.description = "Optional compilation for OCaml";
+    propagatedBuildInputs = [ ppxlib ];
+  };
+
+  jane-street-headers = janePackage {
+    pname = "jane-street-headers";
+    hash = "0qa4llf812rjqa8nb63snmy8d8ny91p3anwhb50afb7vjaby8m34";
+    meta.description = "Jane Street C header files";
+  };
+
+  time_now = janePackage {
+    pname = "time_now";
+    hash = "169mgsb3rja4j1j9nj5xa7bbkd21p9kfpskqz0wjf9x2fpxqsniq";
+    meta.description = "Reports the current time";
+    buildInputs = [ jst-config ppx_optcomp ];
+    propagatedBuildInputs = [ jane-street-headers base ppx_base ];
+  };
+
+  ppx_module_timer = janePackage {
+    pname = "ppx_module_timer";
+    hash = "0yziakm7f4c894na76k1z4bp7azy82xc33mh36fj761w1j9zy3wm";
+    meta.description = "Ppx rewriter that records top-level module startup times";
+    propagatedBuildInputs = [ time_now ];
+  };
+
+  ppx_optional = janePackage {
+    pname = "ppx_optional";
+    hash = "07i0iipbd5xw2bc604qkwlcxmhncfpm3xmrr6svyj2ij86pyssh8";
+    meta.description = "Pattern matching on flat options";
+    propagatedBuildInputs = [ ppxlib ];
+  };
+
+  ppx_pipebang = janePackage {
+    pname = "ppx_pipebang";
+    hash = "1p4pdpl8h2bblbhpn5nk17ri4rxpz0aih0gffg3cl1186irkj0xj";
+    meta.description = "A ppx rewriter that inlines reverse application operators `|>` and `|!`";
+    propagatedBuildInputs = [ ppxlib ];
+  };
+
+  ppx_sexp_value = janePackage {
+    pname = "ppx_sexp_value";
+    hash = "1mg81834a6dx1x7x9zb9wc58438cabjjw08yhkx6i386hxfy891p";
+    meta.description = "A ppx rewriter that simplifies building s-expressions from ocaml values";
+    propagatedBuildInputs = [ ppx_here ppx_sexp_conv ];
+  };
+
+  typerep = janePackage {
+    pname = "typerep";
+    hash = "1psl6gsk06a62szh60y5sc1s92xpmrl1wpw3rhha09v884b7arbc";
+    meta.description = "Typerep is a library for runtime types";
+    propagatedBuildInputs = [ base ];
+  };
+
+  ppx_typerep_conv = janePackage {
+    pname = "ppx_typerep_conv";
+    hash = "09vik6qma1id44k8nz87y48l9wbjhqhap1ar1hpfdfkjai1hrzzq";
+    meta.description = "Generation of runtime types from type declarations";
+    propagatedBuildInputs = [ ppxlib typerep ];
+  };
+
+  ppx_jane = janePackage {
+    pname = "ppx_jane";
+    hash = "1a2602isqzsh640q20qbmarx0sc316mlsqc3i25ysv2kdyhh0kyw";
+    meta.description = "Standard Jane Street ppx rewriters";
+    propagatedBuildInputs = [ base_quickcheck ppx_bench ppx_bin_prot ppx_expect ppx_fail ppx_module_timer ppx_optcomp ppx_optional ppx_pipebang ppx_sexp_value ppx_stable ppx_typerep_conv ];
+  };
+
+  base_bigstring = janePackage {
+    pname = "base_bigstring";
+    hash = "0rbgyg511847fbnxad40prz2dyp4da6sffzyzl88j18cxqxbh1by";
+    meta.description = "String type based on [Bigarray], for use in I/O and C-bindings";
+    propagatedBuildInputs = [ ppx_jane ];
+  };
+
+  parsexp = janePackage {
+    pname = "parsexp";
+    hash = "1974i9s2c2n03iffxrm6ncwbd2gg6j6avz5jsxfd35scc2zxcd4l";
+    meta.description = "S-expression parsing library";
+    propagatedBuildInputs = [ base sexplib0 ];
+  };
+
+  sexplib = janePackage {
+    pname = "sexplib";
+    hash = "0780klc5nnv0ij6aklzra517cfnfkjdlp8ylwjrqwr8dl9rvxza2";
+    meta.description = "Library for serializing OCaml values to and from S-expressions";
+    propagatedBuildInputs = [ num parsexp ];
+  };
+
+  core_kernel = janePackage {
+    pname = "core_kernel";
+    version = "0.12.2";
+    hash = "0c85bjvadrb4pmjcg0gjk3bkkgka62r90pjm690mjvcbbv5zjxzj";
+    meta.description = "System-independent part of Core";
+    buildInputs = [ jst-config ];
+    propagatedBuildInputs = [ base_bigstring sexplib ];
+  };
+
+  spawn = janePackage {
+    pname = "spawn";
+    version = "0.13.0";
+    hash = "1w003k1kw1lmyiqlk58gkxx8rac7dchiqlz6ah7aj7bh49b36ppf";
+    meta.description = "Spawning sub-processes";
+    buildInputs = [ ppx_expect ];
+  };
+
+  core = janePackage {
+    pname = "core";
+    version = "0.12.3";
+    hash = "1vmjqiafkg45hqfvahx6jnlaww1q4a4215k8znbgprf0qn3zymnj";
+    meta.description = "System-independent part of Core";
+    buildInputs = [ jst-config ];
+    propagatedBuildInputs = [ core_kernel spawn ];
+  };
+
+  async_kernel = janePackage {
+    pname = "async_kernel";
+    hash = "1d9illx7vvpblj1i2r9y0f2yff2fbhy3rp4hhvamq1n9n3lvxmh2";
+    meta.description = "Monadic concurrency library";
+    propagatedBuildInputs = [ core_kernel ];
+  };
+
+  protocol_version_header = janePackage {
+    pname = "protocol_version_header";
+    hash = "14vqhx3r84rlfhcjq52gxdqksckiaswlck9s47g7y2z1lsc17v7r";
+    meta.description = "Protocol versioning";
+    propagatedBuildInputs = [ core_kernel ];
+  };
+
+  async_rpc_kernel = janePackage {
+    pname = "async_rpc_kernel";
+    hash = "1znhqbzx4fp58i7dbcgyv5rx7difbhb5d8cbqzv96yqvbn67lsjk";
+    meta.description = "Platform-independent core of Async RPC library";
+    propagatedBuildInputs = [ async_kernel protocol_version_header ];
+  };
+
+  async_unix = janePackage {
+    pname = "async_unix";
+    hash = "09h10rdyykbm88n6r9nb5a22mlb6vcxa04q6hvrcr0kys6qhhqmb";
+    meta.description = "Monadic concurrency library";
+    propagatedBuildInputs = [ async_kernel core ];
+  };
+
+  async_extra = janePackage {
+    pname = "async_extra";
+    hash = "10j4mwlyqvf67yrp5dwd857llqjinpnnykmlzw2gpmks9azxk6mh";
+    meta.description = "Monadic concurrency library";
+    propagatedBuildInputs = [ async_rpc_kernel async_unix ];
+  };
+
+  textutils = janePackage {
+    pname = "textutils";
+    hash = "0302awqihf3abib9mvzvn4g8m364hm6jxry1r3kc01hzybhy9acq";
+    meta.description = "Text output utilities";
+    propagatedBuildInputs = [ core ];
+  };
+
+  async = janePackage {
+    pname = "async";
+    hash = "0pk7z3h2gi21nfchvmjz2wx516bynf9vgwf84zf5qhvlvqqsmyrx";
+    meta.description = "Monadic concurrency library";
+    propagatedBuildInputs = [ async_extra textutils ];
+  };
+
+  async_ssl = janePackage {
+    pname = "async_ssl";
+    hash = "02ard8x5q5c42d9jdqmyzfx624yjq8cxxmvq3zb82hf6p8cc57ml";
+    meta.description = "An Async-pipe-based interface with OpenSSL";
+    propagatedBuildInputs = [ async ctypes openssl ];
+  };
+
+  async_find = janePackage {
+    pname = "async_find";
+    hash = "0qsz9f15s5rlk6za10s810v6nlkdxg2g9p1827lcpa7nhjcpi673";
+    meta.description = "Directory traversal with Async";
+    propagatedBuildInputs = [ async ];
+  };
+
+  re2 = janePackage {
+    pname = "re2";
+    hash = "1sw32lb0y501y971ij7287796lvfhs0nfgla895r74ymfks2rcjb";
+    meta.description = "OCaml bindings for RE2, Google's regular expression library";
+    propagatedBuildInputs = [ core_kernel ];
+  };
+
+  shell = janePackage {
+    pname = "shell";
+    hash = "158857rdr6qgglc5iksg0l54jgf51b5lmsw7nlazpxwdwc9fcn5n";
+    meta.description = "Yet another implementation of fork&exec and related functionality";
+    buildInputs = [ jst-config ];
+    propagatedBuildInputs = [ re2 textutils ];
+  };
+
+  async_shell = janePackage {
+    pname = "async_shell";
+    hash = "0cxln9hkc3cy522la9yi9p23qjwl69kqmadsq4lnjh5bxdad06sv";
+    meta.description = "Shell helpers for Async";
+    propagatedBuildInputs = [ async shell ];
+  };
+
+  core_bench = janePackage {
+    pname = "core_bench";
+    hash = "00hyzbbj19dkcw0vhfnc8w0ca3zkjriwwvl00ssa0a2g9mygijdm";
+    meta.description = "Benchmarking library";
+    propagatedBuildInputs = [ textutils ];
+  };
+
+  core_extended = janePackage {
+    pname = "core_extended";
+    hash = "1gwx66235irpf5krb1r25a3c7w52qhmass8hp7rdv89il9jn49w4";
+    meta.description = "Extra components that are not as closely vetted or as stable as Core";
+    propagatedBuildInputs = [ core ];
+  };
+
+  ### Packages at version 0.11, with dependencies at version 0.12
+
+  configurator = janePackage {
+    pname = "configurator";
+    version = "0.11.0";
+    hash = "0h686630cscav7pil8c3w0gbh6rj4b41dvbnwmicmlkc746q5bfk";
+    propagatedBuildInputs = [ stdio ];
+    meta.description = "Helper library for gathering system configuration";
+  };
+
+  ppx_core = janePackage {
+    pname = "ppx_core";
+    version = "0.11.0";
+    hash = "11hgm9mxig4cm3c827f6dns9mjv3pf8g6skf10x0gw9xnp1dmzmx";
+    propagatedBuildInputs = [ ppxlib ];
+    meta.description = "Deprecated (see ppxlib)";
+  };
+
+  ppx_driver = janePackage {
+    pname = "ppx_driver";
+    version = "0.11.0";
+    hash = "00kfx6js2kxk57k4v7hiqvwk7h35whgjihnxf75m82rnaf4yzvfi";
+    propagatedBuildInputs = [ ppxlib ];
+    meta.description = "Deprecated (see ppxlib)";
+  };
+
+  ppx_type_conv = janePackage {
+    pname = "ppx_type_conv";
+    version = "0.11.0";
+    hash = "04dbrglqqhkas25cpjz8xhjcbpk141c35qggzw66bn69izczfmaf";
+    propagatedBuildInputs = [ ppxlib ];
+    meta.description = "Deprecated (see ppxlib)";
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/ocaml-modules/janestreet/janePackage_0_12.nix b/nixpkgs/pkgs/development/ocaml-modules/janestreet/janePackage_0_12.nix
new file mode 100644
index 000000000000..5b7d9c3210d4
--- /dev/null
+++ b/nixpkgs/pkgs/development/ocaml-modules/janestreet/janePackage_0_12.nix
@@ -0,0 +1,19 @@
+{ lib, fetchFromGitHub, buildDunePackage, defaultVersion ? "0.12.0" }:
+
+{ pname, version ? defaultVersion, hash, ...}@args:
+
+buildDunePackage (args // {
+  inherit version;
+
+  minimumOCamlVersion = "4.07";
+
+  src = fetchFromGitHub {
+    owner = "janestreet";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = hash;
+  };
+
+  meta.license = lib.licenses.mit;
+  meta.homepage = "https://github.com/janestreet/${pname}";
+})
diff --git a/nixpkgs/pkgs/development/ocaml-modules/lacaml/default.nix b/nixpkgs/pkgs/development/ocaml-modules/lacaml/default.nix
index b316540e3d05..4556fb1eb416 100644
--- a/nixpkgs/pkgs/development/ocaml-modules/lacaml/default.nix
+++ b/nixpkgs/pkgs/development/ocaml-modules/lacaml/default.nix
@@ -9,7 +9,7 @@ stdenv.mkDerivation rec {
   src = fetchFromGitHub {
     owner = "mmottl";
     repo = "lacaml";
-    rev = "${version}";
+    rev = version;
     sha256 = "1aflg07cc9ak9mg1cr0qr368c9s141glwlarl5nhalf6hhq7ibcb";
   };
 
diff --git a/nixpkgs/pkgs/development/ocaml-modules/llvm/default.nix b/nixpkgs/pkgs/development/ocaml-modules/llvm/default.nix
index c91a57121379..3cebefb33edf 100644
--- a/nixpkgs/pkgs/development/ocaml-modules/llvm/default.nix
+++ b/nixpkgs/pkgs/development/ocaml-modules/llvm/default.nix
@@ -11,18 +11,20 @@ stdenv.mkDerivation {
   buildInputs = [ python cmake llvm ocaml findlib ctypes ];
 
   patches = [ (fetchpatch {
-    url = https://raw.githubusercontent.com/ocaml/opam-repository/master/packages/llvm/llvm.3.9/files/cmake.patch;
-    sha256 = "1fcc6ylfiw1npdhx7mrsj7h0dx7cym7i9664kpr76zqazb52ikm9";
+    url = https://raw.githubusercontent.com/ocaml/opam-repository/2bdc193f5a9305ea93bf0f0dfc1fbc327c8b9306/packages/llvm/llvm.7.0.0/files/fix-shared.patch;
+    sha256 = "1p98j3b1vrryfn1xa7i50m6mmm4dyw5ldafq6kyh9sfmdihz4zsx";
   })];
 
-  cmakeFlags = [ "-DLLVM_OCAML_OUT_OF_TREE=TRUE" ];
+  cmakeFlags = [
+    "-DLLVM_OCAML_OUT_OF_TREE=TRUE"
+    "-DLLVM_OCAML_INSTALL_PATH=${placeholder "out"}/ocaml"
+  ];
 
   buildFlags = "ocaml_all";
 
   installFlags = "-C bindings/ocaml";
 
   postInstall = ''
-    mv $out/lib/ocaml $out/ocaml
     mkdir -p $OCAMLFIND_DESTDIR/
     mv $out/ocaml $OCAMLFIND_DESTDIR/llvm
     mv $OCAMLFIND_DESTDIR/llvm/META{.llvm,}
diff --git a/nixpkgs/pkgs/development/ocaml-modules/logs/default.nix b/nixpkgs/pkgs/development/ocaml-modules/logs/default.nix
index 22c4216a88ff..15d2bde0ec6f 100644
--- a/nixpkgs/pkgs/development/ocaml-modules/logs/default.nix
+++ b/nixpkgs/pkgs/development/ocaml-modules/logs/default.nix
@@ -27,7 +27,7 @@ stdenv.mkDerivation rec {
 
   meta = with stdenv.lib; {
     description = "Logging infrastructure for OCaml";
-    homepage = "${webpage}";
+    homepage = webpage;
     inherit (ocaml.meta) platforms;
     maintainers = [ maintainers.sternenseemann ];
     license = licenses.isc;
diff --git a/nixpkgs/pkgs/development/ocaml-modules/mtime/default.nix b/nixpkgs/pkgs/development/ocaml-modules/mtime/default.nix
index f4e3586b43c1..f86909cc10b5 100644
--- a/nixpkgs/pkgs/development/ocaml-modules/mtime/default.nix
+++ b/nixpkgs/pkgs/development/ocaml-modules/mtime/default.nix
@@ -1,5 +1,5 @@
 { stdenv, lib, fetchurl, ocaml, findlib, ocamlbuild, topkg, js_of_ocaml
-, jsooSupport ? true
+, jsooSupport ? lib.versionAtLeast ocaml.version "4.03"
 }:
 
 with lib;
diff --git a/nixpkgs/pkgs/development/ocaml-modules/nocrypto/default.nix b/nixpkgs/pkgs/development/ocaml-modules/nocrypto/default.nix
index 9108fd248c01..06a87c072b4a 100644
--- a/nixpkgs/pkgs/development/ocaml-modules/nocrypto/default.nix
+++ b/nixpkgs/pkgs/development/ocaml-modules/nocrypto/default.nix
@@ -1,6 +1,6 @@
 { stdenv, fetchurl, fetchpatch, ocaml, findlib, ocamlbuild, topkg
 , cpuid, ocb-stubblr, sexplib
-, cstruct, zarith, ppx_sexp_conv
+, cstruct, zarith, ppx_sexp_conv, ppx_deriving
 , cstruct-lwt ? null
 }:
 
@@ -44,7 +44,7 @@ stdenv.mkDerivation rec {
   ];
 
   buildInputs = [ ocaml findlib ocamlbuild topkg cpuid ocb-stubblr ];
-  propagatedBuildInputs = [ cstruct ppx_sexp_conv sexplib zarith ] ++ optional withLwt cstruct-lwt;
+  propagatedBuildInputs = [ cstruct ppx_deriving ppx_sexp_conv sexplib zarith ] ++ optional withLwt cstruct-lwt;
 
   buildPhase = "${topkg.buildPhase} --with-lwt ${boolToString withLwt}";
   inherit (topkg) installPhase;
diff --git a/nixpkgs/pkgs/development/ocaml-modules/ocaml-result/default.nix b/nixpkgs/pkgs/development/ocaml-modules/ocaml-result/default.nix
index 362ad697934f..f6dee5ce3ce8 100644
--- a/nixpkgs/pkgs/development/ocaml-modules/ocaml-result/default.nix
+++ b/nixpkgs/pkgs/development/ocaml-modules/ocaml-result/default.nix
@@ -8,7 +8,7 @@ stdenv.mkDerivation {
   src = fetchFromGitHub {
     owner = "janestreet";
     repo = "result";
-    rev = "${version}";
+    rev = version;
     sha256 = "1jwzpcmxwgkfsbjz9zl59v12hf1vv4r9kiifancn9p8gm206g3g0";
   };
 
diff --git a/nixpkgs/pkgs/development/ocaml-modules/ocsigen-server/default.nix b/nixpkgs/pkgs/development/ocaml-modules/ocsigen-server/default.nix
index 9499bff84a10..df484b230c29 100644
--- a/nixpkgs/pkgs/development/ocaml-modules/ocsigen-server/default.nix
+++ b/nixpkgs/pkgs/development/ocaml-modules/ocsigen-server/default.nix
@@ -41,7 +41,7 @@ stdenv.mkDerivation rec {
   ''
   rm -rf $out/var/run
   wrapProgram $out/bin/ocsigenserver \
-    --prefix CAML_LD_LIBRARY_PATH : "${mkpath ssl "ssl"}:${mkpath ocamlnet "netsys"}:${mkpath ocamlnet "netstring"}:${mkpath ocaml_pcre "pcre"}:${mkpath cryptokit "cryptokit"}:${mkpath ocaml_sqlite3 "sqlite3"}"
+    --prefix CAML_LD_LIBRARY_PATH : "$CAML_LD_LIBRARY_PATH:${mkpath ssl "ssl"}:${mkpath ocamlnet "netsys"}:${mkpath ocamlnet "netstring"}:${mkpath ocaml_pcre "pcre"}:${mkpath ocaml_sqlite3 "sqlite3"}"
   '';
 
   dontPatchShebangs = true;
diff --git a/nixpkgs/pkgs/development/ocaml-modules/opam-file-format/default.nix b/nixpkgs/pkgs/development/ocaml-modules/opam-file-format/default.nix
index f61a690da190..4d308dc78b5f 100644
--- a/nixpkgs/pkgs/development/ocaml-modules/opam-file-format/default.nix
+++ b/nixpkgs/pkgs/development/ocaml-modules/opam-file-format/default.nix
@@ -7,7 +7,7 @@ stdenv.mkDerivation rec {
   src = fetchFromGitHub {
     owner = "ocaml";
     repo = "opam-file-format";
-    rev = "${version}";
+    rev = version;
     sha256 = "0fqb99asnair0043hhc8r158d6krv5nzvymd0xwycr5y72yrp0hv";
   };
 
diff --git a/nixpkgs/pkgs/development/ocaml-modules/otfm/default.nix b/nixpkgs/pkgs/development/ocaml-modules/otfm/default.nix
index c78adce0ac15..8d5bf290c6e0 100644
--- a/nixpkgs/pkgs/development/ocaml-modules/otfm/default.nix
+++ b/nixpkgs/pkgs/development/ocaml-modules/otfm/default.nix
@@ -30,7 +30,7 @@ stdenv.mkDerivation {
       provides low-level access to font tables and functions to decode some
       of them.
     '';
-    homepage = "${webpage}";
+    homepage = webpage;
     platforms = ocaml.meta.platforms or [];
     license = licenses.bsd3;
     maintainers = [ maintainers.jirkamarsik ];
diff --git a/nixpkgs/pkgs/development/ocaml-modules/otr/default.nix b/nixpkgs/pkgs/development/ocaml-modules/otr/default.nix
index caa2d01a4418..ba192b3c24b2 100644
--- a/nixpkgs/pkgs/development/ocaml-modules/otr/default.nix
+++ b/nixpkgs/pkgs/development/ocaml-modules/otr/default.nix
@@ -9,7 +9,7 @@ buildDunePackage rec {
   src = fetchFromGitHub {
     owner  = "hannesm";
     repo   = "ocaml-otr";
-    rev    = "${version}";
+    rev    = version;
     sha256 = "0iz6p85a0jxng9aq9blqsky173zaqfr6wlc5j48ad55lgwzlbih5";
   };
 
diff --git a/nixpkgs/pkgs/development/ocaml-modules/ppx_deriving_protobuf/default.nix b/nixpkgs/pkgs/development/ocaml-modules/ppx_deriving_protobuf/default.nix
new file mode 100644
index 000000000000..4af711ce3950
--- /dev/null
+++ b/nixpkgs/pkgs/development/ocaml-modules/ppx_deriving_protobuf/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchFromGitHub, buildDunePackage, cppo, ppx_tools, ppx_deriving
+, ppxfind }:
+
+buildDunePackage rec {
+  pname = "ppx_deriving_protobuf";
+  version = "2.7";
+
+  src = fetchFromGitHub {
+    owner = "ocaml-ppx";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0aq4f3gbkhhai0c8i5mcw2kpqy8l610f4dknwkrxh0nsizwbwryn";
+  };
+
+  buildInputs = [ cppo ppx_tools ppxfind ppx_deriving ];
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/ocaml-ppx/ppx_deriving_protobuf";
+    description = "A Protocol Buffers codec generator for OCaml";
+    license = licenses.mit;
+    maintainers = [ maintainers.vyorkin ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/ocaml-modules/ppx_deriving_yojson/default.nix b/nixpkgs/pkgs/development/ocaml-modules/ppx_deriving_yojson/default.nix
index 53e8265c3a74..d8a8f22ae704 100644
--- a/nixpkgs/pkgs/development/ocaml-modules/ppx_deriving_yojson/default.nix
+++ b/nixpkgs/pkgs/development/ocaml-modules/ppx_deriving_yojson/default.nix
@@ -4,7 +4,7 @@
 
 buildDunePackage rec {
   pname = "ppx_deriving_yojson";
-  version = "3.3";
+  version = "3.5.1";
 
   minimumOCamlVersion = "4.04";
 
@@ -12,7 +12,7 @@ buildDunePackage rec {
     owner = "ocaml-ppx";
     repo = "ppx_deriving_yojson";
     rev = "v${version}";
-    sha256 = "1gbfziw03r9azqlsmyn6izrgrf1xc30s88jgdany1kblpgq41rsz";
+    sha256 = "13nscby635vab9jf5pl1wgmdmqw192nf2r26m3gr01hp3bpn38zh";
   };
 
   buildInputs = [ ppxfind ounit ];
diff --git a/nixpkgs/pkgs/development/ocaml-modules/ppx_tools/default.nix b/nixpkgs/pkgs/development/ocaml-modules/ppx_tools/default.nix
index a8fb4af2a6bb..60b730e06403 100644
--- a/nixpkgs/pkgs/development/ocaml-modules/ppx_tools/default.nix
+++ b/nixpkgs/pkgs/development/ocaml-modules/ppx_tools/default.nix
@@ -23,7 +23,7 @@ let param = {
   "4.08" = {
     version = "5.3+4.08.0";
     sha256 = "0vdmhs3hpmh5iclx4lzgdpf362m4l35zprxs73r84z1yhr4jcr4m"; };
-}."${ocaml.meta.branch}";
+}.${ocaml.meta.branch};
 in
   stdenv.mkDerivation {
     name = "ocaml${ocaml.version}-ppx_tools-${param.version}";
diff --git a/nixpkgs/pkgs/development/ocaml-modules/rpclib/default.nix b/nixpkgs/pkgs/development/ocaml-modules/rpclib/default.nix
new file mode 100644
index 000000000000..2b4ab1818590
--- /dev/null
+++ b/nixpkgs/pkgs/development/ocaml-modules/rpclib/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub, buildDunePackage, alcotest, cmdliner, rresult, result, xmlm, yojson }:
+
+buildDunePackage rec {
+  pname = "rpclib";
+  version = "5.9.0";
+
+  minimumOCamlVersion = "4.04";
+
+  src = fetchFromGitHub {
+    owner = "mirage";
+    repo = "ocaml-rpc";
+    rev = "v${version}";
+    sha256 = "1swnnmmnkn53mxqpckdnd1j8bz0wksqznjbv0zamspxyqybmancq";
+  };
+
+  buildInputs = [ alcotest cmdliner yojson ];
+  propagatedBuildInputs = [ rresult result xmlm ];
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/mirage/ocaml-rpc";
+    description = "Light library to deal with RPCs in OCaml";
+    license = licenses.isc;
+    maintainers = [ maintainers.vyorkin ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/ocaml-modules/sawja/default.nix b/nixpkgs/pkgs/development/ocaml-modules/sawja/default.nix
index 31408ebe6a4a..01bc71928469 100644
--- a/nixpkgs/pkgs/development/ocaml-modules/sawja/default.nix
+++ b/nixpkgs/pkgs/development/ocaml-modules/sawja/default.nix
@@ -31,7 +31,7 @@ stdenv.mkDerivation {
 
   meta = with stdenv.lib; {
     description = "A library written in OCaml, relying on Javalib to provide a high level representation of Java bytecode programs";
-    homepage = "${webpage}";
+    homepage = webpage;
     license = licenses.gpl3Plus;
     maintainers = [ maintainers.vbgl ];
     platforms = ocaml.meta.platforms or [];
diff --git a/nixpkgs/pkgs/development/ocaml-modules/tls/default.nix b/nixpkgs/pkgs/development/ocaml-modules/tls/default.nix
index 2a29179f4cd4..b1a178128adb 100644
--- a/nixpkgs/pkgs/development/ocaml-modules/tls/default.nix
+++ b/nixpkgs/pkgs/development/ocaml-modules/tls/default.nix
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
   src = fetchFromGitHub {
     owner  = "mirleft";
     repo   = "ocaml-tls";
-    rev    = "${version}";
+    rev    = version;
     sha256 = "02wv4lia583imn3sfci4nqv6ac5nzig5j3yfdnlqa0q8bp9rfc6g";
   };
 
diff --git a/nixpkgs/pkgs/development/ocaml-modules/tsdl/default.nix b/nixpkgs/pkgs/development/ocaml-modules/tsdl/default.nix
index 17f66227e9c5..1bac71d301ff 100644
--- a/nixpkgs/pkgs/development/ocaml-modules/tsdl/default.nix
+++ b/nixpkgs/pkgs/development/ocaml-modules/tsdl/default.nix
@@ -34,7 +34,7 @@ stdenv.mkDerivation {
   inherit (topkg) buildPhase installPhase;
 
   meta = with stdenv.lib; {
-    homepage = "${webpage}";
+    homepage = webpage;
     description = "Thin bindings to the cross-platform SDL library";
     license = licenses.bsd3;
     platforms = ocaml.meta.platforms or [];
diff --git a/nixpkgs/pkgs/development/ocaml-modules/uucd/default.nix b/nixpkgs/pkgs/development/ocaml-modules/uucd/default.nix
index 773bec612d6a..097676e8abba 100644
--- a/nixpkgs/pkgs/development/ocaml-modules/uucd/default.nix
+++ b/nixpkgs/pkgs/development/ocaml-modules/uucd/default.nix
@@ -21,7 +21,7 @@ stdenv.mkDerivation rec {
 
   meta = with stdenv.lib; {
     description = "An OCaml module to decode the data of the Unicode character database from its XML representation";
-    homepage = "${webpage}";
+    homepage = webpage;
     platforms = ocaml.meta.platforms or [];
     maintainers = [ maintainers.vbgl ];
     license = licenses.bsd3;
diff --git a/nixpkgs/pkgs/development/ocaml-modules/uucp/default.nix b/nixpkgs/pkgs/development/ocaml-modules/uucp/default.nix
index b5074841eb1b..d657a6f02053 100644
--- a/nixpkgs/pkgs/development/ocaml-modules/uucp/default.nix
+++ b/nixpkgs/pkgs/development/ocaml-modules/uucp/default.nix
@@ -27,7 +27,7 @@ stdenv.mkDerivation {
 
   meta = with stdenv.lib; {
     description = "An OCaml library providing efficient access to a selection of character properties of the Unicode character database";
-    homepage = "${webpage}";
+    homepage = webpage;
     platforms = ocaml.meta.platforms or [];
     license = licenses.bsd3;
     maintainers = [ maintainers.vbgl ];
diff --git a/nixpkgs/pkgs/development/ocaml-modules/uunf/default.nix b/nixpkgs/pkgs/development/ocaml-modules/uunf/default.nix
index 263094ca2eb0..c8eb8ea532c4 100644
--- a/nixpkgs/pkgs/development/ocaml-modules/uunf/default.nix
+++ b/nixpkgs/pkgs/development/ocaml-modules/uunf/default.nix
@@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
 
   meta = with stdenv.lib; {
     description = "An OCaml module for normalizing Unicode text";
-    homepage = "${webpage}";
+    homepage = webpage;
     platforms = ocaml.meta.platforms or [];
     license = licenses.bsd3;
     maintainers = [ maintainers.vbgl ];
diff --git a/nixpkgs/pkgs/development/ocaml-modules/uuseg/default.nix b/nixpkgs/pkgs/development/ocaml-modules/uuseg/default.nix
index 404a463fd034..8fb9d207576d 100644
--- a/nixpkgs/pkgs/development/ocaml-modules/uuseg/default.nix
+++ b/nixpkgs/pkgs/development/ocaml-modules/uuseg/default.nix
@@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
 
   meta = with stdenv.lib; {
     description = "An OCaml library for segmenting Unicode text";
-    homepage = "${webpage}";
+    homepage = webpage;
     platforms = ocaml.meta.platforms or [];
     license = licenses.bsd3;
     maintainers = [ maintainers.vbgl ];
diff --git a/nixpkgs/pkgs/development/ocaml-modules/uutf/default.nix b/nixpkgs/pkgs/development/ocaml-modules/uutf/default.nix
index b6b943b2a036..863a4cbb8409 100644
--- a/nixpkgs/pkgs/development/ocaml-modules/uutf/default.nix
+++ b/nixpkgs/pkgs/development/ocaml-modules/uutf/default.nix
@@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
 
   meta = with stdenv.lib; {
     description = "Non-blocking streaming Unicode codec for OCaml";
-    homepage = "${webpage}";
+    homepage = webpage;
     platforms = ocaml.meta.platforms or [];
     license = licenses.bsd3;
     maintainers = [ maintainers.vbgl ];
diff --git a/nixpkgs/pkgs/development/ocaml-modules/vg/default.nix b/nixpkgs/pkgs/development/ocaml-modules/vg/default.nix
index dec0af5a9c12..0a127e49fdc2 100644
--- a/nixpkgs/pkgs/development/ocaml-modules/vg/default.nix
+++ b/nixpkgs/pkgs/development/ocaml-modules/vg/default.nix
@@ -53,7 +53,7 @@ stdenv.mkDerivation {
     Renderers for PDF, SVG and the HTML canvas are distributed with the
     module. An API allows to implement new renderers.
     '';
-    homepage = "${webpage}";
+    homepage = webpage;
     inherit (ocaml.meta) platforms;
     license = licenses.isc;
     maintainers = [ maintainers.jirkamarsik ];
diff --git a/nixpkgs/pkgs/development/ocaml-modules/xmlm/default.nix b/nixpkgs/pkgs/development/ocaml-modules/xmlm/default.nix
index 4324b62f9c6e..bb05b89d7bef 100644
--- a/nixpkgs/pkgs/development/ocaml-modules/xmlm/default.nix
+++ b/nixpkgs/pkgs/development/ocaml-modules/xmlm/default.nix
@@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
 
   meta = with stdenv.lib; {
     description = "An OCaml streaming codec to decode and encode the XML data format";
-    homepage = "${webpage}";
+    homepage = webpage;
     platforms = ocaml.meta.platforms or [];
     maintainers = [ maintainers.vbgl ];
     license = licenses.bsd3;
diff --git a/nixpkgs/pkgs/development/ocaml-modules/xtmpl/default.nix b/nixpkgs/pkgs/development/ocaml-modules/xtmpl/default.nix
index 4c5d1edcb09f..2c4cf4928db9 100644
--- a/nixpkgs/pkgs/development/ocaml-modules/xtmpl/default.nix
+++ b/nixpkgs/pkgs/development/ocaml-modules/xtmpl/default.nix
@@ -15,6 +15,8 @@ stdenv.mkDerivation rec {
     sha256 = "1hq6y4rhz958q40145k4av8hx8jyvspg78xf741samd7vc3jd221";
   };
 
+  patches = [ ./jsoo.patch ];
+
   buildInputs = [ ocaml findlib ppx_tools js_of_ocaml js_of_ocaml-ppx ];
   propagatedBuildInputs = [ iri re ];
 
diff --git a/nixpkgs/pkgs/development/ocaml-modules/xtmpl/jsoo.patch b/nixpkgs/pkgs/development/ocaml-modules/xtmpl/jsoo.patch
new file mode 100644
index 000000000000..7546dbca924a
--- /dev/null
+++ b/nixpkgs/pkgs/development/ocaml-modules/xtmpl/jsoo.patch
@@ -0,0 +1,26 @@
+diff --git a/xtmpl_js.ml b/xtmpl_js.ml
+index e0d3894..991d1b3 100644
+--- a/xtmpl_js.ml
++++ b/xtmpl_js.ml
+@@ -25,6 +25,8 @@
+ 
+ (** *)
+ 
++open Js_of_ocaml
++
+ let log s = Firebug.console##log (Js.string s);;
+ 
+ module X = Xtmpl_rewrite
+diff --git a/xtmpl_js.mli b/xtmpl_js.mli
+index d709896..5ed471c 100644
+--- a/xtmpl_js.mli
++++ b/xtmpl_js.mli
+@@ -25,6 +25,8 @@
+ 
+ (** Convenient functions to use in JS code *)
+ 
++open Js_of_ocaml
++
+ (** Create a new tree of DOM nodes from a given XML tree.
+   Errors are logged to the firebug console.
+   @param doc Default is [Dom_html.document].