summary refs log tree commit diff
path: root/gnu/packages/ocaml.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/ocaml.scm')
-rw-r--r--gnu/packages/ocaml.scm1650
1 files changed, 1147 insertions, 503 deletions
diff --git a/gnu/packages/ocaml.scm b/gnu/packages/ocaml.scm
index 78eab203de..093835d370 100644
--- a/gnu/packages/ocaml.scm
+++ b/gnu/packages/ocaml.scm
@@ -24,6 +24,7 @@
 ;;; Copyright © 2021 Ivan Gankevich <i.gankevich@spbu.ru>
 ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
+;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -182,10 +183,10 @@ OCaml and can effectively bootstrap OCaml 4.07.
 This package produces a native @command{ocamlc} and a bytecode @command{ocamllex}.")
       (license license:expat))))
 
-(define-public ocaml-4.13
+(define-public ocaml-4.14
   (package
     (name "ocaml")
-    (version "4.13.1")
+    (version "4.14.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -194,7 +195,7 @@ This package produces a native @command{ocamlc} and a bytecode @command{ocamllex
                     "/ocaml-" version ".tar.xz"))
               (sha256
                (base32
-                "1s7xwqidpjwfhnpfma4nb93gxfr7g9jfn03s1j03iyavmpgph7ck"))))
+                "0axcc7c23pf4qinz4vxgkba6pwziwbp9i2ydwzar7x9zlp6diarn"))))
     (build-system gnu-build-system)
     (native-search-paths
      (list (search-path-specification
@@ -244,7 +245,7 @@ functional, imperative and object-oriented styles of programming.")
 
 (define-public ocaml-4.09
   (package
-    (inherit ocaml-4.13)
+    (inherit ocaml-4.14)
     (version "4.09.0")
     (source (origin
               (method url-fetch)
@@ -460,7 +461,7 @@ depend: $(STDLIB_MLIS) $(STDLIB_DEPS)"))
        ("perl" ,perl)
        ("pkg-config" ,pkg-config)))))
 
-(define-public ocaml ocaml-4.13)
+(define-public ocaml ocaml-4.14)
 
 (define-public ocamlbuild
   (package
@@ -620,7 +621,7 @@ Software distribution.")
 (define-public ocaml-mccs
   (package
     (name "ocaml-mccs")
-    (version "1.1+13")
+    (version "1.1+14")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -629,7 +630,7 @@ Software distribution.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "15slv97jlvbaxj221wp4sjxk4lbdfyj9vcig0jwd4n54v89ksvib"))))
+                "17bvm0jhhs8h3p5sbb65asj53a8sxl634cc0kvcivpams74837zq"))))
     (build-system dune-build-system)
     (propagated-inputs (list ocaml-cudf))
     (home-page "https://www.i3s.unice.fr/~cpjm/misc/")
@@ -663,21 +664,20 @@ underlying solvers like Cplex, Gurobi, Lpsolver, Glpk, CbC, SCIP or WBO.")
                 "ocaml-dose3-Install-mli-cmx-etc.patch"))))
     (build-system ocaml-build-system)
     (arguments
-     `(#:configure-flags
+     `(#:tests? #f                      ;the test suite requires python 2
+       #:configure-flags
        ,#~(list (string-append "SHELL="
                                #+(file-append (canonical-package bash-minimal)
                                               "/bin/sh")))
        #:make-flags
        ,#~(list (string-append "LIBDIR=" #$output "/lib/ocaml/site-lib"))))
     (propagated-inputs
-      (list ocaml-graph ocaml-cudf ocaml-extlib ocaml-re))
+     (list ocaml-graph ocaml-cudf ocaml-extlib ocaml-re))
     (native-inputs
-      `(("perl" ,perl)
-        ("python" ,python-2) ; for a test script
-        ("python2-pyyaml" ,python2-pyyaml) ; for a test script
-        ("ocaml-extlib" ,ocaml-extlib)
-        ("ocamlbuild" ,ocamlbuild)
-        ("ocaml-cppo" ,ocaml-cppo)))
+     (list perl
+           ocaml-extlib
+           ocamlbuild
+           ocaml-cppo))
     (home-page "https://www.mancoosi.org/software/")
     (synopsis "Package distribution management framework")
     (description "Dose3 is a framework made of several OCaml libraries for
@@ -694,7 +694,7 @@ repository-wide uninstallability checks.")
 (define-public ocaml-down
   (package
     (name "ocaml-down")
-    (version "0.0.3")
+    (version "0.1.0")
     (source
       (origin
         (method url-fetch)
@@ -702,7 +702,7 @@ repository-wide uninstallability checks.")
                             version ".tbz"))
         (sha256
          (base32
-          "1nz2f5j17frgr2vrslcz9klmi6w9sm2vqwwwpi33ngcm3rgmsrlg"))))
+          "1q467y6qz96ndiybpmggdcnrcip49kxw2i93pb54j1xjzkv1vnl1"))))
     (build-system ocaml-build-system)
     (arguments
      `(#:tests? #f ;no tests
@@ -754,7 +754,7 @@ let () = String.split_on_char ':' (Sys.getenv \"OCAMLPATH\")
 (define-public ocaml-opam-file-format
   (package
     (name "ocaml-opam-file-format")
-    (version "2.1.3")
+    (version "2.1.4")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -763,7 +763,7 @@ let () = String.split_on_char ':' (Sys.getenv \"OCAMLPATH\")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1fxhppdmrysr2nb5z3c448h17np48f3ga9jih33acj78r4rdblcs"))))
+                "0dmnb1mqdy4913f9ma446hi5m99q7hfibj6j0m8x2wsfnfy2fw62"))))
     (build-system ocaml-build-system)
     (arguments
      `(#:tests? #f; No tests
@@ -899,10 +899,53 @@ Git-friendly development workflow.")
     ;; The 'LICENSE' file waives some requirements compared to LGPLv3.
     (license license:lgpl3)))
 
+(define-public ocaml-camlp-streams
+  (package
+    (name "ocaml-camlp-streams")
+    (version "5.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/ocaml/camlp-streams")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+          (base32 "1wd5k0irzwi841b27pbx0n5fdybbgx97184zm8cjajizd2j8w0g5"))))
+    (build-system dune-build-system)
+    (arguments
+     ;; No tests
+     `(#:tests? #f))
+    (home-page "https://github.com/ocaml/camlp-streams")
+    (synopsis "Stream and Genlex libraries for use with Camlp4 and Camlp5")
+    (description
+      "This package provides two library modules:
+
+@itemize
+@item Stream: imperative streams, with in-place update and memoization of
+the latest element produced.
+@item Genlex: a small parameterized lexical analyzer producing streams of
+tokens from streams of characters.
+@end itemize
+
+The two modules are designed for use with Camlp4 and Camlp5: The stream
+patterns and stream expressions of Camlp4/Camlp5 consume and produce data of
+type 'a Stream.t.  The Genlex tokenizer can be used as a simple lexical
+analyzer for Camlp4/Camlp5-generated parsers.
+
+The Stream module can also be used by hand-written recursive-descent parsers,
+but is not very convenient for this purpose.
+
+The Stream and Genlex modules have been part of the OCaml standard library for a
+long time, and have been distributed as part of the core OCaml system.  They
+will be removed from the OCaml standard library at some future point, but will
+be maintained and distributed separately in the camlpstreams package.")
+    (license license:lgpl2.1)))
+
 (define-public camlp5
   (package
     (name "camlp5")
-    (version "8.00.02")
+    (version "8.00.03")
     (source
      (origin
        (method git-fetch)
@@ -911,7 +954,7 @@ Git-friendly development workflow.")
              (commit (string-append "rel" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "03qm99h2380x0y69sppg10yz1mwx7smkscia7pa175wmilifx8vy"))))
+        (base32 "1fnvmaw9cland09pjx5h6w3f6fz9s23l4nbl4m9fcaa2i4dpraz6"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f  ; XXX TODO figure out how to run the tests
@@ -943,9 +986,9 @@ Git-friendly development workflow.")
                                                      "/lib/ocaml/camlp5/"))
              #t)))))
     (inputs
-     (list ocaml))
+     (list ocaml ocaml-camlp-streams))
     (native-inputs
-     (list perl))
+     (list perl ocaml-findlib))
     (home-page "https://camlp5.github.io/")
     (synopsis "Pre-processor Pretty Printer for OCaml")
     (description
@@ -1002,6 +1045,19 @@ written in Objective Caml.")
        (sha256
         (base32 "1vzdnvpj5dbj3ifx03v25pj2jj1ccav072v4d29pk1czdba2lzfc"))))
     (build-system dune-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-race
+           (lambda _
+             ;; There's a race between bng.o and bng_generic.c.  Both depend on
+             ;; the architecture specific bng.c, but only the latter declares
+             ;; the dependency.
+             (mkdir-p "_build/default/src")
+             (for-each
+               (lambda (f)
+                 (copy-file f (string-append "_build/default/" f)))
+               (find-files "src" "bng_.*\\.c")))))))
     (home-page "https://github.com/ocaml/num")
     (synopsis "Arbitrary-precision integer and rational arithmetic")
     (description "OCaml-Num contains the legacy Num library for
@@ -1648,7 +1704,7 @@ full_split, cut, rcut, etc..")
 (define dune-bootstrap
   (package
     (name "dune")
-    (version "3.0.3")
+    (version "3.2.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1657,7 +1713,7 @@ full_split, cut, rcut, etc..")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1ndn560fg0fg8n3wplmkg5px69h0g38pyma9wik85cmmqfxry14k"))))
+                "0fa8fkj2piis8b56phl6p77pl1na81krdnmmvyw16hq45zbmm9rk"))))
     (build-system ocaml-build-system)
     (arguments
      `(#:tests? #f; require odoc
@@ -2197,14 +2253,14 @@ dates and times.")
 (define-public ocaml-cmdliner
   (package
     (name "ocaml-cmdliner")
-    (version "1.0.4")
+    (version "1.1.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://erratique.ch/software/cmdliner/releases/"
                                   "cmdliner-" version ".tbz"))
               (sha256
                (base32
-                "1h04q0zkasd0mw64ggh4y58lgzkhg6yhzy60lab8k8zq9ba96ajw"))))
+                "1yxm4x34cbi06bfld601ds9drlbnyx0797ym3n6yyh4rlz1qgbm1"))))
     (build-system ocaml-build-system)
     (inputs
      (list ocaml-result))
@@ -2223,6 +2279,7 @@ dates and times.")
                (("Sys.readdir dir")
                 "let a = Sys.readdir dir in Array.sort String.compare a; a"))
              #t)))))
+    (properties `((ocaml4.07-variant . ,(delay ocaml4.07-cmdliner))))
     (home-page "https://erratique.ch/software/cmdliner")
     (synopsis "Declarative definition of command line interfaces for OCaml")
     (description "Cmdliner is a module for the declarative definition of command
@@ -2233,6 +2290,20 @@ generation. It supports programs with single or multiple commands and respects
 most of the POSIX and GNU conventions.")
     (license license:bsd-3)))
 
+(define-public ocaml4.07-cmdliner
+  (package-with-ocaml4.07
+    (package
+      (inherit ocaml-cmdliner)
+      (version "1.0.4")
+      (source (origin
+                (method url-fetch)
+                (uri (string-append "https://erratique.ch/software/cmdliner/releases/"
+                                    "cmdliner-" version ".tbz"))
+                (sha256
+                 (base32
+                  "1h04q0zkasd0mw64ggh4y58lgzkhg6yhzy60lab8k8zq9ba96ajw"))))
+      (properties '()))))
+
 (define-public ocaml-fmt
   (package
     (name "ocaml-fmt")
@@ -2329,7 +2400,16 @@ immutability.")
     (build-system dune-build-system)
     (arguments
      `(#:package "alcotest"
-       #:test-target "."))
+       #:test-target "."
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-test-format
+           (lambda _
+             ;; cmdliner changed the format and the tests fail
+             (substitute* "test/e2e/alcotest/failing/unknown_option.expected"
+               (("`") "'")
+               (("COMMAND") "[COMMAND]")
+               (("\\.\\.\\.") "…")))))))
     (native-inputs
      (list ocamlbuild))
     (propagated-inputs
@@ -2365,6 +2445,9 @@ simple (yet expressive) query language to select the tests to run.")
                 (sha256
                  (base32
                   "1frwi185z4aadmaf0vp8xk5227nyg7nmh28ijj5l7ncjr5slvhz8"))))
+      (arguments
+       `(#:package "alcotest"
+         #:test-target "."))
       (properties '()))))
 
 (define-public ocaml-ppx-tools
@@ -3407,7 +3490,7 @@ build system and allows external tools to analyse your project easily.")
 (define-public ocaml-cppo
   (package
     (name "ocaml-cppo")
-    (version "1.6.8")
+    (version "1.6.9")
     (source
       (origin
         (method git-fetch)
@@ -3416,7 +3499,7 @@ build system and allows external tools to analyse your project easily.")
                (commit (string-append "v" version))))
         (file-name (git-file-name name version))
         (sha256 (base32
-                 "0xjb1dnj8lvdcccskrhrakknd9q4vfy5330sjbqpf4h95dsz90k9"))))
+                 "1c8jlr2s0allw1h6czz5q24vn5jsnrrh44j7hjyilzaifm17dlrm"))))
     (build-system dune-build-system)
     (arguments
      `(#:tests? #f))
@@ -3475,7 +3558,7 @@ standard iterator type starting from 4.07.")
 (define-public ocaml-re
   (package
     (name "ocaml-re")
-    (version "1.10.3")
+    (version "1.10.4")
     (source
      (origin
        (method git-fetch)
@@ -3484,7 +3567,7 @@ standard iterator type starting from 4.07.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1lj94y3zj6qff1yizf311h5ww15djbmnb1g43wd0jz3afa9gk59m"))))
+        (base32 "1g0vmpx6ylv8m0w77zarn215pgb4czc6gcpb2fi5da1s307zwr0w"))))
     (build-system dune-build-system)
     (arguments
      `(#:test-target "."))
@@ -3548,7 +3631,7 @@ big- and little-endian, with their unsafe counter-parts.")
 (define-public ocaml-cstruct
   (package
     (name "ocaml-cstruct")
-    (version "6.0.1")
+    (version "6.1.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -3557,7 +3640,7 @@ big- and little-endian, with their unsafe counter-parts.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0gpyr3cf393j1ir7i2m2qhx75l21w6ad7imdd73xn0jy3pjg4wsj"))))
+                "1pwfkfs8zzr88slnvl5b28lx6w2k149ybgvrs6diay3qvwcmkhx5"))))
     (build-system dune-build-system)
     (arguments
      `(#:package "cstruct"
@@ -3593,7 +3676,7 @@ writing to these structures, and they are accessed via the Bigarray module.")
 (define-public ocaml-hex
   (package
     (name "ocaml-hex")
-    (version "1.4.0")
+    (version "1.5.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -3602,7 +3685,7 @@ writing to these structures, and they are accessed via the Bigarray module.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0c8nhibcwy0ykzca4jn3gqb8ylq21ff88y82gl60wyzijr64rn0q"))))
+                "0xnl5wxd2qrba7phm3mdrjwd2kk26kb17dv94ciwp49ljcj28qc1"))))
     (build-system dune-build-system)
     (arguments
      `(#:test-target "."))
@@ -3717,7 +3800,7 @@ JSON.")
 (define-public ocaml-easy-format
   (package
     (name "ocaml-easy-format")
-    (version "1.3.2")
+    (version "1.3.3")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -3726,7 +3809,7 @@ JSON.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1fc95q2ypck6m6rv3kiawwilh5ac93v2hcp823mj608d5kj79xkb"))))
+                "1dl5faibbb5nm3v70ix7k6208yib1954x20nmw3g56wff5vdlzid"))))
     (build-system dune-build-system)
     (arguments
      `(#:package "easy-format"
@@ -3810,14 +3893,14 @@ tool and piqi-ocaml.")
 (define-public ocaml-uuidm
   (package
     (name "ocaml-uuidm")
-    (version "0.9.7")
+    (version "0.9.8")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://erratique.ch/software/uuidm/"
                                   "releases/uuidm-" version ".tbz"))
               (sha256
                (base32
-                "1ivxb3hxn9bk62rmixx6px4fvn52s4yr1bpla7rgkcn8981v45r8"))))
+                "1cr6xlzla9fmd587lfhzac0icifspjnqi9f4cdafshj3jn85nrpw"))))
     (build-system ocaml-build-system)
     (arguments
      `(#:build-flags
@@ -3830,6 +3913,7 @@ tool and piqi-ocaml.")
     (propagated-inputs
      `(("cmdliner" ,ocaml-cmdliner)
        ("topkg" ,ocaml-topkg)))
+    (properties `((ocaml4.07-variant . ,(delay ocaml4.07-uuidm))))
     (home-page "https://erratique.ch/software/uuidm")
     (synopsis "Universally unique identifiers for OCaml")
     (description "Uuidm is an OCaml module implementing 128 bits universally
@@ -3837,6 +3921,20 @@ unique identifiers (UUIDs) version 3, 5 (named based with MD5, SHA-1 hashing)
 and 4 (random based) according to RFC 4122.")
     (license license:isc)))
 
+(define-public ocaml4.07-uuidm
+  (package-with-ocaml4.07
+    (package
+      (inherit ocaml-uuidm)
+      (version "0.9.7")
+      (source (origin
+                (method url-fetch)
+                (uri (string-append "http://erratique.ch/software/uuidm/"
+                                    "releases/uuidm-" version ".tbz"))
+                (sha256
+                 (base32
+                  "1ivxb3hxn9bk62rmixx6px4fvn52s4yr1bpla7rgkcn8981v45r8"))))
+      (properties '()))))
+
 (define-public ocaml-graph
   (package
     (name "ocaml-graph")
@@ -4146,7 +4244,7 @@ instead of bindings to a C library.")
 (define-public ocaml-utop
   (package
     (name "ocaml-utop")
-    (version "2.9.0")
+    (version "2.9.1")
     (source
      (origin
        (method git-fetch)
@@ -4155,7 +4253,7 @@ instead of bindings to a C library.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1mdpqc1b67p5rm2jsbwy0gjjgdlfqcakjyh1cwdj959ykz4zy9ld"))))
+        (base32 "1pmsmi0j4gb1vsd69j0bppkv79wbwz5xcffq78n1i2ibhff6r4j0"))))
     (build-system dune-build-system)
     (arguments
      `(#:test-target "."))
@@ -4197,7 +4295,7 @@ sensitive completion, colors, and more.")
 (define-public ocaml-integers
   (package
     (name "ocaml-integers")
-    (version "0.6.0")
+    (version "0.7.0")
     (home-page "https://github.com/ocamllabs/ocaml-integers")
     (source (origin
               (method git-fetch)
@@ -4207,7 +4305,7 @@ sensitive completion, colors, and more.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "07qk7dgxykn528qvhfwa0j402yr58y1y84ivpi1ji1lvk0qddxcs"))))
+                "0c0bmy53ag6504kih0cvnp4yf7mbcimb18m1mgs592ffb0zj1rff"))))
     (build-system dune-build-system)
     (arguments
      `(#:tests? #f)) ; no tests
@@ -4222,7 +4320,7 @@ long and size_t whose sizes depend on the host platform.")
 (define-public ocaml-ctypes
   (package
    (name "ocaml-ctypes")
-   (version "0.20.0")
+   (version "0.20.1")
    (home-page "https://github.com/ocamllabs/ocaml-ctypes")
    (source (origin
              (method git-fetch)
@@ -4232,12 +4330,10 @@ long and size_t whose sizes depend on the host platform.")
              (file-name (git-file-name name version))
              (sha256
               (base32
-               "13mq6i08f217fj2lq55psji453nmqp136sjxhg25hjb2z0gv9gky"))))
+               "0ilzq9qzvwv9rc08cc9wchsx636zp870i7qvqmbigaa2qb812m0z"))))
    (build-system ocaml-build-system)
    (arguments
-    `(#:make-flags
-      (list (string-append "INSTALL_HEADERS = $(wildcard $($(PROJECT).dir)/*.h)"))
-      #:phases
+    `(#:phases
       (modify-phases %standard-phases
         (add-after 'unpack 'make-writable
           (lambda _
@@ -4442,7 +4538,7 @@ syntax checking on dedukti files.")
 (define-public ocaml-jst-config
   (package
     (name "ocaml-jst-config")
-    (version "0.14.1")
+    (version "0.15.1")
     (source
       (origin
         (method git-fetch)
@@ -4452,7 +4548,7 @@ syntax checking on dedukti files.")
         (file-name (git-file-name name version))
         (sha256
          (base32
-          "0sak7rrix8vd2bscbjxbxi1d9jyd27ik59dpybfxhzhsn9s1wllv"))))
+          "1yp5p63clvaxmkf7vlasgyapxc31x29c154pyq63n0fvi2fpf4y3"))))
     (build-system dune-build-system)
     (arguments '(#:tests? #f))           ; no tests
     (propagated-inputs
@@ -4469,13 +4565,14 @@ recommend using this package directly.")
 (define-public ocaml-jane-street-headers
   (package
     (name "ocaml-jane-street-headers")
-    (version "0.14.0")
+    (version "0.15.0")
     (source
      (janestreet-origin
       "jane-street-headers" version
-      "028yxb4h3iy025iy89v8653m5brh7flrjshghs4x99pd690pmfs7"))
+      "1r27r0bxxa0iaah5rm84lwhrmh784vfpmb6056hpv0p34rxs7r1l"))
     (build-system dune-build-system)
     (arguments '(#:tests? #f))           ; no tests
+    (properties `((ocaml4.07-variant . ,(delay ocaml4.07-jane-street-headers))))
     (home-page "https://github.com/janestreet/jane-street-headers")
     (synopsis "Jane Street C header files")
     (description "C header files shared between the various Jane Street
@@ -4485,11 +4582,11 @@ packages.")
 (define-public ocaml-time-now
   (package
     (name "ocaml-time-now")
-    (version "0.14.0")
+    (version "0.15.0")
     (source
      (janestreet-origin
       "time_now" version
-      "0hkn2jw4dz5gflnsblskl5wp6z7zbrahwjmaxmsskfviwjg82cqh"))
+      "1a6b1f55mwci1bd8w8vji0qn6wbs60jbwixvwgy4klx2blq57cqk"))
     (build-system dune-build-system)
     (arguments '(#:tests? #f))           ; no tests
     (propagated-inputs
@@ -4507,7 +4604,7 @@ since the start of the Unix epoch.")
 (define-public ocaml-ppx-inline-test
   (package
     (name "ocaml-ppx-inline-test")
-    (version "0.14.1")
+    (version "0.15.0")
     (home-page "https://github.com/janestreet/ppx_inline_test")
     (source
      (origin
@@ -4518,7 +4615,7 @@ since the start of the Unix epoch.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1ajdna1m9l1l3nfigyy33zkfa3yarfr6s086jdw2pcfwlq1fhhl4"))))
+         "1a0gaj9p6gbn5j7c258mnzr7yjlq0hqi3aqqgyj1g2dbk1sxdbjz"))))
     (build-system dune-build-system)
     (arguments
      `(#:tests? #f)) ;see home page README for further information
@@ -4760,7 +4857,7 @@ format}.  @code{craml} is released as a single binary (called @code{craml}).")
 (define-public ocaml-dot-merlin-reader
   (package
     (name "ocaml-dot-merlin-reader")
-    (version "4.4-413")
+    (version "4.5-414")
     (source
      (origin
        (method git-fetch)
@@ -4770,7 +4867,7 @@ format}.  @code{craml} is released as a single binary (called @code{craml}).")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0wijg1vh2q6yr46vkv34vvksligd0ajl4hv7m6qbz3ywqr8akg23"))))
+         "125gyk63fg9plqkyrkl3wvpr3czjxgvshf4496fc4swldl7z587c"))))
     (build-system dune-build-system)
     (arguments '(#:package "dot-merlin-reader"
                  #:tests? #f))          ; no tests
@@ -4927,11 +5024,11 @@ exclusion algorithms are typical examples of such systems.")
 (define-public ocaml-sexplib0
   (package
     (name "ocaml-sexplib0")
-    (version "0.14.0")
+    (version "0.15.0")
     (home-page "https://github.com/janestreet/sexplib0")
     (source
      (janestreet-origin "sexplib0" version
-                        "0adrc0r1vvvr41dcpj8jwkzh1dfgqf0mks9xlnnskqfm3a51iavg"))
+                        "1fpg991n578m11r0ki4als4c76s3sp703b4khivx40v48402qill"))
     (build-system dune-build-system)
     (arguments `(#:tests? #f)) ;no tests
     (properties `((ocaml4.07-variant . ,(delay ocaml4.07-sexplib0))))
@@ -4957,7 +5054,7 @@ that was developed by Jane Street, the largest industrial user of OCaml.")
 (define-public ocaml-parsexp
   (package
     (name "ocaml-parsexp")
-    (version "0.14.2")
+    (version "0.15.0")
     (home-page "https://github.com/janestreet/parsexp")
     (source (origin
               (method git-fetch)
@@ -4967,7 +5064,7 @@ that was developed by Jane Street, the largest industrial user of OCaml.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "14yi0licf1cp6b7qny5pz6dmlalqdksx0m0kzcrwi6byjxwjkbi9"))))
+                "1grzpxi39318vcqhwf723hqh11k68irh59zb3dyg9lw8wjn7752a"))))
     (build-system dune-build-system)
     (inputs
      (list ocaml-sexplib0 ocaml-base))
@@ -5014,11 +5111,11 @@ parsexp_io.")
 (define-public ocaml-sexplib
   (package
     (name "ocaml-sexplib")
-    (version "0.14.0")
+    (version "0.15.0")
     (home-page "https://github.com/janestreet/sexplib")
     (source
      (janestreet-origin "sexplib" version
-                        "12rlnc6fcrjfdn3gs2agi418sj54ighhs6dfll37zcv7mgywblm2"))
+                        "1xs55f11yhscnfrzpvy1vn05j6xi9kxy097465624l615j7k8qm5"))
     (build-system dune-build-system)
     (propagated-inputs
      (list ocaml-base ocaml-num ocaml-parsexp ocaml-sexplib0))
@@ -5043,7 +5140,7 @@ functionality for parsing and pretty-printing s-expressions.")
 (define-public ocaml-base
   (package
     (name "ocaml-base")
-    (version "0.14.3")
+    (version "0.15.0")
     (home-page "https://github.com/janestreet/base")
     (source
       (origin
@@ -5054,7 +5151,7 @@ functionality for parsing and pretty-printing s-expressions.")
         (file-name (git-file-name name version))
         (sha256
          (base32
-          "1cqpdpvhr4zns1lpdm2w0p6q400mc1z91hd716mb062ng83n2nsf"))))
+          "1qyycqqr4dijvxm4hhy79c964wd91kpsfvb89kna1qwgllg0hrpj"))))
     (build-system dune-build-system)
     (propagated-inputs
      (list ocaml-sexplib0))
@@ -5139,11 +5236,11 @@ is now @code{Ocaml_common.Ast_helper}.")
 (define-public ocaml-stdio
   (package
     (name "ocaml-stdio")
-    (version "0.14.0")
+    (version "0.15.0")
     (home-page "https://github.com/janestreet/stdio")
     (source
      (janestreet-origin "stdio" version
-                        "1hj5hraprqy2i90a690l11yjszvb99j818q3d684ryx6p2lddk0l"))
+                        "0jsyg4jlp76d9gx1fngms6nfs7dcpsysdsvkywjq9a663n994wn3"))
     (build-system dune-build-system)
     (propagated-inputs
      (list ocaml-base ocaml-sexplib0))
@@ -5225,7 +5322,7 @@ as part of the same ocaml-migrate-parsetree driver.")
 (define-public ocaml-ppxlib
   (package
     (name "ocaml-ppxlib")
-    (version "0.24.0")
+    (version "0.25.0")
     (home-page "https://github.com/ocaml-ppx/ppxlib")
     (source
      (origin
@@ -5236,8 +5333,25 @@ as part of the same ocaml-migrate-parsetree driver.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1nkkdvqifa36hxj6msd74ld4dfd749d6d9ygfj7zsm328rqvpqf2"))))
+         "0wlqvyqy9ccp7z981blv42aqwq7zfq93cakbahjyy48hiiir6vp2"))))
     (build-system dune-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-test-format
+           (lambda _
+             ;; Since sexplib >= 0.15, error formating has changed
+             (substitute* "test/driver/exception_handling/run.t"
+               (("\\(Failure ") "Failure("))
+             (substitute* "test/base/test.ml"
+               (("Invalid_argument \\((.*)\\)." _ m)
+                (string-append "Invalid_argument " m "."))
+               (("\\(Invalid_argument (.*)\\)" _ m)
+                (string-append "Invalid_argument " m ".")))
+             (substitute* "test/ppx_import_support/test.ml"
+               (("\\(Failure") "Failure")
+               (("  \"(Some ppx-es.*)\")" _ m)
+                (string-append " \"" m "\"."))))))))
     (propagated-inputs
      (list ocaml-base
            ocaml-compiler-libs
@@ -5308,10 +5422,10 @@ OCaml AST in the OCaml syntax;
 (define-public ocaml-ppx-compare
   (package
     (name "ocaml-ppx-compare")
-    (version "0.14.0")
+    (version "0.15.0")
     (source
      (janestreet-origin "ppx_compare" version
-                        "0mqxa2s194nif7x4fjn1p5gd9i3bakr8nv27gf8x1g5nmi8q9pmp"))
+                        "11bkw7fgzfay8ws0piwphqip3y2lk2c9s2gil3zisnbvka92h1va"))
     (build-system dune-build-system)
     (arguments
      ;; Tests are currenlty failing
@@ -5352,10 +5466,10 @@ by making sure that you only compare comparable values.")
 (define-public ocaml-fieldslib
   (package
     (name "ocaml-fieldslib")
-    (version "0.14.0")
+    (version "0.15.0")
     (source (janestreet-origin
              "fieldslib" version
-             "10n5y376fb5jgqk9h8vq158rm1b36h9lzh6p11q33h6xgvb1v6n3"))
+             "083izf854vzmi5zj63r7ipjf09y1dqf7iy8n6r4663444xrzs2h5"))
     (build-system dune-build-system)
     (arguments `(#:tests? #f)) ; No tests
     (propagated-inputs
@@ -5382,10 +5496,10 @@ of a record and create new record values.")
 (define-public ocaml-variantslib
   (package
     (name "ocaml-variantslib")
-    (version "0.14.0")
+    (version "0.15.0")
     (source
      (janestreet-origin "variantslib" version
-              "11zp27gh282dx9ifbhcp6i7fkc97fvk8amaj58mf1g1hwklc0lm3"))
+              "12dssx4by6rgjzfrvksz83hkcpmsq0brn87dh22pv1rrwhw79n75"))
     (build-system dune-build-system)
     (arguments
      ;; No tests
@@ -5419,7 +5533,7 @@ standard library.")
 (define-public ocaml-ppx-fields-conv
   (package
     (name "ocaml-ppx-fields-conv")
-    (version "0.14.2")
+    (version "0.15.0")
     (home-page "https://github.com/janestreet/ppx_fields_conv")
     (source
      (origin
@@ -5430,7 +5544,7 @@ standard library.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1zwirwqry24b48bg7d4yc845hvcirxyymzbw95aaxdcck84d30n8"))))
+         "094wsnw7fcwgl9xg6vkjb0wbgpn9scsp847yhdd184sz9v1amz14"))))
     (build-system dune-build-system)
     (propagated-inputs
      (list ocaml-base ocaml-fieldslib ocaml-migrate-parsetree
@@ -5457,7 +5571,7 @@ new record values.")
 (define-public ocaml-ppx-sexp-conv
   (package
     (name "ocaml-ppx-sexp-conv")
-    (version "0.14.3")
+    (version "0.15.0")
     (home-page "https://github.com/janestreet/ppx_sexp_conv")
     (source
      (origin
@@ -5468,10 +5582,10 @@ new record values.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0dbri9d00ydi0dw1cavswnqdmhjaaz80vap29ns2lr6mhhlvyjmj"))))
+         "1fyf7hgxprn7pj58rmmrfpv938a0avpzvvk6wzihpmfm6whgbdm8"))))
     (build-system dune-build-system)
     (propagated-inputs
-     (list ocaml-base ocaml-migrate-parsetree ocaml-ppxlib))
+     (list ocaml-base ocaml-ppxlib))
     (properties `((upstream-name . "ppx_sexp_conv")
                   (ocaml4.07-variant . ,(delay ocaml4.07-ppx-sexp-conv))))
     (synopsis "Generation of S-expression conversion functions from type definitions")
@@ -5499,7 +5613,7 @@ definitions.")
 (define-public ocaml-ppx-variants-conv
   (package
     (name "ocaml-ppx-variants-conv")
-    (version "0.14.2")
+    (version "0.15.0")
     (source
      (origin
        (method git-fetch)
@@ -5509,7 +5623,7 @@ definitions.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1p11fiz4m160hs0xzg4g9rxchp053sz3s3d1lyciqixad1xi47a4"))))
+         "1dh0bw9dn246k00pymf59yjkl6x6bxd76lkk9b5xpq2692wwlc3s"))))
     (build-system dune-build-system)
     (propagated-inputs
      (list ocaml-base ocaml-variantslib ocaml-migrate-parsetree
@@ -5546,7 +5660,7 @@ variant types.")
 (define-public ocaml-ppx-custom-printf
   (package
     (name "ocaml-ppx-custom-printf")
-    (version "0.14.1")
+    (version "0.15.0")
     (home-page "https://github.com/janestreet/ppx_custom_printf")
     (source
      (origin
@@ -5557,7 +5671,7 @@ variant types.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0c1m65kn27zvwmfwy7kk46ga76yw2a3ik9jygpy1b6nn6pi026w9"))))
+         "1k8nmq6kwqz2wpkm9ymq749dz1vd8lxrjc711knp1wyz5935hnsv"))))
     (build-system dune-build-system)
     (propagated-inputs
      (list ocaml-base ocaml-ppx-sexp-conv ocaml-migrate-parsetree
@@ -5580,33 +5694,30 @@ string conversion.")
        "11b73smf3g3bpd9lg014pr4rx285nk9mnk6g6464ph51jv0sqzhj"))
      (properties `((upstream-name . "ppx_custom_printf"))))))
 
-(define-public ocaml4.07-bin-prot
+(define-public ocaml-bin-prot
   (package
-    (name "ocaml4.07-bin-prot")
-    (version "0.11.0")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://ocaml.janestreet.com/ocaml-core/v"
-                                  (version-major+minor version)
-                                  "/files/bin_prot-v" version ".tar.gz"))
-              (sha256
-               (base32
-                "1rsd91gx36prj4whi76nsiz1bzpgal9nzyw3pxdz1alv4ilk2il6"))))
+    (name "ocaml-bin-prot")
+    (version "0.15.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/janestreet/bin_prot")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+          (base32 "1qfqglscc25wwnjx7byqmjcnjww1msnr8940gyg8h93wdq43fjnh"))))
     (build-system dune-build-system)
-    (inputs
-      `(("ocaml-base" ,(package-with-ocaml4.07 ocaml-base))
-        ("ocaml-ppx-compare" ,(package-with-ocaml4.07 ocaml-ppx-compare))
-        ("ocaml-ppx-custom-printf" ,(package-with-ocaml4.07 ocaml-ppx-custom-printf))
-        ("ocaml-ppx-fields-conv" ,(package-with-ocaml4.07 ocaml-ppx-fields-conv))
-        ("ocaml-ppx-sexp-conv" ,(package-with-ocaml4.07 ocaml-ppx-sexp-conv))
-        ("ocaml-ppx-variants-conv" ,(package-with-ocaml4.07 ocaml-ppx-variants-conv))
-        ("ocaml-migrate-parsetree"
-         ,(package-with-ocaml4.07 ocaml-migrate-parsetree))))
-    (arguments
-     `(#:ocaml ,ocaml-4.07
-       #:findlib ,ocaml4.07-findlib
-       #:dune ,ocaml4.07-dune))
-    (properties `((upstream-name . "bin_prot")))
+    (propagated-inputs
+      (list ocaml-base
+            ocaml-ppx-compare
+            ocaml-ppx-custom-printf
+            ocaml-ppx-fields-conv
+            ocaml-ppx-optcomp
+            ocaml-ppx-sexp-conv
+            ocaml-ppx-variants-conv))
+    (properties `((upstream-name . "bin_prot")
+                  (ocaml4.07-variant . ,(delay ocaml4.07-bin-prot))))
     (home-page "https://github.com/janestreet/bin_prot")
     (synopsis "Binary protocol generator")
     (description "This library contains functionality for reading and writing
@@ -5615,9 +5726,31 @@ typically supporting type-safe marshalling and unmarshalling of even highly
 structured values at speeds sufficient to saturate a gigabit connection.  The
 protocol is also heavily optimized for size, making it ideal for long-term
 storage of large amounts of data.")
-    (license (list
-               license:asl2.0
-               license:bsd-3))))
+    (license license:expat)))
+
+(define-public ocaml4.07-bin-prot
+  (package-with-ocaml4.07
+    (package
+      (inherit ocaml-bin-prot)
+      (version "0.11.0")
+      (source (origin
+                (method url-fetch)
+                (uri (string-append "https://ocaml.janestreet.com/ocaml-core/v"
+                                    (version-major+minor version)
+                                    "/files/bin_prot-v" version ".tar.gz"))
+                (sha256
+                 (base32
+                  "1rsd91gx36prj4whi76nsiz1bzpgal9nzyw3pxdz1alv4ilk2il6"))))
+      (propagated-inputs (list ocaml-base
+                               ocaml-ppx-compare
+                               ocaml-ppx-custom-printf
+                               ocaml-ppx-fields-conv
+                               ocaml-ppx-variants-conv
+                               ocaml-migrate-parsetree))
+      (properties '())
+      (license (list
+                 license:asl2.0
+                 license:bsd-3)))))
 
 (define-public ocaml-octavius
   (package
@@ -5651,10 +5784,10 @@ storage of large amounts of data.")
 (define-public ocaml-ppx-hash
   (package
     (name "ocaml-ppx-hash")
-    (version "0.14.0")
+    (version "0.15.0")
     (source
      (janestreet-origin "ppx_hash" version
-                "0x4wgdvhgd8a49bzari52jpkykxpv6ncgp5ncda3xgg0a9r49s8n"))
+                "048pim0xicj8j9whd5lnchf62788sk3w89h12aybbalk1xm6dfs5"))
     (build-system dune-build-system)
     (propagated-inputs
      (list ocaml-base ocaml-ppx-compare ocaml-ppx-sexp-conv
@@ -5688,11 +5821,11 @@ hash functions from type exrpessions and definitions.")
 (define-public ocaml-ppx-enumerate
   (package
     (name "ocaml-ppx-enumerate")
-    (version "0.14.0")
+    (version "0.15.0")
     (source
      (janestreet-origin
       "ppx_enumerate" version
-      "1ij6sffgqhnjwnj9brhrrw1c6xgxlh0s6r17x1qkgnyrc73gfsz8"))
+      "16yhk3xk2hskmlspb6mikmdp60qaypyiqgq9p17kxpial6fgpdfy"))
     (build-system dune-build-system)
     (arguments
      `(#:tests? #f)) ; no test suite
@@ -5725,43 +5858,56 @@ many values).")
                  "0spx9k1v7vjjb6sigbfs69yndgq76v114jhxvzjmffw7q989cyhr"))))
      (properties `((upstream-name . "ppx_enumerate"))))))
 
-(define-public ocaml4.07-ppx-bench
+(define-public ocaml-ppx-bench
   (package
-    (name "ocaml4.07-ppx-bench")
-    (version "0.11.0")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://ocaml.janestreet.com/ocaml-core/v"
-                                  (version-major+minor version)
-                                  "/files/ppx_bench-v" version ".tar.gz"))
-              (sha256
-               (base32
-                "0ys4pblbcjbk9dn073rqiwm7r6rc7fah03j7riklkwnb5n44andl"))))
+    (name "ocaml-ppx-bench")
+    (version "0.15.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/janestreet/ppx_bench")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+          (base32 "0bc0gbm922417wqisafxh35jslcp7xy1s0h0a1q32rhx0ivxx3g6"))))
     (build-system dune-build-system)
     (arguments
      ;; No tests
-     `(#:tests? #f
-       #:ocaml ,ocaml-4.07
-       #:findlib ,ocaml4.07-findlib
-       #:dune ,ocaml4.07-dune))
-    (propagated-inputs
-     `(("ocaml-ppx-inline-test" ,(package-with-ocaml4.07 ocaml-ppx-inline-test))
-        ("ocaml-migrate-parsetree"
-         ,(package-with-ocaml4.07 ocaml-migrate-parsetree))
-        ("ocaml-ppxlib" ,(package-with-ocaml4.07 ocaml-ppxlib))))
-    (properties `((upstream-name . "ppx_bench")))
+     `(#:tests? #f))
+    (propagated-inputs (list ocaml-ppx-inline-test ocaml-ppxlib))
+    (properties `((upstream-name . "ppx_bench")
+                  (ocaml4.07-variant . ,(delay ocaml4.07-ppx-bench))))
     (home-page "https://github.com/janestreet/ppx_bench")
     (synopsis "Syntax extension for writing in-line benchmarks in ocaml code")
     (description "Syntax extension for writing in-line benchmarks in ocaml code.")
-    (license license:asl2.0)))
+    (license license:expat)))
+
+(define-public ocaml4.07-ppx-bench
+  (package-with-ocaml4.07
+    (package
+      (inherit ocaml-ppx-bench)
+      (version "0.11.0")
+      (source (origin
+                (method url-fetch)
+                (uri (string-append "https://ocaml.janestreet.com/ocaml-core/v"
+                                    (version-major+minor version)
+                                    "/files/ppx_bench-v" version ".tar.gz"))
+                (sha256
+                 (base32
+                  "0ys4pblbcjbk9dn073rqiwm7r6rc7fah03j7riklkwnb5n44andl"))))
+      (propagated-inputs
+        (list ocaml-ppx-inline-test ocaml-migrate-parsetree ocaml-ppxlib))
+      (properties '())
+      (license license:asl2.0))))
 
 (define-public ocaml-ppx-here
   (package
     (name "ocaml-ppx-here")
-    (version "0.14.0")
+    (version "0.15.0")
     (source
      (janestreet-origin "ppx_here" version
-                        "0b444djy68v6ji0ypwv5l02pkl151qzrgg96lyhl8dxfrzvj1zkj"))
+                        "1pyaw31j9n6r98ar947n3j2qj6rrszbdxr8jghk96j4ajdy05g65"))
     (build-system dune-build-system)
     (arguments
      ;; broken tests
@@ -5786,132 +5932,237 @@ many values).")
                          "0wxcak3ay4jpigm3pfdcpr65qw4hxfa8whhkryhcd8gy71x056z5"))
      (properties `((upstream-name . "ppx_here"))))))
 
-(define-public ocaml4.07-typerep
+(define-public ocaml-typerep
   (package
-    (name "ocaml4.07-typerep")
-    (version "0.11.0")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://ocaml.janestreet.com/ocaml-core/v"
-                                  (version-major+minor version)
-                                  "/files/typerep-v" version ".tar.gz"))
-              (sha256
-               (base32
-                "1zi7hy0prpgzqhr4lkacr04wvlvbp21jfbdfvffhrm6cd400rb5v"))))
+    (name "ocaml-typerep")
+    (version "0.15.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/janestreet/typerep")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+          (base32 "1qxfi01qim0hrgd6d0bgvpxg36i99mmm8cw4wqpr9kxyqvgzv26z"))))
     (build-system dune-build-system)
-    (arguments
-     `(#:tests? #f
-       #:ocaml ,ocaml-4.07
-       #:findlib ,ocaml4.07-findlib
-       #:dune ,ocaml4.07-dune))
-    (propagated-inputs `(("ocaml-base" ,(package-with-ocaml4.07 ocaml-base))))
+    (arguments `(#:tests? #f)); no tests
+    (propagated-inputs (list ocaml-base))
+    (properties `((ocaml4.07-variant . ,(delay ocaml4.07-typerep))))
     (home-page "https://github.com/janestreet/typerep")
     (synopsis "Typerep is a library for runtime types")
     (description "Typerep is a library for runtime types.")
-    (license license:asl2.0)))
+    (license license:expat)))
 
-(define-public ocaml4.07-ppx-sexp-value
+(define-public ocaml4.07-typerep
+  (package-with-ocaml4.07
+    (package
+      (inherit ocaml-typerep)
+      (version "0.11.0")
+      (source (origin
+                (method url-fetch)
+                (uri (string-append "https://ocaml.janestreet.com/ocaml-core/v"
+                                    (version-major+minor version)
+                                    "/files/typerep-v" version ".tar.gz"))
+                (sha256
+                 (base32
+                  "1zi7hy0prpgzqhr4lkacr04wvlvbp21jfbdfvffhrm6cd400rb5v"))))
+      (properties '())
+      (license license:asl2.0))))
+
+(define-public ocaml-ppx-sexp-value
   (package
-    (name "ocaml4.07-ppx-sexp-value")
-    (version "0.11.0")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://ocaml.janestreet.com/ocaml-core/v"
-                                  (version-major+minor version)
-                                  "/files/ppx_sexp_value-v" version ".tar.gz"))
-              (sha256
-               (base32
-                "1xnalfrln6k5khsyxvxkg6v32q8fpr4cqamsjqfih29jdv486xrs"))))
+    (name "ocaml-ppx-sexp-value")
+    (version "0.15.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/janestreet/ppx_sexp_value")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+          (base32 "0kz83j9v6yz3v8c6vr9ilhkcci4hhjd6i6r6afnx72jh6i7d3hnv"))))
     (build-system dune-build-system)
-    (arguments
-     `(#:ocaml ,ocaml-4.07
-       #:findlib ,ocaml4.07-findlib
-       #:dune ,ocaml4.07-dune))
     (propagated-inputs
-      `(("ocaml-base" ,(package-with-ocaml4.07 ocaml-base))
-        ("ocaml-ppx-here" ,(package-with-ocaml4.07 ocaml-ppx-here))
-        ("ocaml-ppx-sexp-conv" ,(package-with-ocaml4.07 ocaml-ppx-sexp-conv))
-        ("ocaml-migrate-parsetree"
-         ,(package-with-ocaml4.07 ocaml-migrate-parsetree))
-        ("ocaml-ppxlib" ,(package-with-ocaml4.07 ocaml-ppxlib))))
-    (properties `((upstream-name . "ppx_sexp_value")))
+      (list ocaml-base ocaml-ppx-here ocaml-ppx-sexp-conv ocaml-ppxlib))
+    (properties `((upstream-name . "ppx_sexp_value")
+                  (ocaml4.07-variant . ,(delay ocaml4.07-ppx-sexp-value))))
     (home-page "https://github.com/janestreet/ppx_sexp_value")
     (synopsis "Simplify building s-expressions from ocaml values")
-    (description "A ppx rewriter that simplifies building s-expressions from
-ocaml values.")
-    (license license:asl2.0)))
+    (description "@samp{ppx-sexp-value} is a ppx rewriter that simplifies
+building s-expressions from ocaml values.")
+    (license license:expat)))
 
-(define-public ocaml4.07-ppx-sexp-message
+(define-public ocaml4.07-ppx-sexp-value
+  (package-with-ocaml4.07
+    (package
+      (inherit ocaml-ppx-sexp-value)
+      (version "0.11.0")
+      (source (origin
+                (method url-fetch)
+                (uri (string-append "https://ocaml.janestreet.com/ocaml-core/v"
+                                    (version-major+minor version)
+                                    "/files/ppx_sexp_value-v" version ".tar.gz"))
+                (sha256
+                 (base32
+                  "1xnalfrln6k5khsyxvxkg6v32q8fpr4cqamsjqfih29jdv486xrs"))))
+      (propagated-inputs
+        (list ocaml-base
+              ocaml-ppx-here
+              ocaml-ppx-sexp-conv
+              ocaml-migrate-parsetree
+              ocaml-ppxlib))
+      (properties '())
+      (license license:asl2.0))))
+
+(define-public ocaml-ppx-sexp-message
   (package
-    (name "ocaml4.07-ppx-sexp-message")
-    (version "0.11.0")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://ocaml.janestreet.com/ocaml-core/v"
-                                  (version-major+minor version)
-                                  "/files/ppx_sexp_message-v" version ".tar.gz"))
-              (sha256
-               (base32
-                "1yh440za0w9cvrbxbmqacir8715kdaw6sw24ys9xj80av9nqpiw7"))))
+    (name "ocaml-ppx-sexp-message")
+    (version "0.15.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/janestreet/ppx_sexp_message")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+          (base32 "0a7hx50bkkc5n5msc3zzc4ixnp7674x3mallknb9j31jnd8l90nj"))))
     (build-system dune-build-system)
-    (arguments
-     `(#:ocaml ,ocaml-4.07
-       #:findlib ,ocaml4.07-findlib
-       #:dune ,ocaml4.07-dune))
     (propagated-inputs
-      `(("ocaml-base" ,(package-with-ocaml4.07 ocaml-base))
-        ("ocaml-ppx-here" ,(package-with-ocaml4.07 ocaml-ppx-here))
-        ("ocaml-ppx-sexp-conv" ,(package-with-ocaml4.07 ocaml-ppx-sexp-conv))
-        ("ocaml-migrate-parsetree"
-         ,(package-with-ocaml4.07 ocaml-migrate-parsetree))
-        ("ocaml-ppxlib" ,(package-with-ocaml4.07 ocaml-ppxlib))))
-    (properties `((upstream-name . "ppx_sexp_message")))
+      (list ocaml-base ocaml-ppx-here ocaml-ppx-sexp-conv ocaml-ppxlib))
+    (properties `((upstream-name . "ppx_sexp_message")
+                  (ocaml4.07-variant . ,(delay ocaml4.07-ppx-sexp-message))))
     (home-page "https://github.com/janestreet/ppx_sexp_message")
     (synopsis "Ppx rewriter for easy construction of s-expressions")
     (description "Ppx_sexp_message aims to ease the creation of s-expressions
 in OCaml.  This is mainly motivated by writing error and debugging messages,
 where one needs to construct a s-expression based on various element of the
 context such as function arguments.")
-    (license license:asl2.0)))
+    (license license:expat)))
 
-(define-public ocaml4.07-ppx-pipebang
+(define-public ocaml4.07-ppx-sexp-message
+  (package-with-ocaml4.07
+    (package
+      (inherit ocaml-ppx-sexp-message)
+      (version "0.11.0")
+      (source (origin
+                (method url-fetch)
+                (uri (string-append "https://ocaml.janestreet.com/ocaml-core/v"
+                                    (version-major+minor version)
+                                    "/files/ppx_sexp_message-v" version ".tar.gz"))
+                (sha256
+                 (base32
+                  "1yh440za0w9cvrbxbmqacir8715kdaw6sw24ys9xj80av9nqpiw7"))))
+      (propagated-inputs
+        (list ocaml-base
+              ocaml-ppx-here
+              ocaml-ppx-sexp-conv
+              ocaml-migrate-parsetree
+              ocaml-ppxlib))
+      (properties '())
+      (license license:asl2.0))))
+
+(define-public ocaml-ppx-pipebang
   (package
-    (name "ocaml4.07-ppx-pipebang")
-    (version "0.11.0")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://ocaml.janestreet.com/ocaml-core/v"
-                                  (version-major+minor version)
-                                  "/files/ppx_pipebang-v" version ".tar.gz"))
-              (sha256
-               (base32
-                "1wrrzlb4kdvkkcmzi01fw25jar38r2jlnyn0i6pn4z0lq4gpm9m0"))))
+    (name "ocaml-ppx-pipebang")
+    (version "0.15.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/janestreet/ppx_pipebang")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+          (base32 "0sm5dghyalhws3hy1cc2ih36az1k4q02hcgj6l26gwyma3y4irvq"))))
     (build-system dune-build-system)
-    (arguments
-     ;; No tests
-     `(#:tests? #f
-       #:ocaml ,ocaml-4.07
-       #:findlib ,ocaml4.07-findlib
-       #:dune ,ocaml4.07-dune))
-    (propagated-inputs
-      `(("ocaml-migrate-parsetree"
-         ,(package-with-ocaml4.07 ocaml-migrate-parsetree))
-        ("ocaml-ppxlib" ,(package-with-ocaml4.07 ocaml-ppxlib))))
-    (properties `((upstream-name . "ppx_pipebang")))
+    (arguments `(#:tests? #f)); no tests
+    (propagated-inputs (list ocaml-ppxlib))
+    (properties `((upstream-name . "ppx_pipebang")
+                  (ocaml4.07-variant . ,(delay ocaml4.07-ppx-pipebang))))
     (home-page "https://github.com/janestreet/ppx_pipebang")
     (synopsis "Inline reverse application operators `|>` and `|!`")
     (description "A ppx rewriter that inlines reverse application operators
 @code{|>} and @code{|!}.")
-    (license license:asl2.0)))
+    (license license:expat)))
+
+(define-public ocaml4.07-ppx-pipebang
+  (package-with-ocaml4.07
+    (package
+      (inherit ocaml-ppx-pipebang)
+      (version "0.11.0")
+      (source (origin
+                (method url-fetch)
+                (uri (string-append "https://ocaml.janestreet.com/ocaml-core/v"
+                                    (version-major+minor version)
+                                    "/files/ppx_pipebang-v" version ".tar.gz"))
+                (sha256
+                 (base32
+                  "1wrrzlb4kdvkkcmzi01fw25jar38r2jlnyn0i6pn4z0lq4gpm9m0"))))
+      (propagated-inputs (list ocaml-migrate-parsetree ocaml-ppxlib))
+      (properties '())
+      (license license:asl2.0))))
+
+(define-public ocaml-ppx-module-timer
+  (package
+    (name "ocaml-ppx-module-timer")
+    (version "0.15.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/janestreet/ppx_module_timer")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+          (base32 "0lzi5hxi10p89ddqbrc667267f888kqslal76gfhmszyk60n20av"))))
+    (build-system dune-build-system)
+    (arguments
+     `(#:tests? #f)); no tests
+    (propagated-inputs
+      (list ocaml-base ocaml-ppx-base ocaml-stdio ocaml-time-now ocaml-ppxlib))
+    (properties `((upstream-name . "ppx_module_timer")))
+    (home-page "https://github.com/janestreet/ppx_module_timer")
+    (synopsis "Ppx rewriter that records top-level module startup times")
+    (description "Modules using @samp{ppx_module_timer} have instrumentation
+to record their startup time.")
+    (license license:expat)))
+
+(define-public ocaml-ppx-fixed-literal
+  (package
+    (name "ocaml-ppx-fixed-literal")
+    (version "0.15.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/janestreet/ppx_fixed_literal")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+          (base32 "10siwcqrqa4gh0mg6fkaby0jjskc01r81pcblc67h3vmbjjh08j9"))))
+    (build-system dune-build-system)
+    (arguments
+     `(#:tests? #f)); no tests
+    (propagated-inputs (list ocaml-base ocaml-ppxlib))
+    (properties `((upstream-name . "ppx_fixed_literal")))
+    (home-page "https://github.com/janestreet/ppx_fixed_literal")
+    (synopsis "Simpler notation for fixed point literals")
+    (description
+      "@samp{ppx-fixed-literal} is a ppx rewriter that rewrites fixed point
+literal of the  form 1.0v to conversion functions currently in scope.")
+    (license license:expat)))
 
 (define-public ocaml-ppx-optional
   (package
     (name "ocaml-ppx-optional")
-    (version "0.14.0")
+    (version "0.15.0")
     (source
      (janestreet-origin
       "ppx_optional" version
-      "1hh6ivlp1qpvyn8l0vhrahkkcp3scf7km254sgplprmk10wnyidz"))
+      "0af7ayhfc1jc01mxs4k253gq49yss2ymkmjsy6fpcz39zhci7fvj"))
     (build-system dune-build-system)
     (arguments `(#:tests? #f)) ; No tests
     (propagated-inputs
@@ -5939,7 +6190,7 @@ else expression.")
 (define-public ocaml-ppx-optcomp
   (package
     (name "ocaml-ppx-optcomp")
-    (version "0.14.3")
+    (version "0.15.0")
     (home-page "https://github.com/janestreet/ppx_optcomp")
     (source
      (origin
@@ -5950,7 +6201,7 @@ else expression.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1iflgfzs23asw3k6098v84al5zqx59rx2qjw0mhvk56avlx71pkw"))))
+         "0ypivfipi8fcr9pqyvl2ajpcivmr1irdwwv248i4x6mggpc2pl0b"))))
     (build-system dune-build-system)
     (propagated-inputs
      (list ocaml-base ocaml-stdio ocaml-ppxlib))
@@ -5976,13 +6227,13 @@ size, the version of the compiler, ...")
 (define-public ocaml-ppx-let
   (package
     (name "ocaml-ppx-let")
-    (version "0.14.0")
+    (version "0.15.0")
     (source
      (janestreet-origin "ppx_let" version
-                        "1qcrnd86pbr1di5m6z4ps4p15qawwa02jxwz3xfd82hdbjmdwf1s"))
+                        "0m9niyiiv3qzv5x8hw0ifxjjzshnmx40dchka9d93mmnx88jqx34"))
     (build-system dune-build-system)
     (propagated-inputs
-     (list ocaml-base ocaml-migrate-parsetree ocaml-ppxlib))
+     (list ocaml-base ocaml-migrate-parsetree ocaml-ppxlib ocaml-ppx-here))
     (properties `((upstream-name . "ppx_let")
                   (ocaml4.07-variant . ,(delay ocaml4.07-ppx-let))))
     (home-page "https://github.com/janestreet/ppx_let")
@@ -6002,44 +6253,55 @@ match expressions, and if expressions.")
 
      (properties `((upstream-name . "ppx_let"))))))
 
-(define-public ocaml4.07-ppx-fail
+(define-public ocaml-ppx-fail
   (package
-    (name "ocaml4.07-ppx-fail")
-    (version "0.11.0")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://ocaml.janestreet.com/ocaml-core/v"
-                                  (version-major+minor version)
-                                  "/files/ppx_fail-v" version ".tar.gz"))
-              (sha256
-               (base32
-                "07plqsvljiwvngggfypwq55g46s5my55y45mvlmalrxyppzr03s8"))))
+    (name "ocaml-ppx-fail")
+    (version "0.14.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/janestreet/ppx_fail")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+          (base32 "012p9gv7w4sk3b4x0sdmqrmr2856w8xc424waxb6vrybid7qjs95"))))
     (build-system dune-build-system)
-    (arguments
-     `(#:ocaml ,ocaml-4.07
-       #:findlib ,ocaml4.07-findlib
-       #:dune ,ocaml4.07-dune))
-    (propagated-inputs
-      `(("ocaml-base" ,(package-with-ocaml4.07 ocaml-base))
-        ("ocaml-ppx-here" ,(package-with-ocaml4.07 ocaml-ppx-here))
-        ("ocaml-migrate-parsetree"
-         ,(package-with-ocaml4.07 ocaml-migrate-parsetree))
-        ("ocaml-ppxlib" ,(package-with-ocaml4.07 ocaml-ppxlib))))
-    (properties `((upstream-name . "ppx_fail")))
+    (propagated-inputs (list ocaml-base ocaml-ppx-here ocaml-ppxlib))
+    (properties `((upstream-name . "ppx_fail")
+                  (ocaml4.07-variant . ,(delay ocaml4.07-ppx-fail))))
     (home-page "https://github.com/janestreet/ppx_fail")
     (synopsis "Add location to calls to failwiths")
     (description "Syntax extension that makes [failwiths] always include a
 position.")
-    (license license:asl2.0)))
+    (license license:expat)))
+
+(define-public ocaml4.07-ppx-fail
+  (package-with-ocaml4.07
+    (package
+      (inherit ocaml-ppx-fail)
+      (version "0.11.0")
+      (source (origin
+                (method url-fetch)
+                (uri (string-append "https://ocaml.janestreet.com/ocaml-core/v"
+                                    (version-major+minor version)
+                                    "/files/ppx_fail-v" version ".tar.gz"))
+                (sha256
+                 (base32
+                  "07plqsvljiwvngggfypwq55g46s5my55y45mvlmalrxyppzr03s8"))))
+      (propagated-inputs
+        (list ocaml-base ocaml-ppx-here ocaml-migrate-parsetree ocaml-ppxlib))
+      (properties '())
+      (license license:asl2.0))))
 
 (define-public ocaml-ppx-cold
   (package
     (name "ocaml-ppx-cold")
-    (version "0.14.0")
+    (version "0.15.0")
     (home-page "https://github.com/janestreet/ppx_cold")
     (source
      (janestreet-origin "ppx_cold" version
-                        "1madfzhpir9amnxmg530n70vll0jrl59vyp71miji73i6b9sy6n2"))
+                        "13gqmfw2sq80anag9bwpm35600l1fnfn7mh9cbj1291k84rsx7wb"))
     (build-system dune-build-system)
     (arguments `(#:test-target "tests"))
     (propagated-inputs
@@ -6056,10 +6318,10 @@ https://github.com/ocaml/ocaml/issues/8563.")
 (define-public ocaml-ppx-assert
   (package
     (name "ocaml-ppx-assert")
-    (version "0.14.0")
+    (version "0.15.0")
     (source
      (janestreet-origin "ppx_assert" version
-                        "1l2rr4jz2q5b35ryn2z146z7m9v6k8krp5gpn8ilib66mnz5zx15"))
+                        "0rsr1yz2rs12w6qw0dz09dg3k2x2pfgd014fgp6nj993hhznapsf"))
     (build-system dune-build-system)
     (propagated-inputs
      (list ocaml-base
@@ -6097,7 +6359,7 @@ useful errors on failure.")
 (define-public ocaml-ppx-expect
   (package
     (name "ocaml-ppx-expect")
-    (version "0.14.2")
+    (version "0.15.0")
     (source
      (origin
        (method git-fetch)
@@ -6107,7 +6369,7 @@ useful errors on failure.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1v886rsl93wdmaw61z10q8nqshf8hvlznj9gym2ljrjz4cqyjsa4"))))
+         "134dl5qhjxsj2mcmrx9f3m0iys0n5mjfpz9flj8zn8d2jir43776"))))
     (build-system dune-build-system)
     (propagated-inputs
      (list ocaml-base
@@ -6155,7 +6417,7 @@ to denote the expected output.")
 (define-public ocaml-ppx-js-style
   (package
     (name "ocaml-ppx-js-style")
-    (version "0.14.1")
+    (version "0.15.0")
     (source
      (origin
        (method git-fetch)
@@ -6165,7 +6427,7 @@ to denote the expected output.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "16ax6ww9h36xyn9acbm8zxv0ajs344sm37lgj2zd2bvgsqv24kxj"))))
+         "0q2p9pvmlncgv0hprph95xiv7s6q44ynvp4yl4dckf1qx68rb3ba"))))
     (build-system dune-build-system)
     (arguments `(#:tests? #f)) ; No tests
     (propagated-inputs
@@ -6189,46 +6451,105 @@ packages.")
                          "0z3fc55jdjhhsblla6z4fqc13kljpcz29q79rvs5h2vsraqrldr2"))
      (properties `((upstream-name . "ppx_js_style"))))))
 
-(define-public ocaml4.07-ppx-typerep-conv
+(define-public ocaml-ppx-typerep-conv
   (package
-    (name "ocaml4.07-ppx-typerep-conv")
-    (version "0.11.1")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                     (url "https://github.com/janestreet/ppx_typerep_conv")
-                     (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0a13dpfrrg0rsm8qni1bh7pqcda30l70z8r6yzi5a64bmwk7g5ah"))))
+    (name "ocaml-ppx-typerep-conv")
+    (version "0.15.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+              (url "https://github.com/janestreet/ppx_typerep_conv/")
+              (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+          (base32 "1q1lzykpm83ra4l5jh4rfddhd3c96kx4s4rvx0w4b51z1qk56zam"))))
     (build-system dune-build-system)
     (arguments
-     `(#:test-target "."
-       #:ocaml ,ocaml-4.07
-       #:findlib ,ocaml4.07-findlib
-       #:dune ,ocaml4.07-dune))
-    (propagated-inputs
-      `(("ocaml-base" ,(package-with-ocaml4.07 ocaml-base))
-        ("ocaml-typerep" ,ocaml4.07-typerep)
-        ("ocaml-migrate-parsetree"
-         ,(package-with-ocaml4.07 ocaml-migrate-parsetree))
-        ("ocaml-ppxlib" ,(package-with-ocaml4.07 ocaml-ppxlib))))
-    (properties `((upstream-name . "ppx_typerep_conv")))
+     `(#:test-target "."))
+    (propagated-inputs (list ocaml-base ocaml-typerep ocaml-ppxlib))
+    (properties `((upstream-name . "ppx_typerep_conv")
+                  (ocaml4.07-variant . ,(delay ocaml4.07-ppx-typerep-conv))))
     (home-page "https://github.com/janestreet/ppx_typerep_conv")
     (synopsis "Generation of runtime types from type declarations")
     (description "This package can automatically generate runtime types
 from type definitions.")
-    (license license:asl2.0)))
+    (license license:expat)))
+
+(define-public ocaml4.07-ppx-typerep-conv
+  (package-with-ocaml4.07
+    (package
+      (inherit ocaml-ppx-typerep-conv)
+      (version "0.11.1")
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                       (url "https://github.com/janestreet/ppx_typerep_conv")
+                       (commit (string-append "v" version))))
+                (file-name (git-file-name "ocaml4.07-ppx-typerep-conv" version))
+                (sha256
+                 (base32
+                  "0a13dpfrrg0rsm8qni1bh7pqcda30l70z8r6yzi5a64bmwk7g5ah"))))
+      (properties '())
+      (propagated-inputs
+        (list ocaml-base ocaml-typerep ocaml-migrate-parsetree ocaml-ppxlib))
+      (license license:asl2.0))))
+
+(define-public ocaml-ppx-string
+  (package
+    (name "ocaml-ppx-string")
+    (version "0.15.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/janestreet/ppx_string")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+          (base32 "1dp5frk6cig5m3m5rrh2alw63snyf845x7zlkkaljip02pqcbw1s"))))
+    (build-system dune-build-system)
+    (arguments `(#:tests? #f)); no tests
+    (propagated-inputs
+      (list ocaml-base ocaml-ppx-base ocaml-stdio ocaml-ppxlib))
+    (properties `((upstream-name . "ppx_string")))
+    (home-page "https://github.com/janestreet/ppx_string")
+    (synopsis "Ppx extension for string interpolation")
+    (description "This extension provides a syntax for string interpolation.")
+    (license license:expat)))
+
+(define-public ocaml-ppx-stable
+  (package
+    (name "ocaml-ppx-stable")
+    (version "0.15.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/janestreet/ppx_stable")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1as0v0x8c9ilyhngax55lvwyyi4a2wshyan668v0f2s1608cwb1l"))))
+    (build-system dune-build-system)
+    (arguments
+     `(#:test-target "tests"))
+    (propagated-inputs (list ocaml-base ocaml-ppxlib))
+    (properties `((upstream-name . "ppx_stable")))
+    (home-page "https://github.com/janestreet/ppx_stable")
+    (synopsis "Stable types conversions generator")
+    (description "This package is a ppx extension for easier implementation of
+conversion functions between almost identical types.")
+    (license license:expat)))
 
 (define-public ocaml-ppx-base
   (package
     (name "ocaml-ppx-base")
-    (version "0.14.0")
+    (version "0.15.0")
     (source
      (janestreet-origin
       "ppx_base" version
-      "0b7a3fmi90jk8paz0g36yzaq670fbnrbi1j8r5ibh9wbcfli7ji6"))
+      "181w7y2has8jsrqdsvd08q5nhnkx523vwsk3lg0cjix55qssvfyn"))
     (build-system dune-build-system)
     (arguments
      `(#:test-target "."))
@@ -6270,110 +6591,265 @@ verification tool.")
        ("ocaml-ppxlib" ,ocaml-ppxlib)))
     (properties `((upstream-name . "ppx_base"))))))
 
-(define-public ocaml4.07-ppx-bin-prot
+(define-public ocaml-ppx-bin-prot
   (package
-    (name "ocaml4.07-ppx-bin-prot")
-    (version "0.11.1")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                     (url "https://github.com/janestreet/ppx_bin_prot")
-                     (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1h60i75bzvhna1axyn662gyrzhh441l79vl142d235i5x31dmnkz"))))
+    (name "ocaml-ppx-bin-prot")
+    (version "0.15.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/janestreet/ppx_bin_prot")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+          (base32 "1280wsls061fmvmdysjqn3lv4mnkyg400jnjf4jyfr14s33h1ad5"))))
     (build-system dune-build-system)
     (arguments
      ;; Cyclic dependency with ocaml-ppx-jane
-     `(#:tests? #f
-       #:ocaml ,ocaml-4.07
-       #:findlib ,ocaml4.07-findlib
-       #:dune ,ocaml4.07-dune))
+     `(#:tests? #f))
     (propagated-inputs
-      `(("ocaml-base" ,(package-with-ocaml4.07 ocaml-base))
-        ("ocaml-bin-prot" ,ocaml4.07-bin-prot)
-        ("ocaml-ppx-here" ,(package-with-ocaml4.07 ocaml-ppx-here))
-        ("ocaml-migrate-parsetree"
-         ,(package-with-ocaml4.07 ocaml-migrate-parsetree))
-        ("ocaml-ppxlib" ,(package-with-ocaml4.07 ocaml-ppxlib))))
-    (properties `((upstream-name . "ppx_bin_prot")))
+      (list ocaml-base ocaml-bin-prot ocaml-ppx-here ocaml-ppxlib))
+    (properties `((upstream-name . "ppx_bin_prot")
+                  (ocaml4.07-variant . ,(delay ocaml4.07-ppx-bin-prot))))
     (home-page "https://github.com/janestreet/ppx_bin_prot")
     (synopsis "Generation of bin_prot readers and writers from types")
     (description "Generation of binary serialization and deserialization
 functions from type definitions.")
-    (license license:asl2.0)))
+    (license license:expat)))
 
-(define-public ocaml4.07-ppx-jane
+(define-public ocaml4.07-ppx-bin-prot
+  (package-with-ocaml4.07
+    (package
+      (inherit ocaml-ppx-bin-prot)
+      (version "0.11.1")
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                       (url "https://github.com/janestreet/ppx_bin_prot")
+                       (commit (string-append "v" version))))
+                (file-name (git-file-name "ocaml4.07-ppx-bin-prot" version))
+                (sha256
+                 (base32
+                  "1h60i75bzvhna1axyn662gyrzhh441l79vl142d235i5x31dmnkz"))))
+      (propagated-inputs
+        (list ocaml-base
+              ocaml-bin-prot
+              ocaml-ppx-here
+              ocaml-migrate-parsetree
+              ocaml-ppxlib))
+      (properties '())
+      (license license:asl2.0))))
+
+(define-public ocaml-ppx-ignore-instrumentation
   (package
-    (name "ocaml4.07-ppx-jane")
-    (version "0.11.0")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://ocaml.janestreet.com/ocaml-core/v"
-                                  (version-major+minor version)
-                                  "/files/ppx_jane-v" version ".tar.gz"))
-              (sha256
-               (base32
-                "0lgppkw3aixrfnixihrsz2ipafv8fpvkdpy3pw8n0r615gg8x8la"))))
+    (name "ocaml-ppx-ignore-instrumentation")
+    (version "0.15.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/janestreet/ppx_ignore_instrumentation")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+          (base32 "16fgig88g3jr0m3i636fr52h29h1yzhi8nhnl4029zn808kcdyj2"))))
     (build-system dune-build-system)
     (arguments
-     `(#:test-target "."
-       #:ocaml ,ocaml-4.07
-       #:findlib ,ocaml4.07-findlib
-       #:dune ,ocaml4.07-dune))
+     `(#:tests? #f)) ;no tests
+    (propagated-inputs (list ocaml-ppxlib))
+    (properties `((upstream-name . "ppx_ignore_instrumentation")))
+    (home-page "https://github.com/janestreet/ppx_ignore_instrumentation")
+    (synopsis "Ignore Jane Street specific instrumentation extensions")
+    (description
+      "Ignore Jane Street specific instrumentation extensions from internal
+PPXs or compiler features not yet upstreamed.")
+    (license license:expat)))
+
+(define-public ocaml-ppx-log
+  (package
+    (name "ocaml-ppx-log")
+    (version "0.15.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/janestreet/ppx_log")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+          (base32 "08i9gz3f4w3bmlrfdw7ja9awsfkhhldz03bnnc4hijfmn8sawzi0"))))
+    (build-system dune-build-system)
+    (propagated-inputs
+      (list ocaml-base
+            ocaml-ppx-here
+            ocaml-ppx-sexp-conv
+            ocaml-ppx-sexp-message
+            ocaml-sexplib
+            ocaml-ppxlib))
+    (properties `((upstream-name . "ppx_log")))
+    (home-page "https://github.com/janestreet/ppx_log")
+    (synopsis "Extension nodes for lazily rendering log messages")
+    (description "This package provides ppx_sexp_message-like extension
+nodes for lazily rendering log messages.")
+    (license license:expat)))
+
+(define-public ocaml-ppx-disable-unused-warnings
+  (package
+    (name "ocaml-ppx-disable-unused-warnings")
+    (version "0.15.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/janestreet/ppx_disable_unused_warnings")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+          (base32 "0sb5i4v7p9df2bxk66rjs30k9fqdrwsq1jgykjv6wyrx2d9bv955"))))
+    (build-system dune-build-system)
+    (arguments
+     `(#:test-target "tests"))
+    (propagated-inputs (list ocaml-base ocaml-ppxlib))
+    (properties `((upstream-name . "ppx_disable_unused_warnings")))
+    (home-page "https://github.com/janestreet/ppx_disable_unused_warnings")
+    (synopsis "Simple ppx extension for commonly unused warnings")
+    (description "This package expands @code{@@disable_unused_warnings} into
+@code{@@warning \"-20-26-32-33-34-35-36-37-38-39-60-66-67\"}")
+    (license license:expat)))
+
+(define-public ocaml-ppx-jane
+  (package
+    (name "ocaml-ppx-jane")
+    (version "0.15.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/janestreet/ppx_jane")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+          (base32 "1p6847gdfnnj6qpa4yh57s6wwpsl7rfgy0q7993chz24h9mhz5lk"))))
+    (build-system dune-build-system)
+    (arguments
+     `(#:test-target "."))
     (propagated-inputs
-     `(("ocaml-ppx-assert" ,(package-with-ocaml4.07 ocaml-ppx-assert))
-       ("ocaml-ppx-base" ,(package-with-ocaml4.07 ocaml-ppx-base))
-        ("ocaml-ppx-bench" ,ocaml4.07-ppx-bench)
-        ("ocaml-ppx-bin-prot" ,ocaml4.07-ppx-bin-prot)
-        ("ocaml-ppx-custom-printf" ,(package-with-ocaml4.07 ocaml-ppx-custom-printf))
-        ("ocaml-ppx-expect" ,(package-with-ocaml4.07 ocaml-ppx-expect))
-        ("ocaml-ppx-fail" ,ocaml4.07-ppx-fail)
-        ("ocaml-ppx-fields-conv" ,(package-with-ocaml4.07 ocaml-ppx-fields-conv))
-        ("ocaml-ppx-here" ,(package-with-ocaml4.07 ocaml-ppx-here))
-        ("ocaml-ppx-inline-test" ,(package-with-ocaml4.07 ocaml-ppx-inline-test))
-        ("ocaml-ppx-let" ,(package-with-ocaml4.07 ocaml-ppx-let))
-        ("ocaml-ppx-optcomp" ,(package-with-ocaml4.07 ocaml-ppx-optcomp))
-        ("ocaml-ppx-optional" ,(package-with-ocaml4.07 ocaml-ppx-optional))
-        ("ocaml-ppx-pipebang" ,ocaml4.07-ppx-pipebang)
-        ("ocaml-ppx-sexp-message" ,ocaml4.07-ppx-sexp-message)
-        ("ocaml-ppx-sexp-value" ,ocaml4.07-ppx-sexp-value)
-        ("ocaml-ppx-typerep-conv" ,ocaml4.07-ppx-typerep-conv)
-        ("ocaml-ppx-variants-conv" ,(package-with-ocaml4.07 ocaml-ppx-variants-conv))
-        ("ocaml-migrate-parsetree"
-         ,(package-with-ocaml4.07 ocaml-migrate-parsetree))
-        ("ocaml-ppxlib" ,(package-with-ocaml4.07 ocaml-ppxlib))))
-    (properties `((upstream-name . "ppx_jane")))
+      (list ocaml-base-quickcheck
+            ocaml-ppx-assert
+            ocaml-ppx-base
+            ocaml-ppx-bench
+            ocaml-ppx-bin-prot
+            ocaml-ppx-custom-printf
+            ocaml-ppx-disable-unused-warnings
+            ocaml-ppx-expect
+            ocaml-ppx-fields-conv
+            ocaml-ppx-fixed-literal
+            ocaml-ppx-here
+            ocaml-ppx-ignore-instrumentation
+            ocaml-ppx-inline-test
+            ocaml-ppx-let
+            ocaml-ppx-log
+            ocaml-ppx-module-timer
+            ocaml-ppx-optcomp
+            ocaml-ppx-optional
+            ocaml-ppx-pipebang
+            ocaml-ppx-sexp-message
+            ocaml-ppx-sexp-value
+            ocaml-ppx-stable
+            ocaml-ppx-string
+            ocaml-ppx-typerep-conv
+            ocaml-ppx-variants-conv
+            ocaml-ppxlib))
+    (properties `((upstream-name . "ppx_jane")
+                  (ocaml4.07-variant . ,(delay ocaml4.07-ppx-jane))))
     (home-page "https://github.com/janestreet/ppx_jane")
     (synopsis "Standard Jane Street ppx rewriters")
     (description "This package installs a ppx-jane executable, which is a ppx
 driver including all standard Jane Street ppx rewriters.")
-    (license license:asl2.0)))
+    (license license:expat)))
 
-(define-public ocaml4.07-splittable-random
+(define-public ocaml4.07-ppx-jane
+  (package-with-ocaml4.07
+    (package
+      (inherit ocaml-ppx-jane)
+      (version "0.11.0")
+      (source (origin
+                (method url-fetch)
+                (uri (string-append "https://ocaml.janestreet.com/ocaml-core/v"
+                                    (version-major+minor version)
+                                    "/files/ppx_jane-v" version ".tar.gz"))
+                (sha256
+                 (base32
+                  "0lgppkw3aixrfnixihrsz2ipafv8fpvkdpy3pw8n0r615gg8x8la"))))
+      (propagated-inputs
+        (list ocaml-ppx-assert
+              ocaml-ppx-base
+              ocaml-ppx-bench
+              ocaml-ppx-bin-prot
+              ocaml-ppx-custom-printf
+              ocaml-ppx-expect
+              ocaml-ppx-fail
+              ocaml-ppx-fields-conv
+              ocaml-ppx-here
+              ocaml-ppx-inline-test
+              ocaml-ppx-let
+              ocaml-ppx-optcomp
+              ocaml-ppx-optional
+              ocaml-ppx-pipebang
+              ocaml-ppx-sexp-message
+              ocaml-ppx-sexp-value
+              ocaml-ppx-typerep-conv
+              ocaml-ppx-variants-conv
+              ocaml-migrate-parsetree
+              ocaml-ppxlib))
+      (properties '())
+      (license license:asl2.0))))
+
+(define-public ocaml-base-bigstring
+  (package
+    (name "ocaml-base-bigstring")
+    (version "0.15.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/janestreet/base_bigstring")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1hv3hw2fwqmkrxms1g6rw3c18mmla1z5bva3anx45mnff903iv4q"))))
+    (build-system dune-build-system)
+    (propagated-inputs (list ocaml-base ocaml-int-repr ocaml-ppx-jane))
+    (properties `((upstream-name . "base_bigstring")))
+    (home-page "https://github.com/janestreet/base_bigstring")
+    (synopsis "String type based on [Bigarray], for use in I/O and C-bindings")
+    (description "This package provides string type based on [Bigarray], for
+use in I/O and C-bindings.")
+    (license license:expat)))
+
+(define-public ocaml-splittable-random
   (package
-    (name "ocaml4.07-splittable-random")
-    (version "0.11.0")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://ocaml.janestreet.com/ocaml-core/v"
-                                  (version-major+minor version)
-                                  "/files/splittable_random-v" version ".tar.gz"))
-              (sha256
-               (base32
-                "0l1wbd881mymlnpzlq5q53mmdz3g5d7qjhyc7lfaq1x0iaccn5lc"))))
+    (name "ocaml-splittable-random")
+    (version "0.15.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/janestreet/splittable_random")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+          (base32 "0ap5z4z1aagz4z02q9642cbl25jzws9lbc2x5xkpyjlc0qcm9v3m"))))
     (build-system dune-build-system)
-    (arguments
-     `(#:ocaml ,ocaml-4.07
-       #:findlib ,ocaml4.07-findlib
-       #:dune ,ocaml4.07-dune))
     (propagated-inputs
-      `(("ocaml-base" ,(package-with-ocaml4.07 ocaml-base))
-        ("ocaml-ppx-jane" ,ocaml4.07-ppx-jane)
-        ("ocaml-migrate-parsetree"
-         ,(package-with-ocaml4.07 ocaml-migrate-parsetree))))
-    (properties `((upstream-name . "splittable_random")))
+      (list ocaml-base
+            ocaml-ppx-assert
+            ocaml-ppx-bench
+            ocaml-ppx-inline-test
+            ocaml-ppx-sexp-message))
+    (properties `((upstream-name . "splittable_random")
+                  (ocaml-4.07-variant . ,(delay ocaml4.07-splittable-random))))
     (home-page "https://github.com/janestreet/splittable_random")
     (synopsis "PRNG that can be split into independent streams")
     (description "This package provides a splittable
@@ -6383,7 +6859,58 @@ second, independent stream of random values.
 
 This library implements a splittable pseudo-random number generator that sacrifices
 cryptographic-quality randomness in favor of performance.")
-    (license license:asl2.0)))
+    (license license:expat)))
+
+(define-public ocaml4.07-splittable-random
+  (package-with-ocaml4.07
+    (package
+      (inherit ocaml-splittable-random)
+      (version "0.11.0")
+      (source (origin
+                (method url-fetch)
+                (uri (string-append "https://ocaml.janestreet.com/ocaml-core/v"
+                                    (version-major+minor version)
+                                    "/files/splittable_random-v" version ".tar.gz"))
+                (sha256
+                 (base32
+                  "0l1wbd881mymlnpzlq5q53mmdz3g5d7qjhyc7lfaq1x0iaccn5lc"))))
+      (propagated-inputs
+        (list ocaml-base ocaml-ppx-jane ocaml-migrate-parsetree))
+      (properties '())
+      (license license:asl2.0))))
+
+(define-public ocaml-base-quickcheck
+  (package
+    (name "ocaml-base-quickcheck")
+    (version "0.15.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/janestreet/base_quickcheck")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+          (base32 "0q73kfr67cz5wp4qn4rq3lpa922hqmvwdiinnans0js65fvlgqsi"))))
+    (build-system dune-build-system)
+    (propagated-inputs
+      (list ocaml-base
+            ocaml-ppx-base
+            ocaml-ppx-fields-conv
+            ocaml-ppx-let
+            ocaml-ppx-sexp-message
+            ocaml-ppx-sexp-value
+            ocaml-splittable-random
+            ocaml-ppxlib))
+    (properties `((upstream-name . "base_quickcheck")))
+    (home-page "https://github.com/janestreet/base_quickcheck")
+    (synopsis
+      "Randomized testing framework, designed for compatibility with Base")
+    (description
+      "@samp{base-quickcheck} provides randomized testing in the style of
+Haskell's Quickcheck library, with support for built-in types as well as
+types provided by Base.")
+    (license license:expat)))
 
 (define-public ocaml4.07-jane-street-headers
   (package
@@ -6446,10 +6973,10 @@ Configurator allows one to:
 @end itemize")
     (license license:asl2.0)))
 
-(define-public ocaml4.07-spawn
+(define-public ocaml-spawn
   (package
-    (name "ocaml4.07-spawn")
-    (version "0.13.0")
+    (name "ocaml-spawn")
+    (version "0.15.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -6458,22 +6985,12 @@ Configurator allows one to:
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1w003k1kw1lmyiqlk58gkxx8rac7dchiqlz6ah7aj7bh49b36ppf"))))
+                "16aq5z3mq5lkpryfs4w0748b2w9v061myml0hn7nhh6r6i329w7a"))))
     (build-system dune-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-before 'check 'fix-tests
-           (lambda _
-             (substitute* "test/tests.ml"
-               (("/bin/pwd") (which "pwd"))
-               (("/bin/echo") (which "echo")))
-             #t)))
-       #:ocaml ,ocaml-4.07
-       #:findlib ,ocaml4.07-findlib
-       #:dune ,ocaml4.07-dune))
-    (native-inputs
-     `(("ocaml-ppx-expect" ,(package-with-ocaml4.07 ocaml-ppx-expect))))
+    (propagated-inputs (list ocaml-odoc))
+    (native-inputs (list ocaml-ppx-expect))
+    (properties
+     `((ocaml4.07-variant . ,(delay ocaml4.07-spawn))))
     (home-page "https://github.com/janestreet/spawn")
     (synopsis "Spawning sub-processes")
     (description
@@ -6495,103 +7012,228 @@ thousands of times faster than fork.
 @end itemize")
     (license license:asl2.0)))
 
-(define-public ocaml4.07-core
+(define-public ocaml4.07-spawn
+  (package-with-ocaml4.07
+    (package
+      (inherit ocaml-spawn)
+      (version "0.13.0")
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                       (url "https://github.com/janestreet/spawn")
+                       (commit (string-append "v" version))))
+                (file-name (git-file-name "ocaml4.07-spawn" version))
+                (sha256
+                 (base32
+                  "1w003k1kw1lmyiqlk58gkxx8rac7dchiqlz6ah7aj7bh49b36ppf"))))
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-before 'check 'fix-tests
+             (lambda _
+               (substitute* "test/tests.ml"
+                 (("/bin/pwd") (which "pwd"))
+                 (("/bin/echo") (which "echo")))
+               #t)))
+         #:ocaml ,ocaml-4.07
+         #:findlib ,ocaml4.07-findlib
+         #:dune ,ocaml4.07-dune))
+      (propagated-inputs '())
+      (properties '()))))
+
+(define-public ocaml-core
   (package
-    (name "ocaml4.07-core")
-    (version "0.11.3")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                     (url "https://github.com/janestreet/core")
-                     (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0pzl8n09z4f3i7z2wq4cjxfqrr8mj6xcdp7rbg0nxap2zdhjgvrq"))))
+    (name "ocaml-core")
+    (version "0.15.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/janestreet/core")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+          (base32 "1m2ybvlz9zlb2d0jc0j7wdgd18mx9sh3ds2ylkv0cfjx1pzi0l25"))))
     (build-system dune-build-system)
     (arguments
      `(#:package "core"
-       #:tests? #f; Require a cyclic dependency: core_extended
-       #:ocaml ,ocaml-4.07
-       #:findlib ,ocaml4.07-findlib
-       #:dune ,ocaml4.07-dune))
+       #:tests? #f)); Require a cyclic dependency: core_extended
     (propagated-inputs
-      `(("ocaml-base" ,(package-with-ocaml4.07 ocaml-base))
-        ("ocaml-configurator" ,ocaml4.07-configurator)
-        ("ocaml-core-kernel" ,ocaml4.07-core-kernel)
-        ("ocaml-ppx-assert" ,(package-with-ocaml4.07 ocaml-ppx-assert))
-        ("ocaml-ppx-jane" ,ocaml4.07-ppx-jane)
-        ("ocaml-sexplib" ,(package-with-ocaml4.07 ocaml-sexplib))
-        ("ocaml-spawn" ,ocaml4.07-spawn)
-        ("ocaml-stdio" ,(package-with-ocaml4.07 ocaml-stdio))
-        ("ocaml-migrate-parsetree"
-         ,(package-with-ocaml4.07 ocaml-migrate-parsetree))
-        ("ocaml-ppxlib" ,(package-with-ocaml4.07 ocaml-ppxlib))))
+      (list ocaml-base
+            ocaml-base-bigstring
+            ocaml-base-quickcheck
+            ocaml-bin-prot
+            ocaml-fieldslib
+            ocaml-jane-street-headers
+            ocaml-jst-config
+            ocaml-ppx-assert
+            ocaml-ppx-base
+            ocaml-ppx-hash
+            ocaml-ppx-inline-test
+            ocaml-ppx-jane
+            ocaml-ppx-sexp-conv
+            ocaml-ppx-sexp-message
+            ocaml-sexplib
+            ocaml-splittable-random
+            ocaml-stdio
+            ocaml-time-now
+            ocaml-typerep
+            ocaml-variantslib))
     (home-page "https://github.com/janestreet/core")
     (synopsis "Alternative to OCaml's standard library")
     (description "The Core suite of libraries is an alternative to OCaml's
 standard library that was developed by Jane Street.")
-    ;; Also contains parts of OCaml, relicensed to asl2.0, as permitted
+    ;; Also contains parts of OCaml, relicensed to expat, as permitted
     ;; by OCaml's license for consortium members (see THIRD-PARTY.txt).
-    (license license:asl2.0)))
+    (license license:expat)))
 
-(define-public ocaml4.07-core-kernel
+(define-public ocaml4.07-core
+  (package-with-ocaml4.07
+    (package
+      (inherit ocaml-core)
+      (version "0.11.3")
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                       (url "https://github.com/janestreet/core")
+                       (commit (string-append "v" version))))
+                (file-name (git-file-name "ocaml4.07-core" version))
+                (sha256
+                 (base32
+                  "0pzl8n09z4f3i7z2wq4cjxfqrr8mj6xcdp7rbg0nxap2zdhjgvrq"))))
+      (propagated-inputs
+        (list ocaml-base
+              ocaml4.07-configurator
+              ocaml-core-kernel
+              ocaml-ppx-assert
+              ocaml-ppx-jane
+              ocaml-sexplib
+              ocaml-spawn
+              ocaml-stdio
+              ocaml-migrate-parsetree
+              ocaml-ppxlib))
+      ;; Also contains parts of OCaml, relicensed to asl2.0, as permitted
+      ;; by OCaml's license for consortium members (see THIRD-PARTY.txt).
+      (license license:asl2.0))))
+
+(define-public ocaml-int-repr
+  (package
+    (name "ocaml-int-repr")
+    (version "0.15.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/janestreet/int_repr")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+          (base32 "0ph88ym3s9dk30n17si2xam40sp8wv1xffw5cl3bskc2vfya1nvl"))))
+    (build-system dune-build-system)
+    (arguments
+     `(#:tests? #f)) ;no tests
+    (propagated-inputs (list ocaml-base ocaml-ppx-jane))
+    (properties `((upstream-name . "int_repr")))
+    (home-page "https://github.com/janestreet/int_repr")
+    (synopsis "Integers of various widths")
+    (description "Integers of various widths.")
+    (license license:expat)))
+
+(define-public ocaml-core-kernel
   (package
-    (name "ocaml4.07-core-kernel")
-    (version "0.11.1")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                     (url "https://github.com/janestreet/core_kernel")
-                     (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1dg7ygy7i64c5gaakb1cp1b26p9ks81vbxmb8fd7jff2q60j2z2g"))))
+    (name "ocaml-core-kernel")
+    (version "0.15.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/janestreet/core_kernel")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+          (base32 "05mb4vbf293iq1xx4acyrmi9cgcw6capwrsa54ils62alby6w6yq"))))
     (build-system dune-build-system)
     (arguments
      ;; Cyclic dependency with ocaml-core
-     `(#:tests? #f
-       #:ocaml ,ocaml-4.07
-       #:findlib ,ocaml4.07-findlib
-       #:dune ,ocaml4.07-dune))
+     `(#:tests? #f))
     (propagated-inputs
-      `(("ocaml-base" ,(package-with-ocaml4.07 ocaml-base))
-        ("ocaml-bin-prot" ,ocaml4.07-bin-prot)
-        ("ocaml-configurator" ,ocaml4.07-configurator)
-        ("ocaml-fieldslib" ,(package-with-ocaml4.07 ocaml-fieldslib))
-        ("ocaml-jane-street-headers" ,ocaml4.07-jane-street-headers)
-        ("ocaml-ppx-assert" ,(package-with-ocaml4.07 ocaml-ppx-assert))
-        ("ocaml-ppx-base" ,(package-with-ocaml4.07 ocaml-ppx-base))
-        ("ocaml-ppx-hash" ,(package-with-ocaml4.07 ocaml-ppx-hash))
-        ("ocaml-ppx-inline-test" ,(package-with-ocaml4.07 ocaml-ppx-inline-test))
-        ("ocaml-ppx-jane" ,ocaml4.07-ppx-jane)
-        ("ocaml-ppx-sexp-conv" ,(package-with-ocaml4.07 ocaml-ppx-sexp-conv))
-        ("ocaml-ppx-sexp-message" ,ocaml4.07-ppx-sexp-message)
-        ("ocaml-sexplib" ,(package-with-ocaml4.07 ocaml-sexplib))
-        ("ocaml-splittable-random" ,ocaml4.07-splittable-random)
-        ("ocaml-stdio" ,(package-with-ocaml4.07 ocaml-stdio))
-        ("ocaml-typerep" ,ocaml4.07-typerep)
-        ("ocaml-variantslib" ,(package-with-ocaml4.07 ocaml-variantslib))
-        ("ocaml-migrate-parsetree"
-         ,(package-with-ocaml4.07 ocaml-migrate-parsetree))))
-    (properties `((upstream-name . "core_kernel")))
+      (list ocaml-base ocaml-core ocaml-int-repr ocaml-ppx-jane))
+    (properties `((upstream-name . "core_kernel")
+                  (ocaml4.07-variant . ,(delay ocaml4.07-core-kernel))))
     (home-page "https://github.com/janestreet/core_kernel")
     (synopsis "Portable standard library for OCaml")
     (description "Core is an alternative to the OCaml standard library.
 
 Core_kernel is the system-independent part of Core.  It is aimed for cases when
 the full Core is not available, such as in Javascript.")
-    (license (list
-               ;; this package and parts of OCaml, relicensed by janestreet
-               license:asl2.0
-               ;; MLton and sjs
-               license:expat))))
+    (license license:expat)))
+
+(define-public ocaml4.07-core-kernel
+  (package-with-ocaml4.07
+    (package
+      (inherit ocaml-core-kernel)
+      (version "0.11.1")
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                       (url "https://github.com/janestreet/core_kernel")
+                       (commit (string-append "v" version))))
+                (file-name (git-file-name "ocaml4.07-core-kernel" version))
+                (sha256
+                 (base32
+                  "1dg7ygy7i64c5gaakb1cp1b26p9ks81vbxmb8fd7jff2q60j2z2g"))))
+      (propagated-inputs
+        (list ocaml-base
+              ocaml-bin-prot
+              ocaml4.07-configurator
+              ocaml-fieldslib
+              ocaml-jane-street-headers
+              ocaml-ppx-assert
+              ocaml-ppx-base
+              ocaml-ppx-hash
+              ocaml-ppx-inline-test
+              ocaml-ppx-jane
+              ocaml-ppx-sexp-conv
+              ocaml-ppx-sexp-message
+              ocaml-sexplib
+              ocaml-splittable-random
+              ocaml-stdio
+              ocaml-typerep
+              ocaml-variantslib
+              ocaml-migrate-parsetree))
+      (properties '())
+      (license (list
+                 ;; this package and parts of OCaml, relicensed by janestreet
+                 license:asl2.0
+                 ;; MLton and sjs
+                 license:expat)))))
+
+(define-public ocaml-timezone
+  (package
+    (name "ocaml-timezone")
+    (version "0.15.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/janestreet/timezone")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+          (base32 "00a007aji5rbz42kgbq1w90py6fm9k9akycs5abkcfll5rd0cbhx"))))
+    (build-system dune-build-system)
+    (propagated-inputs (list ocaml-core ocaml-ppx-jane))
+    (home-page "https://github.com/janestreet/timezone")
+    (synopsis "Time-zone handling")
+    (description
+      "Timezone handles parsing timezone data and create @code{Timezone.t}
+that can later be used to manipulate time in core_kernel or core.")
+    (license license:expat)))
 
 (define-public ocaml-markup
   (package
     (name "ocaml-markup")
-    (version "1.0.2")
+    (version "1.0.3")
     (home-page "https://github.com/aantron/markup.ml")
     (source
      (origin
@@ -6602,7 +7244,7 @@ the full Core is not available, such as in Javascript.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1kvqwrrcrys5d0kzdwxcj66jpi6sdhfas4pcg02pixx92q87vhqm"))))
+         "1acgcbhx4rxx92rf65lsns588d6zzfrin2pnpkx24jw5vbgz7idn"))))
     (build-system dune-build-system)
     (arguments
      `(#:package "markup"))
@@ -6706,7 +7348,7 @@ combinators.")
 (define-public ocaml-bisect-ppx
   (package
     (name "ocaml-bisect-ppx")
-    (version "2.8.0")
+    (version "2.8.1")
     (source
      (origin
        (method git-fetch)
@@ -6716,7 +7358,7 @@ combinators.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0k9wbxf89d35444rg19l7vzpzs1zxq5pncawfcncdsskp1yms6b9"))))
+         "0562rwwnhqlf5alxl1wd1n0xs0k4aamxafrh8bbmh5yl3i5rxrx4"))))
     (build-system dune-build-system)
     (propagated-inputs
      (list ocaml-ppxlib ocaml-cmdliner))
@@ -6766,7 +7408,9 @@ then run the Bisect_ppx report tool on the generated visitation files.")
 (define-public ocaml-odoc
   (package
     (name "ocaml-odoc")
-    (version "2.1.0")
+    ;; 2.2.0-alpha contains fixes for Dune 3.0 compatibility
+    ;; (https://github.com/ocaml/odoc/commit/6ac97f3148f7791ec7451785ef4dbd9ca0daf2d1)
+    (version "2.2.0-alpha")
     (source
      (origin
        (method git-fetch)
@@ -6775,7 +7419,7 @@ then run the Bisect_ppx report tool on the generated visitation files.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1ycb468pc6vsvqj176j99bmbkrr9saxvyn9qhpazi01abbcq5d90"))))
+        (base32 "07zjkk455l51i29lcayzrc1q8j5bvbv97sscv8yhcj7x6h6q2nag"))))
     (build-system dune-build-system)
     (arguments
      `(#:phases
@@ -6947,7 +7591,7 @@ convenience functions for vectors and matrices.")
 (define-public ocaml-cairo2
   (package
     (name "ocaml-cairo2")
-    (version "0.6.2")
+    (version "0.6.3")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -6956,7 +7600,7 @@ convenience functions for vectors and matrices.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "04rp5y1rlq1pw592yywhvqd5x7csmyi9ad4f32g99nakb10s4nhx"))))
+                "1m0wh0s0sqjfa3mgq99lwk0dsg0bwxipaz93hq18m0lz5fqxib1m"))))
     (build-system dune-build-system)
     (arguments
      `(#:test-target "tests"))
@@ -7015,6 +7659,17 @@ variants.")
                (base32
                 "1w1givvhwv9jzj9zbg4mmlpb35sqi75w83r99p2z50bdr69fdf57"))))
     (build-system dune-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-test-format
+           (lambda _
+             ;; cmdliner changed the format and the tests fail
+             (substitute* '("test/bin/mdx-test/misc/no-such-file/test.expected"
+                            "test/bin/mdx-test/misc/no-such-prelude/test.expected")
+               (("`") "'")
+               (("COMMAND") "[COMMAND]")
+               (("\\.\\.\\.") "…")))))))
     (inputs
      (list ocaml-fmt
            ocaml-astring
@@ -7150,10 +7805,9 @@ generate OCaml code from .glade files), libpanel, librsvg and quartz.")
     (license license:lgpl2.0)))
 
 (define-public ocaml-reactivedata
-  ;; Future releases will use dune.
   (package
     (name "ocaml-reactivedata")
-    (version "0.2.2")
+    (version "0.3")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -7162,26 +7816,11 @@ generate OCaml code from .glade files), libpanel, librsvg and quartz.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0l5z0fsckqkywjbn2nwy3s55h85yx8scc4hq9qzr9ig3hrq1mfb0"))))
+                "0gmpfnw08c7hx4bsgrgvp6w7pq2ghqxq3qd1cbdyscbg9n22jrca"))))
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (delete 'configure)
-         (add-before 'build 'fix-deprecated
-           (lambda _
-             (substitute*
-                 "src/reactiveData.ml"
-               (("Pervasives.compare") "compare"))
-             #t))
-         (add-before 'install 'forget-makefile
-           ;; Ensure we use opam to install files
-           (lambda _
-             (delete-file "Makefile")
-             #t)))))
-    (build-system ocaml-build-system)
+     `(#:tests? #f)) ;no tests
+    (build-system dune-build-system)
     (properties `((upstream-name . "reactiveData")))
-    (native-inputs
-     (list ocamlbuild opam))
     (propagated-inputs
      (list ocaml-react))
     (home-page "https://github.com/ocsigen/reactiveData")
@@ -7357,7 +7996,7 @@ defined in OCaml 4.12.0.")
 (define-public ocamlformat
   (package
     (name "ocamlformat")
-    (version "0.20.1")
+    (version "0.21.0")
     (source
       (origin
         (method git-fetch)
@@ -7367,13 +8006,16 @@ defined in OCaml 4.12.0.")
         (file-name (git-file-name name version))
         (sha256
           (base32
-            "1q78gxsz763d6vbi1lyfmn7733l10qhq80bchdli9zw7sggs7nq1"))))
+            "10vy102a0isd8cg94y61pm4qfgy74d6003dw0qn0bdmbd19r5071"))))
     (build-system dune-build-system)
     (arguments
      '(#:package "ocamlformat"
-       ;; FIXME: The expected format is slightly different than what the
-       ;; produced format is for test/cli/stdin.t
-       #:tests? #f))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-test-format
+           (lambda _
+             (substitute* "test/cli/repl_file_errors.t/run.t"
+               ((" ;;") ";;")))))))
     (propagated-inputs
       (list ocaml-version
             ocaml-base
@@ -7391,7 +8033,7 @@ defined in OCaml 4.12.0.")
             ocaml-uuseg
             ocaml-uutf))
     (native-inputs
-      (list ocaml-alcotest ocaml-ocp-indent ocaml-bisect-ppx))
+      (list git-minimal ocaml-alcotest ocaml-ocp-indent ocaml-bisect-ppx))
     (home-page "https://github.com/ocaml-ppx/ocamlformat")
     (synopsis "Auto-formatter for OCaml code")
     (description "OCamlFormat is a tool to automatically format OCaml code in
@@ -7401,7 +8043,7 @@ a uniform style.")
 (define-public ocaml-bigstringaf
   (package
     (name "ocaml-bigstringaf")
-    (version "0.8.0")
+    (version "0.9.0")
     (home-page "https://github.com/inhabitedtype/bigstringaf")
     (source
      (origin
@@ -7412,7 +8054,7 @@ a uniform style.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0z69g3bpgw4p7z9h5j70w75rnxfrd8c7nlhqq6xvvkkgbxafm1ll"))))
+         "188j9awxg99vrp2l3rqfmdxdazq5xrjmg1wf62vfqsks9sff6wqx"))))
     (build-system dune-build-system)
     (arguments
      '(#:test-target "."))
@@ -7653,7 +8295,9 @@ libraries.")
        (sha256
         (base32 "0iyhl9z57j53j2jvyqcwmxhbvy23l6g80aa0abmlgwam14yskspf"))))
     (build-system dune-build-system)
-    (arguments `(#:test-target "."))
+    (arguments
+     `(#:tests? #f ;tests assume ocaml 4.13
+       #:test-target "."))
     (propagated-inputs
      (list ocaml-ppxlib
            ocaml-uchar