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