gnu: Add ocaml-craml.
[jackhill/guix/guix.git] / gnu / packages / ocaml.scm
CommitLineData
d192efae
CR
1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
69b8f08c 3;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
b9d8756b 4;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
c900f843 5;;; Copyright © 2015 David Hashe <david.hashe@dhashe.com>
90907a22 6;;; Copyright © 2016 Eric Bavier <bavier@member.fsf.org>
a747baba 7;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
fdb3fba3 8;;; Copyright © 2016, 2018 Efraim Flashner <efraim@flashner.co.il>
564cf93f 9;;; Copyright © 2016-2018 Julien Lepiller <julien@lepiller.eu>
ec436717 10;;; Copyright © 2017 Ben Woodcroft <donttrustben@gmail.com>
c959a774 11;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
2b4d2a4d 12;;; Copyright © 2018 Peter Kreye <kreyepr@gmail.com>
cdcbccd1 13;;; Copyright © 2018, 2019 Gabriel Hondet <gabrielhondet@gmail.com>
59a07504 14;;; Copyright © 2018 Kei Kebreau <kkebreau@posteo.net>
d192efae
CR
15;;;
16;;; This file is part of GNU Guix.
17;;;
18;;; GNU Guix is free software; you can redistribute it and/or modify it
19;;; under the terms of the GNU General Public License as published by
20;;; the Free Software Foundation; either version 3 of the License, or (at
21;;; your option) any later version.
22;;;
23;;; GNU Guix is distributed in the hope that it will be useful, but
24;;; WITHOUT ANY WARRANTY; without even the implied warranty of
25;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26;;; GNU General Public License for more details.
27;;;
28;;; You should have received a copy of the GNU General Public License
29;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
30
31(define-module (gnu packages ocaml)
d192efae 32 #:use-module (gnu packages)
44c23cb8 33 #:use-module (gnu packages autotools)
0705f79c 34 #:use-module (gnu packages base)
88191ace
JL
35 #:use-module (gnu packages bison)
36 #:use-module (gnu packages boost)
69b8f08c 37 #:use-module (gnu packages compression)
1ff755d1
DC
38 #:use-module (gnu packages curl)
39 #:use-module (gnu packages emacs)
eeb883cb 40 #:use-module (gnu packages emacs-xyz)
88191ace 41 #:use-module (gnu packages flex)
1ff755d1 42 #:use-module (gnu packages gcc)
90907a22 43 #:use-module (gnu packages ghostscript)
1fdfbadf 44 #:use-module (gnu packages glib)
1ff755d1
DC
45 #:use-module (gnu packages gnome)
46 #:use-module (gnu packages gtk)
1fdfbadf 47 #:use-module (gnu packages libevent)
69d08bb1 48 #:use-module (gnu packages libffi)
cd1562ef 49 #:use-module (gnu packages llvm)
a747baba 50 #:use-module (gnu packages m4)
59a07504 51 #:use-module (gnu packages maths)
ddf2b503 52 #:use-module (gnu packages multiprecision)
a34cedc4 53 #:use-module (gnu packages ncurses)
f8a12de1 54 #:use-module (gnu packages pcre)
1ff755d1
DC
55 #:use-module (gnu packages perl)
56 #:use-module (gnu packages pkg-config)
fc3d70ae 57 #:use-module (gnu packages protobuf)
1ff755d1 58 #:use-module (gnu packages python)
a9e9fd15 59 #:use-module (gnu packages sdl)
cd0322a3 60 #:use-module (gnu packages sqlite)
1ff755d1
DC
61 #:use-module (gnu packages tex)
62 #:use-module (gnu packages texinfo)
44c23cb8 63 #:use-module (gnu packages time)
37f17e2a 64 #:use-module (gnu packages tls)
a34cedc4 65 #:use-module (gnu packages version-control)
7a1d25c4 66 #:use-module (gnu packages virtualization)
c5196ac7 67 #:use-module (gnu packages web-browsers)
7a76b4af 68 #:use-module (gnu packages xml)
1ff755d1 69 #:use-module (gnu packages xorg)
effc8325 70 #:use-module (guix build-system dune)
db1eb632 71 #:use-module (guix build-system emacs)
1ff755d1 72 #:use-module (guix build-system gnu)
7a76b4af 73 #:use-module (guix build-system ocaml)
1ff755d1 74 #:use-module (guix download)
8ae540a2 75 #:use-module (guix git-download)
1ff755d1
DC
76 #:use-module ((guix licenses) #:prefix license:)
77 #:use-module (guix packages)
78 #:use-module (guix svn-download)
1345231c 79 #:use-module (guix utils)
0ad5f809 80 #:use-module ((srfi srfi-1) #:hide (zip)))
d192efae 81
56f73ead
JL
82;; A shortcut for files from ocaml forge. Downloaded files are computed from
83;; their number, not their name.
84(define (ocaml-forge-uri name version file-number)
85 (string-append "https://forge.ocamlcore.org/frs/download.php/"
86 (number->string file-number) "/" name "-" version
87 ".tar.gz"))
88
f95ebba5
JL
89;; Janestreet packages are found in a similar way and all need the same patch.
90(define (janestreet-origin name version hash)
91 (origin (method url-fetch)
92 (uri (string-append "https://ocaml.janestreet.com/ocaml-core/"
93 (version-major+minor version) "/files/"
94 name "-" version ".tar.gz"))
95 (sha256 (base32 hash))
96 (modules '((guix build utils)))
97 (snippet
98 (let ((pattern (string-append "lib/" name)))
99 `(begin
100 ;; install.ml contains an invalid reference to the ppx file and
101 ;; propagates this error to the generated META file. It
102 ;; looks for it in the "lib" directory, but it is installed in
103 ;; "lib/ocaml/site-lib/package". This substitute does not change
104 ;; this file for non ppx packages.
105 (substitute* "install.ml"
106 ((,pattern) (string-append "lib/ocaml/site-lib/" ,name)))
107 ;; The standard Makefile would try to install janestreet modules
108 ;; in OCaml's directory in the store, which is read-only.
109 (substitute* "Makefile"
110 (("--prefix")
6cbee49d
MW
111 "--libdir $(LIBDIR) --prefix"))
112 #t)))))
f95ebba5
JL
113
114;; They also require almost the same set of arguments
115(define janestreet-arguments
116 `(#:use-make? #t
117 #:make-flags
118 (list (string-append "CONFIGUREFLAGS=--prefix "
119 (assoc-ref %outputs "out")
120 " --enable-tests")
121 (string-append "LIBDIR="
122 (assoc-ref %outputs "out")
123 "/lib/ocaml/site-lib")
124 ;; for ocaml-bin-prot, otherwise ignored
125 (string-append "OCAML_TOPLEVEL_PATH="
126 (assoc-ref %build-inputs "findlib")
127 "/lib/ocaml/site-lib"))
128 #:phases (modify-phases %standard-phases (delete 'configure))))
129
564cf93f 130(define-public ocaml-4.02
d192efae
CR
131 (package
132 (name "ocaml")
be78e52c 133 (version "4.02.3")
d192efae 134 (source (origin
69b8f08c
MW
135 (method url-fetch)
136 (uri (string-append
137 "http://caml.inria.fr/pub/distrib/ocaml-"
138 (version-major+minor version)
139 "/ocaml-" version ".tar.xz"))
140 (sha256
141 (base32
3854f3d7 142 "1qwwvy8nzd87hk8rd9sm667nppakiapnx4ypdwcrlnav2dz6kil3"))
8bd10c10
JL
143 (patches
144 (search-patches
145 "ocaml-CVE-2015-8869.patch"
6a8d3381
JL
146 "ocaml-Add-a-.file-directive.patch"
147 "ocaml-enable-ocamldoc-reproducibility.patch"))))
d192efae 148 (build-system gnu-build-system)
6372e336
JN
149 (native-search-paths
150 (list (search-path-specification
151 (variable "OCAMLPATH")
e6876cb9 152 (files (list "lib/ocaml" "lib/ocaml/site-lib")))
796a17ab
JL
153 (search-path-specification
154 (variable "CAML_LD_LIBRARY_PATH")
564cf93f
JL
155 (files (list "lib/ocaml/site-lib/stubslibs"
156 "lib/ocaml/site-lib/stublibs")))))
69b8f08c
MW
157 (native-inputs
158 `(("perl" ,perl)
159 ("pkg-config" ,pkg-config)))
160 (inputs
161 `(("libx11" ,libx11)
2f6d3e41 162 ;; For libiberty, needed for objdump support.
e1f32cf1 163 ("gcc:lib" ,(canonical-package gcc) "lib")
2f6d3e41 164 ("zlib" ,zlib))) ;also needed for objdump support
d192efae 165 (arguments
69b8f08c
MW
166 `(#:modules ((guix build gnu-build-system)
167 (guix build utils)
168 (web server))
169 #:phases
170 (modify-phases %standard-phases
171 (add-after 'unpack 'patch-/bin/sh-references
2b1f7b83
DC
172 (lambda* (#:key inputs #:allow-other-keys)
173 (let* ((sh (string-append (assoc-ref inputs "bash")
174 "/bin/sh"))
175 (quoted-sh (string-append "\"" sh "\"")))
176 (with-fluids ((%default-port-encoding #f))
177 (for-each
178 (lambda (file)
179 (substitute* file
180 (("\"/bin/sh\"")
181 (begin
182 (format (current-error-port) "\
69b8f08c 183patch-/bin/sh-references: ~a: changing `\"/bin/sh\"' to `~a'~%"
2b1f7b83
DC
184 file quoted-sh)
185 quoted-sh))))
186 (find-files "." "\\.ml$"))
187 #t))))
69b8f08c 188 (replace 'configure
2b1f7b83
DC
189 (lambda* (#:key outputs #:allow-other-keys)
190 (let* ((out (assoc-ref outputs "out"))
191 (mandir (string-append out "/share/man")))
192 ;; Custom configure script doesn't recognize
193 ;; --prefix=<PREFIX> syntax (with equals sign).
194 (zero? (system* "./configure"
195 "--prefix" out
196 "--mandir" mandir)))))
69b8f08c 197 (replace 'build
2b1f7b83
DC
198 (lambda _
199 (zero? (system* "make" "-j" (number->string
200 (parallel-job-count))
201 "world.opt"))))
69b8f08c
MW
202 (delete 'check)
203 (add-after 'install 'check
2b1f7b83
DC
204 (lambda _
205 (with-directory-excursion "testsuite"
206 (zero? (system* "make" "all")))))
69b8f08c 207 (add-before 'check 'prepare-socket-test
2b1f7b83
DC
208 (lambda _
209 (format (current-error-port)
210 "Spawning local test web server on port 8080~%")
211 (when (zero? (primitive-fork))
212 (run-server (lambda (request request-body)
213 (values '((content-type . (text/plain)))
214 "Hello!"))
215 'http '(#:port 8080)))
216 (let ((file "testsuite/tests/lib-threads/testsocket.ml"))
217 (format (current-error-port)
218 "Patching ~a to use localhost port 8080~%"
219 file)
220 (substitute* file
221 (("caml.inria.fr") "localhost")
222 (("80") "8080")
223 (("HTTP1.0") "HTTP/1.0"))
224 #t))))))
69b8f08c 225 (home-page "https://ocaml.org/")
d192efae
CR
226 (synopsis "The OCaml programming language")
227 (description
228 "OCaml is a general purpose industrial-strength programming language with
35b9e423 229an emphasis on expressiveness and safety. Developed for more than 20 years at
d192efae
CR
230Inria it benefits from one of the most advanced type systems and supports
231functional, imperative and object-oriented styles of programming.")
69b8f08c
MW
232 ;; The compiler is distributed under qpl1.0 with a change to choice of
233 ;; law: the license is governed by the laws of France. The library is
234 ;; distributed under lgpl2.0.
d8e0a08c 235 (license (list license:qpl license:lgpl2.0))))
a34cedc4 236
ec436717
BW
237(define-public ocaml-4.01
238 (package
564cf93f 239 (inherit ocaml-4.02)
ec436717
BW
240 (version "4.01.0")
241 (source (origin
242 (method url-fetch)
243 (uri (string-append
244 "http://caml.inria.fr/pub/distrib/ocaml-"
245 (version-major+minor version)
246 "/ocaml-" version ".tar.xz"))
247 (sha256
248 (base32
249 "03d7ida94s1gpr3gadf4jyhmh5rrszd5s4m4z59daaib25rvfyv7"))))
250 (arguments
564cf93f 251 (substitute-keyword-arguments (package-arguments ocaml-4.02)
ec436717
BW
252 ((#:phases phases)
253 `(modify-phases ,phases
254 (replace 'build
255 (lambda _
256 ;; Specifying '-j' at all causes the build to fail.
257 (zero? (system* "make" "world.opt"))))
c661f25a
EF
258 ,@(if (string=? "aarch64-linux" (%current-system))
259 ;; Custom configure script doesn't recongnize aarch64.
260 '((replace 'configure
261 (lambda* (#:key outputs #:allow-other-keys)
262 (let* ((out (assoc-ref outputs "out"))
263 (mandir (string-append out "/share/man")))
264 (invoke "./configure"
265 "--prefix" out
266 "--mandir" mandir
267 "-host" "armv8l-unknown-linux-gnu")))))
268 '())
ec436717
BW
269 (replace 'check
270 (lambda _
271 (with-directory-excursion "testsuite"
272 (zero? (system*
273 "make"
274 "all"
275 (string-append
c661f25a 276 "TOPDIR=" (getcwd) "/.."))))))))))))
ec436717 277
564cf93f
JL
278(define-public ocaml-4.07
279 (package
280 (inherit ocaml-4.02)
6a3cf938 281 (version "4.07.1")
564cf93f
JL
282 (source (origin
283 (method url-fetch)
284 (uri (string-append
285 "http://caml.inria.fr/pub/distrib/ocaml-"
286 (version-major+minor version)
287 "/ocaml-" version ".tar.xz"))
288 (sha256
289 (base32
6a3cf938 290 "1f07hgj5k45cylj1q3k5mk8yi02cwzx849b1fwnwia8xlcfqpr6z"))))
564cf93f
JL
291 (arguments
292 (substitute-keyword-arguments (package-arguments ocaml-4.02)
293 ((#:phases phases)
294 `(modify-phases ,phases
295 (delete 'prepare-socket-test)
296 (replace 'check
297 (lambda _
298 (with-directory-excursion "testsuite"
299 (invoke "make" "all"))
300 #t))))))))
301
302(define-public ocaml ocaml-4.07)
303
304(define-public ocamlbuild
912f4400
JL
305 (package
306 (name "ocamlbuild")
307 (version "0.13.1")
308 (source (origin
309 (method url-fetch)
310 (uri (string-append "https://github.com/ocaml/ocamlbuild/archive/"
311 version ".tar.gz"))
312 (file-name (string-append name "-" version ".tar.gz"))
313 (sha256
314 (base32
315 "1320cfkixs1xlng5av04pa5qjb3ynvi2kl3k1ngqzg5fpi29b0vr"))))
316 (build-system gnu-build-system)
317 (arguments
318 `(#:test-target "test"
319 #:tests? #f; tests require findlib
320 #:make-flags
321 (list (string-append "OCAMLBUILD_PREFIX=" (assoc-ref %outputs "out"))
322 (string-append "OCAMLBUILD_BINDIR=" (assoc-ref %outputs "out")
323 "/bin")
324 (string-append "OCAMLBUILD_LIBDIR=" (assoc-ref %outputs "out")
325 "/lib/ocaml/site-lib")
326 (string-append "OCAMLBUILD_MANDIR=" (assoc-ref %outputs "out")
327 "/share/man"))
328 #:phases
329 (modify-phases %standard-phases
330 (delete 'bootstrap)
331 (delete 'configure)
332 (add-before 'build 'findlib-environment
333 (lambda* (#:key outputs #:allow-other-keys)
334 (let* ((out (assoc-ref outputs "out")))
335 (setenv "OCAMLFIND_DESTDIR" (string-append out "/lib/ocaml/site-lib"))
336 (setenv "OCAMLFIND_LDCONF" "ignore")
337 #t))))))
338 (native-inputs
339 `(("ocaml" ,ocaml)))
340 (home-page "https://github.com/ocaml/ocamlbuild")
341 (synopsis "OCaml build tool")
342 (description "OCamlbuild is a generic build tool, that has built-in rules
343for building OCaml library and programs.")
344 (license license:lgpl2.1+)))
564cf93f 345
a34cedc4
LC
346(define-public opam
347 (package
348 (name "opam")
7a1d25c4 349 (version "2.0.1")
a34cedc4
LC
350 (source (origin
351 (method url-fetch)
352 ;; Use the '-full' version, which includes all the dependencies.
353 (uri (string-append
354 "https://github.com/ocaml/opam/releases/download/"
355 version "/opam-full-" version ".tar.gz")
356 ;; (string-append "https://github.com/ocaml/opam/archive/"
357 ;; version ".tar.gz")
358 )
359 (sha256
360 (base32
7a1d25c4 361 "0z6r9qr4awcdn7wyrl5y5jm34jsjlnzd00py893f1hd0c6vg3xw1"))))
a34cedc4
LC
362 (build-system gnu-build-system)
363 (arguments
364 '(;; Sometimes, 'make -jX' would fail right after ./configure with
365 ;; "Fatal error: exception End_of_file".
366 #:parallel-build? #f
367
368 ;; For some reason, 'ocp-build' needs $TERM to be set.
4533cd73
EB
369 #:make-flags `("TERM=screen"
370 ,(string-append "SHELL="
371 (assoc-ref %build-inputs "bash")
372 "/bin/sh"))
a34cedc4
LC
373 #:test-target "tests"
374
375 ;; FIXME: There's an obscure test failure:
376 ;; …/_obuild/opam/opam.asm install P1' failed.
377 #:tests? #f
378
2385cab1
EB
379 #:phases (modify-phases %standard-phases
380 (add-before 'build 'pre-build
381 (lambda* (#:key inputs make-flags #:allow-other-keys)
7a1d25c4
JL
382 (let ((bash (assoc-ref inputs "bash"))
383 (bwrap (string-append (assoc-ref inputs "bubblewrap")
384 "/bin/bwrap")))
2385cab1
EB
385 (substitute* "src/core/opamSystem.ml"
386 (("\"/bin/sh\"")
7a1d25c4
JL
387 (string-append "\"" bash "/bin/sh\""))
388 (("getconf")
389 (which "getconf")))
390 ;; Use bwrap from the store directly.
391 (substitute* "src/state/shellscripts/bwrap.sh"
392 (("-v bwrap") (string-append "-v " bwrap))
2a6ba9ff
JL
393 (("exec bwrap") (string-append "exec " bwrap))
394 ;; Mount /gnu and /run/current-system in the
395 ;; isolated environment when building with opam.
396 ;; This is necessary for packages to find external
397 ;; dependencies, such as a C compiler, make, etc...
398 (("^add_mounts ro /usr")
399 "add_mounts ro /gnu /run/current-system /usr"))
7a1d25c4
JL
400 (substitute* "src/client/opamInitDefaults.ml"
401 (("\"bwrap\"") (string-append "\"" bwrap "\"")))
4533cd73 402 ;; Build dependencies
7a1d25c4
JL
403 (apply invoke "make" "lib-ext" make-flags)
404 #t)))
2385cab1
EB
405 (add-before 'check 'pre-check
406 (lambda _
407 (setenv "HOME" (getcwd))
7a1d25c4
JL
408 (invoke "git" "config" "--global" "user.email" "guix@gnu.org")
409 (invoke "git" "config" "--global" "user.name" "Guix")
410 #t)))))
a34cedc4
LC
411 (native-inputs
412 `(("git" ,git) ;for the tests
4533cd73
EB
413 ("python" ,python) ;for the tests
414 ("camlp4" ,camlp4)))
a34cedc4
LC
415 (inputs
416 `(("ocaml" ,ocaml)
417 ("ncurses" ,ncurses)
7a1d25c4
JL
418 ("curl" ,curl)
419 ("bubblewrap" ,bubblewrap)))
a34cedc4
LC
420 (home-page "http://opam.ocamlpro.com/")
421 (synopsis "Package manager for OCaml")
422 (description
423 "OPAM is a tool to manage OCaml packages. It supports multiple
424simultaneous compiler installations, flexible package constraints, and a
425Git-friendly development workflow.")
426
427 ;; The 'LICENSE' file waives some requirements compared to LGPLv3.
d8e0a08c 428 (license license:lgpl3)))
83f4dc36 429
564cf93f 430(define-public camlp4-4.02
492ee988
LC
431 (package
432 (name "camlp4")
006faa35 433 (version "4.02+6")
492ee988
LC
434 (source (origin
435 (method url-fetch)
436 (uri (string-append "https://github.com/ocaml/camlp4/archive/"
437 version ".tar.gz"))
438 (sha256
439 (base32
006faa35 440 "0icdfzhsbgf89925gc8gl3fm8z2xzszzlib0v9dj5wyzkyv3a342"))
492ee988
LC
441 (file-name (string-append name "-" version ".tar.gz"))))
442 (build-system gnu-build-system)
564cf93f 443 (native-inputs `(("ocaml" ,ocaml-4.02)
0d1c0660 444 ("which" ,which)))
564cf93f 445 (inputs `(("ocaml" ,ocaml-4.02)))
492ee988
LC
446 (arguments
447 '(#:tests? #f ;no documented test target
e0ddaa8b
JL
448 ;; a race-condition will lead byte and native targets to mkdir _build
449 ;; which fails on the second attempt.
450 #:parallel-build? #f
451 #:make-flags '("all")
492ee988
LC
452 #:phases (modify-phases %standard-phases
453 (replace
454 'configure
455 (lambda* (#:key outputs #:allow-other-keys)
456 ;; This is a home-made 'configure' script.
457 (let ((out (assoc-ref outputs "out")))
458 (zero? (system* "./configure"
ad3d730e
JL
459 (string-append "--libdir=" out
460 "/lib/ocaml/site-lib")
492ee988 461 (string-append "--bindir=" out "/bin")
ad3d730e
JL
462 (string-append "--pkgdir=" out
463 "/lib/ocaml/site-lib"))))))
464 (add-after 'install 'install-meta
465 (lambda* (#:key outputs #:allow-other-keys)
466 (let ((out (assoc-ref outputs "out")))
467 (substitute* "camlp4/META.in"
468 (("directory = .*")
469 (string-append "directory = \"" out
470 "/lib/ocaml/site-lib/camlp4\"\n")))
471 (zero? (system* "make" "install-META"))))))))
492ee988
LC
472 (home-page "https://github.com/ocaml/camlp4")
473 (synopsis "Write parsers in OCaml")
474 (description
475 "Camlp4 is a software system for writing extensible parsers for
476programming languages. It provides a set of OCaml libraries that are used to
477define grammars as well as loadable syntax extensions of such grammars.
478Camlp4 stands for Caml Preprocessor and Pretty-Printer and one of its most
479important applications is the definition of domain-specific extensions of the
480syntax of OCaml.")
481
482 ;; This is LGPLv2 with an exception that allows packages statically-linked
483 ;; against the library to be released under any terms.
d8e0a08c 484 (license license:lgpl2.0)))
492ee988 485
564cf93f
JL
486(define-public camlp4-4.07
487 (package
488 (inherit camlp4-4.02)
489 (name "camlp4")
490 (version "4.07+1")
491 (source (origin
492 (method url-fetch)
493 (uri (string-append "https://github.com/ocaml/camlp4/archive/"
494 version ".tar.gz"))
495 (sha256
496 (base32
497 "143hhxv1i6aq413z0i1pynrjcfl2g5gnh5r3863v6h9z0riqknzc"))
498 (file-name (string-append name "-" version ".tar.gz"))))
499 (properties
500 `((ocaml4.02-variant . ,(delay camlp4-4.02))))
501 (native-inputs
502 `(("ocaml" ,ocaml-4.07)
503 ("ocamlbuild" ,ocamlbuild)
504 ("which" ,which)))
505 (inputs
506 `(("ocaml" ,ocaml-4.07)))))
507
508(define-public camlp4 camlp4-4.07)
509
83f4dc36
MW
510(define-public camlp5
511 (package
512 (name "camlp5")
fa45b22d 513 (version "7.07")
83f4dc36
MW
514 (source (origin
515 (method url-fetch)
564cf93f
JL
516 (uri (string-append "https://github.com/camlp5/camlp5/archive/rel"
517 (string-delete #\. version) ".tar.gz"))
518 (file-name (string-append name "-" version ".tar.gz"))
83f4dc36
MW
519 (sha256
520 (base32
fa45b22d 521 "148r6p93xlxi6v7kbsqv8i70r6av04cyn0109pwss5xj6fw97i52"))))
83f4dc36
MW
522 (build-system gnu-build-system)
523 (inputs
524 `(("ocaml" ,ocaml)))
525 (arguments
526 `(#:tests? #f ; XXX TODO figure out how to run the tests
527 #:phases
528 (modify-phases %standard-phases
529 (replace 'configure
530 (lambda* (#:key outputs #:allow-other-keys)
531 (let* ((out (assoc-ref outputs "out"))
532 (mandir (string-append out "/share/man")))
533 ;; Custom configure script doesn't recognize
534 ;; --prefix=<PREFIX> syntax (with equals sign).
402dedf8
MW
535 (invoke "./configure"
536 "--prefix" out
537 "--mandir" mandir))))
564cf93f
JL
538 (add-before 'build 'fix-/bin-references
539 (lambda _
540 (substitute* "config/Makefile"
541 (("/bin/rm") "rm"))
542 #t))
83f4dc36
MW
543 (replace 'build
544 (lambda _
402dedf8
MW
545 (invoke "make" "-j" (number->string
546 (parallel-job-count))
547 "world.opt")))
07b4cd3a
JL
548 ;; Required for findlib to find camlp5's libraries
549 (add-after 'install 'install-meta
550 (lambda* (#:key outputs #:allow-other-keys)
551 (install-file "etc/META" (string-append (assoc-ref outputs "out")
402dedf8
MW
552 "/lib/ocaml/camlp5/"))
553 #t)))))
83f4dc36
MW
554 (home-page "http://camlp5.gforge.inria.fr/")
555 (synopsis "Pre-processor Pretty Printer for OCaml")
556 (description
557 "Camlp5 is a Pre-Processor-Pretty-Printer for Objective Caml. It offers
558tools for syntax (Stream Parsers and Grammars) and the ability to modify the
559concrete syntax of the language (Quotations, Syntax Extensions).")
560 ;; Most files are distributed under bsd-3, but ocaml_stuff/* is under qpl.
d8e0a08c 561 (license (list license:bsd-3 license:qpl))))
d6b7b5ed
MW
562
563(define-public hevea
564 (package
565 (name "hevea")
564cf93f 566 (version "2.32")
d6b7b5ed
MW
567 (source (origin
568 (method url-fetch)
8f26f239 569 (uri (string-append "http://hevea.inria.fr/old/"
d6b7b5ed
MW
570 name "-" version ".tar.gz"))
571 (sha256
572 (base32
564cf93f 573 "1s4yqphfcr1pf5mcj5c84mvmd107k525iiym5jdwsxz0ka0ccmfy"))))
d6b7b5ed
MW
574 (build-system gnu-build-system)
575 (inputs
576 `(("ocaml" ,ocaml)))
564cf93f
JL
577 (native-inputs
578 `(("ocamlbuild" ,ocamlbuild)))
d6b7b5ed
MW
579 (arguments
580 `(#:tests? #f ; no test suite
581 #:make-flags (list (string-append "PREFIX=" %output))
582 #:phases (modify-phases %standard-phases
f5a8491b
EB
583 (delete 'configure)
584 (add-before 'build 'patch-/bin/sh
585 (lambda _
586 (substitute* "_tags"
587 (("/bin/sh") (which "sh")))
588 #t)))))
d6b7b5ed
MW
589 (home-page "http://hevea.inria.fr/")
590 (synopsis "LaTeX to HTML translator")
591 (description
592 "HeVeA is a LaTeX to HTML translator that generates modern HTML 5. It is
593written in Objective Caml.")
d8e0a08c 594 (license license:qpl)))
1973183b 595
564cf93f
JL
596(define-public ocaml-num
597 (package
598 (name "ocaml-num")
599 (version "1.1")
600 (source (origin
601 (method url-fetch)
602 (uri (string-append "https://github.com/ocaml/num/archive/v"
603 version ".tar.gz"))
604 (file-name (string-append name "-" version ".tar.gz"))
605 (sha256
606 (base32
607 "1xlkd0svc0mgq5s7nrm2rjrsvg15i9wxqkc1kvwjp6sv8vv8bb04"))))
608 (build-system ocaml-build-system)
609 (arguments
610 `(#:phases
611 (modify-phases %standard-phases
612 (delete 'configure)
613 (add-before 'build 'fix-makefile
614 (lambda* (#:key outputs #:allow-other-keys)
615 ;; This package supposes we install to the same directory as
616 ;; the ocaml package.
617 (substitute* "src/META"
618 (("\"\\^\"") (string-append "\"" (assoc-ref outputs "out")
619 "/lib/ocaml/site-lib\"")))
620 (substitute* "src/Makefile"
621 (("\\) \\$\\(STDLIBDIR\\)")
622 (string-append ") " (assoc-ref outputs "out")
623 "/lib/ocaml/site-lib")))
624 #t))
625 (add-after 'install 'fix-stubslib
626 (lambda* (#:key outputs #:allow-other-keys)
627 (format #t "~a~%" (find-files "." ".*.so"))
628 (let ((stubdir (string-append (assoc-ref outputs "out")
629 "/lib/ocaml/site-lib")))
630 (mkdir-p stubdir)
631 (install-file "src/dllnums.so" stubdir))
632 #t)))))
633 (home-page "https://github.com/ocaml/num")
634 (synopsis "Arbitrary-precision integer and rational arithmetic")
635 (description "OCaml-Num contains the legacy Num library for
636arbitrary-precision integer and rational arithmetic that used to be part of
637the OCaml core distribution.")
638 (license license:lgpl2.1+))); with linking exception
639
833ade67
OP
640(define-public emacs-tuareg
641 (package
642 (name "emacs-tuareg")
564cf93f 643 (version "2.2.0")
833ade67
OP
644 (source (origin
645 (method url-fetch)
646 (uri (string-append "https://github.com/ocaml/tuareg/archive/"
647 version ".tar.gz"))
648 (file-name (string-append name "-" version ".tar.gz"))
649 (sha256
650 (base32
564cf93f 651 "1ynpfc170f9jqx49biji9npfkvfpflbm29xf24wc7fnxxayr49ig"))))
833ade67
OP
652 (build-system gnu-build-system)
653 (native-inputs `(("emacs" ,emacs-minimal)
654 ("opam" ,opam)))
655 (arguments
656 `(#:phases
657 (modify-phases %standard-phases
658 (delete 'configure)
659 (add-before 'install 'fix-install-path
660 (lambda* (#:key outputs #:allow-other-keys)
661 (substitute* "Makefile"
662 (("/emacs/site-lisp")
663 (string-append (assoc-ref %outputs "out")
664 "/share/emacs/site-lisp/")))
665 #t))
666 (add-after 'install 'post-install
667 (lambda* (#:key outputs #:allow-other-keys)
668 (symlink "tuareg.el"
669 (string-append (assoc-ref outputs "out")
670 "/share/emacs/site-lisp/"
671 "tuareg-autoloads.el"))
672 #t)))))
673 (home-page "https://github.com/ocaml/tuareg")
674 (synopsis "OCaml programming mode, REPL, debugger for Emacs")
675 (description "Tuareg helps editing OCaml code, to highlight important
676parts of the code, to run an OCaml REPL, and to run the OCaml debugger within
677Emacs.")
678 (license license:gpl2+)))
679
e31b75f2
DC
680(define-public ocaml-menhir
681 (package
682 (name "ocaml-menhir")
683 (version "20161115")
684 (source (origin
685 (method url-fetch)
686 (uri (string-append
687 "http://gallium.inria.fr/~fpottier/menhir/"
688 "menhir-" version ".tar.gz"))
689 (sha256
690 (base32
691 "1j8nmcj2gq6hyyi16z27amiahplgrnk4ppchpm0v4qy80kwkf47k"))))
692 (build-system gnu-build-system)
693 (inputs
694 `(("ocaml" ,ocaml)))
564cf93f
JL
695 (native-inputs
696 `(("ocamlbuild" ,ocamlbuild)))
e31b75f2
DC
697 (arguments
698 `(#:parallel-build? #f ; Parallel build causes failure
699 #:tests? #f ; No check target
700 #:phases
701 (modify-phases %standard-phases
702 (replace 'configure
703 (lambda* (#:key outputs #:allow-other-keys)
704 (let ((out (assoc-ref outputs "out")))
705 (setenv "PREFIX" out))
706 #t)))))
564cf93f
JL
707 (properties
708 `((ocaml4.02-variant . ,(delay ocaml4.02-menhir))))
e31b75f2
DC
709 (home-page "http://gallium.inria.fr/~fpottier/menhir")
710 (synopsis "Parser generator")
711 (description "Menhir is a parser generator. It turns high-level grammar
712specifications, decorated with semantic actions expressed in the OCaml
713programming language into parsers, again expressed in OCaml. It is based on
714Knuth’s LR(1) parser construction technique.")
715 ;; The file src/standard.mly and all files listed in src/mnehirLib.mlpack
716 ;; that have an *.ml or *.mli extension are GPL licensed. All other files
717 ;; are QPL licensed.
d8e0a08c 718 (license (list license:gpl2+ license:qpl))))
e31b75f2 719
564cf93f
JL
720(define-public ocaml4.02-menhir
721 (package
722 (inherit ocaml-menhir)
723 (name "ocaml4.02-menhir")
724 (inputs `(("ocaml" ,ocaml-4.02)))
725 (native-inputs '())))
726
3573b634
AE
727(define-public lablgtk
728 (package
729 (name "lablgtk")
564cf93f 730 (version "2.18.6")
56f73ead
JL
731 (source (origin
732 (method url-fetch)
564cf93f 733 (uri (ocaml-forge-uri name version 1726))
56f73ead
JL
734 (sha256
735 (base32
564cf93f 736 "1y38fdvswy6hmppm65qvgdk4pb3ghhnvz7n4ialf46340r1s5p2d"))))
3573b634 737 (build-system gnu-build-system)
564cf93f
JL
738 (properties
739 `((ocaml4.02-variant . ,(delay ocaml4.02-lablgtk))))
3573b634
AE
740 (native-inputs
741 `(("camlp4" ,camlp4)
742 ("ocaml" ,ocaml)
8afd1958 743 ("findlib" ,ocaml-findlib)
3573b634
AE
744 ("pkg-config" ,pkg-config)))
745 ;; FIXME: Add inputs gtkgl-2.0, libpanelapplet-2.0, gtkspell-2.0,
746 ;; and gtk+-quartz-2.0 once available.
747 (inputs
748 `(("gtk+" ,gtk+-2)
c900f843 749 ("gtksourceview" ,gtksourceview-2)
3573b634
AE
750 ("libgnomecanvas" ,libgnomecanvas)
751 ("libgnomeui" ,libgnomeui)
752 ("libglade" ,libglade)
753 ("librsvg" ,librsvg)))
754 (arguments
755 `(#:tests? #f ; no check target
ef89cb42 756
8c1088bb 757 ;; opt: also install cmxa files
8afd1958
JL
758 #:make-flags (list "all" "opt"
759 (string-append "FINDLIBDIR="
760 (assoc-ref %outputs "out")
761 "/lib/ocaml"))
ef89cb42
LC
762 ;; Occasionally we would get "Error: Unbound module GtkThread" when
763 ;; compiling 'gtkThInit.ml', with 'make -j'. So build sequentially.
764 #:parallel-build? #f
765
3573b634
AE
766 #:phases
767 (modify-phases %standard-phases
8afd1958 768 (add-before 'install 'prepare-install
3573b634
AE
769 (lambda* (#:key inputs outputs #:allow-other-keys)
770 (let ((out (assoc-ref outputs "out"))
771 (ocaml (assoc-ref inputs "ocaml")))
772 ;; Install into the output and not the ocaml directory.
8afd1958 773 (mkdir-p (string-append out "/lib/ocaml"))
3573b634
AE
774 (substitute* "config.make"
775 ((ocaml) out))
3573b634
AE
776 #t))))))
777 (home-page "http://lablgtk.forge.ocamlcore.org/")
778 (synopsis "GTK+ bindings for OCaml")
779 (description
780 "LablGtk is an OCaml interface to GTK+ 1.2 and 2.x. It provides
781a strongly-typed object-oriented interface that is compatible with the
782dynamic typing of GTK+. Most widgets and methods are available. LablGtk
783also provides bindings to
784gdk-pixbuf, the GLArea widget (in combination with LablGL), gnomecanvas,
785gnomeui, gtksourceview, gtkspell,
786libglade (and it an generate OCaml code from .glade files),
787libpanel, librsvg and quartz.")
d8e0a08c 788 (license license:lgpl2.1)))
3573b634 789
564cf93f
JL
790(define-public ocaml4.02-lablgtk
791 (package
792 (inherit lablgtk)
793 (name "ocaml4.02-lablgtk")
794 (version "2.18.5")
795 (source (origin
796 (method url-fetch)
797 (uri (ocaml-forge-uri name version 1627))
798 (sha256
799 (base32
800 "0cyj6sfdvzx8hw7553lhgwc0krlgvlza0ph3dk9gsxy047dm3wib"))))
801 (native-inputs
802 `(("camlp4" ,camlp4-4.02)
803 ("ocaml" ,ocaml-4.02)
804 ("findlib" ,ocaml4.02-findlib)
805 ("pkg-config" ,pkg-config)))))
806
b9d8756b
AE
807(define-public unison
808 (package
809 (name "unison")
810 (version "2.48.3")
811 (source
812 (origin
90907a22
EB
813 (method svn-fetch)
814 (uri (svn-reference
815 (url (string-append "https://webdav.seas.upenn.edu/svn/"
816 "unison/branches/"
817 (version-major+minor version)))
818 (revision 535)))
819 (file-name (string-append name "-" version "-checkout"))
820 (sha256
821 (base32
822 "0486s53wyayicj9f2raj2dvwvk4xyzar219rccc1iczdwixm4x05"))
823 (modules '((guix build utils)
824 (ice-9 rdelim)
825 (ice-9 regex)
826 (srfi srfi-1)))
827 (snippet
828 `(begin
829 ;; The svn revision in the release tarball appears to be
830 ;; artificially manipulated in order to set the desired point
831 ;; version number. Because the point version is calculated during
832 ;; the build, we can offset pointVersionOrigin by the desired
833 ;; point version and write that into "Rev: %d". We do this rather
834 ;; than hardcoding the necessary revision number, for
835 ;; maintainability.
836 (with-atomic-file-replacement "src/mkProjectInfo.ml"
837 (lambda (in out)
838 (let ((pt-ver (string->number (third (string-split ,version #\.))))
839 (pt-rx (make-regexp "^let pointVersionOrigin = ([0-9]+)"))
840 (rev-rx (make-regexp "Rev: [0-9]+")))
841 (let loop ((pt-origin #f))
842 (let ((line (read-line in 'concat)))
843 (cond
844 ((regexp-exec pt-rx line)
845 => (lambda (m)
846 (display line out)
847 (loop (string->number (match:substring m 1)))))
848 ((regexp-exec rev-rx line)
849 => (lambda (m)
850 (format out "~aRev: ~d~a"
851 (match:prefix m)
852 (+ pt-origin pt-ver)
853 (match:suffix m))
854 (dump-port in out))) ;done
855 (else
856 (display line out)
857 (loop pt-origin))))))))
858 ;; Without the '-fix' argument, the html file produced does not
859 ;; have functioning internal hyperlinks.
860 (substitute* "doc/Makefile"
6cbee49d
MW
861 (("hevea unison") "hevea -fix unison"))
862 #t))))
b9d8756b 863 (build-system gnu-build-system)
90907a22
EB
864 (outputs '("out"
865 "doc")) ; 1.9 MiB of documentation
b9d8756b 866 (native-inputs
564cf93f 867 `(("ocaml" ,ocaml-4.02)
90907a22 868 ;; For documentation
2be896de 869 ("ghostscript" ,ghostscript)
68139bce 870 ("texlive" ,texlive-tiny)
90907a22 871 ("hevea" ,hevea)
564cf93f
JL
872 ("lynx" ,lynx)
873 ("which" ,which)))
b9d8756b
AE
874 (arguments
875 `(#:parallel-build? #f
876 #:parallel-tests? #f
877 #:test-target "selftest"
878 #:tests? #f ; Tests require writing to $HOME.
879 ; If some $HOME is provided, they fail with the message
880 ; "Fatal error: Skipping some tests -- remove me!"
881 #:phases
882 (modify-phases %standard-phases
883 (delete 'configure)
884 (add-before 'install 'prepare-install
885 (lambda* (#:key outputs #:allow-other-keys)
886 (let* ((out (assoc-ref outputs "out"))
887 (bin (string-append out "/bin")))
888 (mkdir-p bin)
889 (setenv "HOME" out) ; forces correct INSTALLDIR in Makefile
90907a22 890 #t)))
31d968fb
OD
891 (add-after 'install 'install-fsmonitor
892 (lambda* (#:key outputs #:allow-other-keys)
893 (let* ((out (assoc-ref outputs "out"))
894 (bin (string-append out "/bin")))
895 ;; 'unison-fsmonitor' is used in "unison -repeat watch" mode.
317e80ce
TGR
896 (install-file "src/unison-fsmonitor" bin)
897 #t)))
90907a22 898 (add-after 'install 'install-doc
31d968fb 899 (lambda* (#:key outputs #:allow-other-keys)
90907a22
EB
900 (let ((doc (string-append (assoc-ref outputs "doc")
901 "/share/doc/unison")))
902 (mkdir-p doc)
564cf93f
JL
903 ;; This is a workaround to prevent a build failure. Running
904 ;; make docs somehow allows it to pass, but the generated
905 ;; documentation is not pretty.
906 (catch #t
907 (lambda _
908 (invoke "make" "docs"
909 "TEXDIRECTIVES=\\\\draftfalse"))
910 (lambda _ #t))
90907a22
EB
911 ;; This file needs write-permissions, because it's
912 ;; overwritten by 'docs' during documentation generation.
913 (chmod "src/strings.ml" #o600)
317e80ce
TGR
914 (invoke "make" "docs"
915 "TEXDIRECTIVES=\\\\draftfalse")
916 (for-each (lambda (f)
917 (install-file f doc))
918 (map (lambda (ext)
919 (string-append "doc/unison-manual." ext))
920 ;; Install only html documentation,
921 ;; since the build is currently
922 ;; non-reproducible with the ps, pdf,
923 ;; and dvi docs.
924 '(;; "ps" "pdf" "dvi"
925 "html")))
926 #t))))))
b9d8756b
AE
927 (home-page "https://www.cis.upenn.edu/~bcpierce/unison/")
928 (synopsis "File synchronizer")
929 (description
930 "Unison is a file-synchronization tool. It allows two replicas of
931a collection of files and directories to be stored on different hosts
932(or different disks on the same host), modified separately, and then
933brought up to date by propagating the changes in each replica
934to the other.")
d8e0a08c 935 (license license:gpl3+)))
a747baba
JN
936
937(define-public ocaml-findlib
938 (package
939 (name "ocaml-findlib")
564cf93f 940 (version "1.8.0")
a747baba
JN
941 (source (origin
942 (method url-fetch)
943 (uri (string-append "http://download.camlcity.org/download/"
944 "findlib" "-" version ".tar.gz"))
945 (sha256
946 (base32
564cf93f 947 "1b97zqjdriqd2ikgh4rmqajgxwdwn013riji5j53y3xvcmnpsyrb"))))
a747baba
JN
948 (build-system gnu-build-system)
949 (native-inputs
950 `(("camlp4" ,camlp4)
951 ("m4" ,m4)
952 ("ocaml" ,ocaml)))
953 (arguments
954 `(#:tests? #f ; no test suite
955 #:parallel-build? #f
956 #:make-flags (list "all" "opt")
957 #:phases (modify-phases %standard-phases
958 (replace
959 'configure
960 (lambda* (#:key inputs outputs #:allow-other-keys)
961 (let ((out (assoc-ref outputs "out")))
4a810e75 962 (invoke
a747baba
JN
963 "./configure"
964 "-bindir" (string-append out "/bin")
965 "-config" (string-append out "/etc/ocamfind.conf")
966 "-mandir" (string-append out "/share/man")
967 "-sitelib" (string-append out "/lib/ocaml/site-lib")
ad3d730e 968 "-with-toolbox"))))
bff6739d
PK
969 (replace 'install
970 (lambda* (#:key outputs #:allow-other-keys)
971 (let ((out (assoc-ref outputs "out")))
4a810e75
MW
972 (invoke "make" "install"
973 (string-append "OCAML_CORE_STDLIB="
974 out "/lib/ocaml/site-lib")))))
ad3d730e
JL
975 (add-after 'install 'remove-camlp4
976 (lambda* (#:key outputs #:allow-other-keys)
977 (let ((out (assoc-ref outputs "out")))
978 (delete-file-recursively
4a810e75
MW
979 (string-append out "/lib/ocaml/site-lib/camlp4"))
980 #t))))))
a747baba
JN
981 (home-page "http://projects.camlcity.org/projects/findlib.html")
982 (synopsis "Management tool for OCaml libraries")
983 (description
984 "The \"findlib\" library provides a scheme to manage reusable software
985components (packages), and includes tools that support this scheme. Packages
986are collections of OCaml modules for which metainformation can be stored. The
8f65585b 987packages are kept in the file system hierarchy, but with strict directory
a747baba
JN
988structure. The library contains functions to look the directory up that
989stores a package, to query metainformation about a package, and to retrieve
990dependency information about multiple packages. There is also a tool that
991allows the user to enter queries on the command-line. In order to simplify
992compilation and linkage, there are new frontends of the various OCaml
993compilers that can directly deal with packages.")
d8e0a08c 994 (license license:x11)))
7a76b4af 995
564cf93f
JL
996(define-public ocaml4.02-findlib
997 (package
998 (inherit ocaml-findlib)
999 (name "ocaml4.02-findlib")
1000 (native-inputs
1001 `(("camlp4" ,camlp4-4.02)
1002 ("m4" ,m4)
1003 ("ocaml" ,ocaml-4.02)))))
1004
fa01cb52
BW
1005(define-public ocaml4.01-findlib
1006 (package
1007 (inherit ocaml-findlib)
1008 (name "ocaml4.01-findlib")
1009 (native-inputs
1010 `(("m4" ,m4)
1011 ("ocaml" ,ocaml-4.01)))))
1012
7a76b4af
JL
1013;; note that some tests may hang for no obvious reason.
1014(define-public ocaml-ounit
1015 (package
1016 (name "ocaml-ounit")
483be9bd 1017 (version "2.0.8")
7a76b4af
JL
1018 (source (origin
1019 (method url-fetch)
483be9bd 1020 (uri (ocaml-forge-uri "ounit" version 1749))
7a76b4af
JL
1021 (sha256
1022 (base32
483be9bd 1023 "03ifp9hjcxg4m5j190iy373jcn4039d3vy10kmd8p4lfciwzwc1f"))))
7a76b4af
JL
1024 (build-system ocaml-build-system)
1025 (native-inputs
564cf93f
JL
1026 `(("libxml2" ,libxml2) ; for xmllint
1027 ("ocamlbuild" ,ocamlbuild)))
7a76b4af 1028 (arguments
337273e4
DC
1029 `(#:phases
1030 (modify-phases %standard-phases
483be9bd 1031 (delete 'check)))) ; tests are run during build
7a76b4af
JL
1032 (home-page "http://ounit.forge.ocamlcore.org")
1033 (synopsis "Unit testing framework for OCaml")
1034 (description "Unit testing framework for OCaml. It is similar to JUnit and
1035other XUnit testing frameworks.")
1036 (license license:expat)))
bc2c3bc6 1037
abd593c7
BW
1038(define-public ocaml4.01-ounit
1039 (package-with-ocaml4.01 ocaml-ounit))
1040
564cf93f
JL
1041(define-public ocaml4.02-ounit
1042 (package-with-ocaml4.02 ocaml-ounit))
1043
bc2c3bc6
JL
1044(define-public camlzip
1045 (package
1046 (name "camlzip")
1047 (version "1.0.6")
1048 (source (origin
1049 (method url-fetch)
1050 (uri (ocaml-forge-uri name version 1616))
1051 (sha256
1052 (base32
1053 "0m6gyjw46w3qnhxfsyqyag42znl5lwargks7w7rfchr9jzwpff68"))))
1054 (build-system ocaml-build-system)
1055 (inputs
1056 `(("zlib" ,zlib)))
1057 (arguments
1058 `(#:phases
1059 (modify-phases %standard-phases
1060 (delete 'configure)
8fe6b932
JL
1061 (add-after 'install 'install-camlzip
1062 (lambda* (#:key outputs #:allow-other-keys)
1063 (let* ((out (assoc-ref outputs "out"))
1064 (dir (string-append out "/lib/ocaml/site-lib/camlzip")))
1065 (mkdir-p dir)
1066 (call-with-output-file (string-append dir "/META")
1067 (lambda (port)
1068 (format port "version=\"1.06\"\n")
1069 (format port "requires=\"unix\"\n")
1070 (format port "archive(byte)=\"zip.cma\"\n")
1071 (format port "archive(native)=\"zip.cmxa\"\n")
1072 (format port "archive(native,plugin)=\"zip.cmxs\"\n")
1073 (format port "directory=\"../zip\"\n")))))))
bc2c3bc6
JL
1074 #:install-target "install-findlib"
1075 #:make-flags
1076 (list "all" "allopt"
1077 (string-append "INSTALLDIR=" (assoc-ref %outputs "out")
1078 "/lib/ocaml"))))
1079 (home-page "http://forge.ocamlcore.org/projects/camlzip")
1080 (synopsis "Provides easy access to compressed files")
1081 (description "Provides easy access to compressed files in ZIP, GZIP and
1082JAR format. It provides functions for reading from and writing to compressed
1083files in these formats.")
1084 (license license:lgpl2.1+)))
93eeadf0 1085
6824387a
BW
1086(define-public ocaml4.01-camlzip
1087 (let ((base (package-with-ocaml4.01 camlzip)))
1088 (package
1089 (inherit base)
1090 (name "ocaml4.01-camlzip")
1091 ;; Version 1.05 is the last version to support OCaml 4.01.0.
1092 (version "1.05")
1093 (source
1094 (origin
1095 (method url-fetch)
1096 (uri
1097 (string-append
1098 "http://forge.ocamlcore.org/frs/download.php/1037/camlzip-"
1099 version ".tar.gz"))
1100 (sha256
1101 (base32
1102 "0syh72jk9s0qwjmmfrkqchaj98m020ii082jn38pwnmb6v3p02wk")))))))
1103
564cf93f
JL
1104(define-public ocaml4.02-camlzip
1105 (package-with-ocaml4.02 camlzip))
1106
93eeadf0
JL
1107(define-public ocamlmod
1108 (package
1109 (name "ocamlmod")
564cf93f 1110 (version "0.0.9")
93eeadf0
JL
1111 (source (origin
1112 (method url-fetch)
564cf93f 1113 (uri (ocaml-forge-uri name version 1702))
93eeadf0
JL
1114 (sha256
1115 (base32
564cf93f 1116 "0cgp9qqrq7ayyhddrmqmq1affvfqcn722qiakjq4dkywvp67h4aa"))))
93eeadf0
JL
1117 (build-system ocaml-build-system)
1118 (native-inputs
564cf93f
JL
1119 `(("ounit" ,ocaml-ounit)
1120 ("ocamlbuild" ,ocamlbuild)))
93eeadf0 1121 (arguments
3dcaa122
DC
1122 `(#:phases
1123 (modify-phases %standard-phases
1124 ;; Tests are done during build.
1125 (delete 'check))))
93eeadf0
JL
1126 (home-page "https://forge.ocamlcore.org/projects/ocamlmod")
1127 (synopsis "Generate modules from OCaml source files")
1128 (description "Generate modules from OCaml source files.")
1129 (license license:lgpl2.1+))) ; with an exception
ddf2b503 1130
564cf93f
JL
1131(define-public ocaml4.02-ocamlmod
1132 (package-with-ocaml4.02 ocamlmod))
1133
ddf2b503
JL
1134(define-public ocaml-zarith
1135 (package
1136 (name "ocaml-zarith")
1137 (version "1.4.1")
1138 (source (origin
1139 (method url-fetch)
1140 (uri (ocaml-forge-uri "zarith" version 1574))
1141 (sha256
1142 (base32
1143 "0l36hzmfbvdai2kcgynh13vfdim5x2grnaw61fxqalyjm90c3di3"))))
1144 (build-system ocaml-build-system)
1145 (native-inputs
1146 `(("perl" ,perl)))
1147 (inputs
1148 `(("gmp" ,gmp)))
1149 (arguments
1150 `(#:tests? #f ; no test target
1151 #:phases
1152 (modify-phases %standard-phases
1153 (replace 'configure
1154 (lambda* (#:key #:allow-other-keys)
1155 (zero? (system* "./configure")))))))
1156 (home-page "https://forge.ocamlcore.org/projects/zarith/")
1157 (synopsis "Implements arbitrary-precision integers")
1158 (description "Implements arithmetic and logical operations over
1159arbitrary-precision integers. It uses GMP to efficiently implement arithmetic
1160over big integers. Small integers are represented as Caml unboxed integers,
1161for speed and space economy.")
1162 (license license:lgpl2.1+))) ; with an exception
ff891f10 1163
564cf93f
JL
1164(define-public ocaml4.02-zarith
1165 (package-with-ocaml4.02 ocaml-zarith))
1166
ff891f10
JL
1167(define-public ocaml-frontc
1168 (package
1169 (name "ocaml-frontc")
1170 (version "3.4")
1171 (source (origin
1172 (method url-fetch)
1173 (uri (string-append "https://www.irit.fr/recherches/ARCHI/MARCH/"
1174 "frontc/Frontc-" version ".tgz"))
1175 (sha256
1176 (base32
1177 "16dz153s92dgbw1rrfwbhscy73did87kfmjwyh3qpvs748h1sc4g"))))
1178 (build-system ocaml-build-system)
1179 (arguments
564cf93f
JL
1180 `(#:ocaml ,ocaml-4.02
1181 #:findlib ,ocaml4.02-findlib
1182 #:phases
ff891f10
JL
1183 (modify-phases %standard-phases
1184 (delete 'configure)
1185 (add-after 'install 'install-meta
1186 (lambda* (#:key outputs #:allow-other-keys)
1187 (let ((out (assoc-ref outputs "out")))
1188 (with-output-to-file
1189 (string-append out "/lib/ocaml/frontc/META")
1190 (lambda _
1191 (display
1192 (string-append
1193 "description = \"Parser for the C language\"
1194version = \"" ,version "\"
1195requires = \"unix\"
1196archive(byte) = \"frontc.cma\"
1197archive(native) = \"frontc.cmxa\""))))
1198 (symlink (string-append out "/lib/ocaml/frontc")
1199 (string-append out "/lib/ocaml/FrontC"))))))
1200 #:make-flags (list (string-append "PREFIX="
1201 (assoc-ref %outputs "out"))
1202 "OCAML_SITE=$(LIB_DIR)/ocaml/")))
1203 (home-page "https://www.irit.fr/FrontC")
1204 (synopsis "C parser and lexer library")
1205 (description "FrontC is an OCAML library providing a C parser and lexer.
1206The result is a syntactic tree easy to process with usual OCAML tree management.
1207It provides support for ANSI C syntax, old-C K&R style syntax and the standard
1208GNU CC attributes. It provides also a C pretty printer as an example of use.")
1209 (license license:lgpl2.1)))
0472836f 1210
2c6ef0dd
JL
1211(define-public ocaml-qcheck
1212 (package
1213 (name "ocaml-qcheck")
1214 (version "0.5.3.1")
1215 (source (origin
1216 (method url-fetch)
1217 (uri (string-append "https://github.com/c-cube/qcheck/archive/"
1218 version ".tar.gz"))
1219 (file-name (string-append name "-" version ".tar.gz"))
1220 (sha256
1221 (base32
1222 "1zs1pg5cb1iry554v3cdmmiglsrwmsqa9x8zxmzb118fnk5d3ha6"))))
1223 (build-system ocaml-build-system)
1224 (native-inputs
564cf93f
JL
1225 `(("ounit" ,ocaml-ounit)
1226 ("ocamlbuild" ,ocamlbuild)))
2c6ef0dd
JL
1227 (home-page "https://github.com/c-cube/qcheck")
1228 (synopsis "QuickCheck inspired property-based testing for OCaml")
1229 (description "QuickCheck inspired property-based testing for OCaml. This
1230module allows to check invariants (properties of some types) over randomly
1231generated instances of the type. It provides combinators for generating
1232instances and printing them.")
1233 (license license:lgpl3+)))
1234
564cf93f
JL
1235(define-public ocaml4.02-qcheck
1236 (package-with-ocaml4.02 ocaml-qcheck))
1237
0472836f
JL
1238(define-public ocaml-qtest
1239 (package
1240 (name "ocaml-qtest")
fdb3fba3 1241 (version "2.8")
0472836f
JL
1242 (source (origin
1243 (method url-fetch)
fdb3fba3
EF
1244 (uri (string-append "https://github.com/vincent-hugot/qtest/"
1245 "archive/" version ".tar.gz"))
79234c0a 1246 (file-name (string-append name "-" version ".tar.gz"))
0472836f
JL
1247 (sha256
1248 (base32
fdb3fba3 1249 "1ff4if64mc9c7wmhjdgnlnh6k6a713piqzr4043zzj4s5pw7smxk"))))
0472836f
JL
1250 (build-system ocaml-build-system)
1251 (native-inputs
564cf93f 1252 `(("ocamlbuild" ,ocamlbuild)))
0472836f 1253 (propagated-inputs
e24d5271
JL
1254 `(("ounit" ,ocaml-ounit)
1255 ("qcheck" ,ocaml-qcheck)))
0472836f
JL
1256 (arguments
1257 `(#:tests? #f ; No test target.
1258 #:make-flags
1259 (list (string-append "BIN=" (assoc-ref %outputs "out") "/bin"))
1260 #:phases
1261 (modify-phases %standard-phases
1262 (delete 'configure))))
fdb3fba3 1263 (home-page "https://github.com/vincent-hugot/qtest")
0472836f
JL
1264 (synopsis "Inline (Unit) Tests for OCaml")
1265 (description "Qtest extracts inline unit tests written using a special
1266syntax in comments. Those tests are then run using the oUnit framework and the
1267qcheck library. The possibilities range from trivial tests -- extremely simple
1268to use -- to sophisticated random generation of test cases.")
1269 (license license:lgpl3+)))
3d598ebd 1270
0274521a
BW
1271(define-public ocaml4.01-qtest
1272 (package-with-ocaml4.01 ocaml-qtest))
1273
564cf93f
JL
1274(define-public ocaml4.02-qtest
1275 (package-with-ocaml4.02 ocaml-qtest))
1276
3d598ebd
JL
1277(define-public ocaml-stringext
1278 (package
1279 (name "ocaml-stringext")
1280 (version "1.4.3")
1281 (source (origin
1282 (method url-fetch)
1283 (uri (string-append "https://github.com/rgrinberg/stringext"
1284 "/archive/v" version ".tar.gz"))
b965c1ca 1285 (file-name (string-append name "-" version ".tar.gz"))
3d598ebd
JL
1286 (sha256
1287 (base32
1288 "19g6lfn03iki9f8h91hi0yiqn0b3wkxyq08b3y23wgv6jw6mssfh"))))
1289 (build-system ocaml-build-system)
1290 (native-inputs
564cf93f
JL
1291 `(("ocamlbuild" ,ocamlbuild)
1292 ("qtest" ,ocaml-qtest)))
3d598ebd
JL
1293 (home-page "https://github.com/rgrinberg/stringext")
1294 (synopsis "Extra string functions for OCaml")
1295 (description "Provides a single module named Stringext that provides a grab
1296bag of often used but missing string functions from the stdlib. E.g, split,
1297full_split, cut, rcut, etc..")
1298 ;; the only mention of a license in this project is in its `opam' file
1299 ;; where it says `mit'.
1300 (license license:expat)))
a5b5bd1d 1301
564cf93f
JL
1302(define-public ocaml4.02-stringext
1303 (package-with-ocaml4.02 ocaml-stringext))
a5b5bd1d
JL
1304
1305(define-public ocaml-bisect
1306 (package
1307 (name "ocaml-bisect")
564cf93f 1308 (version "1.3.1")
a5b5bd1d
JL
1309 (source (origin
1310 (method url-fetch)
564cf93f
JL
1311 (uri (string-append "https://github.com/gasche/bisect/archive/"
1312 version ".tar.gz"))
1313 (file-name (string-append name "-" version ".tar.gz"))
a5b5bd1d
JL
1314 (sha256
1315 (base32
564cf93f 1316 "0p67fppk5ifb63b00kxwrb1xg75hrqhknng3bsdyw3gxxqyjlpmx"))
a5b5bd1d
JL
1317 (patches
1318 (search-patches
1319 "ocaml-bisect-fix-camlp4-in-another-directory.patch"))))
1320 (build-system ocaml-build-system)
1321 (native-inputs
1322 `(("camlp4" ,camlp4)
1323 ("libxml2" ,libxml2)
564cf93f 1324 ("ocamlbuild" ,ocamlbuild)
a5b5bd1d
JL
1325 ("which" ,which)))
1326 (propagated-inputs
1327 `(("camlp4" ,camlp4)))
1328 (arguments
1329 `(#:test-target "tests"
1330 #:make-flags
1331 (list "all" (string-append "CAMLP4_LIBDIR="
1332 (assoc-ref %build-inputs "camlp4")
1333 "/lib/ocaml/site-lib/camlp4"))
1334 #:phases
1335 (modify-phases %standard-phases
1336 (replace 'configure
564cf93f
JL
1337 (lambda* (#:key inputs outputs #:allow-other-keys)
1338 (invoke "./configure" "-prefix" (assoc-ref outputs "out")
1339 "-ocaml-prefix" (assoc-ref inputs "ocaml")
1340 "-camlp4-prefix" (assoc-ref inputs "camlp4"))
1341 #t)))))
a5b5bd1d
JL
1342 (home-page "http://bisect.x9c.fr")
1343 (synopsis "Code coverage tool for the OCaml language")
1344 (description "Bisect is a code coverage tool for the OCaml language. It is
1345a camlp4-based tool that allows to instrument your application before running
1346tests. After application execution, it is possible to generate a report in HTML
1347format that is the replica of the application source code annotated with code
1348coverage information.")
564cf93f
JL
1349 (properties
1350 `((ocaml4.01-variant . ,(delay ocaml4.01-bisect))
1351 (ocaml4.02-variant . ,(delay ocaml4.02-bisect))))
a5b5bd1d 1352 (license license:gpl3+)))
44c23cb8 1353
1345231c
BW
1354(define-public ocaml4.01-bisect
1355 (let ((base (package-with-ocaml4.01 (strip-ocaml4.01-variant ocaml-bisect))))
1356 (package
1357 (inherit base)
564cf93f
JL
1358 (version "1.3")
1359 (source (origin
1360 (method url-fetch)
1361 (uri (string-append "https://github.com/gasche/bisect/archive/"
1362 version ".tar.gz"))
1363 (file-name (string-append "ocaml-bisect-" version ".tar.gz"))
1364 (sha256
1365 (base32
1366 "1ip49jqf0kkbrqf8qspmfjbg9ap9fhvjkg718myzix88dg5rv8d4"))))
1345231c
BW
1367 (arguments
1368 `(#:ocaml ,ocaml-4.01
564cf93f
JL
1369 ,@(substitute-keyword-arguments (package-arguments ocaml-bisect)
1370 ((#:make-flags flags)
1371 `(list "all"))
1372 ((#:phases phases)
1373 `(modify-phases ,phases
1374 (replace 'configure
1375 (lambda* (#:key inputs outputs #:allow-other-keys)
1376 (invoke "./configure"
1377 "-ocaml-prefix" (assoc-ref inputs "ocaml"))
1378 #t)))))))
1345231c
BW
1379 (native-inputs `(,@(alist-delete "camlp4" (package-native-inputs base))))
1380 (propagated-inputs
1381 `(,@(alist-delete "camlp4" (package-propagated-inputs base)))))))
1382
564cf93f
JL
1383(define-public ocaml4.02-bisect
1384 (let ((base (package-with-ocaml4.02 (strip-ocaml4.02-variant ocaml-bisect))))
1385 (package
1386 (inherit base)
1387 (native-inputs
1388 `(("camlp4" ,camlp4-4.02)
1389 ("libxml2" ,libxml2)
1390 ("which" ,which)))
1391 (propagated-inputs
1392 `(("camlp4" ,camlp4-4.02))))))
1393
1394(define-public dune
1395 (package
1396 (name "dune")
1397 (version "1.2.1")
1398 (source (origin
1399 (method url-fetch)
1400 (uri (string-append "https://github.com/ocaml/dune/releases/"
1401 "download/" version "/dune-" version ".tbz"))
1402 (sha256
1403 (base32
1404 "00c5dbm4hkdapc2i7pg07b2lj8sv6ly38qr7zid58cdmbmzq21z9"))))
1405 (build-system ocaml-build-system)
1406 (arguments
1407 `(#:tests? #f; require odoc
1408 #:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
1409 #:phases
1410 (modify-phases %standard-phases
1411 (replace 'configure
1412 (lambda* (#:key outputs #:allow-other-keys)
1413 (invoke "./configure")
1414 #t)))))
1415 (home-page "https://github.com/ocaml/dune")
1416 (synopsis "OCaml build system")
1417 (description "Dune is a build system that was designed to simplify the
1418release of Jane Street packages. It reads metadata from @file{dune} files
1419following a very simple s-expression syntax.")
1420 (license license:expat)))
1421
1422(define-public ocaml-migrate-parsetree
1423 (package
1424 (name "ocaml-migrate-parsetree")
1425 (version "1.1.0")
1426 (source (origin
1427 (method url-fetch)
1428 (uri (string-append "https://github.com/ocaml-ppx/"
1429 "ocaml-migrate-parsetree/releases/download/v"
1430 version "/ocaml-migrate-parsetree-"
1431 version ".tbz"))
1432 (sha256
1433 (base32
1434 "01zjp1q4hryqaxv4apkjd868fycz2kf887r6lkb6x2a545h1lh7f"))))
effc8325 1435 (build-system dune-build-system)
564cf93f
JL
1436 (arguments
1437 `(#:tests? #f
effc8325 1438 #:jbuild? #t))
564cf93f
JL
1439 (propagated-inputs
1440 `(("ocamlbuild" ,ocamlbuild)
1441 ("ocaml-result" ,ocaml-result)))
564cf93f
JL
1442 (home-page "https://github.com/ocaml-ppx/ocaml-migrate-parsetree")
1443 (synopsis "OCaml parsetree convertor")
1444 (description "This library converts between parsetrees of different OCaml
1445versions. For each version, there is a snapshot of the parsetree and conversion
1446functions to the next and/or previous version.")
1447 (license license:lgpl2.1+)))
1448
1449(define-public ocaml-ppx-tools-versioned
1450 (package
1451 (name "ocaml-ppx-tools-versioned")
1452 (version "5.2.1")
1453 (source (origin
1454 (method url-fetch)
1455 (uri (string-append "https://github.com/ocaml-ppx/"
1456 "ppx_tools_versioned/archive/"
1457 version ".tar.gz"))
1458 (file-name (string-append name "-" version ".tar.gz"))
1459 (sha256
1460 (base32
1461 "1x2xfjpkzbcz4rza1d7gh3ipliw6jqfcklbsln82v3561qgkqgmh"))))
59fa09e1 1462 (build-system dune-build-system)
564cf93f 1463 (arguments
59fa09e1 1464 `(#:test-target "."))
564cf93f
JL
1465 (propagated-inputs
1466 `(("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)))
1467 (home-page "https://github.com/let-def/ppx_tools_versioned")
1468 (synopsis "Variant of ppx_tools")
1469 (description "This package is a variant of ppx_tools based on
1470ocaml-migrate-parsetree")
1471 (license license:expat)))
1472
44c23cb8
JL
1473(define-public ocaml-bitstring
1474 (package
1475 (name "ocaml-bitstring")
564cf93f 1476 (version "3.1.0")
44c23cb8
JL
1477 (source (origin
1478 (method url-fetch)
564cf93f
JL
1479 (uri (string-append "https://bitbucket.org/thanatonauts/bitstring/"
1480 "get/v" version ".tar.gz"))
0aee7fdc 1481 (file-name (string-append name "-" version ".tar.gz"))
44c23cb8
JL
1482 (sha256
1483 (base32
564cf93f 1484 "15jjk2pq1vx311gl49s5ag6x5y0654x35w75z07g7kr2q334hqps"))))
f93246a5 1485 (build-system dune-build-system)
44c23cb8
JL
1486 (native-inputs
1487 `(("camlp4" ,camlp4)
1488 ("time" ,time)
1489 ("autoconf" ,autoconf)
1490 ("automake" ,automake)
f93246a5 1491 ("bisect" ,ocaml-bisect)))
44c23cb8 1492 (propagated-inputs
564cf93f
JL
1493 `(("camlp4" ,camlp4)
1494 ("ocaml-ppx-tools-versioned" ,ocaml-ppx-tools-versioned)))
44c23cb8 1495 (arguments
564cf93f 1496 `(#:tests? #f; Tests fail to build
f93246a5 1497 #:jbuild? #t))
564cf93f
JL
1498 (properties
1499 `((ocaml4.02-variant . ,(delay ocaml4.02-bitstring))))
1500 (home-page "https://github.com/xguerin/bitstring")
1501 (synopsis "Bitstrings and bitstring matching for OCaml")
1502 (description "Adds Erlang-style bitstrings and matching over bitstrings as
1503a syntax extension and library for OCaml. You can use this module to both parse
1504and generate binary formats, files and protocols. Bitstring handling is added
1505as primitives to the language, making it exceptionally simple to use and very
1506powerful.")
1507 (license license:isc)))
1508
1509(define-public ocaml4.02-bitstring
1510 (let ((base (package-with-ocaml4.02 (strip-ocaml4.02-variant ocaml-bitstring))))
1511 (package
1512 (inherit base)
1513 (version "2.1.1")
1514 (source (origin
1515 (method url-fetch)
1516 (uri (string-append "https://github.com/xguerin/bitstring"
1517 "/archive/v" version ".tar.gz"))
1518 (file-name (string-append "ocaml-bitstring-" version ".tar.gz"))
1519 (sha256
1520 (base32
1521 "0vy8ibrxccii1jbsk5q6yh1kxjigqvi7lhhcmizvd5gfhf7mfyc8"))
1522 (patches (search-patches "ocaml-bitstring-fix-configure.patch"))))
f93246a5
JL
1523 (build-system ocaml-build-system)
1524 (arguments
1525 `(#:ocaml ,ocaml-4.02
1526 #:findlib ,ocaml4.02-findlib
1527 #:configure-flags
1528 (list "CAMLP4OF=camlp4of" "--enable-coverage")
1529 #:make-flags
1530 (list (string-append "BISECTLIB="
1531 (assoc-ref %build-inputs "bisect")
1532 "/lib/ocaml/site-lib")
1533 (string-append "OCAMLCFLAGS=-g -I "
1534 (assoc-ref %build-inputs "camlp4")
1535 "/lib/ocaml/site-lib/camlp4 -I "
1536 "$(BISECTLIB)/bisect")
1537 (string-append "OCAMLOPTFLAGS=-g -I "
1538 (assoc-ref %build-inputs "camlp4")
1539 "/lib/ocaml/site-lib/camlp4 -I "
1540 "$(BISECTLIB)/bisect"))
1541 #:phases
1542 (modify-phases %standard-phases
1543 (add-after 'install 'link-lib
1544 (lambda* (#:key outputs #:allow-other-keys)
1545 (let* ((out (assoc-ref outputs "out"))
1546 (stubs (string-append out
1547 "/lib/ocaml/site-lib/stubslibs"))
1548 (lib (string-append out
1549 "/lib/ocaml/site-lib/bitstring")))
1550 (mkdir-p stubs)
1551 (symlink (string-append lib "/dllbitstring.so")
1552 (string-append stubs "/dllbitstring.so")))
1553 #t))
1554 (add-before 'configure 'fix-configure
1555 (lambda* (#:key inputs #:allow-other-keys)
1556 (substitute* "Makefile.in"
1557 (("@abs_top_builddir@")
1558 (string-append "@abs_top_builddir@:" (getenv "LIBRARY_PATH"))))
1559 (substitute* "configure"
1560 (("-/bin/sh") (string-append "-" (assoc-ref inputs "bash")
1561 "/bin/sh"))))))))
564cf93f
JL
1562 (native-inputs
1563 `(("camlp4" ,camlp4-4.02)
1564 ("time" ,time)
1565 ("autoconf" ,autoconf)
1566 ("automake" ,automake)
1567 ("bisect" ,ocaml4.02-bisect)))
1568 (propagated-inputs
1569 `(("camlp4" ,camlp4-4.02))))))
704b990c
JL
1570
1571(define-public ocaml-result
1572 (package
1573 (name "ocaml-result")
1574 (version "1.2")
1575 (source (origin
1576 (method url-fetch)
1577 (uri (string-append "https://github.com/janestreet/result"
1578 "/archive/" version ".tar.gz"))
232557c1 1579 (file-name (string-append name "-" version ".tar.gz"))
704b990c
JL
1580 (sha256
1581 (base32
1582 "1pgpfsgvhxnh0i37fkvp9j8nadns9hz9iqgabj4dr519j2gr1xvw"))))
1583 (build-system ocaml-build-system)
1584 (arguments
1585 `(#:tests? #f
1586 #:phases
1587 (modify-phases %standard-phases
1588 (delete 'configure))))
1589 (home-page "https://github.com/janestreet/result")
1590 (synopsis "Compatibility Result module")
1591 (description "Uses the new result type defined in OCaml >= 4.03 while
1592staying compatible with older version of OCaml should use the Result module
1593defined in this library.")
1594 (license license:bsd-3)))
564cf93f
JL
1595
1596(define-public ocaml4.02-result
1597 (package-with-ocaml4.02 ocaml-result))
a359c727
JL
1598
1599(define-public ocaml-topkg
1600 (package
1601 (name "ocaml-topkg")
1602 (version "0.8.1")
1603 (source (origin
1604 (method url-fetch)
1605 (uri (string-append "http://erratique.ch/software/topkg/releases/"
1606 "topkg-" version ".tbz"))
1607 (sha256
1608 (base32
1609 "18rrh6fmf708z7dd30amljmcgaypj3kk49jrmrj68r4wnw8004j8"))))
1610 (build-system ocaml-build-system)
1611 (native-inputs
564cf93f
JL
1612 `(("opam" ,opam)
1613 ("ocamlbuild" ,ocamlbuild)))
a359c727
JL
1614 (propagated-inputs
1615 `(("result" ,ocaml-result)))
1616 (arguments
1617 `(#:tests? #f
1618 #:build-flags '("build")
1619 #:phases
1620 (modify-phases %standard-phases
1621 (delete 'configure))))
1622 (home-page "http://erratique.ch/software/topkg")
1623 (synopsis "Transitory OCaml software packager")
1624 (description "Topkg is a packager for distributing OCaml software. It
1625provides an API to describe the files a package installs in a given build
1626configuration and to specify information about the package's distribution,
1627creation and publication procedures.")
1628 (license license:isc)))
564cf93f
JL
1629
1630(define-public ocaml4.02-topkg
1631 (package-with-ocaml4.02 ocaml-topkg))
63147e5e
JL
1632
1633(define-public ocaml-rresult
1634 (package
1635 (name "ocaml-rresult")
1636 (version "0.5.0")
1637 (source (origin
1638 (method url-fetch)
1639 (uri (string-append "http://erratique.ch/software/rresult/releases/"
1640 "rresult-" version ".tbz"))
1641 (sha256
1642 (base32
1643 "1xxycxhdhaq8p9vhwi93s2mlxjwgm44fcxybx5vghzgbankz9yhm"))))
1644 (build-system ocaml-build-system)
1645 (native-inputs
564cf93f
JL
1646 `(("opam" ,opam)
1647 ("ocamlbuild" ,ocamlbuild)))
63147e5e
JL
1648 (propagated-inputs
1649 `(("topkg" ,ocaml-topkg)))
1650 (arguments
1651 `(#:tests? #f
1652 #:build-flags '("build")
1653 #:phases
1654 (modify-phases %standard-phases
1655 (delete 'configure))))
1656 (home-page "http://erratique.ch/software/rresult")
1657 (synopsis "Result value combinators for OCaml")
1658 (description "Handle computation results and errors in an explicit and
1659declarative manner, without resorting to exceptions. It defines combinators
1660to operate on the result type available from OCaml 4.03 in the standard
1661library.")
1662 (license license:isc)))
eb1ba731 1663
564cf93f
JL
1664(define-public ocaml4.02-rresult
1665 (package-with-ocaml4.02 ocaml-rresult))
1666
0c4dbdc2
BW
1667(define-public ocaml-sqlite3
1668 (package
1669 (name "ocaml-sqlite3")
1670 (version "4.1.2")
1671 (source
1672 (origin
1673 (method url-fetch)
1674 (uri (string-append
1675 "https://github.com/mmottl/sqlite3-ocaml/releases/download/v"
1676 version "/sqlite3-ocaml-" version ".tar.gz"))
1677 (sha256
1678 (base32
1679 "14c1nir7c6bivajg0vyx853y7la7r5d25g1v5hjb2wfi73r15p1m"))))
1680 (build-system ocaml-build-system)
1681 (native-inputs
564cf93f
JL
1682 `(("ocamlbuild" ,ocamlbuild)
1683 ("pkg-config" ,pkg-config)))
0c4dbdc2
BW
1684 (inputs
1685 `(("sqlite" ,sqlite)))
1686 (home-page "https://mmottl.github.io/sqlite3-ocaml")
1687 (synopsis "SQLite3 Bindings for OCaml")
1688 (description
1689 "SQLite3-OCaml is an OCaml library with bindings to the SQLite3 client
1690API. Sqlite3 is a self-contained, serverless, zero-configuration,
1691transactional SQL database engine with outstanding performance for many use
1692cases. These bindings are written in a way that enables a friendly
1693coexistence with the old (version 2) SQLite and its OCaml wrapper
1694@code{ocaml-sqlite}.")
1695 (license license:expat)))
1696
17bd460f
BW
1697(define-public ocaml4.01-sqlite3
1698 (package-with-ocaml4.01 ocaml-sqlite3))
1699
564cf93f
JL
1700(define-public ocaml4.02-sqlite3
1701 (package-with-ocaml4.02 ocaml-sqlite3))
1702
91df9eae
BW
1703(define-public ocaml-csv
1704 (package
1705 (name "ocaml-csv")
1706 (version "1.6")
1707 (source
1708 (origin
1709 (method url-fetch)
1710 (uri
1711 (string-append
7bf837fd 1712 "https://github.com/Chris00/ocaml-csv/releases/download/"
91df9eae
BW
1713 version "/csv-" version ".tar.gz"))
1714 (sha256
1715 (base32
1716 "0rv7x843vn6scxj87hzl01yqrl26rc27lr8s7z6rp9vs745g05zj"))))
1717 (build-system ocaml-build-system)
564cf93f
JL
1718 (native-inputs
1719 `(("ocamlbuild" ,ocamlbuild)))
91df9eae
BW
1720 (home-page "https://github.com/Chris00/ocaml-csv")
1721 (synopsis "Pure OCaml functions to read and write CSV")
1722 (description
1723 "@dfn{Comma separated values} (CSV) is a simple tabular format supported
1724by all major spreadsheets. This library implements pure OCaml functions to
1725read and write files in this format as well as some convenience functions to
1726manipulate such data.")
1727 (license (package-license camlp4))))
1728
3dc671e1
BW
1729(define-public ocaml4.01-csv
1730 (package-with-ocaml4.01 ocaml-csv))
1731
564cf93f
JL
1732(define-public ocaml4.02-csv
1733 (package-with-ocaml4.02 ocaml-csv))
1734
eb1ba731
JL
1735(define-public ocaml-mtime
1736 (package
1737 (name "ocaml-mtime")
1738 (version "0.8.3")
1739 (source (origin
1740 (method url-fetch)
1741 (uri (string-append "http://erratique.ch/software/mtime/releases/"
1742 "mtime-" version ".tbz"))
1743 (sha256
1744 (base32
1745 "1hfx4ny2dkw6jf3jppz0640dafl5xgn8r2si9kpwzhmibal8qrah"))))
1746 (build-system ocaml-build-system)
1747 (native-inputs
564cf93f
JL
1748 `(("ocamlbuild" ,ocamlbuild)
1749 ("opam" ,opam)))
eb1ba731
JL
1750 (propagated-inputs
1751 `(("topkg" ,ocaml-topkg)))
1752 (arguments
1753 `(#:tests? #f
1754 #:build-flags
1755 '("native=true" "native-dynlink=true" "jsoo=false")
1756 #:phases
1757 (modify-phases %standard-phases
1758 (delete 'configure))))
1759 (home-page "http://erratique.ch/software/mtime")
1760 (synopsis "Monotonic wall-clock time for OCaml")
1761 (description "Access monotonic wall-clock time. It allows to measure time
1762spans without being subject to operating system calendar time adjustments.")
1763 (license license:isc)))
6548e53f 1764
564cf93f
JL
1765(define-public ocaml4.02-mtime
1766 (package-with-ocaml4.02 ocaml-mtime))
1767
6548e53f
JL
1768(define-public ocaml-cmdliner
1769 (package
1770 (name "ocaml-cmdliner")
ca53346d 1771 (version "1.0.2")
6548e53f
JL
1772 (source (origin
1773 (method url-fetch)
1774 (uri (string-append "http://erratique.ch/software/cmdliner/releases/"
1775 "cmdliner-" version ".tbz"))
1776 (sha256
1777 (base32
ca53346d 1778 "18jqphjiifljlh9jg8zpl6310p3iwyaqphdkmf89acyaix0s4kj1"))))
6548e53f 1779 (build-system ocaml-build-system)
ca53346d
GH
1780 (inputs
1781 `(("ocaml-result" ,ocaml-result)))
6548e53f 1782 (native-inputs
564cf93f
JL
1783 `(("ocamlbuild" ,ocamlbuild)
1784 ("opam" ,opam)))
6548e53f
JL
1785 (arguments
1786 `(#:tests? #f
1787 #:build-flags '("native=true" "native-dynlink=true")
1788 #:phases
1789 (modify-phases %standard-phases
ca53346d
GH
1790 (replace 'install
1791 ;; The makefile says 'adjust on cli invocation'
1792 (lambda* (#:key outputs #:allow-other-keys)
1793 (let ((out (assoc-ref outputs "out")))
1794 (invoke "make" "install" (string-append "PREFIX=" out))
1795 #t)))
6548e53f
JL
1796 (delete 'configure))))
1797 (home-page "http://erratique.ch/software/cmdliner")
1798 (synopsis "Declarative definition of command line interfaces for OCaml")
1799 (description "Cmdliner is a module for the declarative definition of command
1800line interfaces. It provides a simple and compositional mechanism to convert
1801command line arguments to OCaml values and pass them to your functions. The
1802module automatically handles syntax errors, help messages and UNIX man page
1803generation. It supports programs with single or multiple commands and respects
1804most of the POSIX and GNU conventions.")
1805 (license license:bsd-3)))
beeb2d41 1806
564cf93f
JL
1807(define-public ocaml4.02-cmdliner
1808 (package-with-ocaml4.02 ocaml-cmdliner))
1809
beeb2d41
JL
1810(define-public ocaml-fmt
1811 (package
1812 (name "ocaml-fmt")
cdcbccd1 1813 (version "0.8.5")
beeb2d41
JL
1814 (source
1815 (origin
1816 (method url-fetch)
1817 (uri (string-append "http://erratique.ch/software/fmt/releases/fmt-"
1818 version ".tbz"))
1819 (sha256 (base32
cdcbccd1 1820 "1zj9azcxcn6skmb69ykgmi9z8c50yskwg03wqgh87lypgjdcz060"))))
beeb2d41 1821 (build-system ocaml-build-system)
564cf93f
JL
1822 (native-inputs
1823 `(("ocamlbuild" ,ocamlbuild)
1824 ("opam" ,opam)
1825 ("topkg" ,ocaml-topkg)))
1826 (propagated-inputs
1827 `(("result" ,ocaml-result)
cdcbccd1 1828 ("ocaml-uchar" ,ocaml-uchar)
564cf93f 1829 ("cmdliner" ,ocaml-cmdliner)))
beeb2d41
JL
1830 (arguments `(#:tests? #f
1831 #:build-flags (list "build" "--with-base-unix" "true"
1832 "--with-cmdliner" "true")
1833 #:phases
1834 (modify-phases %standard-phases
1835 (delete 'configure))))
1836 (home-page "http://erratique.ch/software/fmt")
1837 (synopsis "OCaml Format pretty-printer combinators")
1838 (description "Fmt exposes combinators to devise Format pretty-printing
1839functions.")
1840 (license license:isc)))
f46bceb6 1841
564cf93f
JL
1842(define-public ocaml4.02-fmt
1843 (package-with-ocaml4.02 ocaml-fmt))
1844
f46bceb6
JL
1845(define-public ocaml-astring
1846 (package
1847 (name "ocaml-astring")
1848 (version "0.8.3")
1849 (source
1850 (origin
1851 (method url-fetch)
1852 (uri (string-append "http://erratique.ch/software/astring/releases/astring-"
1853 version ".tbz"))
1854 (sha256 (base32
1855 "0ixjwc3plrljvj24za3l9gy0w30lsbggp8yh02lwrzw61ls4cri0"))))
1856 (build-system ocaml-build-system)
564cf93f
JL
1857 (native-inputs
1858 `(("ocamlbuild" ,ocamlbuild)
1859 ("opam" ,opam)
1860 ("topkg" ,ocaml-topkg)))
1861 (arguments
1862 `(#:tests? #f
1863 #:build-flags (list "build")
1864 #:phases
1865 (modify-phases %standard-phases
1866 (delete 'configure))))
f46bceb6
JL
1867 (home-page "http://erratique.ch/software/astring")
1868 (synopsis "Alternative String module for OCaml")
1869 (description "Astring exposes an alternative String module for OCaml. This
1870module balances minimality and expressiveness for basic, index-free, string
1871processing and provides types and functions for substrings, string sets and
1872string maps. The String module exposed by Astring has exception safe functions,
1873removes deprecated and rarely used functions, alters some signatures and names,
1874adds a few missing functions and fully exploits OCaml's newfound string
1875immutability.")
1876 (license license:isc)))
69705efe 1877
564cf93f
JL
1878(define-public ocaml4.02-astring
1879 (package-with-ocaml4.02 ocaml-astring))
1880
69705efe
JL
1881(define-public ocaml-alcotest
1882 (package
1883 (name "ocaml-alcotest")
1884 (version "0.7.2")
1885 (source (origin
1886 (method url-fetch)
1887 (uri (string-append "https://github.com/mirage/alcotest/releases/"
1888 "download/" version "/alcotest-" version ".tbz"))
1889 (sha256
1890 (base32
1891 "0g5lzk0gpfx4q8hyhr460gr4lab5wakfxsmhfwvb3yinxwzs95gc"))))
1892 (build-system ocaml-build-system)
564cf93f
JL
1893 (arguments
1894 `(#:tests? #f
1895 #:build-flags (list "build")
1896 #:phases
1897 (modify-phases %standard-phases
1898 (delete 'configure))))
1899 (native-inputs
1900 `(("ocamlbuild" ,ocamlbuild)
1901 ("opam" ,opam)
1902 ("topkg" ,ocaml-topkg)))
1903 (propagated-inputs
1904 `(("fmt" ,ocaml-fmt)
1905 ("astring" ,ocaml-astring)))
69705efe
JL
1906 (home-page "https://github.com/mirage/alcotest")
1907 (synopsis "Lightweight OCaml test framework")
1908 (description "Alcotest exposes simple interface to perform unit tests. It
1909exposes a simple TESTABLE module type, a check function to assert test
1910predicates and a run function to perform a list of unit -> unit test callbacks.
1911Alcotest provides a quiet and colorful output where only faulty runs are fully
1912displayed at the end of the run (with the full logs ready to inspect), with a
1913simple (yet expressive) query language to select the tests to run.")
1914 (license license:isc)))
0a7b43a8 1915
564cf93f
JL
1916(define-public ocaml4.02-alcotest
1917 (package-with-ocaml4.02 ocaml-alcotest))
1918
0a7b43a8
JL
1919(define-public ocaml-ppx-tools
1920 (package
1921 (name "ocaml-ppx-tools")
564cf93f 1922 (version "5.1+4.06.0")
0a7b43a8
JL
1923 (source
1924 (origin
1925 (method url-fetch)
1926 (uri (string-append "https://github.com/alainfrisch/ppx_tools/archive/"
1927 version ".tar.gz"))
1928 (sha256 (base32
564cf93f 1929 "0mncpy9v2mcjgnj7s2vqpp2b1ixv54djicfx66ic9wny9d202gj1"))))
0a7b43a8 1930 (build-system ocaml-build-system)
564cf93f
JL
1931 (arguments
1932 `(#:phases (modify-phases %standard-phases (delete 'configure))
1933 #:tests? #f))
1934 (properties
1935 `((ocaml4.02-variant . ,(delay ocaml4.02-ppx-tools))))
0a7b43a8
JL
1936 (home-page "https://github.com/alainfrisch/ppx_tools")
1937 (synopsis "Tools for authors of ppx rewriters and other syntactic tools")
1938 (description "Tools for authors of ppx rewriters and other syntactic tools.")
1939 (license license:expat)))
1342fce1 1940
564cf93f
JL
1941(define-public ocaml4.02-ppx-tools
1942 (let ((base (package-with-ocaml4.02 (strip-ocaml4.02-variant ocaml-ppx-tools))))
1943 (package
1944 (inherit base)
1945 (version "5.0+4.02.0")
1946 (source
1947 (origin
1948 (method url-fetch)
1949 (uri (string-append "https://github.com/alainfrisch/ppx_tools/archive/"
1950 version ".tar.gz"))
1951 (sha256 (base32
1952 "0rjg4rngi8k9873z4zq95zn9hj8qyw1vcrf11y15aqasfpqq16rc")))))))
1953
1342fce1
JL
1954(define-public ocaml-react
1955 (package
1956 (name "ocaml-react")
1957 (version "1.2.0")
1958 (source
1959 (origin
1960 (method url-fetch)
1961 (uri (string-append "http://erratique.ch/software/react/releases/react-"
1962 version ".tbz"))
1963 (sha256 (base32
1964 "0knhgbngphv5sp1yskfd97crf169qhpc0igr6w7vqw0q36lswyl8"))))
1965 (build-system ocaml-build-system)
564cf93f
JL
1966 (native-inputs
1967 `(("ocamlbuild" ,ocamlbuild)
1968 ("opam" ,opam)))
1969 (arguments
1970 `(#:tests? #f
1971 #:build-flags (list "native=true" "native-dynlink=true")
1972 #:phases
1973 (modify-phases %standard-phases
1974 (delete 'configure))))
1342fce1
JL
1975 (home-page "http://erratique.ch/software/react")
1976 (synopsis "Declarative events and signals for OCaml")
1977 (description "React is an OCaml module for functional reactive programming
1978(FRP). It provides support to program with time varying values: declarative
1979events and signals. React doesn't define any primitive event or signal, it
1980lets the client choose the concrete timeline.")
1981 (license license:bsd-3)))
37f17e2a 1982
564cf93f
JL
1983(define-public ocaml4.02-react
1984 (package-with-ocaml4.02 ocaml-react))
1985
37f17e2a
JL
1986(define-public ocaml-ssl
1987 (package
1988 (name "ocaml-ssl")
26b438e0 1989 (version "0.5.5")
37f17e2a
JL
1990 (source
1991 (origin
8ae540a2
TGR
1992 (method git-fetch)
1993 (uri (git-reference
1994 (url "https://github.com/savonet/ocaml-ssl.git")
1995 (commit version)))
1996 (file-name (git-file-name name version))
37f17e2a 1997 (sha256 (base32
8ae540a2 1998 "0fviq8xhp3qk7pmkl7knchywsipxgb7p0z489hj8qnf2sx8xzdmy"))))
37f17e2a 1999 (build-system ocaml-build-system)
564cf93f
JL
2000 (arguments
2001 `(#:tests? #f
2002 #:make-flags (list "OCAMLFIND_LDCONF=ignore")
2003 #:phases
2004 (modify-phases %standard-phases
2005 (add-after 'unpack 'bootstrap
2006 (lambda* (#:key #:allow-other-keys)
2007 (system* "sh" "bootstrap")
2008 (substitute* "src/OCamlMakefile"
2009 (("/bin/sh") (which "bash")))
2010 (substitute* "configure"
2011 (("/bin/sh") (which "bash")))
2012 #t)))))
2013 (native-inputs
2014 `(("autoconf" ,autoconf)
2015 ("automake" ,automake)
2016 ("which" ,which)))
37f17e2a
JL
2017 (propagated-inputs `(("openssl" ,openssl)))
2018 (home-page "https://github.com/savonet/ocaml-ssl/")
2019 (synopsis "OCaml bindings for OpenSSL")
36dba63b
TGR
2020 (description
2021 "OCaml-SSL is a set of bindings for OpenSSL, a library for communicating
2022through Transport Layer Security (@dfn{TLS}) encrypted connections.")
37f17e2a 2023 (license license:lgpl2.1)))
1fdfbadf 2024
564cf93f
JL
2025(define-public ocaml4.02-ssl
2026 (package-with-ocaml4.02 ocaml-ssl))
2027
1fdfbadf
JL
2028(define-public ocaml-lwt
2029 (package
2030 (name "ocaml-lwt")
564cf93f 2031 (version "4.1.0")
1fdfbadf
JL
2032 (source
2033 (origin
2034 (method url-fetch)
2035 (uri (string-append "https://github.com/ocsigen/lwt/archive/" version
2036 ".tar.gz"))
14ebf2fc 2037 (file-name (string-append name "-" version ".tar.gz"))
1fdfbadf 2038 (sha256 (base32
564cf93f 2039 "0mhh019bjkg5xfvpy1pxs4xdxb759fyydmgb6l4j0qww1qgr8klp"))))
f880b03b 2040 (build-system dune-build-system)
1fdfbadf 2041 (arguments
564cf93f 2042 `(#:tests? #f; require lwt_ppx
f880b03b 2043 #:jbuild? #t
1fdfbadf
JL
2044 #:phases
2045 (modify-phases %standard-phases
f880b03b 2046 (add-before 'build 'configure
564cf93f
JL
2047 (lambda _
2048 (invoke "ocaml" "src/util/configure.ml" "-use-libev" "true")
564cf93f
JL
2049 #t)))))
2050 (native-inputs
f880b03b 2051 `(("ocaml-cppo" ,ocaml-cppo)
564cf93f
JL
2052 ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
2053 ("pkg-config" ,pkg-config)
2054 ("ppx-tools-versioned" ,ocaml-ppx-tools-versioned)))
2055 (inputs
2056 `(("libev" ,libev)
2057 ("glib" ,glib)))
2058 (propagated-inputs
2059 `(("result" ,ocaml-result)
2060 ("ocaml-ssl" ,ocaml-ssl)
2061 ("ocaml-react" ,ocaml-react)))
1fdfbadf
JL
2062 (home-page "https://github.com/ocsigen/lwt")
2063 (synopsis "Cooperative threads and I/O in monadic style")
2064 (description "Lwt provides typed, composable cooperative threads. These
2065make it easy to run normally-blocking I/O operations concurrently in a single
2066process. Also, in many cases, Lwt threads can interact without the need for
2067locks or other synchronization primitives.")
2068 (license license:lgpl2.1)))
9dc7dcb2 2069
564cf93f
JL
2070(define-public ocaml4.02-lwt
2071 (package-with-ocaml4.02 ocaml-lwt))
2072
2073(define-public ocaml-lwt-log
2074 (package
2075 (name "ocaml-lwt-log")
2076 (version "1.1.0")
2077 (source
2078 (origin
2079 (method url-fetch)
2080 (uri (string-append "https://github.com/aantron/lwt_log/archive/" version
2081 ".tar.gz"))
2082 (file-name (string-append name "-" version ".tar.gz"))
2083 (sha256 (base32
2084 "1lr62j2266pbsi54xmzsfvl2z7fi7smhak7fp1ybl8hssxwi6in2"))))
5d071263 2085 (build-system dune-build-system)
564cf93f
JL
2086 (arguments
2087 `(#:tests? #f; require lwt_ppx
5d071263 2088 #:jbuild? #t))
564cf93f
JL
2089 (propagated-inputs
2090 `(("lwt" ,ocaml-lwt)))
2091 (home-page "https://github.com/aantron/lwt_log")
2092 (synopsis "Logging library")
2093 (description "This package provides a deprecated logging component for
2094ocaml lwt.")
2095 (license license:lgpl2.1)))
2096
2097(define-public ocaml4.02-lwt-log
2098 (package-with-ocaml4.02 ocaml-lwt-log))
2099
9dc7dcb2
JL
2100(define-public ocaml-logs
2101 (package
2102 (name "ocaml-logs")
2103 (version "0.6.2")
2104 (source (origin
2105 (method url-fetch)
2106 (uri (string-append "http://erratique.ch/software/logs/releases/"
2107 "logs-" version ".tbz"))
2108 (sha256
2109 (base32
2110 "1khbn7jqpid83zn8rvyh1x1sirls7zc878zj4fz985m5xlsfy853"))))
2111 (build-system ocaml-build-system)
564cf93f
JL
2112 (arguments
2113 `(#:tests? #f
2114 #:build-flags (list "build" "--with-js_of_ocaml" "false")
2115 #:phases
2116 (modify-phases %standard-phases
2117 (delete 'configure))))
2118 (native-inputs
2119 `(("ocamlbuild" ,ocamlbuild)
2120 ("opam" ,opam)))
2121 (propagated-inputs
2122 `(("fmt" ,ocaml-fmt)
2123 ("lwt" ,ocaml-lwt)
2124 ("mtime" ,ocaml-mtime)
2125 ("result" ,ocaml-result)
2126 ("cmdliner" ,ocaml-cmdliner)
2127 ("topkg" ,ocaml-topkg)))
9dc7dcb2
JL
2128 (home-page "http://erratique.ch/software/logs")
2129 (synopsis "Logging infrastructure for OCaml")
2130 (description "Logs provides a logging infrastructure for OCaml. Logging is
2131performed on sources whose reporting level can be set independently. Log
2132message report is decoupled from logging and is handled by a reporter.")
2133 (license license:isc)))
fbf38b09 2134
564cf93f
JL
2135(define-public ocaml4.02-logs
2136 (package-with-ocaml4.02 ocaml-logs))
2137
fbf38b09
JL
2138(define-public ocaml-fpath
2139 (package
2140 (name "ocaml-fpath")
2141 (version "0.7.1")
2142 (source (origin
2143 (method url-fetch)
2144 (uri (string-append "http://erratique.ch/software/fpath/releases/"
2145 "fpath-" version ".tbz"))
2146 (sha256
2147 (base32
2148 "05134ij27xjl6gaqsc65yl19vfj6cjxq3mbm9bf4mija8grdpn6g"))))
2149 (build-system ocaml-build-system)
564cf93f
JL
2150 (arguments
2151 `(#:tests? #f
2152 #:build-flags (list "build")
2153 #:phases
2154 (modify-phases %standard-phases
2155 (delete 'configure))))
2156 (native-inputs
2157 `(("ocamlbuild" ,ocamlbuild)
2158 ("opam" ,opam)))
2159 (propagated-inputs
2160 `(("topkg" ,ocaml-topkg)
2161 ("astring" ,ocaml-astring)))
fbf38b09
JL
2162 (home-page "http://erratique.ch/software/fpath")
2163 (synopsis "File system paths for OCaml")
2164 (description "Fpath is an OCaml module for handling file system paths with
2165POSIX or Windows conventions. Fpath processes paths without accessing the
2166file system and is independent from any system library.")
2167 (license license:isc)))
33e0702d 2168
564cf93f
JL
2169(define-public ocaml4.02-fpath
2170 (package-with-ocaml4.02 ocaml-fpath))
2171
33e0702d
JL
2172(define-public ocaml-bos
2173 (package
2174 (name "ocaml-bos")
2175 (version "0.1.4")
2176 (source (origin
2177 (method url-fetch)
2178 (uri (string-append "http://erratique.ch/software/bos/releases/"
2179 "bos-" version ".tbz"))
2180 (sha256
2181 (base32
2182 "1ly66lysk4w6mdy4k1n3ynlpfpq7lw4wshcpzgx58v6x613w5s7q"))))
2183 (build-system ocaml-build-system)
564cf93f
JL
2184 (arguments
2185 `(#:tests? #f
2186 #:build-flags (list "build")
2187 #:phases
2188 (modify-phases %standard-phases
2189 (delete 'configure))))
2190 (native-inputs
2191 `(("ocamlbuild" ,ocamlbuild)
2192 ("opam" ,opam)))
2193 (propagated-inputs
2194 `(("topkg" ,ocaml-topkg)
2195 ("astring" ,ocaml-astring)
2196 ("fmt" ,ocaml-fmt)
2197 ("fpath" ,ocaml-fpath)
2198 ("logs" ,ocaml-logs)
2199 ("rresult" ,ocaml-rresult)))
33e0702d
JL
2200 (home-page "http://erratique.ch/software/bos")
2201 (synopsis "Basic OS interaction for OCaml")
2202 (description "Bos provides support for basic and robust interaction with
2203the operating system in OCaml. It has functions to access the process
2204environment, parse command line arguments, interact with the file system and
2205run command line programs.")
2206 (license license:isc)))
036b8579 2207
564cf93f
JL
2208(define-public ocaml4.02-bos
2209 (package-with-ocaml4.02 ocaml-bos))
2210
036b8579
JL
2211(define-public ocaml-xmlm
2212 (package
2213 (name "ocaml-xmlm")
564cf93f 2214 (version "1.3.0")
036b8579
JL
2215 (source (origin
2216 (method url-fetch)
2217 (uri (string-append "http://erratique.ch/software/xmlm/releases/"
2218 "xmlm-" version ".tbz"))
2219 (sha256
2220 (base32
564cf93f 2221 "1rrdxg5kh9zaqmgapy9bhdqyxbbvxxib3bdfg1vhw4rrkp1z0x8n"))))
036b8579 2222 (build-system ocaml-build-system)
564cf93f
JL
2223 (arguments
2224 `(#:tests? #f
2225 #:build-flags (list "build")
2226 #:phases
2227 (modify-phases %standard-phases
2228 (delete 'configure))))
2229 (native-inputs
2230 `(("ocamlbuild" ,ocamlbuild)
2231 ("ocaml-topkg" ,ocaml-topkg)
2232 ("opam" ,opam)))
036b8579
JL
2233 (home-page "http://erratique.ch/software/xmlm")
2234 (synopsis "Streaming XML codec for OCaml")
2235 (description "Xmlm is a streaming codec to decode and encode the XML data
2236format. It can process XML documents without a complete in-memory
2237representation of the data.")
2238 (license license:isc)))
6e9b678e 2239
9bf9b3c0
BW
2240(define-public ocaml4.01-xmlm
2241 (package-with-ocaml4.01 ocaml-xmlm))
2242
564cf93f
JL
2243(define-public ocaml4.02-xmlm
2244 (package-with-ocaml4.02 ocaml-xmlm))
2245
6e9b678e
JL
2246(define-public ocaml-ulex
2247 (package
2248 (name "ocaml-ulex")
564cf93f 2249 (version "1.2")
6e9b678e
JL
2250 (source (origin
2251 (method url-fetch)
564cf93f 2252 (uri (string-append "https://github.com/whitequark/ulex/archive/v"
6e9b678e 2253 version ".tar.gz"))
564cf93f 2254 (file-name (string-append name "-" version ".tar.gz"))
6e9b678e
JL
2255 (sha256
2256 (base32
564cf93f
JL
2257 "16gnbhqs6y2v89vw4igzvxdf2g8ybh5643636824aldcv8sscac0"))))
2258 (build-system ocaml-build-system)
2259 (arguments
2260 `(#:phases (modify-phases %standard-phases (delete 'configure))
2261 #:tests? #f
2262 #:make-flags
2263 (list "all.opt"
2264 (string-append "OCAMLBUILD=ocamlbuild -byte-plugin "
2265 "-cflags -I," (assoc-ref %build-inputs "camlp4")
2266 "/lib/ocaml/site-lib/camlp4"))))
2267 (native-inputs
2268 `(("camlp4" ,camlp4)
2269 ("ocamlbuild" ,ocamlbuild)))
6e9b678e
JL
2270 (home-page "http://www.cduce.org/download.html#side")
2271 (synopsis "Lexer generator for Unicode and OCaml")
2272 (description "Lexer generator for Unicode and OCaml.")
2273 (license license:expat)))
33f16b9a 2274
564cf93f
JL
2275(define-public ocaml4.02-ulex
2276 (package-with-ocaml4.02 ocaml-ulex))
2277
33f16b9a
JL
2278(define-public ocaml-uchar
2279 (package
2280 (name "ocaml-uchar")
f0dece30 2281 (version "0.0.2")
33f16b9a
JL
2282 (source
2283 (origin
2284 (method url-fetch)
2285 (uri (string-append "https://github.com/ocaml/uchar/releases/download/v"
2286 version "/uchar-" version ".tbz"))
2287 (sha256 (base32
f0dece30 2288 "1w2saw7zanf9m9ffvz2lvcxvlm118pws2x1wym526xmydhqpyfa7"))))
33f16b9a 2289 (build-system ocaml-build-system)
564cf93f
JL
2290 (arguments
2291 `(#:tests? #f
2292 #:build-flags (list "native=true" "native-dynlink=true")
2293 #:phases
2294 (modify-phases %standard-phases
2295 (delete 'configure))))
2296 (native-inputs
2297 `(("ocamlbuild" ,ocamlbuild)
2298 ("opam" ,opam)))
33f16b9a
JL
2299 (home-page "https://github.com/ocaml/uchar")
2300 (synopsis "Compatibility library for OCaml's Uchar module")
2301 (description "The uchar package provides a compatibility library for the
2302`Uchar` module introduced in OCaml 4.03.")
2303 (license license:lgpl2.1)))
84290923 2304
564cf93f
JL
2305(define-public ocaml4.02-uchar
2306 (package-with-ocaml4.02 ocaml-uchar))
2307
84290923
JL
2308(define-public ocaml-uutf
2309 (package
2310 (name "ocaml-uutf")
564cf93f 2311 (version "1.0.1")
84290923
JL
2312 (source (origin
2313 (method url-fetch)
2314 (uri (string-append "http://erratique.ch/software/uutf/releases/"
2315 "uutf-" version ".tbz"))
2316 (sha256
2317 (base32
564cf93f 2318 "1gp96dcggq7s84934vimxh89caaxa77lqiff1yywbwkilkkjcfqj"))))
84290923 2319 (build-system ocaml-build-system)
564cf93f
JL
2320 (arguments
2321 `(#:tests? #f
2322 #:build-flags (list "build")
2323 #:phases
2324 (modify-phases %standard-phases
2325 (delete 'configure))))
2326 (native-inputs
2327 `(("ocamlbuild" ,ocamlbuild)
2328 ("opam" ,opam)
2329 ("topkg" ,ocaml-topkg)))
2330 (propagated-inputs
2331 `(("uchar" ,ocaml-uchar)
2332 ("cmdliner" ,ocaml-cmdliner)))
84290923
JL
2333 (home-page "http://erratique.ch/software/uutf")
2334 (synopsis "Non-blocking streaming Unicode codec for OCaml")
2335 (description "Uutf is a non-blocking streaming codec to decode and encode
2336the UTF-8, UTF-16, UTF-16LE and UTF-16BE encoding schemes. It can efficiently
2337work character by character without blocking on IO. Decoders perform character
2338position tracking and support newline normalization.
2339
2340Functions are also provided to fold over the characters of UTF encoded OCaml
2341string values and to directly encode characters in OCaml Buffer.t values.")
2342 (license license:isc)))
800ab1fb 2343
564cf93f
JL
2344(define-public ocaml4.02-uutf
2345 (package-with-ocaml4.02 ocaml-uutf))
2346
800ab1fb
JL
2347(define-public ocaml-jsonm
2348 (package
2349 (name "ocaml-jsonm")
564cf93f 2350 (version "1.0.1")
800ab1fb
JL
2351 (source (origin
2352 (method url-fetch)
2353 (uri (string-append "http://erratique.ch/software/jsonm/releases/"
2354 "jsonm-" version ".tbz"))
2355 (sha256
2356 (base32
564cf93f 2357 "1176dcmxb11fnw49b7yysvkjh0kpzx4s48lmdn5psq9vshp5c29w"))))
800ab1fb 2358 (build-system ocaml-build-system)
564cf93f
JL
2359 (arguments
2360 `(#:tests? #f
2361 #:build-flags (list "build")
2362 #:phases
2363 (modify-phases %standard-phases
2364 (delete 'configure))))
2365 (native-inputs
2366 `(("ocamlbuild" ,ocamlbuild)
2367 ("opam" ,opam)
2368 ("topkg" ,ocaml-topkg)))
2369 (propagated-inputs
2370 `(("uutf" ,ocaml-uutf)
2371 ("cmdliner" ,ocaml-cmdliner)))
800ab1fb
JL
2372 (home-page "http://erratique.ch/software/jsonm")
2373 (synopsis "Non-blocking streaming JSON codec for OCaml")
2374 (description "Jsonm is a non-blocking streaming codec to decode and encode
2375the JSON data format. It can process JSON text without blocking on IO and
2376without a complete in-memory representation of the data.")
2377 (license license:isc)))
fd6e260e 2378
564cf93f
JL
2379(define-public ocaml4.02-jsonm
2380 (package-with-ocaml4.02 ocaml-jsonm))
2381
fd6e260e
JL
2382(define-public ocaml-ocurl
2383 (package
2384 (name "ocaml-ocurl")
564cf93f 2385 (version "0.8.2")
fd6e260e
JL
2386 (source (origin
2387 (method url-fetch)
2388 (uri (string-append "http://ygrek.org.ua/p/release/ocurl/ocurl-"
2389 version ".tar.gz"))
2390 (sha256
2391 (base32
564cf93f 2392 "1ax3xdlzgb1zg7d0wr9nwgmh6a45a764m0wk8p6mx07ad94hz0q9"))))
fd6e260e 2393 (build-system ocaml-build-system)
564cf93f
JL
2394 (arguments
2395 `(#:phases
2396 (modify-phases %standard-phases
2397 (add-before 'configure 'fix-/bin/sh
2398 (lambda* (#:key inputs #:allow-other-keys)
2399 (substitute* "configure"
2400 (("-/bin/sh") (string-append "-" (which "bash")))))))))
2401 (native-inputs
2402 `(("pkg-config" ,pkg-config)))
fd6e260e
JL
2403 (inputs `(("curl" ,curl)))
2404 (home-page "http://ocurl.forge.ocamlcore.org/")
2405 (synopsis "OCaml bindings for libcurl")
2406 (description "Client-side URL transfer library, supporting HTTP and a
2407multitude of other network protocols (FTP/SMTP/RTSP/etc).")
2408 (license license:isc)))
5d08f98d 2409
564cf93f
JL
2410(define-public ocaml4.02-ocurl
2411 (package-with-ocaml4.02 ocaml-ocurl))
2412
5d08f98d
JL
2413(define-public ocaml-base64
2414 (package
2415 (name "ocaml-base64")
2416 (version "2.1.2")
2417 (source (origin
2418 (method url-fetch)
2419 (uri (string-append "https://github.com/mirage/ocaml-base64/"
2420 "releases/download/v" version "/base64-"
2421 version ".tbz"))
2422 (file-name (string-append name "-" version ".tar.gz"))
2423 (sha256
2424 (base32
2425 "1p45sawchmrkr22gkmydjc4ary23pisp58zsnb7iq7d82nxs1lfq"))))
2426 (build-system ocaml-build-system)
2427 (arguments
2428 `(#:build-flags (list "build" "--tests" "true")
2429 #:phases
2430 (modify-phases %standard-phases
2431 (delete 'configure))))
2432 (native-inputs
2433 `(("topkg" ,ocaml-topkg)
564cf93f 2434 ("ocamlbuild" ,ocamlbuild)
5d08f98d
JL
2435 ("opam" ,opam)
2436 ("rresult" ,ocaml-rresult)
2437 ("bos" ,ocaml-bos)
2438 ("alcotest" ,ocaml-alcotest)))
2439 (home-page "https://github.com/mirage/ocaml-base64")
2440 (synopsis "Base64 encoding for OCaml")
2441 (description "Base64 is a group of similar binary-to-text encoding schemes
2442that represent binary data in an ASCII string format by translating it into a
2443radix-64 representation. It is specified in RFC 4648.")
2444 (license license:isc)))
c590f1ae 2445
564cf93f
JL
2446(define-public ocaml4.02-base64
2447 (package-with-ocaml4.02 ocaml-base64))
2448
c590f1ae
JL
2449(define-public ocamlify
2450 (package
2451 (name "ocamlify")
2452 (version "0.0.2")
2453 (source (origin
2454 (method url-fetch)
2455 (uri (ocaml-forge-uri name version 1209))
2456 (sha256
2457 (base32
2458 "1f0fghvlbfryf5h3j4as7vcqrgfjb4c8abl5y0y5h069vs4kp5ii"))))
2459 (build-system ocaml-build-system)
2460 ; tests are done during build
2461 (arguments
564cf93f
JL
2462 `(#:ocaml ,ocaml-4.02
2463 #:findlib ,ocaml4.02-findlib
2464 #:phases
c590f1ae
JL
2465 (modify-phases %standard-phases
2466 (delete 'check))))
2467 (home-page "https://forge.ocamlcore.org/projects/ocamlify")
2468 (synopsis "Include files in OCaml code")
2469 (description "OCamlify allows to create OCaml source code by including
2470whole files into OCaml string or string list. The code generated can be
2471compiled as a standard OCaml file. It allows embedding external resources as
2472OCaml code.")
2473 (license license:lgpl2.1+))); with the OCaml static compilation exception
41e8e079
JL
2474
2475(define-public omake
2476 (package
2477 (name "omake")
564cf93f 2478 (version "0.10.3")
41e8e079
JL
2479 (source (origin
2480 (method url-fetch)
2481 (uri (string-append "http://download.camlcity.org/download/"
2482 "omake-" version ".tar.gz"))
2483 (sha256
2484 (base32
564cf93f 2485 "07bdg1h5i7qnlv9xq81ad5hfypl10hxm771h4rjyl5cn8plhfcgz"))
41e8e079
JL
2486 (patches (search-patches "omake-fix-non-determinism.patch"))))
2487 (build-system ocaml-build-system)
2488 (arguments
2489 `(#:make-flags
2490 (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
2491 #:tests? #f ; no test target
2492 #:phases
2493 (modify-phases %standard-phases
2494 (add-before 'configure 'fix-makefile
2495 (lambda* (#:key outputs #:allow-other-keys)
2496 (substitute* "mk/osconfig_unix.mk"
2497 (("CC = cc") "CC = gcc")))))))
564cf93f
JL
2498 (properties
2499 `((ocaml4.02-variant . ,(delay ocaml4.02-omake))))
41e8e079
JL
2500 (native-inputs `(("hevea" ,hevea)))
2501 (home-page "http://projects.camlcity.org/projects/omake.html")
2502 (synopsis "Build system designed for scalability and portability")
2503 (description "Similar to make utilities you may have used, but it features
2504many additional enhancements, including:
2505
2506@enumerate
2507@item Support for projects spanning several directories or directory hierarchies.
2508@item Fast, reliable, automated, scriptable dependency analysis using MD5 digests,
2509 with full support for incremental builds.
2510@item Dependency analysis takes the command lines into account — whenever the
2511 command line used to build a target changes, the target is considered
2512 out-of-date.
2513@item Fully scriptable, includes a library that providing support for standard
2514 tasks in C, C++, OCaml, and LaTeX projects, or a mixture thereof.
2515@end enumerate")
2516 (license (list license:lgpl2.1 ; libmojave
2517 license:expat ; OMake scripts
2518 license:gpl2)))) ; OMake itself, with ocaml linking exception
2519 ; see LICENSE.OMake
0e9e94b7 2520
564cf93f
JL
2521(define-public ocaml4.02-omake
2522 (let ((base (package-with-ocaml4.02 (strip-ocaml4.02-variant omake))))
2523 (package
2524 (inherit base)
2525 (version "0.10.2")
2526 (source (origin
2527 (method url-fetch)
2528 (uri (string-append "http://download.camlcity.org/download/"
2529 "omake-" version ".tar.gz"))
2530 (sha256
2531 (base32
2532 "1znnlkpz89hk44byvnl1pr92ym6hwfyyw2qm9clq446r6l2z4m64"))
2533 (patches (search-patches "omake-fix-non-determinism.patch")))))))
2534
0e9e94b7
JL
2535(define-public ocaml-batteries
2536 (package
2537 (name "ocaml-batteries")
564cf93f 2538 (version "2.9.0")
0e9e94b7
JL
2539 (source (origin
2540 (method url-fetch)
564cf93f
JL
2541 (uri (string-append "https://github.com/ocaml-batteries-team/"
2542 "batteries-included/releases/download/v"
2543 version "/batteries-" version ".tar.gz"))
0e9e94b7
JL
2544 (sha256
2545 (base32
564cf93f 2546 "0lkdmv2my5hirkswmci2cch341n6wkkj2q8apjhs83sg6528caxi"))))
0e9e94b7
JL
2547 (build-system ocaml-build-system)
2548 (native-inputs
564cf93f
JL
2549 `(("ocamlbuild" ,ocamlbuild)
2550 ("qtest" ,ocaml-qtest)
0e9e94b7
JL
2551 ("bisect" ,ocaml-bisect)
2552 ("ounit" ,ocaml-ounit)))
564cf93f
JL
2553 (propagated-inputs
2554 `(("ocaml-num" ,ocaml-num)))
0e9e94b7
JL
2555 (arguments
2556 `(#:phases
2557 (modify-phases %standard-phases
2558 (delete 'check) ; tests are run by the build phase
2559 (replace 'build
564cf93f
JL
2560 (lambda* (#:key inputs outputs #:allow-other-keys)
2561 (let ((files
2562 (map (lambda (str)
2563 (substring str 0 (- (string-length str) 1)))
2564 (append
2565 (find-files "src" ".*.mliv")
2566 (find-files "src" ".*.mlv")
2567 (find-files "src" ".*.mlp")))))
2568 (apply invoke "ocamlbuild" "-no-links" "-use-ocamlfind" "-I" "num"
2569 "-lflag" "-dllpath-all" files)
2570 (for-each (lambda (file)
2571 (copy-file (string-append "_build/" file) file))
2572 files))
2573 (invoke "ocamlbuild" "-no-links" "-use-ocamlfind" "-I" "num"
2574 "-lflag" "-dllpath-all" "build/mkconf.byte")
2575 (copy-file "_build/build/mkconf.byte" "build/mkconf.byte")
2576 (invoke "make" "all")
2577 #t)))))
2578 (properties
2579 `((ocaml4.01-variant . ,(delay ocaml4.01-batteries))
2580 (ocaml4.02-variant . ,(delay ocaml4.02-batteries))))
0e9e94b7
JL
2581 (home-page "http://batteries.forge.ocamlcore.org/")
2582 (synopsis "Development platform for the OCaml programming language")
2583 (description "Define a standard set of libraries which may be expected on
2584every compliant installation of OCaml and organize these libraries into a
2585hierarchy of modules.")
2586 (license license:lgpl2.1+)))
f8a12de1 2587
564cf93f
JL
2588(define-public ocaml4.02-batteries
2589 (let ((base (package-with-ocaml4.02 (strip-ocaml4.02-variant ocaml-batteries))))
2590 (package
2591 (inherit base)
2592 (version "2.5.3")
2593 (source (origin
2594 (method url-fetch)
2595 (uri (ocaml-forge-uri "batteries" version 1650))
2596 (sha256
2597 (base32
2598 "1a97w3x2l1jr5x9kj5gqm1x6b0q9fjqdcsvls7arnl3bvzgsia0n"))))
2599 (propagated-inputs '()))))
2600
de59e24a 2601(define-public ocaml4.01-batteries
564cf93f
JL
2602 (let ((base (package-with-ocaml4.01 (strip-ocaml4.01-variant ocaml4.02-batteries))))
2603 (package
2604 (inherit base)
2605 (name "ocaml4.01-batteries"))))
de59e24a 2606
f8a12de1
JL
2607(define-public ocaml-pcre
2608 (package
2609 (name "ocaml-pcre")
2610 (version "7.2.3")
2611 (source (origin
2612 (method url-fetch)
2613 (uri (string-append "https://github.com/mmottl/pcre-ocaml/archive"
2614 "/v" version ".tar.gz"))
2615 (file-name (string-append name "-" version ".tar.gz"))
2616 (sha256
2617 (base32
2618 "0rj6dw79px4sj2kq0iss2nzq3rnsn9wivvc0f44wa1mppr6njfb3"))))
2619 (build-system ocaml-build-system)
2620 (arguments
2621 `(#:phases
2622 (modify-phases %standard-phases
2623 (add-after 'install 'link-lib
2624 (lambda* (#:key outputs #:allow-other-keys)
2625 (let* ((out (assoc-ref outputs "out"))
2626 (stubs (string-append out "/lib/ocaml/site-lib/stubslibs"))
2627 (lib (string-append out "/lib/ocaml/site-lib/pcre")))
2628 (mkdir-p stubs)
2629 (symlink (string-append lib "/dllpcre_stubs.so")
564cf93f
JL
2630 (string-append stubs "/dllpcre_stubs.so")))
2631 #t)))))
f8a12de1
JL
2632 (native-inputs
2633 `(("batteries" ,ocaml-batteries)
564cf93f 2634 ("ocamlbuild" ,ocamlbuild)
f8a12de1
JL
2635 ("pcre:bin" ,pcre "bin")))
2636 (propagated-inputs `(("pcre" ,pcre)))
2637 (home-page "https://mmottl.github.io/pcre-ocaml")
2638 (synopsis "Bindings to the Perl Compatibility Regular Expressions library")
2639 (description "Pcre-ocaml offers library functions for string pattern
2640matching and substitution, similar to the functionality offered by the Perl
2641language.")
2642 (license license:lgpl2.1+))); with the OCaml link exception
3763eea7 2643
564cf93f
JL
2644(define-public ocaml4.02-pcre
2645 (package-with-ocaml4.02 ocaml-pcre))
2646
3763eea7
JL
2647(define-public ocaml-expect
2648 (package
2649 (name "ocaml-expect")
564cf93f 2650 (version "0.0.6")
3763eea7
JL
2651 (source (origin
2652 (method url-fetch)
564cf93f 2653 (uri (ocaml-forge-uri name version 1736))
3763eea7
JL
2654 (sha256
2655 (base32
564cf93f
JL
2656 "098qvg9d4yrqzr5ax291y3whrpax0m3sx4gi6is0mblc96r9yqk0"))))
2657 (arguments
2658 `(#:tests? #f))
3763eea7
JL
2659 (build-system ocaml-build-system)
2660 (native-inputs
564cf93f
JL
2661 `(("ocamlbuild" ,ocamlbuild)
2662 ("ocaml-num" ,ocaml-num)
2663 ("ocaml-pcre" ,ocaml-pcre)
3763eea7
JL
2664 ("ounit" ,ocaml-ounit)))
2665 (propagated-inputs `(("batteries" ,ocaml-batteries)))
2666 (home-page "https://forge.ocamlcore.org/projects/ocaml-expect/")
2667 (synopsis "Simple implementation of expect")
2668 (description "Help building unitary testing of interactive program. You
2669can match the question using a regular expression or a timeout.")
2670 (license license:lgpl2.1+))) ; with the OCaml static compilation exception
77a515e9 2671
564cf93f 2672(define-public ocaml4.02-fileutils
77a515e9 2673 (package
564cf93f
JL
2674 (name "ocaml4.02-fileutils")
2675 (version "0.5.3")
77a515e9
JL
2676 (source (origin
2677 (method url-fetch)
564cf93f 2678 (uri (ocaml-forge-uri name version 1728))
77a515e9
JL
2679 (sha256
2680 (base32
564cf93f 2681 "1rc4cqlvdhbs55i85zfbfhz938fsy4fj6kwlkfm3ra7bpwn8bmpd"))))
77a515e9 2682 (build-system ocaml-build-system)
564cf93f
JL
2683 (arguments
2684 `(#:ocaml ,ocaml-4.02
2685 #:findlib ,ocaml4.02-findlib))
2686 (native-inputs
2687 `(("ounit" ,ocaml4.02-ounit)))
77a515e9
JL
2688 (home-page "http://ocaml-fileutils.forge.ocamlcore.org")
2689 (synopsis "Pure OCaml functions to manipulate real file and filename")
2690 (description "Library to provide pure OCaml functions to manipulate real
2691file (POSIX like) and filename.")
2692 (license license:lgpl2.1+))) ; with the OCaml static compilation exception
5eed45a8
JL
2693
2694(define-public ocaml-oasis
2695 (package
2696 (name "ocaml-oasis")
564cf93f 2697 (version "0.4.11")
5eed45a8
JL
2698 (source (origin
2699 (method url-fetch)
564cf93f 2700 (uri (ocaml-forge-uri name version 1757))
5eed45a8
JL
2701 (sha256
2702 (base32
564cf93f 2703 "0bn13mzfa98dq3y0jwzzndl55mnywaxv693z6f1rlvpdykp3vdqq"))
5eed45a8
JL
2704 (modules '((guix build utils)))
2705 (snippet
6cbee49d
MW
2706 '(begin
2707 (substitute* "test/test-main/Test.ml"
2708 ;; most of these tests fail because ld cannot find crti.o, but according
2709 ;; to the log file, the environment variables {LD_,}LIBRARY_PATH
564cf93f 2710 ;; are set correctly when LD_LIBRARY_PATH is defined beforhand.
6cbee49d
MW
2711 (("TestBaseCompat.tests;") "")
2712 (("TestExamples.tests;") "")
2713 (("TestFull.tests;") "")
2714 (("TestPluginDevFiles.tests;") "")
2715 (("TestPluginInternal.tests;") "")
2716 (("TestPluginOCamlbuild.tests;") "")
2717 (("TestPluginOMake.tests;") ""))
2718 #t))))
5eed45a8 2719 (build-system ocaml-build-system)
564cf93f
JL
2720 (arguments
2721 `(#:tests? #f))
5eed45a8 2722 (native-inputs
564cf93f
JL
2723 `(("ocamlbuild" ,ocamlbuild)
2724 ("ocamlify" ,ocamlify)
2725 ("ocamlmod" ,ocamlmod)))
5eed45a8
JL
2726 (home-page "https://oasis.forge.ocamlcore.org")
2727 (synopsis "Integrates a configure, build, install system in OCaml projects")
2728 (description "OASIS is a tool to integrate a configure, build and install
2729system in your OCaml projects. It helps to create standard entry points in your
2730build system and allows external tools to analyse your project easily.")
2731 (license license:lgpl2.1+))) ; with ocaml static compilation exception
f95ebba5 2732
564cf93f
JL
2733(define-public ocaml4.02-oasis
2734 (package-with-ocaml4.02 ocaml-oasis))
2735
f95ebba5
JL
2736(define-public ocaml-js-build-tools
2737 (package
2738 (name "ocaml-js-build-tools")
2739 (version "113.33.06")
2740 (source (janestreet-origin "js-build-tools" version
2741 "0r8z4fz8iy5y6hkdlkpwf6rk4qigcr3dzyv35585xgg2ahf12zy6"))
2742 (native-inputs
2743 `(("oasis" ,ocaml-oasis)
564cf93f 2744 ("ocamlbuild" ,ocamlbuild)
f95ebba5
JL
2745 ("opam" ,opam)))
2746 (build-system ocaml-build-system)
2747 (arguments janestreet-arguments)
2748 (home-page "https://github.com/janestreet/js-build-tools")
2749 (synopsis "Collection of tools to help building Jane Street Packages")
2750 (description "This package contains tools to help building Jane Street
2751packages, but can be used for other purposes. It contains:
2752@enumerate
2753@item an @command{oasis2opam-install} tool to produce a @file{.install} file
2754from the oasis build log
2755@item a @code{js_build_tools} ocamlbuild plugin with various goodies.
2756@end enumerate")
2757 (license license:asl2.0)))
f5c8cf3b 2758
564cf93f
JL
2759(define-public ocaml4.02-js-build-tools
2760 (package-with-ocaml4.02 ocaml-js-build-tools))
2761
2762(define-public ocaml4.02-bin-prot
f5c8cf3b 2763 (package
564cf93f 2764 (name "ocaml4.02-bin-prot")
f5c8cf3b
JL
2765 (version "113.33.03")
2766 (source (janestreet-origin "bin_prot" version
2767 "1ws8c017z8nbj3vw92ndvjk9011f71rmp3llncbv8r5fc76wqv3l"))
564cf93f 2768 (build-system ocaml-build-system)
f5c8cf3b 2769 (native-inputs
564cf93f 2770 `(("js-build-tools" ,ocaml4.02-js-build-tools)
f5c8cf3b 2771 ("opam" ,opam)))
564cf93f
JL
2772 (arguments
2773 (ensure-keyword-arguments janestreet-arguments
2774 `(#:ocaml ,ocaml-4.02
2775 #:findlib ,ocaml4.02-findlib)))
f5c8cf3b
JL
2776 (home-page "https://github.com/janestreet/bin_prot/")
2777 (synopsis "Binary protocol generator")
2778 (description "This library contains functionality for reading and writing
2779OCaml-values in a type-safe binary protocol. It is extremely efficient,
2780typically supporting type-safe marshalling and unmarshalling of even highly
2781structured values at speeds sufficient to saturate a gigabit connection. The
2782protocol is also heavily optimized for size, making it ideal for long-term
2783storage of large amounts of data.")
2784 (license license:asl2.0)))
6bdf77a2 2785
564cf93f 2786(define-public ocaml4.02-fieldslib
6bdf77a2 2787 (package
564cf93f 2788 (name "ocaml4.02-fieldslib")
6bdf77a2
JL
2789 (version "113.33.03")
2790 (source (janestreet-origin "fieldslib" version
2791 "1rm3bn54bzk2hlq8f3w067ak8s772w4a8f78i3yh79vxfzq8ncvv"))
564cf93f 2792 (build-system ocaml-build-system)
6bdf77a2 2793 (native-inputs
564cf93f 2794 `(("js-build-tools" ,ocaml4.02-js-build-tools)
6bdf77a2 2795 ("opam" ,opam)))
564cf93f
JL
2796 (arguments
2797 (ensure-keyword-arguments janestreet-arguments
2798 `(#:ocaml ,ocaml-4.02
2799 #:findlib ,ocaml4.02-findlib)))
6bdf77a2
JL
2800 (home-page "https://github.com/janestreet/fieldslib/")
2801 (synopsis "Syntax extension to record fields")
2802 (description "Syntax extension to define first class values representing
2803record fields, to get and set record fields, iterate and fold over all fields
2804of a record and create new record values.")
2805 (license license:asl2.0)))
c3339950 2806
564cf93f 2807(define-public ocaml4.02-ppx-core
c3339950 2808 (package
564cf93f 2809 (name "ocaml4.02-ppx-core")
c3339950
JL
2810 (version "113.33.03")
2811 (source (janestreet-origin "ppx_core" version
2812 "0f69l4czhgssnhb5ds2j9dbqjyz8dp1y3i3x0i4h6pxnms20zbxa"))
2813 (build-system ocaml-build-system)
2814 (native-inputs
564cf93f 2815 `(("js-build-tools" ,ocaml4.02-js-build-tools)
c3339950 2816 ("opam" ,opam)))
564cf93f
JL
2817 (inputs `(("ppx-tools" ,ocaml4.02-ppx-tools)))
2818 (arguments
2819 (ensure-keyword-arguments janestreet-arguments
2820 `(#:ocaml ,ocaml-4.02
2821 #:findlib ,ocaml4.02-findlib)))
c3339950
JL
2822 (home-page "https://github.com/janestreet/ppx_core/")
2823 (synopsis "Standard library for ppx rewriters")
2824 (description "Ppx_core is a standard library for OCaml AST transformers.
2825It contains:
2826@enumerate
2827@item various auto-generated AST traversal using an open recursion scheme
2828@item helpers for building AST fragments
2829@item helpers for matching AST fragments
2830@item a framework for dealing with attributes and extension points.
2831@end enumerate")
2832 (license license:asl2.0)))
567b4e02 2833
564cf93f 2834(define-public ocaml4.02-ppx-optcomp
567b4e02 2835 (package
564cf93f 2836 (name "ocaml4.02-ppx-optcomp")
567b4e02
JL
2837 (version "113.33.03")
2838 (source (janestreet-origin "ppx_optcomp" version
2839 "13an8p2r7sd0d5lv54mlzrxdni47408bwqi3bjcx4m6005170q30"))
2840 (build-system ocaml-build-system)
2841 (native-inputs
564cf93f 2842 `(("js-build-tools" ,ocaml4.02-js-build-tools)
567b4e02
JL
2843 ("opam" ,opam)))
2844 (propagated-inputs
564cf93f
JL
2845 `(("ppx-tools" ,ocaml4.02-ppx-tools)
2846 ("ppx-core" ,ocaml4.02-ppx-core)))
2847 (arguments
2848 (ensure-keyword-arguments janestreet-arguments
2849 `(#:ocaml ,ocaml-4.02
2850 #:findlib ,ocaml4.02-findlib)))
567b4e02
JL
2851 (home-page "https://github.com/janestreet/ppx_optcomp/")
2852 (synopsis "Optional compilation for OCaml")
2853 (description "Ppx_optcomp stands for Optional Compilation. It is a tool
2854used to handle optional compilations of pieces of code depending of the word
2855size, the version of the compiler, ...")
2856 (license license:asl2.0)))
9e568786 2857
564cf93f 2858(define-public ocaml4.02-ppx-driver
9e568786 2859 (package
564cf93f 2860 (name "ocaml4.02-ppx-driver")
9e568786
JL
2861 (version "113.33.03")
2862 (source (janestreet-origin "ppx_driver" version
2863 "011zzr45897j49b7iiybb29k7pspcx36mlnp7nh6pxb8b0ga76fh"))
2864 (build-system ocaml-build-system)
2865 (native-inputs
564cf93f 2866 `(("js-build-tools" ,ocaml4.02-js-build-tools)
9e568786 2867 ("opam" ,opam)
564cf93f 2868 ("ppx-optcomp" ,ocaml4.02-ppx-optcomp)))
9e568786 2869 (propagated-inputs
564cf93f
JL
2870 `(("ppx-optcomp" ,ocaml4.02-ppx-optcomp)
2871 ("ppx-core" ,ocaml4.02-ppx-core)))
2872 (arguments
2873 (ensure-keyword-arguments janestreet-arguments
2874 `(#:ocaml ,ocaml-4.02
2875 #:findlib ,ocaml4.02-findlib)))
9e568786
JL
2876 (home-page "https://github.com/janestreet/ppx_driver/")
2877 (synopsis "Feature-full driver for OCaml AST transformers")
2878 (description "A driver is an executable created from a set of OCaml AST
2879transformers linked together with a command line frontend. The aim is to
2880provide a tool that can be used to:
2881@enumerate
2882@item easily view the pre-processed version of a file, no need to construct a
2883 complex command line: @command{ppx file.ml} will do
2884@item use a single executable to run several transformations: no need to fork
2885 many times just for pre-processing
2886@item improved errors for misspelled/misplaced attributes and extension points.
2887@end enumerate")
2888 (license license:asl2.0)))
f6dde36a
JL
2889
2890(define-public ocaml-cppo
2891 (package
2892 (name "ocaml-cppo")
564cf93f 2893 (version "1.6.5")
f6dde36a
JL
2894 (source
2895 (origin
2896 (method url-fetch)
2897 (uri (string-append "https://github.com/mjambon/cppo/archive/v" version
2898 ".tar.gz"))
2899 (sha256 (base32
564cf93f 2900 "1dkm3d5h6h56y937gcdk2wixlpzl59vv5pmiafglr89p20kf7gqf"))
f6dde36a 2901 (file-name (string-append name "-" version ".tar.gz"))))
48b27902 2902 (build-system dune-build-system)
f6dde36a 2903 (arguments
48b27902
JL
2904 `(#:tests? #f
2905 #:build-flags (list "--profile" "release")))
564cf93f 2906 (native-inputs
48b27902 2907 `(("ocamlbuild" ,ocamlbuild)))
f6dde36a
JL
2908 (home-page "https://github.com/mjambon/cppo")
2909 (synopsis "Equivalent of the C preprocessor for OCaml programs")
2910 (description "Cppo is an equivalent of the C preprocessor for OCaml
2911programs. It allows the definition of simple macros and file inclusion. Cpp ois:
2912@enumerate
2913@item more OCaml-friendly than cpp
2914@item easy to learn without consulting a manual
2915@item reasonably fast
2916@item simple to install and to maintain.
2917@end enumerate")
2918 (license license:bsd-3)))
505394d1 2919
564cf93f
JL
2920(define-public ocaml4.02-cppo
2921 (package-with-ocaml4.02 ocaml-cppo))
2922
505394d1
JL
2923;; this package is not reproducible. This is related to temporary filenames
2924;; such as findlib_initxxxxx where xxxxx is random.
564cf93f 2925(define-public ocaml4.02-ppx-deriving
505394d1 2926 (package
564cf93f 2927 (name "ocaml4.02-ppx-deriving")
505394d1
JL
2928 (version "4.1")
2929 (source
2930 (origin
2931 (method url-fetch)
2932 (uri (string-append "https://github.com/whitequark/ppx_deriving//archive/v"
2933 version ".tar.gz"))
2934 (sha256 (base32
2935 "1fr16g121j6zinwcprzlhx2py4271n9jzs2m9hq2f3qli2b1p0vl"))
2936 (file-name (string-append name "-" version ".tar.gz"))))
2937 (build-system ocaml-build-system)
2938 (native-inputs
564cf93f
JL
2939 `(("js-build-tools" ,ocaml4.02-js-build-tools)
2940 ("cppo" ,ocaml4.02-cppo)
2941 ("ounit" ,ocaml4.02-ounit)
505394d1
JL
2942 ("opam" ,opam)))
2943 (propagated-inputs
564cf93f
JL
2944 `(("result" ,ocaml4.02-result)
2945 ("ppx-tools" ,ocaml4.02-ppx-tools)))
505394d1 2946 (arguments
564cf93f
JL
2947 `(#:ocaml ,ocaml-4.02
2948 #:findlib ,ocaml4.02-findlib
2949 #:phases
505394d1
JL
2950 (modify-phases %standard-phases
2951 (delete 'configure)
2952 (add-before 'install 'fix-environment
2953 (lambda* (#:key outputs #:allow-other-keys)
2954 ;; the installation procedures looks for the installed module
2955 (setenv "OCAMLPATH"
2956 (string-append (getenv "OCAMLPATH") ":"
2957 (getenv "OCAMLFIND_DESTDIR"))))))))
2958 (home-page "https://github.com/whitequark/ppx_deriving/")
2959 (synopsis "Type-driven code generation for OCaml >=4.02")
2960 (description "Ppx_deriving provides common infrastructure for generating
2961code based on type definitions, and a set of useful plugins for common tasks.")
2962 (license license:expat)))
e6515b55 2963
564cf93f 2964(define-public ocaml4.02-ppx-type-conv
e6515b55 2965 (package
564cf93f 2966 (name "ocaml4.02-ppx-type-conv")
e6515b55
JL
2967 (version "113.33.03")
2968 (source
2969 (janestreet-origin "ppx_type_conv" version
2970 "1sp602ads2f250nv4d4rgw54d14k7flyhb4w8ff084f657hhmxv2"))
2971 (build-system ocaml-build-system)
2972 (native-inputs
564cf93f 2973 `(("js-build-tools" ,ocaml4.02-js-build-tools)
e6515b55
JL
2974 ("opam" ,opam)))
2975 (propagated-inputs
564cf93f
JL
2976 `(("ppx-deriving" ,ocaml4.02-ppx-deriving)
2977 ("ppx-core" ,ocaml4.02-ppx-core)
2978 ("ppx-driver" ,ocaml4.02-ppx-driver)))
2979 (arguments
2980 (ensure-keyword-arguments janestreet-arguments
2981 `(#:ocaml ,ocaml-4.02
2982 #:findlib ,ocaml4.02-findlib)))
e6515b55
JL
2983 (home-page "https://github.com/janestreet/ppx_type_conv/")
2984 (synopsis "Support Library for type-driven code generators")
2985 (description "The type_conv library factors out functionality needed by
2986different preprocessors that generate code from type specifications.")
2987 (license license:asl2.0)))
be1e892d 2988
564cf93f 2989(define-public ocaml4.02-ppx-inline-test
be1e892d 2990 (package
564cf93f 2991 (name "ocaml4.02-ppx-inline-test")
be1e892d
JL
2992 (version "113.33.03")
2993 (source (janestreet-origin "ppx_inline_test" version
2994 "0859ni43fl39dd5g6cxfhq0prxmx59bd2bfq8jafp593ba4q0icq"))
2995 (build-system ocaml-build-system)
2996 (native-inputs
564cf93f 2997 `(("js-build-tools" ,ocaml4.02-js-build-tools)
be1e892d 2998 ("opam" ,opam)
564cf93f 2999 ("ppx-core" ,ocaml4.02-ppx-core)))
be1e892d 3000 (propagated-inputs
564cf93f
JL
3001 `(("ppx-driver" ,ocaml4.02-ppx-driver)
3002 ("ppx-tools" ,ocaml4.02-ppx-tools)
3003 ("ppx-core" ,ocaml4.02-ppx-core)))
3004 (arguments
3005 (ensure-keyword-arguments janestreet-arguments
3006 `(#:ocaml ,ocaml-4.02
3007 #:findlib ,ocaml4.02-findlib)))
be1e892d
JL
3008 (home-page "https://github.com/janestreet/ppx_inline_test/")
3009 (synopsis "Syntax extension for writing in-line tests in ocaml code")
3010 (description "Syntax extension for writing in-line tests in ocaml code.")
3011 (license license:asl2.0)))
9a63fef9 3012
564cf93f 3013(define-public ocaml4.02-ppx-bench
9a63fef9 3014 (package
564cf93f 3015 (name "ocaml4.02-ppx-bench")
9a63fef9
JL
3016 (version "113.33.03")
3017 (source (janestreet-origin "ppx_bench" version
3018 "1hky3y17qpb925rymf97wv54di9gaqdmkix7wpkjw14qzl512b68"))
3019 (build-system ocaml-build-system)
3020 (native-inputs
564cf93f 3021 `(("js-build-tools" ,ocaml4.02-js-build-tools)
9a63fef9 3022 ("opam" ,opam)
564cf93f 3023 ("ppx-core" ,ocaml4.02-ppx-core)))
9a63fef9 3024 (propagated-inputs
564cf93f
JL
3025 `(("ppx-driver" ,ocaml4.02-ppx-driver)
3026 ("ppx-tools" ,ocaml4.02-ppx-tools)
3027 ("ppx-inline-test" ,ocaml4.02-ppx-inline-test)
3028 ("ppx-core" ,ocaml4.02-ppx-core)))
3029 (arguments
3030 (ensure-keyword-arguments janestreet-arguments
3031 `(#:ocaml ,ocaml-4.02
3032 #:findlib ,ocaml4.02-findlib)))
9a63fef9
JL
3033 (home-page "https://github.com/janestreet/ppx_bench/")
3034 (synopsis "Syntax extension for writing in-line benchmarks in ocaml code")
3035 (description "Syntax extension for writing in-line benchmarks in ocaml code.")
3036 (license license:asl2.0)))
953ecc04 3037
564cf93f 3038(define-public ocaml4.02-ppx-compare
953ecc04 3039 (package
564cf93f 3040 (name "ocaml4.02-ppx-compare")
953ecc04
JL
3041 (version "113.33.03")
3042 (source (janestreet-origin "ppx_compare" version
3043 "0bfhi33kq9l4q6zzc6svki2csracz5j4731c3npcy6cs73jynn0z"))
3044 (build-system ocaml-build-system)
3045 (native-inputs
564cf93f 3046 `(("js-build-tools" ,ocaml4.02-js-build-tools)
953ecc04 3047 ("opam" ,opam)
564cf93f 3048 ("ppx-core" ,ocaml4.02-ppx-core)))
953ecc04 3049 (propagated-inputs
564cf93f
JL
3050 `(("ppx-driver" ,ocaml4.02-ppx-driver)
3051 ("ppx-tools" ,ocaml4.02-ppx-tools)
3052 ("ppx-core" ,ocaml4.02-ppx-core)
3053 ("ppx-type-conv" ,ocaml4.02-ppx-type-conv)))
3054 (arguments
3055 (ensure-keyword-arguments janestreet-arguments
3056 `(#:ocaml ,ocaml-4.02
3057 #:findlib ,ocaml4.02-findlib)))
953ecc04
JL
3058 (home-page "https://github.com/janestreet/ppx_compare/")
3059 (synopsis "Generation of comparison functions from types")
3060 (description "Generation of fast comparison functions from type expressions
3061and definitions. Ppx_compare is a ppx rewriter that derives comparison functions
3062from type representations. The scaffolded functions are usually much faster
3063than ocaml's Pervasives.compare. Scaffolding functions also gives you more
3064flexibility by allowing you to override them for a specific type and more safety
3065by making sure that you only compare comparable values.")
3066 (license license:asl2.0)))
d19c1b41 3067
564cf93f 3068(define-public ocaml4.02-sexplib
d19c1b41 3069 (package
564cf93f 3070 (name "ocaml4.02-sexplib")
d19c1b41
JL
3071 (version "113.33.03")
3072 (source (janestreet-origin "sexplib" version
3073 "1ffjmj8if9lyv965cgn2ld1xv7g52qsr8mqflbm515ck1i8l2ima"))
3074 (build-system ocaml-build-system)
3075 (native-inputs
564cf93f 3076 `(("js-build-tools" ,ocaml4.02-js-build-tools)
d19c1b41 3077 ("opam" ,opam)))
564cf93f
JL
3078 (arguments
3079 (ensure-keyword-arguments janestreet-arguments
3080 `(#:ocaml ,ocaml-4.02
3081 #:findlib ,ocaml4.02-findlib)))
d19c1b41
JL
3082 (home-page "https://github.com/janestreet/sexplib/")
3083 (synopsis "Library for serializing OCaml values to and from S-expressions")
3084 (description "Sexplib contains functionality for parsing and pretty-printing
3085s-expressions.")
3086 (license license:asl2.0)))
ef0051b2 3087
564cf93f 3088(define-public ocaml4.02-typerep
ef0051b2 3089 (package
564cf93f 3090 (name "ocaml4.02-typerep")
ef0051b2
JL
3091 (version "113.33.03")
3092 (source (janestreet-origin "typerep" version
3093 "1b9v5bmi824a9d4sx0f40ixq0yfcbiqxafg4a1jx95xg9199zafy"))
564cf93f 3094 (build-system ocaml-build-system)
ef0051b2 3095 (native-inputs
564cf93f 3096 `(("js-build-tools" ,ocaml4.02-js-build-tools)
ef0051b2 3097 ("opam" ,opam)))
564cf93f
JL
3098 (arguments
3099 (ensure-keyword-arguments janestreet-arguments
3100 `(#:ocaml ,ocaml-4.02
3101 #:findlib ,ocaml4.02-findlib)))
ef0051b2
JL
3102 (home-page "https://github.com/janestreet/typerep/")
3103 (synopsis "Typerep is a library for runtime types")
3104 (description "Typerep is a library for runtime types.")
3105 (license license:asl2.0)))
d1d90df6 3106
564cf93f 3107(define-public ocaml4.02-variantslib
d1d90df6 3108 (package
564cf93f 3109 (name "ocaml4.02-variantslib")
d1d90df6
JL
3110 (version "113.33.03")
3111 (source (janestreet-origin "variantslib" version
3112 "05vp799vl38fvl98ga5miwbzh09cnnpapi6q6gdvwyqi6w7s919n"))
564cf93f 3113 (build-system ocaml-build-system)
d1d90df6 3114 (native-inputs
564cf93f 3115 `(("js-build-tools" ,ocaml4.02-js-build-tools)
d1d90df6 3116 ("opam" ,opam)))
564cf93f
JL
3117 (arguments
3118 (ensure-keyword-arguments janestreet-arguments
3119 `(#:ocaml ,ocaml-4.02
3120 #:findlib ,ocaml4.02-findlib)))
d1d90df6
JL
3121 (home-page "https://github.com/janestreet/variantslib")
3122 (synopsis "OCaml variants as first class values")
3123 (description "OCaml variants as first class values.")
3124 (license license:asl2.0)))
334436f0 3125
564cf93f 3126(define-public ocaml4.02-ppx-sexp-conv
334436f0 3127 (package
564cf93f 3128 (name "ocaml4.02-ppx-sexp-conv")
334436f0
JL
3129 (version "113.33.03")
3130 (source (janestreet-origin "ppx_sexp_conv" version
3131 "1rbj6d5dl625gdxih34xcrdvikci6h8i2dl9x3wraa4qrgishiw7"))
3132 (build-system ocaml-build-system)
3133 (native-inputs
564cf93f 3134 `(("js-build-tools" ,ocaml4.02-js-build-tools)
334436f0 3135 ("opam" ,opam)
564cf93f 3136 ("ppx-core" ,ocaml4.02-ppx-core)))
334436f0 3137 (propagated-inputs
564cf93f
JL
3138 `(("sexplib" ,ocaml4.02-sexplib)
3139 ("ppx-core" ,ocaml4.02-ppx-core)
3140 ("ppx-type-conv" ,ocaml4.02-ppx-type-conv)
3141 ("ppx-tools" ,ocaml4.02-ppx-tools)))
3142 (arguments
3143 (ensure-keyword-arguments janestreet-arguments
3144 `(#:ocaml ,ocaml-4.02
3145 #:findlib ,ocaml4.02-findlib)))
334436f0
JL
3146 (home-page "https://github.com/janestreet/ppx_sexp_conv")
3147 (synopsis "Generation of S-expression conversion functions from type definitions")
3148 (description "Generation of S-expression conversion functions from type
3149definitions.")
3150 (license license:asl2.0)))
14af90cf 3151
564cf93f 3152(define-public ocaml4.02-ppx-variants-conv
14af90cf 3153 (package
564cf93f 3154 (name "ocaml4.02-ppx-variants-conv")
14af90cf
JL
3155 (version "113.33.03")
3156 (source (janestreet-origin "ppx_variants_conv" version
3157 "0vnn2l1118cj72413d3f7frlw6yc09l8f64jlzkzbgb9bxpalx34"))
3158 (build-system ocaml-build-system)
3159 (native-inputs
564cf93f 3160 `(("js-build-tools" ,ocaml4.02-js-build-tools)
14af90cf
JL
3161 ("opam" ,opam)))
3162 (propagated-inputs
564cf93f
JL
3163 `(("ppx-core" ,ocaml4.02-ppx-core)
3164 ("variantslib" ,ocaml4.02-variantslib)
3165 ("ppx-tools" ,ocaml4.02-ppx-tools)
3166 ("ppx-type-conv" ,ocaml4.02-ppx-type-conv)))
3167 (arguments
3168 (ensure-keyword-arguments janestreet-arguments
3169 `(#:ocaml ,ocaml-4.02
3170 #:findlib ,ocaml4.02-findlib)))
14af90cf
JL
3171 (home-page "https://github.com/janestreet/ppx_variants_conv")
3172 (synopsis "Generation of accessor and iteration functions for ocaml variant
3173types")
3174 (description "Generation of accessor and iteration functions for ocaml
3175variant types.")
3176 (license license:asl2.0)))
651563bd 3177
564cf93f 3178(define-public ocaml4.02-ppx-here
651563bd 3179 (package
564cf93f 3180 (name "ocaml4.02-ppx-here")
651563bd
JL
3181 (version "113.33.03")
3182 (source (janestreet-origin "ppx_here" version
3183 "1ay8lfxi0qg3ib2zkwh4h0vqk3gjmxaz572gzab0bbxyqn3z86v7"))
3184 (build-system ocaml-build-system)
3185 (native-inputs
564cf93f 3186 `(("js-build-tools" ,ocaml4.02-js-build-tools)
651563bd
JL
3187 ("opam" ,opam)))
3188 (propagated-inputs
564cf93f
JL
3189 `(("ppx-driver" ,ocaml4.02-ppx-driver)
3190 ("ppx-core" ,ocaml4.02-ppx-core)))
3191 (arguments
3192 (ensure-keyword-arguments janestreet-arguments
3193 `(#:ocaml ,ocaml-4.02
3194 #:findlib ,ocaml4.02-findlib)))
651563bd
JL
3195 (home-page "https://github.com/janestreet/ppx_here")
3196 (synopsis "Expands [%here] into its location")
3197 (description "Expands [%here] into its location.")
3198 (license license:asl2.0)))
a43160ee 3199
564cf93f 3200(define-public ocaml4.02-ppx-assert
a43160ee 3201 (package
564cf93f 3202 (name "ocaml4.02-ppx-assert")
a43160ee
JL
3203 (version "113.33.03")
3204 (source (janestreet-origin "ppx_assert" version
3205 "1k5kxmqkibp5fk25pgz81f3c1r4mgvb5byzf6bnmxd24y60wn46p"))
3206 (build-system ocaml-build-system)
3207 (native-inputs
564cf93f 3208 `(("js-build-tools" ,ocaml4.02-js-build-tools)
a43160ee
JL
3209 ("opam" ,opam)))
3210 (propagated-inputs
564cf93f
JL
3211 `(("ppx-compare" ,ocaml4.02-ppx-compare)
3212 ("ppx-core" ,ocaml4.02-ppx-core)
3213 ("ppx-driver" ,ocaml4.02-ppx-driver)
3214 ("ppx-sexp-conv" ,ocaml4.02-ppx-sexp-conv)
3215 ("ppx-tools" ,ocaml4.02-ppx-tools)
3216 ("ppx-type-conv" ,ocaml4.02-ppx-type-conv)
3217 ("ppx-sexplib" ,ocaml4.02-sexplib)
3218 ("ppx-here" ,ocaml4.02-ppx-here)))
3219 (arguments
3220 (ensure-keyword-arguments janestreet-arguments
3221 `(#:ocaml ,ocaml-4.02
3222 #:findlib ,ocaml4.02-findlib)))
a43160ee
JL
3223 (home-page "https://github.com/janestreet/ppx_assert")
3224 (synopsis "Assert-like extension nodes that raise useful errors on failure")
3225 (description "Assert-like extension nodes that raise useful errors on failure.")
3226 (license license:asl2.0)))
250ac438 3227
564cf93f 3228(define-public ocaml4.02-ppx-enumerate
250ac438 3229 (package
564cf93f 3230 (name "ocaml4.02-ppx-enumerate")
250ac438
JL
3231 (version "113.33.03")
3232 (source (janestreet-origin "ppx_enumerate" version
3233 "15g7yfv9wg2h9r6k6q1zrhygmsl4xrfn25mrb0i4czjjivzmxjh4"))
3234 (build-system ocaml-build-system)
3235 (native-inputs
564cf93f 3236 `(("js-build-tools" ,ocaml4.02-js-build-tools)
250ac438
JL
3237 ("opam" ,opam)))
3238 (propagated-inputs
564cf93f
JL
3239 `(("ppx-tools" ,ocaml4.02-ppx-tools)
3240 ("ppx-type-conv" ,ocaml4.02-ppx-type-conv)
3241 ("ppx-core" ,ocaml4.02-ppx-core)))
3242 (arguments
3243 (ensure-keyword-arguments janestreet-arguments
3244 `(#:ocaml ,ocaml-4.02
3245 #:findlib ,ocaml4.02-findlib)))
250ac438
JL
3246 (home-page "https://github.com/janestreet/ppx_enumerate")
3247 (synopsis "Generate a list containing all values of a finite type")
3248 (description "Ppx_enumerate is a ppx rewriter which generates a definition
3249for the list of all values of a type (for a type which only has finitely
3250many values).")
3251 (license license:asl2.0)))
d2203187 3252
564cf93f 3253(define-public ocaml4.02-ppx-let
d2203187 3254 (package
564cf93f 3255 (name "ocaml4.02-ppx-let")
d2203187
JL
3256 (version "113.33.03")
3257 (source (janestreet-origin "ppx_let" version
3258 "0gd6d3gdaqfwjcs7gaw1qxc30i584q6a86ndaj1bx1q63xqd6yx9"))
3259 (build-system ocaml-build-system)
3260 (native-inputs
564cf93f 3261 `(("js-build-tools" ,ocaml4.02-js-build-tools)
d2203187
JL
3262 ("opam" ,opam)))
3263 (propagated-inputs
564cf93f
JL
3264 `(("ppx-driver" ,ocaml4.02-ppx-driver)
3265 ("ppx-core" ,ocaml4.02-ppx-core)))
3266 (arguments
3267 (ensure-keyword-arguments janestreet-arguments
3268 `(#:ocaml ,ocaml-4.02
3269 #:findlib ,ocaml4.02-findlib)))
d2203187
JL
3270 (home-page "https://github.com/janestreet/ppx_let")
3271 (synopsis "Monadic let-bindings")
3272 (description "A ppx rewriter for monadic and applicative let bindings,
3273match expressions, and if expressions.")
3274 (license license:asl2.0)))
edda7ebe 3275
564cf93f 3276(define-public ocaml4.02-ppx-typerep-conv
edda7ebe 3277 (package
564cf93f 3278 (name "ocaml4.02-ppx-typerep-conv")
edda7ebe
JL
3279 (version "113.33.03")
3280 (source (janestreet-origin "ppx_typerep_conv" version
3281 "0g0xqm9s1b2jjvxb8yp69281q2s3bwz6sibn10fvgcdawpa0rmrg"))
3282 (build-system ocaml-build-system)
3283 (native-inputs
564cf93f 3284 `(("js-build-tools" ,ocaml4.02-js-build-tools)
edda7ebe
JL
3285 ("opam" ,opam)))
3286 (propagated-inputs
564cf93f
JL
3287 `(("ppx-tools" ,ocaml4.02-ppx-tools)
3288 ("ppx-type-conv" ,ocaml4.02-ppx-type-conv)
3289 ("ppx-core" ,ocaml4.02-ppx-core)
3290 ("typerep" ,ocaml4.02-typerep)))
3291 (arguments
3292 (ensure-keyword-arguments janestreet-arguments
3293 `(#:ocaml ,ocaml-4.02
3294 #:findlib ,ocaml4.02-findlib)))
edda7ebe
JL
3295 (home-page "https://github.com/janestreet/ppx_typerep_conv")
3296 (synopsis "Generation of runtime types from type declarations")
3297 (description "Automatic generation of runtime types from type definitions.")
3298 (license license:asl2.0)))
25941ca1 3299
564cf93f 3300(define-public ocaml4.02-ppx-sexp-value
25941ca1 3301 (package
564cf93f 3302 (name "ocaml4.02-ppx-sexp-value")
25941ca1
JL
3303 (version "113.33.03")
3304 (source (janestreet-origin "ppx_sexp_value" version
3305 "0m3ag23mbqm0i2pv1dzilfks15ipa5q60mf57a0cd3p0pvarq10g"))
3306 (build-system ocaml-build-system)
3307 (native-inputs
564cf93f 3308 `(("js-build-tools" ,ocaml4.02-js-build-tools)
25941ca1
JL
3309 ("opam" ,opam)))
3310 (propagated-inputs
564cf93f
JL
3311 `(("ppx-driver" ,ocaml4.02-ppx-driver)
3312 ("ppx-here" ,ocaml4.02-ppx-here)
3313 ("ppx-sexp-conv" ,ocaml4.02-ppx-sexp-conv)
3314 ("ppx-tools" ,ocaml4.02-ppx-tools)
3315 ("ppx-core" ,ocaml4.02-ppx-core)))
3316 (arguments
3317 (ensure-keyword-arguments janestreet-arguments
3318 `(#:ocaml ,ocaml-4.02
3319 #:findlib ,ocaml4.02-findlib)))
25941ca1
JL
3320 (home-page "https://github.com/janestreet/ppx_sexp_value/")
3321 (synopsis "Simplify building s-expressions from ocaml values")
3322 (description "A ppx rewriter that simplifies building s-expressions from
3323ocaml values.")
3324 (license license:asl2.0)))
3674d7df 3325
564cf93f 3326(define-public ocaml4.02-ppx-pipebang
3674d7df 3327 (package
564cf93f 3328 (name "ocaml4.02-ppx-pipebang")
3674d7df
JL
3329 (version "113.33.03")
3330 (source (janestreet-origin "ppx_pipebang" version
3331 "1965c7hymp26ncmjs0pfxi2s5jlj60z2c9b194lgcwxqiav56pcw"))
3332 (build-system ocaml-build-system)
3333 (native-inputs
564cf93f 3334 `(("js-build-tools" ,ocaml4.02-js-build-tools)
3674d7df
JL
3335 ("opam" ,opam)))
3336 (propagated-inputs
564cf93f
JL
3337 `(("ppx-driver" ,ocaml4.02-ppx-driver)
3338 ("ppx-tools" ,ocaml4.02-ppx-tools)
3339 ("ppx-core" ,ocaml4.02-ppx-core)))
3340 (arguments
3341 (ensure-keyword-arguments janestreet-arguments
3342 `(#:ocaml ,ocaml-4.02
3343 #:findlib ,ocaml4.02-findlib)))
3674d7df
JL
3344 (home-page "https://github.com/janestreet/ppx_pipebang/")
3345 (synopsis "Inline reverse application operators `|>` and `|!`")
3346 (description "A ppx rewriter that inlines reverse application operators
3347@code{|>} and @code{|!}.")
3348 (license license:asl2.0)))
5d6d7ab0 3349
564cf93f 3350(define-public ocaml4.02-ppx-bin-prot
5d6d7ab0 3351 (package
564cf93f 3352 (name "ocaml4.02-ppx-bin-prot")
5d6d7ab0
JL
3353 (version "113.33.03")
3354 (source (janestreet-origin "ppx_bin_prot" version
3355 "173kjv36giik11zgfvsbzwfbpr66dm2pcha9vf990jgzh8hqz39h"))
3356 (build-system ocaml-build-system)
3357 (native-inputs
564cf93f 3358 `(("js-build-tools" ,ocaml4.02-js-build-tools)
5d6d7ab0
JL
3359 ("opam" ,opam)))
3360 (propagated-inputs
564cf93f
JL
3361 `(("bin-prot" ,ocaml4.02-bin-prot)
3362 ("ppx-tools" ,ocaml4.02-ppx-tools)
3363 ("ppx-type-conv" ,ocaml4.02-ppx-type-conv)
3364 ("ppx-core" ,ocaml4.02-ppx-core)))
3365 (arguments
3366 (ensure-keyword-arguments janestreet-arguments
3367 `(#:ocaml ,ocaml-4.02
3368 #:findlib ,ocaml4.02-findlib)))
5d6d7ab0
JL
3369 (home-page "https://github.com/janestreet/ppx_bin_prot/")
3370 (synopsis "Generation of bin_prot readers and writers from types")
3371 (description "Generation of binary serialization and deserialization
3372functions from type definitions.")
3373 (license license:asl2.0)))
7ea5acc6 3374
564cf93f 3375(define-public ocaml4.02-ppx-fail
7ea5acc6 3376 (package
564cf93f 3377 (name "ocaml4.02-ppx-fail")
7ea5acc6
JL
3378 (version "113.33.03")
3379 (source (janestreet-origin "ppx_fail" version
3380 "1dwgad0f05gqp5rnwf9dcasidpfi7q3mrpazsw3a2vijjblbhjgn"))
3381 (build-system ocaml-build-system)
3382 (native-inputs
564cf93f 3383 `(("js-build-tools" ,ocaml4.02-js-build-tools)
7ea5acc6
JL
3384 ("opam" ,opam)))
3385 (propagated-inputs
564cf93f
JL
3386 `(("ppx-driver" ,ocaml4.02-ppx-driver)
3387 ("ppx-tools" ,ocaml4.02-ppx-tools)
3388 ("ppx-here" ,ocaml4.02-ppx-here)
3389 ("ppx-core" ,ocaml4.02-ppx-core)))
3390 (arguments
3391 (ensure-keyword-arguments janestreet-arguments
3392 `(#:ocaml ,ocaml-4.02
3393 #:findlib ,ocaml4.02-findlib)))
7ea5acc6
JL
3394 (home-page "https://github.com/janestreet/ppx_fail/")
3395 (synopsis "Add location to calls to failwiths")
3396 (description "Syntax extension that makes [failwiths] always include a
3397position.")
3398 (license license:asl2.0)))
c64fecc2 3399
564cf93f 3400(define-public ocaml4.02-ppx-custom-printf
c64fecc2 3401 (package
564cf93f 3402 (name "ocaml4.02-ppx-custom-printf")
c64fecc2
JL
3403 (version "113.33.03")
3404 (source (janestreet-origin "ppx_custom_printf" version
3405 "11jlx0n87g2j1vyyp343dibx7lvvwig5j5q0nq0b80kbsq0k6yr8"))
3406 (build-system ocaml-build-system)
3407 (native-inputs
564cf93f 3408 `(("js-build-tools" ,ocaml4.02-js-build-tools)
c64fecc2
JL
3409 ("opam" ,opam)))
3410 (propagated-inputs
564cf93f
JL
3411 `(("ppx-sexp-conv" ,ocaml4.02-ppx-sexp-conv)
3412 ("ppx-tools" ,ocaml4.02-ppx-tools)
3413 ("ppx-core" ,ocaml4.02-ppx-core)
3414 ("ppx-driver" ,ocaml4.02-ppx-driver)))
3415 (arguments
3416 (ensure-keyword-arguments janestreet-arguments
3417 `(#:ocaml ,ocaml-4.02
3418 #:findlib ,ocaml4.02-findlib)))
c64fecc2
JL
3419 (home-page "https://github.com/janestreet/ppx_custom_printf/")
3420 (synopsis "Printf-style format-strings for user-defined string conversion")
3421 (description "Extensions to printf-style format-strings for user-defined
3422string conversion.")
3423 (license license:asl2.0)))
9b8bc957 3424
564cf93f 3425(define-public ocaml4.02-ppx-sexp-message
9b8bc957 3426 (package
564cf93f 3427 (name "ocaml4.02-ppx-sexp-message")
9b8bc957
JL
3428 (version "113.33.03")
3429 (source (janestreet-origin "ppx_sexp_message" version
3430 "084w1l3gnyw4ri9vbn7bv9b2xkw1520qczfxpxdarfivdrz8xr68"))
3431 (build-system ocaml-build-system)
3432 (native-inputs
564cf93f 3433 `(("js-build-tools" ,ocaml4.02-js-build-tools)
9b8bc957
JL
3434 ("opam" ,opam)))
3435 (propagated-inputs
564cf93f
JL
3436 `(("ppx-driver" ,ocaml4.02-ppx-driver)
3437 ("ppx-here" ,ocaml4.02-ppx-here)
3438 ("ppx-sexp-conv" ,ocaml4.02-ppx-sexp-conv)
3439 ("ppx-tools" ,ocaml4.02-ppx-tools)
3440 ("ppx-core" ,ocaml4.02-ppx-core)))
3441 (arguments
3442 (ensure-keyword-arguments janestreet-arguments
3443 `(#:ocaml ,ocaml-4.02
3444 #:findlib ,ocaml4.02-findlib)))
9b8bc957
JL
3445 (home-page "https://github.com/janestreet/ppx_sexp_message/")
3446 (synopsis "A ppx rewriter for easy construction of s-expressions")
3447 (description "Ppx_sexp_message aims to ease the creation of s-expressions
3448in OCaml. This is mainly motivated by writing error and debugging messages,
3449where one needs to construct a s-expression based on various element of the
3450context such as function arguments.")
3451 (license license:asl2.0)))
38cb1ec6 3452
564cf93f 3453(define-public ocaml4.02-ppx-fields-conv
38cb1ec6 3454 (package
564cf93f 3455 (name "ocaml4.02-ppx-fields-conv")
38cb1ec6
JL
3456 (version "113.33.03")
3457 (source (janestreet-origin "ppx_fields_conv" version
3458 "1vzbdz27g5qhhfs7wx6rjf979q4xyssxqbmp6sc1sxknbghslbdv"))
3459 (build-system ocaml-build-system)
3460 (native-inputs
564cf93f 3461 `(("js-build-tools" ,ocaml4.02-js-build-tools)
38cb1ec6 3462 ("opam" ,opam)
564cf93f 3463 ("ppx-core" ,ocaml4.02-ppx-core)))
38cb1ec6 3464 (propagated-inputs
564cf93f
JL
3465 `(("fieldslib" ,ocaml4.02-fieldslib)
3466 ("ppx-tools" ,ocaml4.02-ppx-tools)
3467 ("ppx-core" ,ocaml4.02-ppx-core)
3468 ("ppx-type-conv" ,ocaml4.02-ppx-type-conv)))
3469 (arguments
3470 (ensure-keyword-arguments janestreet-arguments
3471 `(#:ocaml ,ocaml-4.02
3472 #:findlib ,ocaml4.02-findlib)))
38cb1ec6
JL
3473 (home-page "https://github.com/janestreet/ppx_fields_conv/")
3474 (synopsis "Generation of accessor and iteration functions for ocaml records")
3475 (description "Ppx_fields_conv is a ppx rewriter that can be used to define
3476first class values representing record fields, and additional routines, to get
3477and set record fields, iterate and fold over all fields of a record and create
3478new record values.")
3479 (license license:asl2.0)))
f27522d6 3480
564cf93f
JL
3481(define-public ocaml-seq
3482 (package
3483 (name "ocaml-seq")
3484 (version "0.1")
3485 (source (origin
3486 (method url-fetch)
3487 (uri (string-append "https://github.com/c-cube/seq/archive/"
3488 version ".tar.gz"))
3489 (file-name (string-append name "-" version ".tar.gz"))
3490 (sha256
3491 (base32
3492 "02lb2d9i12bxrz2ba5wygk2bycan316skqlyri0597q7j9210g8r"))))
3493 (build-system ocaml-build-system)
3494 (arguments
3495 `(#:tests? #f
3496 #:phases
3497 (modify-phases %standard-phases
3498 (delete 'configure)
3499 (delete 'build)
3500 (replace 'install
3501 (lambda* (#:key outputs #:allow-other-keys)
3502 (let ((install-dir (string-append (assoc-ref outputs "out")
3503 "/lib/ocaml/site-lib/seq")))
3504 (mkdir-p install-dir)
3505 (with-output-to-file (string-append install-dir "/META")
3506 (lambda _
3507 (display "name=\"seq\"
3508version=\"[distributed with ocaml]\"
3509description=\"dummy package for compatibility\"
3510requires=\"\"")))
3511 #t))))))
3512 (properties
3513 `((ocaml4.02-variant . ,(delay ocaml4.02-seq))))
3514 (home-page "https://github.com/c-cube/seq")
3515 (synopsis "OCaml's standard iterator type")
3516 (description "This package is a compatibility package for OCaml's
3517standard iterator type starting from 4.07.")
3518 (license license:lgpl2.1+)))
3519
3520(define-public ocaml4.02-seq
3521 (let ((base (package-with-ocaml4.02 (strip-ocaml4.02-variant ocaml-seq))))
3522 (package
3523 (inherit base)
3524 (arguments
3525 `(#:ocaml ,ocaml-4.02
3526 #:findlib ,ocaml4.02-findlib
3527 #:tests? #f; no tests
3528 #:phases (modify-phases %standard-phases (delete 'configure)))))))
3529
f27522d6
JL
3530(define-public ocaml-re
3531 (package
3532 (name "ocaml-re")
564cf93f 3533 (version "1.8.0")
f27522d6
JL
3534 (source (origin
3535 (method url-fetch)
3536 (uri (string-append "https://github.com/ocaml/ocaml-re//archive/"
3537 version ".tar.gz"))
3538 (file-name (string-append name "-" version ".tar.gz"))
3539 (sha256
3540 (base32
564cf93f 3541 "1pdb0mr6z5ax6szblr3f5lbdnqq9grm97cmsfjmdma60yrx2rqhd"))))
d6fa189e 3542 (build-system dune-build-system)
564cf93f
JL
3543 (arguments
3544 `(#:tests? #f
d6fa189e 3545 #:build-flags (list "--profile" "release")))
564cf93f
JL
3546 (propagated-inputs
3547 `(("ocaml-seq" ,ocaml-seq)))
3548 (native-inputs
d6fa189e 3549 `(("ounit" ,ocaml-ounit)))
f27522d6
JL
3550 (home-page "https://github.com/ocaml/ocaml-re/")
3551 (synopsis "Regular expression library for OCaml")
3552 (description "Pure OCaml regular expressions with:
3553@enumerate
3554@item Perl-style regular expressions (module Re_perl)
3555@item Posix extended regular expressions (module Re_posix)
3556@item Emacs-style regular expressions (module Re_emacs)
3557@item Shell-style file globbing (module Re_glob)
3558@item Compatibility layer for OCaml's built-in Str module (module Re_str)
3559@end enumerate")
3560 (license license:expat)))
5cd47fb0 3561
564cf93f
JL
3562(define-public ocaml4.02-re
3563 (package-with-ocaml4.02 ocaml-re))
3564
3565(define-public ocaml4.02-ppx-expect
5cd47fb0 3566 (package
564cf93f 3567 (name "ocaml4.02-ppx-expect")
5cd47fb0
JL
3568 (version "113.33.03")
3569 (source (janestreet-origin "ppx_expect" version
3570 "03sbs4s5i8l9syr45v25f5hzy7msd2b47k2a9wsq9m43d4imgkrc"))
3571 (build-system ocaml-build-system)
3572 (native-inputs
564cf93f 3573 `(("js-build-tools" ,ocaml4.02-js-build-tools)
5cd47fb0
JL
3574 ("opam" ,opam)))
3575 (propagated-inputs
564cf93f
JL
3576 `(("fieldslib" ,ocaml4.02-fieldslib)
3577 ("ppx-tools" ,ocaml4.02-ppx-tools)
3578 ("ppx-assert" ,ocaml4.02-ppx-assert)
3579 ("ppx-compare" ,ocaml4.02-ppx-compare)
3580 ("ppx-core" ,ocaml4.02-ppx-core)
3581 ("ppx-custom-printf" ,ocaml4.02-ppx-custom-printf)
3582 ("ppx-driver" ,ocaml4.02-ppx-driver)
3583 ("ppx-fields-conv" ,ocaml4.02-ppx-fields-conv)
3584 ("ppx-inline-test" ,ocaml4.02-ppx-inline-test)
3585 ("ppx-sexp-conv" ,ocaml4.02-ppx-sexp-conv)
3586 ("ppx-variants-conv" ,ocaml4.02-ppx-variants-conv)
3587 ("re" ,ocaml4.02-re)
3588 ("sexplib" ,ocaml4.02-sexplib)
3589 ("variantslib" ,ocaml4.02-variantslib)))
3590 (arguments
3591 (ensure-keyword-arguments janestreet-arguments
3592 `(#:ocaml ,ocaml-4.02
3593 #:findlib ,ocaml4.02-findlib)))
5cd47fb0
JL
3594 (home-page "https://github.com/janestreet/ppx_expect/")
3595 (synopsis "Cram like framework for OCaml")
3596 (description "Expect-test is a framework for writing tests in OCaml, similar
3597to Cram. Expect-tests mimic the existing inline tests framework with the
3598let%expect_test construct. The body of an expect-test can contain
3599output-generating code, interleaved with %expect extension expressions to denote
3600the expected output.")
3601 (license license:asl2.0)))
2f4c2df1 3602
564cf93f 3603(define-public ocaml4.02-ppx-jane
2f4c2df1 3604 (package
564cf93f 3605 (name "ocaml4.02-ppx-jane")
2f4c2df1
JL
3606 (version "113.33.03")
3607 (source (janestreet-origin "ppx_jane" version
3608 "0bjxkhmzgm6x9dcvjwybbccn34khbvyyjimcbaja30fp6qcqk5yl"))
3609 (build-system ocaml-build-system)
3610 (native-inputs
564cf93f 3611 `(("js-build-tools" ,ocaml4.02-js-build-tools)
2f4c2df1
JL
3612 ("opam" ,opam)))
3613 (propagated-inputs
564cf93f
JL
3614 `(("ppx-assert" ,ocaml4.02-ppx-assert)
3615 ("ppx-bench" ,ocaml4.02-ppx-bench)
3616 ("ppx-bin-prot" ,ocaml4.02-ppx-bin-prot)
3617 ("ppx-compare" ,ocaml4.02-ppx-compare)
3618 ("ppx-custom-printf" ,ocaml4.02-ppx-custom-printf)
3619 ("ppx-deriving" ,ocaml4.02-ppx-deriving)
3620 ("ppx-enumerate" ,ocaml4.02-ppx-enumerate)
3621 ("ppx-expect" ,ocaml4.02-ppx-expect)
3622 ("ppx-fail" ,ocaml4.02-ppx-fail)
3623 ("ppx-fields-conv" ,ocaml4.02-ppx-fields-conv)
3624 ("ppx-here" ,ocaml4.02-ppx-here)
3625 ("ppx-inline-test" ,ocaml4.02-ppx-inline-test)
3626 ("ppx-let" ,ocaml4.02-ppx-let)
3627 ("ppx-pipebang" ,ocaml4.02-ppx-pipebang)
3628 ("ppx-sexp-conv" ,ocaml4.02-ppx-sexp-conv)
3629 ("ppx-sexp-message" ,ocaml4.02-ppx-sexp-message)
3630 ("ppx-sexp-value" ,ocaml4.02-ppx-sexp-value)
3631 ("ppx-typerep-conv" ,ocaml4.02-ppx-typerep-conv)
3632 ("ppx-variants-conv" ,ocaml4.02-ppx-variants-conv)))
3633 (arguments
3634 (ensure-keyword-arguments janestreet-arguments
3635 `(#:ocaml ,ocaml-4.02
3636 #:findlib ,ocaml4.02-findlib)))
2f4c2df1
JL
3637 (home-page "https://github.com/janestreet/ppx_jane/")
3638 (synopsis "Standard Jane Street ppx rewriters")
3639 (description "Ppx_jane is a ppx_driver including all standard ppx rewriters.")
3640 (license license:asl2.0)))
52485163 3641
564cf93f 3642(define-public ocaml4.02-core-kernel
52485163 3643 (package
564cf93f 3644 (name "ocaml4.02-core-kernel")
52485163
JL
3645 (version "113.33.03")
3646 (source (janestreet-origin "core_kernel" version
3647 "0fl23jrwivixawhxinbwaw9cabqnzn7fini7dxpxjjvkxdc8ip5y"))
3648 (native-inputs
564cf93f
JL
3649 `(("js-build-tools" ,ocaml4.02-js-build-tools)
3650 ("ppx-jane" ,ocaml4.02-ppx-jane)
52485163
JL
3651 ("opam" ,opam)))
3652 (propagated-inputs
564cf93f
JL
3653 `(("bin_prot" ,ocaml4.02-bin-prot)
3654 ("ppx-assert" ,ocaml4.02-ppx-assert)
3655 ("ppx-bench" ,ocaml4.02-ppx-bench)
3656 ("ppx-driver" ,ocaml4.02-ppx-driver)
3657 ("ppx-expect" ,ocaml4.02-ppx-expect)
3658 ("ppx-inline-test" ,ocaml4.02-ppx-inline-test)
3659 ("typerep" ,ocaml4.02-typerep)
3660 ("sexplib" ,ocaml4.02-sexplib)
3661 ("variantslib" ,ocaml4.02-variantslib)
3662 ("result" ,ocaml4.02-result)
3663 ("fieldslib" ,ocaml4.02-fieldslib)))
52485163 3664 (build-system ocaml-build-system)
564cf93f
JL
3665 (arguments
3666 (ensure-keyword-arguments janestreet-arguments
3667 `(#:ocaml ,ocaml-4.02
3668 #:findlib ,ocaml4.02-findlib)))
52485163
JL
3669 (home-page "https://github.com/janestreet/core_kernel/")
3670 (synopsis "Portable standard library for OCaml")
3671 (description "Core is an alternative to the OCaml standard library.
3672
3673Core_kernel is the system-independent part of Core. It is aimed for cases when
3674the full Core is not available, such as in Javascript.")
3675 (license license:asl2.0)))
e31ee74d 3676
564cf93f 3677(define-public ocaml4.02-async-kernel
e31ee74d 3678 (package
564cf93f 3679 (name "ocaml4.02-async-kernel")
e31ee74d
JL
3680 (version "113.33.03")
3681 (source (janestreet-origin "async_kernel" version
3682 "04bjsaa23j831r09r38x6xx9nhryvp0z5ihickvhxqa4fb2snyvd"))
3683 (native-inputs
3684 `(("oasis" ,ocaml-oasis)
564cf93f
JL
3685 ("js-build-tools" ,ocaml4.02-js-build-tools)
3686 ("ppx-jane" ,ocaml4.02-ppx-jane)
e31ee74d
JL
3687 ("opam" ,opam)))
3688 (propagated-inputs
564cf93f 3689 `(("core-kernel" ,ocaml4.02-core-kernel)))
e31ee74d 3690 (build-system ocaml-build-system)
564cf93f
JL
3691 (arguments
3692 (ensure-keyword-arguments janestreet-arguments
3693 `(#:ocaml ,ocaml-4.02
3694 #:findlib ,ocaml4.02-findlib)))
e31ee74d
JL
3695 (home-page "https://github.com/janestreet/async_kernel/")
3696 (synopsis "Monadic concurrency library")
3697 (description "Async-kernel is a library for concurrent programming in OCaml.")
3698 (license license:asl2.0)))
cf28a731 3699
564cf93f 3700(define-public ocaml4.02-async-rpc-kernel
cf28a731 3701 (package
564cf93f 3702 (name "ocaml4.02-async-rpc-kernel")
cf28a731
JL
3703 (version "113.33.03")
3704 (source (janestreet-origin "async_rpc_kernel" version
3705 "0y97h9pkb00v7jpf87m8cbb0ffkclj9g26ph6sq97q8dpisnkjwh"))
3706 (native-inputs
3707 `(("oasis" ,ocaml-oasis)
564cf93f
JL
3708 ("js-build-tools" ,ocaml4.02-js-build-tools)
3709 ("ppx-jane" ,ocaml4.02-ppx-jane)
cf28a731
JL
3710 ("opam" ,opam)))
3711 (propagated-inputs
564cf93f 3712 `(("async-kernel" ,ocaml4.02-async-kernel)))
cf28a731 3713 (build-system ocaml-build-system)
564cf93f
JL
3714 (arguments
3715 (ensure-keyword-arguments janestreet-arguments
3716 `(#:ocaml ,ocaml-4.02
3717 #:findlib ,ocaml4.02-findlib)))
cf28a731
JL
3718 (home-page "https://github.com/janestreet/async_rpc_kernel/")
3719 (synopsis "Platform-independent core of the Async RPC library")
3720 (description "Async_rpc_kernel is the platform-independent core of
3721the Async RPC library.")
3722 (license license:asl2.0)))
4a5fd872 3723
564cf93f 3724(define-public ocaml4.02-core
4a5fd872 3725 (package
564cf93f 3726 (name "ocaml4.02-core")
4a5fd872
JL
3727 (version "113.33.03")
3728 (source (janestreet-origin "core" version
3729 "1znll157qg56g9d3247fjibv1hxv3r9wxgr4nhy19j2vzdh6a268"))
3730 (native-inputs
3731 `(("oasis" ,ocaml-oasis)
564cf93f
JL
3732 ("js-build-tools" ,ocaml4.02-js-build-tools)
3733 ("ppx-jane" ,ocaml4.02-ppx-jane)
4a5fd872
JL
3734 ("opam" ,opam)))
3735 (propagated-inputs
564cf93f 3736 `(("core-kernel" ,ocaml4.02-core-kernel)))
4a5fd872 3737 (build-system ocaml-build-system)
564cf93f
JL
3738 (arguments
3739 (ensure-keyword-arguments janestreet-arguments
3740 `(#:ocaml ,ocaml-4.02
3741 #:findlib ,ocaml4.02-findlib)))
4a5fd872
JL
3742 (home-page "https://github.com/janestreet/core/")
3743 (synopsis "Alternative to OCaml's standard library")
3744 (description "The Core suite of libraries is an alternative to OCaml's
3745standard library that was developed by Jane Street.")
3746 (license license:asl2.0)))
7f1620df 3747
564cf93f 3748(define-public ocaml4.02-async-unix
7f1620df 3749 (package
564cf93f 3750 (name "ocaml4.02-async-unix")
7f1620df
JL
3751 (version "113.33.03")
3752 (source (janestreet-origin "async_unix" version
3753 "1fwl0lfrizllcfjk8hk8m7lsz9ha2jg6qgk4gssfyz377qvpcq4h"))
3754 (native-inputs
3755 `(("oasis" ,ocaml-oasis)
564cf93f
JL
3756 ("js-build-tools" ,ocaml4.02-js-build-tools)
3757 ("ppx-jane" ,ocaml4.02-ppx-jane)
7f1620df
JL
3758 ("opam" ,opam)))
3759 (propagated-inputs
564cf93f
JL
3760 `(("async-kernel" ,ocaml4.02-async-kernel)
3761 ("core" ,ocaml4.02-core)))
7f1620df 3762 (build-system ocaml-build-system)
564cf93f
JL
3763 (arguments
3764 (ensure-keyword-arguments janestreet-arguments
3765 `(#:ocaml ,ocaml-4.02
3766 #:findlib ,ocaml4.02-findlib)))
7f1620df
JL
3767 (home-page "https://github.com/janestreet/async_unix")
3768 (synopsis "Asynchronous execution library for Unix")
3769 (description "Async_unix is an asynchronous execution library for Unix.")
3770 (license license:asl2.0)))
d7f6d048 3771
564cf93f 3772(define-public ocaml4.02-async-extra
d7f6d048 3773 (package
564cf93f 3774 (name "ocaml4.02-async-extra")
d7f6d048
JL
3775 (version "113.33.03")
3776 (source (janestreet-origin "async_extra" version
3777 "1si8jgiq5xh5sl9f2b7f9p17p7zx5h1pg557x2cxywi2x7pxqg4f"))
3778 (native-inputs
3779 `(("oasis" ,ocaml-oasis)
564cf93f
JL
3780 ("js-build-tools" ,ocaml4.02-js-build-tools)
3781 ("ppx-jane" ,ocaml4.02-ppx-jane)
d7f6d048
JL
3782 ("opam" ,opam)))
3783 (propagated-inputs
564cf93f
JL
3784 `(("async-rpc-kernel" ,ocaml4.02-async-rpc-kernel)
3785 ("async-unix" ,ocaml4.02-async-unix)
3786 ("core" ,ocaml4.02-core)))
d7f6d048 3787 (build-system ocaml-build-system)
564cf93f
JL
3788 (arguments
3789 (ensure-keyword-arguments janestreet-arguments
3790 `(#:ocaml ,ocaml-4.02
3791 #:findlib ,ocaml4.02-findlib)))
d7f6d048
JL
3792 (home-page "https://github.com/janestreet/async_extra")
3793 (synopsis "Extra functionnalities for the async library")
3794 (description "Async_extra provides additional functionnalities for the
3795async library.")
3796 (license license:asl2.0)))
84470902 3797
564cf93f 3798(define-public ocaml4.02-async
84470902 3799 (package
564cf93f 3800 (name "ocaml4.02-async")
84470902
JL
3801 (version "113.33.03")
3802 (source (janestreet-origin "async" version
3803 "0210fyhcs12kpmmd26015bgivkfd2wqkyn3c5wd7688d0f872y25"))
3804 (native-inputs
3805 `(("oasis" ,ocaml-oasis)
564cf93f
JL
3806 ("js-build-tools" ,ocaml4.02-js-build-tools)
3807 ("ppx-jane" ,ocaml4.02-ppx-jane)
84470902
JL
3808 ("opam" ,opam)))
3809 (propagated-inputs
564cf93f 3810 `(("async-extra" ,ocaml4.02-async-extra)))
84470902 3811 (build-system ocaml-build-system)
564cf93f
JL
3812 (arguments
3813 (ensure-keyword-arguments janestreet-arguments
3814 `(#:ocaml ,ocaml-4.02
3815 #:findlib ,ocaml4.02-findlib)))
84470902
JL
3816 (home-page "https://github.com/janestreet/async")
3817 (synopsis "Monadic concurrency library")
3818 (description "Async is a library for concurrent programming in OCaml.")
3819 (license license:asl2.0)))
9059d856
JL
3820
3821(define-public ocaml-ocplib-endian
3822 (package
3823 (name "ocaml-ocplib-endian")
3824 (version "1.0")
3825 (source (origin
3826 (method url-fetch)
3827 (uri (string-append "https://github.com/OCamlPro/ocplib-endian/"
3828 "archive/" version ".tar.gz"))
3829 (sha256
3830 (base32
3831 "0hwj09rnzjs0m0kazz5h2mgs6p95j0zlga8cda5srnzqmzhniwkn"))
3832 (file-name (string-append name "-" version ".tar.gz"))))
3833 (build-system ocaml-build-system)
564cf93f
JL
3834 (native-inputs
3835 `(("cppo" ,ocaml-cppo)
3836 ("ocamlbuild" ,ocamlbuild)))
9059d856
JL
3837 (home-page "https://github.com/OCamlPro/ocplib-endian")
3838 (synopsis "Optimised functions to read and write int16/32/64 from strings
3839and bigarrays")
3840 (description "Optimised functions to read and write int16/32/64 from strings
3841and bigarrays, based on new primitives added in version 4.01. It works on
3842strings, bytes and bigstring (Bigarrys of chars), and provides submodules for
3843big- and little-endian, with their unsafe counter-parts.")
3844 (license license:lgpl2.1)))
0090b895 3845
564cf93f
JL
3846(define-public ocaml4.02-ocplib-endian
3847 (package-with-ocaml4.02 ocaml-ocplib-endian))
3848
3849(define-public ocaml4.02-cstruct
0090b895 3850 (package
564cf93f 3851 (name "ocaml4.02-cstruct")
0090b895
JL
3852 (version "2.3.1")
3853 (source (origin
3854 (method url-fetch)
3855 (uri (string-append "https://github.com/mirage/ocaml-cstruct/"
3856 "archive/v" version ".tar.gz"))
3857 (sha256
3858 (base32
3859 "15qpdc8421shq4pprdas9jznpva45229wkfqbwcxw9khaiiz7949"))
3860 (file-name (string-append name "-" version ".tar.gz"))))
3861 (build-system ocaml-build-system)
3862 (arguments
564cf93f
JL
3863 `(#:ocaml ,ocaml-4.02
3864 #:findlib ,ocaml4.02-findlib
3865 #:configure-flags
0090b895
JL
3866 (list "--enable-lwt" "--enable-async")
3867 #:phases
3868 (modify-phases %standard-phases
3869 (add-after 'install 'link-stubs
3870 (lambda* (#:key outputs #:allow-other-keys)
3871 (let* ((out (assoc-ref outputs "out"))
3872 (stubs (string-append out "/lib/ocaml/site-lib/stubslibs"))
3873 (lib (string-append out "/lib/ocaml/site-lib/cstruct")))
3874 (mkdir-p stubs)
3875 (symlink (string-append lib "/dllcstruct_stubs.so")
3876 (string-append stubs "/dllcstruct_stubs.so"))))))))
3877 (native-inputs
564cf93f
JL
3878 `(("ounit" ,ocaml4.02-ounit)
3879 ("ppx-tools" ,ocaml4.02-ppx-tools)
3880 ("camlp4" ,camlp4-4.02)))
0090b895 3881 (propagated-inputs
564cf93f
JL
3882 `(("ocplib-endian" ,ocaml4.02-ocplib-endian)
3883 ("lwt" ,ocaml4.02-lwt)
3884 ("async" ,ocaml4.02-async)
3885 ("sexplib" ,ocaml4.02-sexplib)))
0090b895
JL
3886 (home-page "https://github.com/mirage/ocaml-cstruct")
3887 (synopsis "Access C structures via a camlp4 extension")
3888 (description "Cstruct is a library and syntax extension to make it easier
3889to access C-like structures directly from OCaml. It supports both reading and
3890writing to these structures, and they are accessed via the Bigarray module.")
3891 (license license:isc)))
61bafd44 3892
564cf93f 3893(define-public ocaml4.02-hex
61bafd44 3894 (package
564cf93f 3895 (name "ocaml4.02-hex")
61bafd44
JL
3896 (version "1.0.0")
3897 (source (origin
3898 (method url-fetch)
3899 (uri (string-append "https://github.com/mirage/ocaml-hex/"
3900 "archive/" version ".tar.gz"))
3901 (sha256
3902 (base32
3903 "0s63g0b8gfv2xm6fv6xg7bva8h76b5pcjb0zw3f8cygs0lq9072v"))
3904 (file-name (string-append name "-" version ".tar.gz"))))
3905 (build-system ocaml-build-system)
564cf93f
JL
3906 (arguments
3907 `(#:ocaml ,ocaml-4.02
3908 #:findlib ,ocaml4.02-findlib))
3909 (propagated-inputs
3910 `(("cstruct" ,ocaml4.02-cstruct)))
61bafd44
JL
3911 (home-page "https://github.com/mirage/ocaml-hex/")
3912 (synopsis "Minimal library providing hexadecimal converters")
3913 (description "Hex is a minimal library providing hexadecimal converters.")
3914 (license license:isc)))
d163d97d 3915
564cf93f 3916(define-public ocaml4.02-ezjsonm
bf7bc0d6 3917 (package
564cf93f 3918 (name "ocaml4.02-ezjsonm")
bf7bc0d6
JL
3919 (version "0.4.3")
3920 (source (origin
3921 (method url-fetch)
3922 (uri (string-append "https://github.com/mirage/ezjsonm/archive/"
3923 version ".tar.gz"))
3924 (sha256
3925 (base32
3926 "1kag0z2xlk4rw73a240dmkxh9rj6psxxcxkm7d7z0rrj6hzjajgq"))
3927 (file-name (string-append name "-" version ".tar.gz"))))
3928 (build-system ocaml-build-system)
3929 (native-inputs
564cf93f 3930 `(("alcotest" ,ocaml4.02-alcotest)))
bf7bc0d6 3931 (propagated-inputs
564cf93f
JL
3932 `(("hex" ,ocaml4.02-hex)
3933 ("jsonm" ,ocaml4.02-jsonm)
3934 ("lwt" ,ocaml4.02-lwt)
3935 ("sexplib" ,ocaml4.02-sexplib)))
bf7bc0d6 3936 (arguments
564cf93f
JL
3937 `(#:configure-flags (list "--enable-lwt")
3938 #:ocaml ,ocaml-4.02
3939 #:findlib ,ocaml4.02-findlib))
bf7bc0d6
JL
3940 (home-page "https://github.com/mirage/ezjsonm/")
3941 (synopsis "Read and write JSON data")
3942 (description "Ezjsonm provides more convenient (but far less flexible) input
3943and output functions that go to and from [string] values than jsonm. This avoids
3944the need to write signal code, which is useful for quick scripts that manipulate
3945JSON.")
3946 (license license:isc)))
3947
564cf93f 3948(define-public ocaml4.02-uri
3dabefee 3949 (package
564cf93f 3950 (name "ocaml4.02-uri")
3dabefee
JL
3951 (version "1.9.2")
3952 (source (origin
3953 (method url-fetch)
3954 (uri (string-append "https://github.com/mirage/ocaml-uri/archive/v"
3955 version ".tar.gz"))
3956 (sha256
3957 (base32
3958 "02bzrag79prx261rxf9mlak749pwf4flpfl8p012x1xznv9m0clc"))
3959 (file-name (string-append name "-" version ".tar.gz"))))
3960 (build-system ocaml-build-system)
564cf93f
JL
3961 (arguments
3962 `(#:ocaml ,ocaml-4.02
3963 #:findlib ,ocaml4.02-findlib))
3dabefee 3964 (native-inputs
564cf93f 3965 `(("ounit" ,ocaml4.02-ounit)))
3dabefee 3966 (propagated-inputs
564cf93f
JL
3967 `(("ppx-sexp-conv" ,ocaml4.02-ppx-sexp-conv)
3968 ("re" ,ocaml4.02-re)
3969 ("ppx-deriving" ,ocaml4.02-ppx-deriving)
3970 ("sexplib" ,ocaml4.02-sexplib)
3971 ("stringext" ,ocaml4.02-stringext)))
3dabefee
JL
3972 (home-page "https://github.com/mirage/ocaml-uri")
3973 (synopsis "RFC3986 URI/URL parsing library")
3974 (description "OCaml-uri is a library for parsing URI/URL in the RFC3986 format.")
3975 (license license:isc)))
3976
6134aeb9
JL
3977(define-public ocaml-easy-format
3978 (package
3979 (name "ocaml-easy-format")
3980 (version "1.2.0")
3981 (source (origin
3982 (method url-fetch)
3983 (uri (string-append "https://github.com/mjambon/easy-format/"
3984 "archive/v" version ".tar.gz"))
3985 (sha256
3986 (base32
3987 "1zcz682y9figa84k7lgdjcab5qbzk3yy14ygfqp2dhhrvjygm252"))
3988 (file-name (string-append name "-" version ".tar.gz"))))
3989 (build-system ocaml-build-system)
3990 (arguments
3991 `(#:phases
3992 (modify-phases %standard-phases
3993 (delete 'configure))))
3994 (home-page "https://github.com/mjambon/easy-format")
3995 (synopsis "Interface to the Format module")
3996 (description "Easy-format is a high-level and functional interface to the
3997Format module of the OCaml standard library.")
3998 (license license:bsd-3)))
3999
564cf93f
JL
4000(define-public ocaml4.02-easy-format
4001 (package-with-ocaml4.02 ocaml-easy-format))
4002
b5c0217c
JL
4003(define-public optcomp
4004 (package
4005 (name "optcomp")
4006 (version "1.6")
4007 (source (origin
4008 (method url-fetch)
4009 (uri (string-append "https://github.com/diml/optcomp/archive/"
4010 version ".tar.gz"))
4011 (sha256
4012 (base32
4013 "0hhhb2gisah1h22zlg5iszbgqxdd7x85cwd57bd4mfkx9l7dh8jh"))
4014 (file-name (string-append name "-" version ".tar.gz"))))
4015 (build-system ocaml-build-system)
4016 (arguments
564cf93f
JL
4017 `(#:ocaml ,ocaml-4.02
4018 #:findlib ,ocaml4.02-findlib
4019 #:use-make? #t
b5c0217c
JL
4020 #:make-flags
4021 (list (string-append "BUILDFLAGS=\"-cflags -I,"
4022 (assoc-ref %build-inputs "camlp4")
4023 "/lib/ocaml/site-lib/camlp4/Camlp4Parsers\""))))
564cf93f
JL
4024 (native-inputs `(("camlp4" ,camlp4-4.02)))
4025 (propagated-inputs `(("camlp4" ,camlp4-4.02)))
b5c0217c
JL
4026 (home-page "https://github.com/diml/optcomp")
4027 (synopsis "Optional compilation for OCaml")
4028 (description "Optcomp provides an optional compilation facility with
4029cpp-like directives.")
4030 (license license:bsd-3)))
4031
9c5dbbf0
JL
4032(define-public ocaml-piqilib
4033 (package
4034 (name "ocaml-piqilib")
564cf93f 4035 (version "0.6.14")
9c5dbbf0
JL
4036 (source (origin
4037 (method url-fetch)
4038 (uri (string-append "https://github.com/alavrik/piqi/archive/v"
4039 version ".tar.gz"))
4040 (sha256
4041 (base32
564cf93f 4042 "1ssccnwqzfyf7syfq2fv4zyhwayxwd75rhq9y28mvq1w6qbww4l7"))
9c5dbbf0
JL
4043 (file-name (string-append name "-" version ".tar.gz"))))
4044 (build-system ocaml-build-system)
4045 (arguments
4046 `(#:phases
4047 (modify-phases %standard-phases
4048 (add-before 'configure 'fix-ocamlpath
4049 (lambda _
4050 (substitute* '("Makefile" "make/Makefile.ocaml")
4051 (("OCAMLPATH := ") "OCAMLPATH := $(OCAMLPATH):"))
4052 #t))
4053 (replace 'configure
4054 (lambda* (#:key outputs #:allow-other-keys)
4055 (let ((out (assoc-ref outputs "out")))
4056 (substitute* "make/OCamlMakefile"
4057 (("/bin/sh") (which "bash")))
564cf93f
JL
4058 (invoke "./configure" "--prefix" out "--ocaml-libdir"
4059 (string-append out "/lib/ocaml/site-lib")))
4060 #t))
9c5dbbf0
JL
4061 (add-after 'build 'build-ocaml
4062 (lambda* (#:key outputs #:allow-other-keys)
564cf93f
JL
4063 (invoke "make" "ocaml")
4064 #t))
9c5dbbf0
JL
4065 (add-after 'install 'install-ocaml
4066 (lambda* (#:key outputs #:allow-other-keys)
564cf93f
JL
4067 (invoke "make" "ocaml-install")
4068 #t))
9c5dbbf0
JL
4069 (add-after 'install-ocaml 'link-stubs
4070 (lambda* (#:key outputs #:allow-other-keys)
4071 (let* ((out (assoc-ref outputs "out"))
4072 (stubs (string-append out "/lib/ocaml/site-lib/stubslibs"))
4073 (lib (string-append out "/lib/ocaml/site-lib/piqilib")))
4074 (mkdir-p stubs)
4075 (symlink (string-append lib "/dllpiqilib_stubs.so")
4076 (string-append stubs "/dllpiqilib_stubs.so"))
4077 #t))))))
4078 (native-inputs
4079 `(("which" ,which)
4080 ("camlp4" ,camlp4)))
4081 (propagated-inputs
4082 `(("xmlm" ,ocaml-xmlm)
4083 ("ulex" ,ocaml-ulex)
9c5dbbf0
JL
4084 ("easy-format" ,ocaml-easy-format)
4085 ("base64" ,ocaml-base64)))
4086 (home-page "http://piqi.org")
4087 (synopsis "Data serialization and conversion library")
4088 (description "Piqilib is the common library used by the piqi command-line
4089tool and piqi-ocaml.")
4090 (license license:asl2.0)))
4091
564cf93f
JL
4092(define-public ocaml4.02-piqilib
4093 (package-with-ocaml4.02 ocaml-piqilib))
4094
88b1533c
JL
4095(define-public ocaml-uuidm
4096 (package
4097 (name "ocaml-uuidm")
4098 (version "0.9.6")
4099 (source (origin
4100 (method url-fetch)
4101 (uri (string-append "http://erratique.ch/software/uuidm/"
4102 "releases/uuidm-" version ".tbz"))
4103 (sha256
4104 (base32
4105 "0hz4fdx0x16k0pw9995vkz5d1hmzz6b16wck9li399rcbfnv5jlc"))))
4106 (build-system ocaml-build-system)
4107 (arguments
4108 `(#:build-flags
4109 (list "build" "--tests" "true" "--with-cmdliner" "true")
4110 #:phases
4111 (modify-phases %standard-phases
4112 (delete 'configure))))
4113 (native-inputs
564cf93f
JL
4114 `(("ocamlbuild" ,ocamlbuild)
4115 ("opam" ,opam)))
88b1533c
JL
4116 (propagated-inputs
4117 `(("cmdliner" ,ocaml-cmdliner)
4118 ("topkg" ,ocaml-topkg)))
4119 (home-page "http://erratique.ch/software/uuidm")
4120 (synopsis "Universally unique identifiers for OCaml")
4121 (description "Uuidm is an OCaml module implementing 128 bits universally
4122unique identifiers (UUIDs) version 3, 5 (named based with MD5, SHA-1 hashing)
4123and 4 (random based) according to RFC 4122.")
4124 (license license:isc)))
4125
564cf93f
JL
4126(define-public ocaml4.02-uuidm
4127 (package-with-ocaml4.02 ocaml-uuidm))
4128
8a238180
JL
4129(define-public ocaml-graph
4130 (package
4131 (name "ocaml-graph")
564cf93f 4132 (version "1.8.8")
8a238180
JL
4133 (source (origin
4134 (method url-fetch)
4135 (uri (string-append "http://ocamlgraph.lri.fr/download/"
4136 "ocamlgraph-" version ".tar.gz"))
4137 (sha256
4138 (base32
564cf93f 4139 "0m9g16wrrr86gw4fz2fazrh8nkqms0n863w7ndcvrmyafgxvxsnr"))))
8a238180
JL
4140 (build-system ocaml-build-system)
4141 (arguments
4142 `(#:install-target "install-findlib"
564cf93f 4143 #:tests? #f
8a238180
JL
4144 #:phases
4145 (modify-phases %standard-phases
4146 (add-before 'configure 'set-shell
4147 (lambda* (#:key inputs #:allow-other-keys)
4148 (setenv "CONFIG_SHELL" (string-append (assoc-ref inputs "bash")
4149 "/bin/sh")))))))
4150 (inputs `(("lablgtk" ,lablgtk)))
8737666a 4151 (properties `((upstream-name . "ocamlgraph")))
8a238180
JL
4152 (home-page "http://ocamlgraph.lri.fr/")
4153 (synopsis "Graph library for OCaml")
4154 (description "OCamlgraph is a generic graph library for OCaml.")
4155 (license license:lgpl2.1)))
4156
564cf93f
JL
4157(define-public ocaml4.02-graph
4158 (package-with-ocaml4.02 ocaml-graph))
4159
fc3d70ae
JL
4160(define-public ocaml-piqi
4161 (package
4162 (name "ocaml-piqi")
564cf93f 4163 (version "0.7.6")
fc3d70ae
JL
4164 (source (origin
4165 (method url-fetch)
4166 (uri (string-append "https://github.com/alavrik/piqi-ocaml/"
4167 "archive/v" version ".tar.gz"))
597beb8a 4168 (file-name (string-append name "-" version ".tar.gz"))
fc3d70ae
JL
4169 (sha256
4170 (base32
564cf93f 4171 "0da0v2v28aj65b0cwpvvmcqyrfvz94pp3j5zgfdr1jrl5s37c21g"))))
fc3d70ae
JL
4172 (build-system ocaml-build-system)
4173 (arguments
4174 `(#:make-flags
4175 (list (string-append "DESTDIR=" (assoc-ref %outputs "out"))
4176 (string-append "SHELL=" (assoc-ref %build-inputs "bash")
4177 "/bin/sh"))
4178 #:phases
4179 (modify-phases %standard-phases
4180 (delete 'configure))))
4181 (native-inputs
4182 `(("which" ,which)
564cf93f 4183 ("camlp4" ,camlp4)
fc3d70ae
JL
4184 ("protobuf" ,protobuf))) ; for tests
4185 (propagated-inputs
564cf93f
JL
4186 `(("num" ,ocaml-num)
4187 ("piqilib" ,ocaml-piqilib)))
4188 (properties
4189 `((ocaml4.02-variant . ,(delay ocaml4.02-piqi))))
fc3d70ae
JL
4190 (home-page "https://github.com/alavrik/piqi-ocaml")
4191 (synopsis "Protocol serialization system for OCaml")
4192 (description "Piqi is a multi-format data serialization system for OCaml.
4193It provides a uniform interface for serializing OCaml data structures to JSON,
4194XML and Protocol Buffers formats.")
4195 (license license:asl2.0)))
4196
564cf93f
JL
4197(define-public ocaml4.02-piqi
4198 (let ((base (package-with-ocaml4.02 (strip-ocaml4.02-variant ocaml-piqi))))
4199 (package
4200 (inherit base)
4201 (propagated-inputs
4202 `(("piqilib" ,ocaml4.02-piqilib))))))
4203
cd1562ef
JL
4204(define-public bap
4205 (package
4206 (name "bap")
564cf93f 4207 (version "1.3.0")
cd1562ef
JL
4208 (home-page "https://github.com/BinaryAnalysisPlatform/bap")
4209 (source (origin
4210 (method url-fetch)
4211 (uri (string-append home-page "/archive/v" version ".tar.gz"))
4212 (sha256
4213 (base32
564cf93f 4214 "0v95v9mp7mg8fj25ry0w7566zd9xp6cs8nnqj4l38q54fb1hfav9"))
cd1562ef
JL
4215 (file-name (string-append name "-" version ".tar.gz"))))
4216 (build-system ocaml-build-system)
4217 (native-inputs
564cf93f 4218 `(("oasis" ,ocaml4.02-oasis)
67b5785e 4219 ("clang" ,clang-3.8)
564cf93f 4220 ("ounit" ,ocaml4.02-ounit)))
cd1562ef 4221 (propagated-inputs
564cf93f
JL
4222 `(("core-kernel" ,ocaml4.02-core-kernel)
4223 ("ppx-driver" ,ocaml4.02-ppx-driver)
4224 ("bin-prot" ,ocaml4.02-bin-prot)
4225 ("uri" ,ocaml4.02-uri)
67b5785e 4226 ("llvm" ,llvm-3.8)
cd1562ef
JL
4227 ("gmp" ,gmp)
4228 ("clang-runtime" ,clang-runtime)
564cf93f
JL
4229 ("fileutils" ,ocaml4.02-fileutils)
4230 ("cmdliner" ,ocaml4.02-cmdliner)
4231 ("zarith" ,ocaml4.02-zarith)
4232 ("uuidm" ,ocaml4.02-uuidm)
4233 ("camlzip" ,ocaml4.02-camlzip)
cd1562ef 4234 ("frontc" ,ocaml-frontc)
564cf93f
JL
4235 ("ezjsonm" ,ocaml4.02-ezjsonm)
4236 ("ocurl" ,ocaml4.02-ocurl)
4237 ("piqi" ,ocaml4.02-piqi)
4238 ("ocamlgraph" ,ocaml4.02-graph)
4239 ("bitstring" ,ocaml4.02-bitstring)
4240 ("ppx-jane" ,ocaml4.02-ppx-jane)
4241 ("re" ,ocaml4.02-re)))
67b5785e 4242 (inputs `(("llvm" ,llvm-3.8)))
cd1562ef 4243 (arguments
564cf93f
JL
4244 `(#:ocaml ,ocaml-4.02
4245 #:findlib ,ocaml4.02-findlib
4246 #:use-make? #t
cd1562ef
JL
4247 #:phases
4248 (modify-phases %standard-phases
4249 (replace 'configure
564cf93f
JL
4250 (lambda* (#:key outputs inputs #:allow-other-keys)
4251 (invoke "./configure" "--prefix"
4252 (assoc-ref outputs "out")
4253 "--libdir"
4254 (string-append
4255 (assoc-ref outputs "out")
4256 "/lib/ocaml/site-lib")
4257 "--with-llvm-version=3.8"
4258 "--with-llvm-config=llvm-config"
4259 "--enable-everything")
4260 (substitute* "plugins/objdump/objdump_main.ml"
4261 (("Re_perl") "Re.Perl"))
4262 (substitute* "oasis/objdump"
4263 (("re.pcre") "re.pcre, re.perl")))))))
cd1562ef
JL
4264 (synopsis "Binary Analysis Platform")
4265 (description "Binary Analysis Platform is a framework for writing program
4266analysis tools, that target binary files. The framework consists of a plethora
4267of libraries, plugins, and frontends. The libraries provide code reusability,
4268the plugins facilitate extensibility, and the frontends serve as entry points.")
4269 (license license:expat)))
4270
408091d5
JL
4271(define-public ocaml-camomile
4272 (package
4273 (name "ocaml-camomile")
564cf93f 4274 (version "1.0.1")
408091d5
JL
4275 (home-page "https://github.com/yoriyuki/Camomile")
4276 (source (origin
4277 (method url-fetch)
564cf93f
JL
4278 (uri (string-append home-page "/releases/download/" version
4279 "/camomile-" version ".tbz"))
408091d5
JL
4280 (sha256
4281 (base32
564cf93f 4282 "01ssjrqz41jvrqh27jxnh9cx7ywi9b5sgsykd00i7z9nrcwhlfy2"))))
426e629e 4283 (build-system dune-build-system)
564cf93f 4284 (native-inputs
426e629e 4285 `(("camlp4" ,camlp4)))
408091d5 4286 (arguments
426e629e 4287 `(#:build-flags (list "--profile" "realease")
564cf93f 4288 #:tests? #f))
408091d5
JL
4289 (synopsis "Comprehensive Unicode library")
4290 (description "Camomile is a Unicode library for OCaml. Camomile provides
4291Unicode character type, UTF-8, UTF-16, UTF-32 strings, conversion to/from about
4292200 encodings, collation and locale-sensitive case mappings, and more. The
4293library is currently designed for Unicode Standard 3.2.")
4294 ;; with an exception for linked libraries to use a different license
4295 (license license:lgpl2.0+)))
4296
564cf93f
JL
4297(define-public ocaml4.02-camomile
4298 (package-with-ocaml4.02 ocaml-camomile))
4299
c00233ac
PK
4300(define-public ocaml-jbuilder
4301 (package
4302 (name "ocaml-jbuilder")
0e43721f 4303 (version "1.0+beta16")
c00233ac
PK
4304 (source (origin
4305 (method url-fetch)
4306 (uri (string-append
4307 "https://github.com/janestreet/jbuilder/archive/"
4308 version ".tar.gz"))
4309 (file-name (string-append name "-" version ".tar.gz"))
4310 (sha256
4311 (base32
564cf93f 4312 "1cy07pwvbrlysszs938yd74yyvvbgkffpb82qrjph77zf0h2gdi7"))))
c00233ac
PK
4313 (build-system ocaml-build-system)
4314 (arguments
564cf93f
JL
4315 `(#:ocaml ,ocaml-4.02
4316 #:findlib ,ocaml4.02-findlib
4317 #:phases
c00233ac
PK
4318 (modify-phases %standard-phases
4319 (replace 'configure
4320 (lambda* (#:key outputs #:allow-other-keys)
4321 (let ((out (assoc-ref outputs "out")))
4322 (setenv "PREFIX" out))
4323 #t)))))
4324 (native-inputs
564cf93f 4325 `(("menhir" ,ocaml4.02-menhir)))
c00233ac
PK
4326 (propagated-inputs
4327 `(("opam" ,opam)))
4328 (home-page "https://github.com/janestreet/jbuilder")
4329 (synopsis "Composable build system for OCaml")
4330 (description "Jbuilder is a build system designed for OCaml/Reason projects
4331only. It focuses on providing the user with a consistent experience and takes
4332care of most of the low-level details of OCaml compilation. All you have to do
4333is provide a description of your project and Jbuilder will do the rest.")
4334 (license license:asl2.0)))
4335
cd4abd29
PK
4336(define-public ocaml-zed
4337 (package
4338 (name "ocaml-zed")
c959a774 4339 (version "1.6")
cd4abd29
PK
4340 (source (origin
4341 (method url-fetch)
4342 (uri (string-append "https://github.com/diml/zed/archive/"
4343 version ".tar.gz"))
4344 (file-name (string-append name "-" version ".tar.gz"))
4345 (sha256
4346 (base32
c959a774 4347 "19m5vrj60vg1b63qfsv0aabdlzgn40cqmx65s3wafqi4fs9xp6jn"))))
cd4abd29
PK
4348 (build-system ocaml-build-system)
4349 (arguments
4350 `(#:phases
4351 (modify-phases %standard-phases
4352 (delete 'configure)
4353 (replace 'build
4354 (lambda* (#:key #:allow-other-keys)
4355 (zero? (system* "jbuilder" "build"))))
4356 (delete 'check)
4357 (replace 'install
4358 (lambda* (#:key outputs #:allow-other-keys)
4359 (let ((out (assoc-ref outputs "out")))
4360 (zero? (system* "jbuilder" "install" "--prefix" out))))))))
4361 (native-inputs
4362 `(("jbuilder" ,ocaml-jbuilder)))
4363 (propagated-inputs
4364 `(("camomile" ,ocaml-camomile)
4365 ("react" ,ocaml-react)))
4366 (home-page "https://github.com/diml/zed")
4367 (synopsis "Abstract engine for text editing in OCaml")
4368 (description "Zed is an abstract engine for text edition. It can be used
4369to write text editors, edition widgets, readlines, etc. You just have to
4370connect an engine to your inputs and rendering functions to get an editor.")
4371 (license license:bsd-3)))
4372
564cf93f
JL
4373(define-public ocaml4.02-zed
4374 (package-with-ocaml4.02 ocaml-zed))
4375
e88ff71c
PK
4376(define-public ocaml-lambda-term
4377 (package
4378 (name "ocaml-lambda-term")
564cf93f 4379 (version "1.13")
e88ff71c
PK
4380 (source
4381 (origin
4382 (method url-fetch)
4383 (uri (string-append "https://github.com/diml/lambda-term/archive/"
4384 version ".tar.gz"))
4385 (file-name (string-append name "-" version ".tar.gz"))
4386 (sha256
564cf93f 4387 (base32 "1hy5ryagqclgdm9lzh1qil5mrynlypv7mn6qm858hdcnmz9zzn0l"))))
34d5314e 4388 (build-system dune-build-system)
e88ff71c 4389 (arguments
34d5314e 4390 `(#:build-flags (list "--profile" "release")
564cf93f 4391 #:tests? #f))
e88ff71c
PK
4392 (propagated-inputs
4393 `(("lwt" ,ocaml-lwt)
564cf93f 4394 ("lwt-log" ,ocaml-lwt-log)
e88ff71c
PK
4395 ("zed" ,ocaml-zed)))
4396 (home-page "https://github.com/diml/lambda-term")
4397 (synopsis "Terminal manipulation library for OCaml")
4398 (description "Lambda-Term is a cross-platform library for manipulating the
4399terminal. It provides an abstraction for keys, mouse events, colors, as well as
4400a set of widgets to write curses-like applications. The main objective of
4401Lambda-Term is to provide a higher level functional interface to terminal
4402manipulation than, for example, ncurses, by providing a native OCaml interface
4403instead of bindings to a C library.")
4404 (license license:bsd-3)))
4405
564cf93f
JL
4406(define-public ocaml4.02-lambda-term
4407 (package-with-ocaml4.02 ocaml-lambda-term))
4408
90ab26fa
PK
4409(define-public ocaml-utop
4410 (package
4411 (name "ocaml-utop")
564cf93f 4412 (version "2.2.0")
90ab26fa
PK
4413 (source (origin
4414 (method url-fetch)
564cf93f 4415 (uri (string-append "https://github.com/ocaml-community/utop/archive/"
90ab26fa
PK
4416 version ".tar.gz"))
4417 (file-name (string-append name "-" version ".tar.gz"))
4418 (sha256
4419 (base32
564cf93f 4420 "1414snwmqaxs1x8wbpjf6fn3jsl01hq0phrr7639xmb5vh15mgd4"))))
90ab26fa
PK
4421 (build-system gnu-build-system)
4422 (arguments
4423 `(#:test-target "test"
4424 #:phases
4425 (modify-phases %standard-phases
4426 (delete 'configure)
4427 (replace 'install
4428 (lambda* (#:key outputs #:allow-other-keys)
4429 (let* ((out (assoc-ref outputs "out"))
4430 (libdir (string-append out "/lib/ocaml/site-lib")))
4431 (mkdir-p libdir)
4432 (zero? (system* "jbuilder" "install"
4433 "--prefix" out
4434 "--libdir" libdir))))))))
4435 (native-inputs
4436 `(("ocaml" ,ocaml)
4437 ("cppo" ,ocaml-cppo)
4438 ("jbuilder" ,ocaml-jbuilder)))
4439 (propagated-inputs
bff6739d 4440 `(("ocaml-findlib" ,ocaml-findlib)
90ab26fa
PK
4441 ("lambda-term" ,ocaml-lambda-term)
4442 ("lwt" ,ocaml-lwt)
4443 ("react" ,ocaml-react)
4444 ("camomile" ,ocaml-camomile)
4445 ("zed" ,ocaml-zed)))
4446 (home-page "https://github.com/diml/utop")
4447 (synopsis "Improved interface to the OCaml toplevel")
4448 (description "UTop is an improved toplevel for OCaml. It can run in a
4449terminal or in Emacs. It supports line editing, history, real-time and context
4450sensitive completion, colors, and more.")
4451 (license license:bsd-3)))
4452
edac5354
PK
4453(define-public ocaml-integers
4454 (package
4455 (name "ocaml-integers")
4456 (version "0.2.2")
4457 (home-page "https://github.com/ocamllabs/ocaml-integers")
4458 (source (origin
4459 (method url-fetch)
4460 (uri (string-append home-page
4461 "/releases/download/v0.2.2/integers-"
4462 version ".tbz"))
4463 (file-name (string-append name "-" version ".tbz"))
4464 (sha256
4465 (base32
4466 "08b1ljw88ny3l0mdq6xmffjk8anfc77igryva5jz1p6f4f746ywk"))))
4467 (build-system ocaml-build-system)
4468 (arguments
4469 `(#:tests? #f; no tests
4470 #:build-flags (list "build")
4471 #:phases
4472 (modify-phases %standard-phases
4473 (delete 'configure))))
564cf93f
JL
4474 (native-inputs
4475 `(("ocamlbuild" ,ocamlbuild)))
edac5354 4476 (inputs
bff6739d 4477 `(("topkg" ,ocaml-topkg)
c695fb76 4478 ("opam" ,opam)))
edac5354
PK
4479 (synopsis "Various signed and unsigned integer types for OCaml")
4480 (description "The ocaml-integers library provides a number of 8-, 16-, 32-
4481and 64-bit signed and unsigned integer types, together with aliases such as
4482long and size_t whose sizes depend on the host platform.")
4483 (license license:expat)))
4484
69d08bb1
PK
4485(define-public ocaml-ctypes
4486 (package
4487 (name "ocaml-ctypes")
564cf93f 4488 (version "0.14.0")
69d08bb1
PK
4489 (home-page "https://github.com/ocamllabs/ocaml-ctypes")
4490 (source (origin
4491 (method url-fetch)
4492 (uri (string-append home-page "/archive/" version ".tar.gz"))
4493 (file-name (string-append name "-" version ".tar.gz"))
4494 (sha256
4495 (base32
564cf93f 4496 "0zrsd42q2nciyg9375g2kydqax6ay299rhyfgms59qiw7d9ylyp9"))))
69d08bb1
PK
4497 (build-system ocaml-build-system)
4498 (arguments
564cf93f
JL
4499 `(#:tests? #f; require an old lwt
4500 #:make-flags
69d08bb1
PK
4501 (list (string-append "INSTALL_HEADERS = $(wildcard $($(PROJECT).dir)/*.h)"))
4502 #:phases
4503 (modify-phases %standard-phases
4504 (delete 'configure))))
4505 (native-inputs
4506 `(("pkg-config" ,pkg-config)))
4507 (inputs
4508 `(("libffi" ,libffi)
4509 ("ounit" ,ocaml-ounit)
4510 ("integers" ,ocaml-integers)
4511 ("lwt" ,ocaml-lwt)
4512 ("topkg" ,ocaml-topkg)
c695fb76 4513 ("opam" ,opam)))
69d08bb1
PK
4514 (synopsis "Library for binding to C libraries using pure OCaml")
4515 (description "Ctypes is a library for binding to C libraries using pure
4516OCaml. The primary aim is to make writing C extensions as straightforward as
4517possible. The core of ctypes is a set of combinators for describing the
4518structure of C types -- numeric types, arrays, pointers, structs, unions and
4519functions. You can use these combinators to describe the types of the
4520functions that you want to call, then bind directly to those functions -- all
4521without writing or generating any C!")
4522 (license license:expat)))
4523
c98c8237
PK
4524(define-public ocaml-ocb-stubblr
4525 (package
4526 (name "ocaml-ocb-stubblr")
4527 (version "0.1.1")
4528 (home-page "https://github.com/pqwy/ocb-stubblr")
4529 (source (origin
4530 (method url-fetch)
4531 (uri (string-append
4532 home-page "/releases/download/v0.1.1/ocb-stubblr-"
4533 version ".tbz"))
4534 (file-name (string-append name "-" version ".tbz"))
4535 (sha256
4536 (base32
4537 "167b7x1j21mkviq8dbaa0nmk4rps2ilvzwx02igsc2706784z72f"))))
4538 (build-system ocaml-build-system)
4539 (arguments
bff6739d 4540 `(#:build-flags (list "build" "--tests" "true")
c98c8237
PK
4541 #:phases
4542 (modify-phases %standard-phases
4543 (delete 'configure))))
4544 (inputs
4545 `(("topkg" ,ocaml-topkg)
c695fb76 4546 ("opam" ,opam)))
c98c8237 4547 (native-inputs
564cf93f
JL
4548 `(("astring" ,ocaml-astring)
4549 ("ocamlbuild" ,ocamlbuild)))
c98c8237
PK
4550 (synopsis "OCamlbuild plugin for C stubs")
4551 (description "Ocb-stubblr is about ten lines of code that you need to
4552repeat over, over, over and over again if you are using ocamlbuild to build
4553OCaml projects that contain C stubs.")
4554 (license license:isc)))
4555
a9e9fd15
PK
4556(define-public ocaml-tsdl
4557 (package
4558 (name "ocaml-tsdl")
4559 (version "0.9.1")
4560 (home-page "http://erratique.ch/software/tsdl")
4561 (source (origin
4562 (method url-fetch)
4563 (uri (string-append home-page "/releases/tsdl-"
4564 version ".tbz"))
4565 (file-name (string-append name "-" version ".tar.gz"))
4566 (sha256
4567 (base32
4568 "08bb97fhvz829fb0sgjn2p20mp7b04v98zy2qxpk2w390a6c4b34"))))
4569 (build-system ocaml-build-system)
4570 (arguments
4571 `(#:build-flags '("build")
4572 #:tests? #f; tests require a display device
4573 #:phases
4574 (modify-phases %standard-phases
4575 (delete 'configure))))
4576 (native-inputs
564cf93f
JL
4577 `(("ocamlbuild" ,ocamlbuild)
4578 ("opam" ,opam)
a9e9fd15
PK
4579 ("pkg-config" ,pkg-config)))
4580 (inputs
bff6739d 4581 `(("topkg" ,ocaml-topkg)
a9e9fd15
PK
4582 ("result" ,ocaml-result)
4583 ("sdl2" ,sdl2)
4584 ("integers" ,ocaml-integers)
4585 ("ctypes" ,ocaml-ctypes)))
4586 (synopsis "Thin bindings to SDL for OCaml")
4587 (description "Tsdl is an OCaml library providing thin bindings to the
4588cross-platform SDL C library.")
4589 (license license:isc)))
4590
5895696e
GH
4591(define-public dedukti
4592 (package
4593 (name "dedukti")
4594 (version "2.6.0")
4595 (home-page "https://deducteam.github.io/")
4596 (source
4597 (origin
4598 (method git-fetch)
4599 (uri (git-reference
4600 (url "https://github.com/deducteam/dedukti.git")
4601 (commit (string-append "v" version))))
4602 (file-name (git-file-name name version))
4603 (sha256
4604 (base32
4605 "0frl3diff033i4fmq304b8wbsdnc9mvlhmwd7a3zd699ng2lzbxb"))))
4606 (inputs
4607 `(("menhir" ,ocaml-menhir)))
4608 (native-inputs
4609 `(("ocamlbuild" ,ocamlbuild)))
4610 (build-system ocaml-build-system)
4611 (arguments
4612 `(#:phases
4613 (modify-phases %standard-phases
4614 (delete 'configure)
4615 (replace 'build
4616 (lambda _
4617 (invoke "make")
912f4400 4618 #t))
5895696e
GH
4619 (replace 'check
4620 (lambda _
4621 (invoke "make" "tests")
912f4400 4622 #t))
5895696e
GH
4623 (add-before 'install 'set-binpath
4624 ;; Change binary path in the makefile
4625 (lambda _
4626 (let ((out (assoc-ref %outputs "out")))
4627 (substitute* "GNUmakefile"
4628 (("BINDIR = (.*)$")
4629 (string-append "BINDIR = " out "/bin"))))
912f4400
JL
4630 #t))
4631 (replace 'install
4632 (lambda _
4633 (invoke "make" "install")
4634 #t)))))
5895696e
GH
4635 (synopsis "Proof-checker for the λΠ-calculus modulo theory, an extension of
4636the λ-calculus")
4637 (description "Dedukti is a proof-checker for the λΠ-calculus modulo
4638theory. The λΠ-calculus is an extension of the simply typed λ-calculus with
4639dependent types. The λΠ-calculus modulo theory is itself an extension of the
4640λΠ-calculus where the context contains variable declaration as well as rewrite
4641rules. This system is not designed to develop proofs, but to check proofs
4642developed in other systems. In particular, it enjoys a minimalistic syntax.")
4643 (license license:cecill-c)))
2939fe7b 4644
db1eb632
LC
4645(define-public emacs-dedukti-mode
4646 (let ((commit "d7c3505a1046187de3c3aeb144455078d514594e"))
4647 (package
4648 (name "emacs-dedukti-mode")
4649 (version (git-version "0" "0" commit))
4650 (home-page "https://github.com/rafoo/dedukti-mode")
4651 (source (origin
4652 (method git-fetch)
4653 (uri (git-reference
4654 (url home-page)
4655 (commit commit)))
4656 (sha256
4657 (base32
4658 "1842wikq24c8rg0ac84vb1qby9ng1nssxswyyni4kq85lng5lcrp"))
4659 (file-name (git-file-name name version))))
4660 (inputs
4661 `(("dedukti" ,dedukti)))
4662 (build-system emacs-build-system)
4663 (arguments
4664 '(#:phases
4665 (modify-phases %standard-phases
4666 (add-before 'install 'patch-dkpath
4667 (lambda _
4668 (let ((dkcheck-path (which "dkcheck")))
4669 (substitute* "dedukti-mode.el"
4670 (("dedukti-path \"(.*)\"")
4671 (string-append "dedukti-path \"" dkcheck-path "\"")))))))))
4672 (synopsis "Emacs major mode for Dedukti files")
4673 (description "This package provides an Emacs major mode for editing
4674Dedukti files.")
4675 (license license:cecill-b))))
4676
4677(define-public emacs-flycheck-dedukti
4678 (let ((commit "3dbff5646355f39d57a3ec514f560a6b0082a1cd"))
4679 (package
4680 (name "emacs-flycheck-dedukti")
4681 (version (git-version "0" "0" commit))
4682 (home-page "https://github.com/rafoo/flycheck-dedukti")
4683 (source (origin
4684 (method git-fetch)
4685 (uri (git-reference
4686 (url home-page)
4687 (commit commit)))
4688 (sha256
4689 (base32
4690 "1ffpxnwl3wx244n44mbw81g00nhnykd0lnid29f4aw1av7w6nw8l"))
4691 (file-name (git-file-name name version))))
4692 (build-system emacs-build-system)
4693 (inputs
4694 `(("dedukti-mode" ,emacs-dedukti-mode)
4695 ("flycheck-mode" ,emacs-flycheck)))
4696 (synopsis "Flycheck integration for the dedukti language")
4697 (description "This package provides a frontend for Flycheck to perform
4698syntax checking on dedukti files.")
4699 (license license:cecill-b))))
4700
2939fe7b
GH
4701(define-public ocaml-biniou
4702 (package
4703 (name "ocaml-biniou")
4704 (version "1.2.0")
4705 (home-page "https://github.com/mjambon/biniou")
4706 (source
4707 (origin
4708 (method git-fetch)
4709 (uri (git-reference
4710 (url (string-append home-page ".git"))
4711 (commit (string-append "v" version))))
4712 (file-name (git-file-name name version))
4713 (sha256
4714 (base32
4715 "0mjpgwyfq2b2izjw0flmlpvdjgqpq8shs89hxj1np2r50csr8dcb"))))
4716 (build-system dune-build-system)
4717 (inputs
4718 `(("ocaml-easy-format" ,ocaml-easy-format)))
4719 (native-inputs
4720 `(("which" ,which)))
4721 (synopsis "Data format designed for speed, safety, ease of use and backward
4722compatibility")
4723 (description "Biniou (pronounced \"be new\" is a binary data format
4724designed for speed, safety, ease of use and backward compatibility as
4725protocols evolve. Biniou is vastly equivalent to JSON in terms of
4726functionality but allows implementations several times faster (4 times faster
4727than yojson), with 25-35% space savings.")
4728 (license license:bsd-3)))
2e951707
GH
4729
4730(define-public ocaml-yojson
4731 (package
4732 (name "ocaml-yojson")
4733 (version "1.4.1")
4734 (home-page "https://github.com/ocaml-community/yojson")
4735 (source
4736 (origin
4737 (method git-fetch)
4738 (uri (git-reference
4739 (url (string-append home-page ".git"))
4740 (commit (string-append "v" version))))
4741 (file-name (git-file-name name version))
4742 (sha256
4743 (base32
4744 "0nwsfkmqpyfab4rxq76q8ff7giyanghw08094jyrp275v99zdjr9"))))
4745 (build-system dune-build-system)
912f4400
JL
4746 (arguments
4747 `(#:test-target "."))
2e951707
GH
4748 (inputs
4749 `(("ocaml-biniou" ,ocaml-biniou)
912f4400
JL
4750 ("ocaml-easy-format" ,ocaml-easy-format)))
4751 (native-inputs
4752 `(("ocaml-cppo" ,ocaml-cppo)))
2e951707
GH
4753 (synopsis "Low-level JSON library for OCaml")
4754 (description "Yojson is an optimized parsing and printing library for the
4755JSON format. It addresses a few shortcomings of json-wheel including 2x
4756speedup, polymorphic variants and optional syntax for tuples and variants.
4757@code{ydump} is a pretty printing command-line program provided with the
4758yojson package. The program @code{atdgen} can be used to derive OCaml-JSON
4759serializers and deserializers from type definitions.")
4760 (license license:bsd-3)))
1d209d06
GH
4761
4762(define-public ocaml-craml
4763 (package
4764 (name "ocaml-craml")
4765 (version "1.0.0")
4766 (home-page "https://github.com/realworldocaml/craml")
4767 (source
4768 (origin
4769 (method git-fetch)
4770 (uri (git-reference
4771 (url (string-append home-page ".git"))
4772 (commit version)))
4773 (file-name (git-file-name name version))
4774 (sha256
4775 (base32
4776 "197xjp4vmzdymf2ndinw271ihpf45h04mx8gqj8ypspxdr5fj1a5"))))
4777 (build-system dune-build-system)
4778 (inputs
4779 `(("ocaml-fmt" ,ocaml-fmt)
4780 ("ocaml-astring" ,ocaml-astring)
4781 ("ocaml-logs" ,ocaml-logs)
4782 ("ocaml-cmdliner" ,ocaml-cmdliner)))
4783 (synopsis
4784 "CRAM-testing framework for testing command line applications")
4785 (description "CRAM is a is functional testing framework for command line
4786applications. @code{craml} is freely inspired by the
4787Mercurial's @code{https://www.selenic.com/blog/?p=663, unified test
4788format}. @code{craml} is released as a single binary (called @code{craml}).")
4789 (license license:isc)))
59a07504 4790
64d25f0b
GH
4791(define-public ocaml-merlin
4792 (package
4793 (name "ocaml-merlin")
4794 (version "3.2.2")
4795 (home-page "https://ocaml.github.io/merlin/")
4796 (source
4797 (origin
4798 (method git-fetch)
4799 (uri (git-reference
4800 (url "https://github.com/ocaml/merlin.git")
4801 (commit (string-append "v" version))))
4802 (file-name (git-file-name name version))
4803 (sha256
4804 (base32
4805 "15ssgmwdxylbwhld9p1cq8x6kadxyhll5bfyf11dddj6cldna3hb"))))
4806 (build-system dune-build-system)
4807 (inputs
4808 `(("ocaml-biniou" ,ocaml-biniou)
4809 ("ocaml-yojson" ,ocaml-yojson)
4810 ("ocaml-easy-format" ,ocaml-easy-format)))
4811 (native-inputs
4812 `(("ocaml-findlib" ,ocaml-findlib)))
4813 (arguments
4814 '(#:tests? #f)) ;; Errors in tests in version 3.2.2
4815 (synopsis "Context sensitive completion for OCaml in Vim and Emacs")
4816 (description "Merlin is an editor service that provides modern IDE
4817features for OCaml. Emacs and Vim support is provided out-of-the-box.
4818External contributors added support for Visual Studio Code, Sublime Text and
4819Atom.")
4820 (license license:expat)))
4821
59a07504
LC
4822(define-public ocaml-gsl
4823 (package
4824 (name "ocaml-gsl")
4825 (version "1.22.0")
4826 (source
4827 (origin
4828 (method url-fetch)
4829 (uri
4830 (string-append
4831 "https://github.com/mmottl/gsl-ocaml/releases/download/"
4832 version "/gsl-" version ".tbz"))
4833 (sha256
4834 (base32
4835 "17vcswipliq1b2idbzx1z95kskn1a4q4s5v04igilg0f7lnkaarb"))))
4836 (build-system ocaml-build-system)
4837 (inputs
4838 `(("gsl" ,gsl)))
4839 (home-page "https://mmottl.github.io/gsl-ocaml")
4840 (synopsis "Bindings to the GNU Scientific Library")
4841 (description
4842 "GSL-OCaml is an interface to the @dfn{GNU scientific library} (GSL) for
4843the OCaml language.")
4844 (license license:gpl3+)))
4845
4846(define-public ocaml4.01-gsl
4847 (package-with-ocaml4.01 ocaml-gsl))
4848
4849(define-public cubicle
4850 (package
4851 (name "cubicle")
4852 (version "1.1.2")
4853 (source (origin
4854 (method url-fetch)
4855 (uri (string-append "http://cubicle.lri.fr/cubicle-"
4856 version ".tar.gz"))
4857 (sha256
4858 (base32
4859 "10kk80jdmpdvql88sdjsh7vqzlpaphd8vip2lp47aarxjkwjlz1q"))))
4860 (build-system gnu-build-system)
4861 (native-inputs
4862 `(("automake" ,automake)
4863 ("ocaml" ,ocaml)
4864 ("which" ,(@@ (gnu packages base) which))))
4865 (propagated-inputs
4866 `(("ocaml-num" ,ocaml-num)
4867 ("z3" ,z3)))
4868 (arguments
4869 `(#:configure-flags (list "--with-z3")
4870 #:make-flags (list "QUIET=")
4871 #:tests? #f
4872 #:phases
4873 (modify-phases %standard-phases
4874 (add-before 'configure 'configure-for-release
4875 (lambda _
4876 (substitute* "Makefile.in"
4877 (("SVNREV=") "#SVNREV="))
4878 #t))
4879 (add-before 'configure 'fix-/bin/sh
4880 (lambda _
4881 (substitute* "configure"
4882 (("-/bin/sh") (string-append "-" (which "sh"))))
4883 #t))
4884 (add-before 'configure 'fix-smt-z3wrapper.ml
4885 (lambda _
4886 (substitute* "Makefile.in"
4887 (("\\\\n") ""))
4888 #t))
4889 (add-before 'configure 'fix-ocaml-num
4890 (lambda* (#:key inputs #:allow-other-keys)
4891 (substitute* "Makefile.in"
4892 (("= \\$\\(FUNCTORYLIB\\)")
4893 (string-append "= -I "
4894 (assoc-ref inputs "ocaml-num")
4895 "/lib/ocaml/site-lib"
4896 " $(FUNCTORYLIB)")))
4897 #t)))))
4898 (home-page "http://cubicle.lri.fr/")
4899 (synopsis "Model checker for array-based systems")
4900 (description "Cubicle is a model checker for verifying safety properties
4901of array-based systems. This is a syntactically restricted class of
4902parametrized transition systems with states represented as arrays indexed by
4903an arbitrary number of processes. Cache coherence protocols and mutual
4904exclusion algorithms are typical examples of such systems.")
4905 (license license:asl2.0)))
5fa01e8a
GH
4906
4907(define-public ocaml-sexplib0
4908 (package
4909 (name "ocaml-sexplib0")
4910 (version "0.11.0")
4911 (home-page "https://github.com/janestreet/sexplib0")
4912 (source
4913 (origin
4914 (method git-fetch)
4915 (uri (git-reference
4916 (url (string-append home-page ".git"))
4917 (commit (string-append "v" version))))
4918 (file-name (git-file-name name version))
4919 (sha256
4920 (base32
4921 "07v3ggyss7xhfv14bjk1n87sr42iqwj4cgjiv2lcdfkqk49i2bmi"))))
4922 (build-system dune-build-system)
4923 (arguments
4924 '(#:tests? #f)) ;no tests
4925 (synopsis "Library containing the definition of S-expressions and some
4926base converters")
4927 (description "Part of Jane Street's Core library The Core suite of
4928libraries is an industrial strength alternative to OCaml's standard library
4929that was developed by Jane Street, the largest industrial user of OCaml.")
4930(license license:expat)))
7726124a
GH
4931
4932(define-public ocaml-parsexp
4933 (package
4934 (name "ocaml-parsexp")
4935 (version "0.11.0")
4936 (home-page "https://github.com/janestreet/parsexp")
4937 (source
4938 (origin
4939 (method git-fetch)
4940 (uri (git-reference
4941 (url (string-append home-page ".git"))
4942 (commit (string-append "v" version))))
4943 (file-name (git-file-name name version))
4944 (sha256
4945 (base32
4946 "1nyq23s5igd8cf3n4qxprjvhbmb6ighb3fy5mw7hxl0mdgsw5fvz"))))
4947 (build-system dune-build-system)
4948 (inputs
4949 `(("ocaml-sexplib0" ,ocaml-sexplib0)))
4950 (synopsis "S-expression parsing library")
4951 (description
4952 "This library provides generic parsers for parsing S-expressions from
4953strings or other medium.
4954
4955The library is focused on performances but still provide full generic
4956parsers that can be used with strings, bigstrings, lexing buffers,
4957character streams or any other sources effortlessly.
4958
4959It provides three different class of parsers:
4960@itemize
4961@item
4962the normal parsers, producing [Sexp.t] or [Sexp.t list] values
4963@item
4964the parsers with positions, building compact position sequences so
4965that one can recover original positions in order to report properly
4966located errors at little cost
4967@item
4968the Concrete Syntax Tree parsers, produce values of type
4969@code{Parsexp.Cst.t} which record the concrete layout of the s-expression
4970syntax, including comments
4971@end itemize
4972
4973This library is portable and doesn't provide IO functions. To read
4974s-expressions from files or other external sources, you should use
4975parsexp_io.")
4976 (license license:expat)))
7cca1fd4
GH
4977
4978(define-public ocaml-sexplib
4979 (package
4980 (name "ocaml-sexplib")
4981 (version "0.11.0")
4982 (home-page "https://github.com/janestreet/sexplib")
4983 (source
4984 (origin
4985 (method git-fetch)
4986 (uri (git-reference
4987 (url (string-append home-page ".git"))
4988 (commit (string-append "v" version))))
4989 (file-name (git-file-name name version))
4990 (sha256
4991 (base32
4992 "1qfl0m04rpcjvc4yw1hzh6r16jpwmap0sa9ax6zjji67dz4szpyb"))))
4993 (build-system dune-build-system)
4994 (inputs
4995 `(("ocaml-num" ,ocaml-num)
4996 ("ocaml-parsexp" ,ocaml-parsexp)
4997 ("ocaml-sexplib0" ,ocaml-sexplib0)))
4998 (synopsis
4999 "Library for serializing OCaml values to and from S-expressions")
5000 (description
5001 "This package is part of Jane Street's Core library. Sexplib contains
5002functionality for parsing and pretty-printing s-expressions.")
5003 (license license:expat)))
22074259
GH
5004
5005(define-public ocaml-base
5006 (package
5007 (name "ocaml-base")
5008 (version "0.11.1")
5009 (home-page "https://github.com/janestreet/base")
5010 (source
5011 (origin
5012 (method git-fetch)
5013 (uri (git-reference
5014 (url (string-append home-page ".git"))
5015 (commit (string-append "v" version))))
5016 (file-name (git-file-name name version))
5017 (sha256
5018 (base32
5019 "0j6xb4265jr41vw4fjzak6yr8s30qrnzapnc6rl1dxy8bjai0nir"))))
5020 (build-system dune-build-system)
5021 (inputs
5022 `(("ocaml-sexplib0" ,ocaml-sexplib0)))
5023 (arguments
5024 `(#:phases
5025 (modify-phases %standard-phases
5026 (replace 'build
5027 ;; make warnings non fatal (jbuilder behaviour)
5028 (lambda _
5029 (invoke "dune" "build" "@install" "--profile=release"))))))
5030 (synopsis
5031 "Full standard library replacement for OCaml")
5032 (description
5033 "Base is a complete and portable alternative to the OCaml standard
5034library. It provides all standard functionalities one would expect
5035from a language standard library. It uses consistent conventions
5036across all of its module.
5037
5038Base aims to be usable in any context. As a result system dependent
5039features such as I/O are not offered by Base. They are instead
5040provided by companion libraries such as
5041@url{https://github.com/janestreet/stdio, ocaml-stdio}.")
5042 (license license:expat)))
ac06a773
GH
5043
5044(define-public ocaml-compiler-libs
5045 (package
5046 (name "ocaml-compiler-libs")
5047 (version "0.11.0")
5048 (home-page "https://github.com/janestreet/ocaml-compiler-libs")
5049 (source
5050 (origin
5051 (method git-fetch)
5052 (uri (git-reference
5053 (url (string-append home-page ".git"))
5054 (commit (string-append "v" version))))
5055 (file-name (git-file-name name version))
5056 (sha256
5057 (base32
5058 "03jds7bszh8wwpfwxb3dg0gyr1j1872wxwx1xqhry5ir0i84bg0s"))))
5059 (build-system dune-build-system)
5060 (arguments
5061 '(#:tests? #f)) ;no tests
5062 (synopsis "Compiler libraries repackaged")
5063 (description "This packaeg simply repackages the OCaml compiler libraries
5064so they don't expose everything at toplevel. For instance, @code{Ast_helper}
5065is now @code{Ocaml_common.Ast_helper}.")
5066 (license license:expat)))
b5bab81c
GH
5067
5068(define-public ocaml-stdio
5069 (package
5070 (name "ocaml-stdio")
5071 (version "0.11.0")
5072 (home-page "https://github.com/janestreet/stdio")
5073 (source
5074 (origin
5075 (method git-fetch)
5076 (uri (git-reference
5077 (url (string-append home-page ".git"))
5078 (commit (string-append "v" version))))
5079 (file-name (git-file-name name version))
5080 (sha256
5081 (base32
5082 "1facajqhvq34g2wrg368y0ajxd6lrj5b3lyzyj0jhdmraxajjcwn"))))
5083 (build-system dune-build-system)
5084 (inputs `(("ocaml-base" ,ocaml-base)
5085 ("ocaml-sexplib0" ,ocaml-sexplib0)))
5086 (arguments
5087 '(#:tests? #f)) ;no tests
5088 (synopsis "Standard IO library for OCaml")
5089 (description
5090 "Stdio implements simple input/output functionalities for OCaml. It
5091re-exports the input/output functions of the OCaml standard libraries using
5092a more consistent API.")
5093 (license license:expat)))
3f623d00
GH
5094
5095(define-public ocaml-ppx-derivers
5096 (package
5097 (name "ocaml-ppx-derivers")
5098 (version "1.2")
5099 (home-page
5100 "https://github.com/ocaml-ppx/ppx_derivers")
5101 (source
5102 (origin
5103 (method git-fetch)
5104 (uri (git-reference
5105 (url (string-append home-page ".git"))
5106 (commit version)))
5107 (file-name (git-file-name name version))
5108 (sha256
5109 (base32
5110 "0bnhihl1w31as5w2czly1v3d6pbir9inmgsjg2cj6aaj9v1dzd85"))))
5111 (build-system dune-build-system)
5112 (arguments
5113 '(#:tests? #f)) ;no tests
5114 (synopsis "Shared @code{@@deriving} plugin registry")
5115 (description
5116 "Ppx_derivers is a tiny package whose sole purpose is to allow
5117ppx_deriving and ppx_type_conv to inter-operate gracefully when linked
5118as part of the same ocaml-migrate-parsetree driver.")
5119 (license license:bsd-3)))
4d390cad
GH
5120
5121(define-public ocaml-ppxlib
5122 (package
5123 (name "ocaml-ppxlib")
5124 (version "0.4.0")
5125 (home-page "https://github.com/ocaml-ppx/ppxlib")
5126 (source
5127 (origin
5128 (method git-fetch)
5129 (uri (git-reference
5130 (url (string-append home-page ".git"))
5131 (commit version)))
5132 (file-name (git-file-name name version))
5133 (sha256
5134 (base32
5135 "1nr4igf5m4prvigvv470dnhfdhdw0p6hz6zw8gnm5bzcv7s2lg5l"))))
5136 (build-system dune-build-system)
5137 (inputs
5138 `(("ocaml-base" ,ocaml-base)
5139 ("ocaml-compiler-libs" ,ocaml-compiler-libs)
5140 ("ocaml-migrate-parsetree" ,ocaml-migrate-parsetree)
5141 ("ocaml-ppx-derivers" ,ocaml-ppx-derivers)
5142 ("ocaml-stdio" ,ocaml-stdio)
5143 ("ocaml-result" ,ocaml-result)
5144 ("ocaml-sexplib0" ,ocaml-sexplib0)))
5145 (native-inputs
5146 `(("ocaml-findlib" ,ocaml-findlib)))
5147 (arguments
5148 '(#:phases
5149 (modify-phases %standard-phases
5150 (add-before 'check 'set-topfind
5151 (lambda* (#:key inputs #:allow-other-keys)
5152 ;; add the line #directory ".." at the top of each file
5153 ;; using #use "topfind";; to be able to find topfind
5154 (let* ((findlib-path (assoc-ref inputs "ocaml-findlib"))
5155 (findlib-libdir
5156 (string-append findlib-path "/lib/ocaml/site-lib")))
5157 (substitute* '("test/base/test.ml"
5158 "test/deriving/test.ml"
5159 "test/driver/attributes/test.ml"
5160 "test/driver/non-compressible-suffix/test.ml"
5161 "test/driver/transformations/test.ml")
5162 (("#use \"topfind\";;" all)
5163 (string-append "#directory \"" findlib-libdir "\"\n"
5164 all))))
5165 #t)))))
5166 (synopsis
5167 "Base library and tools for ppx rewriters")
5168 (description
5169 "A comprehensive toolbox for ppx development. It features:
5170@itemize
5171@item an OCaml AST / parser / pretty-printer snapshot, to create a full frontend
5172independent of the version of OCaml;
5173@item a library for library for ppx rewriters in general, and type-driven code
5174generators in particular;
5175@item
5176a feature-full driver for OCaml AST transformers;
5177@item a quotation mechanism allowing to write values representing the
5178OCaml AST in the OCaml syntax;
5179@item a generator of open recursion classes from type definitions.
5180@end itemize")
5181 (license license:expat)))