gnu: gnu-c-manual: Use invoke.
[jackhill/guix/guix.git] / gnu / packages / ocaml.scm
CommitLineData
d192efae
CR
1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
69b8f08c 3;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
b9d8756b 4;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
c900f843 5;;; Copyright © 2015 David Hashe <david.hashe@dhashe.com>
90907a22 6;;; Copyright © 2016 Eric Bavier <bavier@member.fsf.org>
a747baba 7;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
fdb3fba3 8;;; Copyright © 2016, 2018 Efraim Flashner <efraim@flashner.co.il>
8bd10c10 9;;; Copyright © 2016, 2017 Julien Lepiller <julien@lepiller.eu>
ec436717 10;;; Copyright © 2017 Ben Woodcroft <donttrustben@gmail.com>
c959a774 11;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
2b4d2a4d 12;;; Copyright © 2018 Peter Kreye <kreyepr@gmail.com>
d192efae
CR
13;;;
14;;; This file is part of GNU Guix.
15;;;
16;;; GNU Guix is free software; you can redistribute it and/or modify it
17;;; under the terms of the GNU General Public License as published by
18;;; the Free Software Foundation; either version 3 of the License, or (at
19;;; your option) any later version.
20;;;
21;;; GNU Guix is distributed in the hope that it will be useful, but
22;;; WITHOUT ANY WARRANTY; without even the implied warranty of
23;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24;;; GNU General Public License for more details.
25;;;
26;;; You should have received a copy of the GNU General Public License
27;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
28
29(define-module (gnu packages ocaml)
d192efae 30 #:use-module (gnu packages)
44c23cb8 31 #:use-module (gnu packages autotools)
0705f79c 32 #:use-module (gnu packages base)
88191ace
JL
33 #:use-module (gnu packages bison)
34 #:use-module (gnu packages boost)
69b8f08c 35 #:use-module (gnu packages compression)
1ff755d1 36 #:use-module (gnu packages curl)
0c4dbdc2 37 #:use-module (gnu packages databases)
1ff755d1 38 #:use-module (gnu packages emacs)
88191ace 39 #:use-module (gnu packages flex)
1ff755d1 40 #:use-module (gnu packages gcc)
90907a22 41 #:use-module (gnu packages ghostscript)
1fdfbadf 42 #:use-module (gnu packages glib)
1ff755d1
DC
43 #:use-module (gnu packages gnome)
44 #:use-module (gnu packages gtk)
1fdfbadf 45 #:use-module (gnu packages libevent)
69d08bb1 46 #:use-module (gnu packages libffi)
cd1562ef 47 #:use-module (gnu packages llvm)
a747baba 48 #:use-module (gnu packages m4)
ddf2b503 49 #:use-module (gnu packages multiprecision)
a34cedc4 50 #:use-module (gnu packages ncurses)
f8a12de1 51 #:use-module (gnu packages pcre)
1ff755d1
DC
52 #:use-module (gnu packages perl)
53 #:use-module (gnu packages pkg-config)
fc3d70ae 54 #:use-module (gnu packages protobuf)
1ff755d1 55 #:use-module (gnu packages python)
a9e9fd15 56 #:use-module (gnu packages sdl)
1ff755d1
DC
57 #:use-module (gnu packages tex)
58 #:use-module (gnu packages texinfo)
44c23cb8 59 #:use-module (gnu packages time)
37f17e2a 60 #:use-module (gnu packages tls)
a34cedc4 61 #:use-module (gnu packages version-control)
c5196ac7 62 #:use-module (gnu packages web-browsers)
7a76b4af 63 #:use-module (gnu packages xml)
1ff755d1
DC
64 #:use-module (gnu packages xorg)
65 #:use-module (guix build-system gnu)
7a76b4af 66 #:use-module (guix build-system ocaml)
1ff755d1
DC
67 #:use-module (guix download)
68 #:use-module ((guix licenses) #:prefix license:)
69 #:use-module (guix packages)
70 #:use-module (guix svn-download)
1345231c 71 #:use-module (guix utils)
0ad5f809 72 #:use-module ((srfi srfi-1) #:hide (zip)))
d192efae 73
56f73ead
JL
74;; A shortcut for files from ocaml forge. Downloaded files are computed from
75;; their number, not their name.
76(define (ocaml-forge-uri name version file-number)
77 (string-append "https://forge.ocamlcore.org/frs/download.php/"
78 (number->string file-number) "/" name "-" version
79 ".tar.gz"))
80
f95ebba5
JL
81;; Janestreet packages are found in a similar way and all need the same patch.
82(define (janestreet-origin name version hash)
83 (origin (method url-fetch)
84 (uri (string-append "https://ocaml.janestreet.com/ocaml-core/"
85 (version-major+minor version) "/files/"
86 name "-" version ".tar.gz"))
87 (sha256 (base32 hash))
88 (modules '((guix build utils)))
89 (snippet
90 (let ((pattern (string-append "lib/" name)))
91 `(begin
92 ;; install.ml contains an invalid reference to the ppx file and
93 ;; propagates this error to the generated META file. It
94 ;; looks for it in the "lib" directory, but it is installed in
95 ;; "lib/ocaml/site-lib/package". This substitute does not change
96 ;; this file for non ppx packages.
97 (substitute* "install.ml"
98 ((,pattern) (string-append "lib/ocaml/site-lib/" ,name)))
99 ;; The standard Makefile would try to install janestreet modules
100 ;; in OCaml's directory in the store, which is read-only.
101 (substitute* "Makefile"
102 (("--prefix")
6cbee49d
MW
103 "--libdir $(LIBDIR) --prefix"))
104 #t)))))
f95ebba5
JL
105
106;; They also require almost the same set of arguments
107(define janestreet-arguments
108 `(#:use-make? #t
109 #:make-flags
110 (list (string-append "CONFIGUREFLAGS=--prefix "
111 (assoc-ref %outputs "out")
112 " --enable-tests")
113 (string-append "LIBDIR="
114 (assoc-ref %outputs "out")
115 "/lib/ocaml/site-lib")
116 ;; for ocaml-bin-prot, otherwise ignored
117 (string-append "OCAML_TOPLEVEL_PATH="
118 (assoc-ref %build-inputs "findlib")
119 "/lib/ocaml/site-lib"))
120 #:phases (modify-phases %standard-phases (delete 'configure))))
121
d192efae
CR
122(define-public ocaml
123 (package
124 (name "ocaml")
be78e52c 125 (version "4.02.3")
d192efae 126 (source (origin
69b8f08c
MW
127 (method url-fetch)
128 (uri (string-append
129 "http://caml.inria.fr/pub/distrib/ocaml-"
130 (version-major+minor version)
131 "/ocaml-" version ".tar.xz"))
132 (sha256
133 (base32
3854f3d7 134 "1qwwvy8nzd87hk8rd9sm667nppakiapnx4ypdwcrlnav2dz6kil3"))
8bd10c10
JL
135 (patches
136 (search-patches
137 "ocaml-CVE-2015-8869.patch"
138 "ocaml-Add-a-.file-directive.patch"))))
d192efae 139 (build-system gnu-build-system)
6372e336
JN
140 (native-search-paths
141 (list (search-path-specification
142 (variable "OCAMLPATH")
e6876cb9 143 (files (list "lib/ocaml" "lib/ocaml/site-lib")))
796a17ab
JL
144 (search-path-specification
145 (variable "CAML_LD_LIBRARY_PATH")
146 (files (list "lib/ocaml/site-lib/stubslibs")))))
69b8f08c
MW
147 (native-inputs
148 `(("perl" ,perl)
149 ("pkg-config" ,pkg-config)))
150 (inputs
151 `(("libx11" ,libx11)
2f6d3e41 152 ;; For libiberty, needed for objdump support.
e1f32cf1 153 ("gcc:lib" ,(canonical-package gcc) "lib")
2f6d3e41 154 ("zlib" ,zlib))) ;also needed for objdump support
d192efae 155 (arguments
69b8f08c
MW
156 `(#:modules ((guix build gnu-build-system)
157 (guix build utils)
158 (web server))
159 #:phases
160 (modify-phases %standard-phases
161 (add-after 'unpack 'patch-/bin/sh-references
2b1f7b83
DC
162 (lambda* (#:key inputs #:allow-other-keys)
163 (let* ((sh (string-append (assoc-ref inputs "bash")
164 "/bin/sh"))
165 (quoted-sh (string-append "\"" sh "\"")))
166 (with-fluids ((%default-port-encoding #f))
167 (for-each
168 (lambda (file)
169 (substitute* file
170 (("\"/bin/sh\"")
171 (begin
172 (format (current-error-port) "\
69b8f08c 173patch-/bin/sh-references: ~a: changing `\"/bin/sh\"' to `~a'~%"
2b1f7b83
DC
174 file quoted-sh)
175 quoted-sh))))
176 (find-files "." "\\.ml$"))
177 #t))))
69b8f08c 178 (replace 'configure
2b1f7b83
DC
179 (lambda* (#:key outputs #:allow-other-keys)
180 (let* ((out (assoc-ref outputs "out"))
181 (mandir (string-append out "/share/man")))
182 ;; Custom configure script doesn't recognize
183 ;; --prefix=<PREFIX> syntax (with equals sign).
184 (zero? (system* "./configure"
185 "--prefix" out
186 "--mandir" mandir)))))
69b8f08c 187 (replace 'build
2b1f7b83
DC
188 (lambda _
189 (zero? (system* "make" "-j" (number->string
190 (parallel-job-count))
191 "world.opt"))))
69b8f08c
MW
192 (delete 'check)
193 (add-after 'install 'check
2b1f7b83
DC
194 (lambda _
195 (with-directory-excursion "testsuite"
196 (zero? (system* "make" "all")))))
69b8f08c 197 (add-before 'check 'prepare-socket-test
2b1f7b83
DC
198 (lambda _
199 (format (current-error-port)
200 "Spawning local test web server on port 8080~%")
201 (when (zero? (primitive-fork))
202 (run-server (lambda (request request-body)
203 (values '((content-type . (text/plain)))
204 "Hello!"))
205 'http '(#:port 8080)))
206 (let ((file "testsuite/tests/lib-threads/testsocket.ml"))
207 (format (current-error-port)
208 "Patching ~a to use localhost port 8080~%"
209 file)
210 (substitute* file
211 (("caml.inria.fr") "localhost")
212 (("80") "8080")
213 (("HTTP1.0") "HTTP/1.0"))
214 #t))))))
69b8f08c 215 (home-page "https://ocaml.org/")
d192efae
CR
216 (synopsis "The OCaml programming language")
217 (description
218 "OCaml is a general purpose industrial-strength programming language with
35b9e423 219an emphasis on expressiveness and safety. Developed for more than 20 years at
d192efae
CR
220Inria it benefits from one of the most advanced type systems and supports
221functional, imperative and object-oriented styles of programming.")
69b8f08c
MW
222 ;; The compiler is distributed under qpl1.0 with a change to choice of
223 ;; law: the license is governed by the laws of France. The library is
224 ;; distributed under lgpl2.0.
d8e0a08c 225 (license (list license:qpl license:lgpl2.0))))
a34cedc4 226
ec436717
BW
227(define-public ocaml-4.01
228 (package
229 (inherit ocaml)
230 (version "4.01.0")
231 (source (origin
232 (method url-fetch)
233 (uri (string-append
234 "http://caml.inria.fr/pub/distrib/ocaml-"
235 (version-major+minor version)
236 "/ocaml-" version ".tar.xz"))
237 (sha256
238 (base32
239 "03d7ida94s1gpr3gadf4jyhmh5rrszd5s4m4z59daaib25rvfyv7"))))
240 (arguments
241 (substitute-keyword-arguments (package-arguments ocaml)
242 ((#:phases phases)
243 `(modify-phases ,phases
244 (replace 'build
245 (lambda _
246 ;; Specifying '-j' at all causes the build to fail.
247 (zero? (system* "make" "world.opt"))))
248 (replace 'check
249 (lambda _
250 (with-directory-excursion "testsuite"
251 (zero? (system*
252 "make"
253 "all"
254 (string-append
255 "TOPDIR=" (getcwd) "/.."))))))))))))
256
a34cedc4
LC
257(define-public opam
258 (package
259 (name "opam")
4533cd73 260 (version "1.2.2")
a34cedc4
LC
261 (source (origin
262 (method url-fetch)
263 ;; Use the '-full' version, which includes all the dependencies.
264 (uri (string-append
265 "https://github.com/ocaml/opam/releases/download/"
266 version "/opam-full-" version ".tar.gz")
267 ;; (string-append "https://github.com/ocaml/opam/archive/"
268 ;; version ".tar.gz")
269 )
270 (sha256
271 (base32
4533cd73 272 "004gwn6rbpcb53y3rpb3v23vk39rp2xmf0liyd5iy12ij8bigrhm"))))
a34cedc4
LC
273 (build-system gnu-build-system)
274 (arguments
275 '(;; Sometimes, 'make -jX' would fail right after ./configure with
276 ;; "Fatal error: exception End_of_file".
277 #:parallel-build? #f
278
279 ;; For some reason, 'ocp-build' needs $TERM to be set.
4533cd73
EB
280 #:make-flags `("TERM=screen"
281 ,(string-append "SHELL="
282 (assoc-ref %build-inputs "bash")
283 "/bin/sh"))
a34cedc4
LC
284 #:test-target "tests"
285
286 ;; FIXME: There's an obscure test failure:
287 ;; …/_obuild/opam/opam.asm install P1' failed.
288 #:tests? #f
289
2385cab1
EB
290 #:phases (modify-phases %standard-phases
291 (add-before 'build 'pre-build
292 (lambda* (#:key inputs make-flags #:allow-other-keys)
293 (let ((bash (assoc-ref inputs "bash")))
294 (substitute* "src/core/opamSystem.ml"
295 (("\"/bin/sh\"")
4533cd73
EB
296 (string-append "\"" bash "/bin/sh\"")))
297 ;; Build dependencies
298 (zero? (apply system* "make" "lib-ext" make-flags)))))
2385cab1
EB
299 (add-before 'check 'pre-check
300 (lambda _
301 (setenv "HOME" (getcwd))
302 (and (system "git config --global user.email guix@gnu.org")
303 (system "git config --global user.name Guix")))))))
a34cedc4
LC
304 (native-inputs
305 `(("git" ,git) ;for the tests
4533cd73
EB
306 ("python" ,python) ;for the tests
307 ("camlp4" ,camlp4)))
a34cedc4
LC
308 (inputs
309 `(("ocaml" ,ocaml)
310 ("ncurses" ,ncurses)
311 ("curl" ,curl)))
312 (home-page "http://opam.ocamlpro.com/")
313 (synopsis "Package manager for OCaml")
314 (description
315 "OPAM is a tool to manage OCaml packages. It supports multiple
316simultaneous compiler installations, flexible package constraints, and a
317Git-friendly development workflow.")
318
319 ;; The 'LICENSE' file waives some requirements compared to LGPLv3.
d8e0a08c 320 (license license:lgpl3)))
83f4dc36 321
492ee988
LC
322(define-public camlp4
323 (package
324 (name "camlp4")
006faa35 325 (version "4.02+6")
492ee988
LC
326 (source (origin
327 (method url-fetch)
328 (uri (string-append "https://github.com/ocaml/camlp4/archive/"
329 version ".tar.gz"))
330 (sha256
331 (base32
006faa35 332 "0icdfzhsbgf89925gc8gl3fm8z2xzszzlib0v9dj5wyzkyv3a342"))
492ee988
LC
333 (file-name (string-append name "-" version ".tar.gz"))))
334 (build-system gnu-build-system)
fd5b2133 335 (native-inputs `(("ocaml" ,ocaml)
0d1c0660 336 ("which" ,which)))
492ee988
LC
337 (inputs `(("ocaml" ,ocaml)))
338 (arguments
339 '(#:tests? #f ;no documented test target
e0ddaa8b
JL
340 ;; a race-condition will lead byte and native targets to mkdir _build
341 ;; which fails on the second attempt.
342 #:parallel-build? #f
343 #:make-flags '("all")
492ee988
LC
344 #:phases (modify-phases %standard-phases
345 (replace
346 'configure
347 (lambda* (#:key outputs #:allow-other-keys)
348 ;; This is a home-made 'configure' script.
349 (let ((out (assoc-ref outputs "out")))
350 (zero? (system* "./configure"
ad3d730e
JL
351 (string-append "--libdir=" out
352 "/lib/ocaml/site-lib")
492ee988 353 (string-append "--bindir=" out "/bin")
ad3d730e
JL
354 (string-append "--pkgdir=" out
355 "/lib/ocaml/site-lib"))))))
356 (add-after 'install 'install-meta
357 (lambda* (#:key outputs #:allow-other-keys)
358 (let ((out (assoc-ref outputs "out")))
359 (substitute* "camlp4/META.in"
360 (("directory = .*")
361 (string-append "directory = \"" out
362 "/lib/ocaml/site-lib/camlp4\"\n")))
363 (zero? (system* "make" "install-META"))))))))
492ee988
LC
364 (home-page "https://github.com/ocaml/camlp4")
365 (synopsis "Write parsers in OCaml")
366 (description
367 "Camlp4 is a software system for writing extensible parsers for
368programming languages. It provides a set of OCaml libraries that are used to
369define grammars as well as loadable syntax extensions of such grammars.
370Camlp4 stands for Caml Preprocessor and Pretty-Printer and one of its most
371important applications is the definition of domain-specific extensions of the
372syntax of OCaml.")
373
374 ;; This is LGPLv2 with an exception that allows packages statically-linked
375 ;; against the library to be released under any terms.
d8e0a08c 376 (license license:lgpl2.0)))
492ee988 377
83f4dc36
MW
378(define-public camlp5
379 (package
380 (name "camlp5")
d4bf3dac 381 (version "6.14")
83f4dc36
MW
382 (source (origin
383 (method url-fetch)
384 (uri (string-append "http://camlp5.gforge.inria.fr/distrib/src/"
385 name "-" version ".tgz"))
386 (sha256
387 (base32
d4bf3dac 388 "1ql04iyvclpyy9805kpddc4ndjb5d0qg4shhi2fc6bixi49fvy89"))))
83f4dc36
MW
389 (build-system gnu-build-system)
390 (inputs
391 `(("ocaml" ,ocaml)))
392 (arguments
393 `(#:tests? #f ; XXX TODO figure out how to run the tests
394 #:phases
395 (modify-phases %standard-phases
396 (replace 'configure
397 (lambda* (#:key outputs #:allow-other-keys)
398 (let* ((out (assoc-ref outputs "out"))
399 (mandir (string-append out "/share/man")))
400 ;; Custom configure script doesn't recognize
401 ;; --prefix=<PREFIX> syntax (with equals sign).
402 (zero? (system* "./configure"
403 "--prefix" out
404 "--mandir" mandir)))))
405 (replace 'build
406 (lambda _
407 (zero? (system* "make" "-j" (number->string
408 (parallel-job-count))
07b4cd3a
JL
409 "world.opt"))))
410 ;; Required for findlib to find camlp5's libraries
411 (add-after 'install 'install-meta
412 (lambda* (#:key outputs #:allow-other-keys)
413 (install-file "etc/META" (string-append (assoc-ref outputs "out")
414 "/lib/ocaml/camlp5/")))))))
83f4dc36
MW
415 (home-page "http://camlp5.gforge.inria.fr/")
416 (synopsis "Pre-processor Pretty Printer for OCaml")
417 (description
418 "Camlp5 is a Pre-Processor-Pretty-Printer for Objective Caml. It offers
419tools for syntax (Stream Parsers and Grammars) and the ability to modify the
420concrete syntax of the language (Quotations, Syntax Extensions).")
421 ;; Most files are distributed under bsd-3, but ocaml_stuff/* is under qpl.
d8e0a08c 422 (license (list license:bsd-3 license:qpl))))
d6b7b5ed
MW
423
424(define-public hevea
425 (package
426 (name "hevea")
f5a8491b 427 (version "2.28")
d6b7b5ed
MW
428 (source (origin
429 (method url-fetch)
8f26f239 430 (uri (string-append "http://hevea.inria.fr/old/"
d6b7b5ed
MW
431 name "-" version ".tar.gz"))
432 (sha256
433 (base32
f5a8491b 434 "14fns13wlnpiv9i05841kvi3cq4b9v2sw5x3ff6ziws28q701qnd"))))
d6b7b5ed
MW
435 (build-system gnu-build-system)
436 (inputs
437 `(("ocaml" ,ocaml)))
438 (arguments
439 `(#:tests? #f ; no test suite
440 #:make-flags (list (string-append "PREFIX=" %output))
441 #:phases (modify-phases %standard-phases
f5a8491b
EB
442 (delete 'configure)
443 (add-before 'build 'patch-/bin/sh
444 (lambda _
445 (substitute* "_tags"
446 (("/bin/sh") (which "sh")))
447 #t)))))
d6b7b5ed
MW
448 (home-page "http://hevea.inria.fr/")
449 (synopsis "LaTeX to HTML translator")
450 (description
451 "HeVeA is a LaTeX to HTML translator that generates modern HTML 5. It is
452written in Objective Caml.")
d8e0a08c 453 (license license:qpl)))
1973183b
MW
454
455(define-public coq
456 (package
457 (name "coq")
6e4da737 458 (version "8.7.0")
1973183b
MW
459 (source (origin
460 (method url-fetch)
461 (uri (string-append "https://coq.inria.fr/distrib/V" version
462 "/files/" name "-" version ".tar.gz"))
463 (sha256
464 (base32
6e4da737 465 "15wjngjd5pyfqdl5yw92rvdxvy15xcjlpx0rqlkzvcsis1z20xpk"))))
50cbbc9b
JL
466 (native-search-paths
467 (list (search-path-specification
468 (variable "COQPATH")
469 (files (list "lib/coq/user-contrib")))))
6e4da737 470 (build-system ocaml-build-system)
1973183b
MW
471 (native-inputs
472 `(("texlive" ,texlive)
473 ("hevea" ,hevea)))
474 (inputs
6e4da737
JL
475 `(("lablgtk" ,lablgtk)
476 ("python" ,python-2)
1973183b
MW
477 ("camlp5" ,camlp5)))
478 (arguments
479 `(#:phases
480 (modify-phases %standard-phases
481 (replace 'configure
2694d1dc
DC
482 (lambda* (#:key outputs #:allow-other-keys)
483 (let* ((out (assoc-ref outputs "out"))
484 (mandir (string-append out "/share/man"))
485 (browser "icecat -remote \"OpenURL(%s,new-tab)\""))
486 (zero? (system* "./configure"
487 "-prefix" out
488 "-mandir" mandir
4da69687
JL
489 "-browser" browser
490 "-coqide" "opt")))))
1973183b 491 (replace 'build
2694d1dc
DC
492 (lambda _
493 (zero? (system* "make" "-j" (number->string
494 (parallel-job-count))
495 "world"))))
1973183b
MW
496 (delete 'check)
497 (add-after 'install 'check
2694d1dc
DC
498 (lambda _
499 (with-directory-excursion "test-suite"
6e4da737
JL
500 ;; These two tests fail.
501 ;; This one fails because the output is not formatted as expected.
502 (delete-file-recursively "coq-makefile/timing")
503 ;; This one fails because we didn't build coqtop.byte.
504 (delete-file-recursively "coq-makefile/findlib-package")
2694d1dc 505 (zero? (system* "make"))))))))
1973183b
MW
506 (home-page "https://coq.inria.fr")
507 (synopsis "Proof assistant for higher-order logic")
508 (description
509 "Coq is a proof assistant for higher-order logic, which allows the
510development of computer programs consistent with their formal specification.
511It is developed using Objective Caml and Camlp5.")
512 ;; The code is distributed under lgpl2.1.
513 ;; Some of the documentation is distributed under opl1.0+.
d8e0a08c 514 (license (list license:lgpl2.1 license:opl1.0+))))
0705f79c
MW
515
516(define-public proof-general
517 (package
518 (name "proof-general")
519 (version "4.2")
520 (source (origin
521 (method url-fetch)
522 (uri (string-append
523 "http://proofgeneral.inf.ed.ac.uk/releases/"
524 "ProofGeneral-" version ".tgz"))
525 (sha256
526 (base32
527 "09qb0myq66fw17v4ziz401ilsb5xlxz1nl2wsp69d0vrfy0bcrrm"))))
528 (build-system gnu-build-system)
529 (native-inputs
530 `(("which" ,which)
b8fc3622 531 ("emacs" ,emacs-minimal)
0705f79c
MW
532 ("texinfo" ,texinfo)))
533 (inputs
534 `(("host-emacs" ,emacs)
535 ("perl" ,perl)
536 ("coq" ,coq)))
537 (arguments
538 `(#:tests? #f ; no check target
539 #:make-flags (list (string-append "PREFIX=" %output)
540 (string-append "DEST_PREFIX=" %output))
541 #:modules ((guix build gnu-build-system)
542 (guix build utils)
543 (guix build emacs-utils))
544 #:imported-modules (,@%gnu-build-system-modules
545 (guix build emacs-utils))
546 #:phases
547 (modify-phases %standard-phases
548 (delete 'configure)
549 (add-after 'unpack 'disable-byte-compile-error-on-warn
550 (lambda _
551 (substitute* "Makefile"
552 (("\\(setq byte-compile-error-on-warn t\\)")
553 "(setq byte-compile-error-on-warn nil)"))
554 #t))
555 (add-after 'unpack 'patch-hardcoded-paths
556 (lambda* (#:key inputs outputs #:allow-other-keys)
557 (let ((out (assoc-ref outputs "out"))
558 (coq (assoc-ref inputs "coq"))
559 (emacs (assoc-ref inputs "host-emacs")))
560 (define (coq-prog name)
561 (string-append coq "/bin/" name))
562 (emacs-substitute-variables "coq/coq.el"
563 ("coq-prog-name" (coq-prog "coqtop"))
564 ("coq-compiler" (coq-prog "coqc"))
565 ("coq-dependency-analyzer" (coq-prog "coqdep")))
566 (substitute* "Makefile"
567 (("/sbin/install-info") "install-info"))
568 (substitute* "bin/proofgeneral"
569 (("^PGHOMEDEFAULT=.*" all)
570 (string-append all
571 "PGHOME=$PGHOMEDEFAULT\n"
572 "EMACS=" emacs "/bin/emacs")))
573 #t)))
574 (add-after 'unpack 'clean
575 (lambda _
576 ;; Delete the pre-compiled elc files for Emacs 23.
577 (zero? (system* "make" "clean"))))
578 (add-after 'install 'install-doc
579 (lambda* (#:key make-flags #:allow-other-keys)
580 ;; XXX FIXME avoid building/installing pdf files,
581 ;; due to unresolved errors building them.
582 (substitute* "Makefile"
583 ((" [^ ]*\\.pdf") ""))
584 (zero? (apply system* "make" "install-doc"
585 make-flags)))))))
586 (home-page "http://proofgeneral.inf.ed.ac.uk/")
e881752c
AK
587 (synopsis "Generic front-end for proof assistants based on Emacs")
588 (description
0705f79c
MW
589 "Proof General is a major mode to turn Emacs into an interactive proof
590assistant to write formal mathematical proofs using a variety of theorem
591provers.")
d8e0a08c 592 (license license:gpl2+)))
b9d8756b 593
833ade67
OP
594(define-public emacs-tuareg
595 (package
596 (name "emacs-tuareg")
597 (version "2.0.10")
598 (source (origin
599 (method url-fetch)
600 (uri (string-append "https://github.com/ocaml/tuareg/archive/"
601 version ".tar.gz"))
602 (file-name (string-append name "-" version ".tar.gz"))
603 (sha256
604 (base32
605 "1r2smclcs63n74lcyckbp90j09wyjdngn816cqzfkw54iwh3hd7q"))))
606 (build-system gnu-build-system)
607 (native-inputs `(("emacs" ,emacs-minimal)
608 ("opam" ,opam)))
609 (arguments
610 `(#:phases
611 (modify-phases %standard-phases
612 (delete 'configure)
613 (add-before 'install 'fix-install-path
614 (lambda* (#:key outputs #:allow-other-keys)
615 (substitute* "Makefile"
616 (("/emacs/site-lisp")
617 (string-append (assoc-ref %outputs "out")
618 "/share/emacs/site-lisp/")))
619 #t))
620 (add-after 'install 'post-install
621 (lambda* (#:key outputs #:allow-other-keys)
622 (symlink "tuareg.el"
623 (string-append (assoc-ref outputs "out")
624 "/share/emacs/site-lisp/"
625 "tuareg-autoloads.el"))
626 #t)))))
627 (home-page "https://github.com/ocaml/tuareg")
628 (synopsis "OCaml programming mode, REPL, debugger for Emacs")
629 (description "Tuareg helps editing OCaml code, to highlight important
630parts of the code, to run an OCaml REPL, and to run the OCaml debugger within
631Emacs.")
632 (license license:gpl2+)))
633
e31b75f2
DC
634(define-public ocaml-menhir
635 (package
636 (name "ocaml-menhir")
637 (version "20161115")
638 (source (origin
639 (method url-fetch)
640 (uri (string-append
641 "http://gallium.inria.fr/~fpottier/menhir/"
642 "menhir-" version ".tar.gz"))
643 (sha256
644 (base32
645 "1j8nmcj2gq6hyyi16z27amiahplgrnk4ppchpm0v4qy80kwkf47k"))))
646 (build-system gnu-build-system)
647 (inputs
648 `(("ocaml" ,ocaml)))
649 (arguments
650 `(#:parallel-build? #f ; Parallel build causes failure
651 #:tests? #f ; No check target
652 #:phases
653 (modify-phases %standard-phases
654 (replace 'configure
655 (lambda* (#:key outputs #:allow-other-keys)
656 (let ((out (assoc-ref outputs "out")))
657 (setenv "PREFIX" out))
658 #t)))))
659 (home-page "http://gallium.inria.fr/~fpottier/menhir")
660 (synopsis "Parser generator")
661 (description "Menhir is a parser generator. It turns high-level grammar
662specifications, decorated with semantic actions expressed in the OCaml
663programming language into parsers, again expressed in OCaml. It is based on
664Knuth’s LR(1) parser construction technique.")
665 ;; The file src/standard.mly and all files listed in src/mnehirLib.mlpack
666 ;; that have an *.ml or *.mli extension are GPL licensed. All other files
667 ;; are QPL licensed.
d8e0a08c 668 (license (list license:gpl2+ license:qpl))))
e31b75f2 669
3573b634
AE
670(define-public lablgtk
671 (package
672 (name "lablgtk")
054fea97 673 (version "2.18.5")
56f73ead
JL
674 (source (origin
675 (method url-fetch)
676 (uri (ocaml-forge-uri name version 1627))
677 (sha256
678 (base32
679 "0cyj6sfdvzx8hw7553lhgwc0krlgvlza0ph3dk9gsxy047dm3wib"))))
3573b634
AE
680 (build-system gnu-build-system)
681 (native-inputs
682 `(("camlp4" ,camlp4)
683 ("ocaml" ,ocaml)
8afd1958 684 ("findlib" ,ocaml-findlib)
3573b634
AE
685 ("pkg-config" ,pkg-config)))
686 ;; FIXME: Add inputs gtkgl-2.0, libpanelapplet-2.0, gtkspell-2.0,
687 ;; and gtk+-quartz-2.0 once available.
688 (inputs
689 `(("gtk+" ,gtk+-2)
c900f843 690 ("gtksourceview" ,gtksourceview-2)
3573b634
AE
691 ("libgnomecanvas" ,libgnomecanvas)
692 ("libgnomeui" ,libgnomeui)
693 ("libglade" ,libglade)
694 ("librsvg" ,librsvg)))
695 (arguments
696 `(#:tests? #f ; no check target
ef89cb42 697
8c1088bb 698 ;; opt: also install cmxa files
8afd1958
JL
699 #:make-flags (list "all" "opt"
700 (string-append "FINDLIBDIR="
701 (assoc-ref %outputs "out")
702 "/lib/ocaml"))
ef89cb42
LC
703 ;; Occasionally we would get "Error: Unbound module GtkThread" when
704 ;; compiling 'gtkThInit.ml', with 'make -j'. So build sequentially.
705 #:parallel-build? #f
706
3573b634
AE
707 #:phases
708 (modify-phases %standard-phases
8afd1958 709 (add-before 'install 'prepare-install
3573b634
AE
710 (lambda* (#:key inputs outputs #:allow-other-keys)
711 (let ((out (assoc-ref outputs "out"))
712 (ocaml (assoc-ref inputs "ocaml")))
713 ;; Install into the output and not the ocaml directory.
8afd1958 714 (mkdir-p (string-append out "/lib/ocaml"))
3573b634
AE
715 (substitute* "config.make"
716 ((ocaml) out))
3573b634
AE
717 #t))))))
718 (home-page "http://lablgtk.forge.ocamlcore.org/")
719 (synopsis "GTK+ bindings for OCaml")
720 (description
721 "LablGtk is an OCaml interface to GTK+ 1.2 and 2.x. It provides
722a strongly-typed object-oriented interface that is compatible with the
723dynamic typing of GTK+. Most widgets and methods are available. LablGtk
724also provides bindings to
725gdk-pixbuf, the GLArea widget (in combination with LablGL), gnomecanvas,
726gnomeui, gtksourceview, gtkspell,
727libglade (and it an generate OCaml code from .glade files),
728libpanel, librsvg and quartz.")
d8e0a08c 729 (license license:lgpl2.1)))
3573b634 730
b9d8756b
AE
731(define-public unison
732 (package
733 (name "unison")
734 (version "2.48.3")
735 (source
736 (origin
90907a22
EB
737 (method svn-fetch)
738 (uri (svn-reference
739 (url (string-append "https://webdav.seas.upenn.edu/svn/"
740 "unison/branches/"
741 (version-major+minor version)))
742 (revision 535)))
743 (file-name (string-append name "-" version "-checkout"))
744 (sha256
745 (base32
746 "0486s53wyayicj9f2raj2dvwvk4xyzar219rccc1iczdwixm4x05"))
747 (modules '((guix build utils)
748 (ice-9 rdelim)
749 (ice-9 regex)
750 (srfi srfi-1)))
751 (snippet
752 `(begin
753 ;; The svn revision in the release tarball appears to be
754 ;; artificially manipulated in order to set the desired point
755 ;; version number. Because the point version is calculated during
756 ;; the build, we can offset pointVersionOrigin by the desired
757 ;; point version and write that into "Rev: %d". We do this rather
758 ;; than hardcoding the necessary revision number, for
759 ;; maintainability.
760 (with-atomic-file-replacement "src/mkProjectInfo.ml"
761 (lambda (in out)
762 (let ((pt-ver (string->number (third (string-split ,version #\.))))
763 (pt-rx (make-regexp "^let pointVersionOrigin = ([0-9]+)"))
764 (rev-rx (make-regexp "Rev: [0-9]+")))
765 (let loop ((pt-origin #f))
766 (let ((line (read-line in 'concat)))
767 (cond
768 ((regexp-exec pt-rx line)
769 => (lambda (m)
770 (display line out)
771 (loop (string->number (match:substring m 1)))))
772 ((regexp-exec rev-rx line)
773 => (lambda (m)
774 (format out "~aRev: ~d~a"
775 (match:prefix m)
776 (+ pt-origin pt-ver)
777 (match:suffix m))
778 (dump-port in out))) ;done
779 (else
780 (display line out)
781 (loop pt-origin))))))))
782 ;; Without the '-fix' argument, the html file produced does not
783 ;; have functioning internal hyperlinks.
784 (substitute* "doc/Makefile"
6cbee49d
MW
785 (("hevea unison") "hevea -fix unison"))
786 #t))))
b9d8756b 787 (build-system gnu-build-system)
90907a22
EB
788 (outputs '("out"
789 "doc")) ; 1.9 MiB of documentation
b9d8756b 790 (native-inputs
90907a22
EB
791 `(("ocaml" ,ocaml)
792 ;; For documentation
2be896de 793 ("ghostscript" ,ghostscript)
90907a22
EB
794 ("texlive" ,texlive)
795 ("hevea" ,hevea)
796 ("lynx" ,lynx)))
b9d8756b
AE
797 (arguments
798 `(#:parallel-build? #f
799 #:parallel-tests? #f
800 #:test-target "selftest"
801 #:tests? #f ; Tests require writing to $HOME.
802 ; If some $HOME is provided, they fail with the message
803 ; "Fatal error: Skipping some tests -- remove me!"
804 #:phases
805 (modify-phases %standard-phases
806 (delete 'configure)
807 (add-before 'install 'prepare-install
808 (lambda* (#:key outputs #:allow-other-keys)
809 (let* ((out (assoc-ref outputs "out"))
810 (bin (string-append out "/bin")))
811 (mkdir-p bin)
812 (setenv "HOME" out) ; forces correct INSTALLDIR in Makefile
90907a22 813 #t)))
31d968fb
OD
814 (add-after 'install 'install-fsmonitor
815 (lambda* (#:key outputs #:allow-other-keys)
816 (let* ((out (assoc-ref outputs "out"))
817 (bin (string-append out "/bin")))
818 ;; 'unison-fsmonitor' is used in "unison -repeat watch" mode.
819 (install-file "src/unison-fsmonitor" bin))))
90907a22 820 (add-after 'install 'install-doc
31d968fb 821 (lambda* (#:key outputs #:allow-other-keys)
90907a22
EB
822 (let ((doc (string-append (assoc-ref outputs "doc")
823 "/share/doc/unison")))
824 (mkdir-p doc)
825 ;; This file needs write-permissions, because it's
826 ;; overwritten by 'docs' during documentation generation.
827 (chmod "src/strings.ml" #o600)
828 (and (zero? (system* "make" "docs"
829 "TEXDIRECTIVES=\\\\draftfalse"))
830 (begin
831 (for-each (lambda (f)
832 (install-file f doc))
833 (map (lambda (ext)
834 (string-append
835 "doc/unison-manual." ext))
836 ;; Install only html documentation,
837 ;; since the build is currently
838 ;; non-reproducible with the ps, pdf,
839 ;; and dvi docs.
840 '(;;"ps" "pdf" "dvi"
841 "html")))
842 #t))))))))
b9d8756b
AE
843 (home-page "https://www.cis.upenn.edu/~bcpierce/unison/")
844 (synopsis "File synchronizer")
845 (description
846 "Unison is a file-synchronization tool. It allows two replicas of
847a collection of files and directories to be stored on different hosts
848(or different disks on the same host), modified separately, and then
849brought up to date by propagating the changes in each replica
850to the other.")
d8e0a08c 851 (license license:gpl3+)))
a747baba
JN
852
853(define-public ocaml-findlib
854 (package
855 (name "ocaml-findlib")
bff6739d 856 (version "1.7.3")
a747baba
JN
857 (source (origin
858 (method url-fetch)
859 (uri (string-append "http://download.camlcity.org/download/"
860 "findlib" "-" version ".tar.gz"))
861 (sha256
862 (base32
bff6739d 863 "12xx8si1qv3xz90qsrpazjjk4lc1989fzm97rsmc4diwla7n15ni"))))
a747baba
JN
864 (build-system gnu-build-system)
865 (native-inputs
866 `(("camlp4" ,camlp4)
867 ("m4" ,m4)
868 ("ocaml" ,ocaml)))
869 (arguments
870 `(#:tests? #f ; no test suite
871 #:parallel-build? #f
872 #:make-flags (list "all" "opt")
873 #:phases (modify-phases %standard-phases
874 (replace
875 'configure
876 (lambda* (#:key inputs outputs #:allow-other-keys)
877 (let ((out (assoc-ref outputs "out")))
878 (system*
879 "./configure"
880 "-bindir" (string-append out "/bin")
881 "-config" (string-append out "/etc/ocamfind.conf")
882 "-mandir" (string-append out "/share/man")
883 "-sitelib" (string-append out "/lib/ocaml/site-lib")
ad3d730e 884 "-with-toolbox"))))
bff6739d
PK
885 (replace 'install
886 (lambda* (#:key outputs #:allow-other-keys)
887 (let ((out (assoc-ref outputs "out")))
888 (zero? (system* "make" "install"
889 (string-append "OCAML_CORE_STDLIB="
890 out "/lib/ocaml/site-lib"))))))
ad3d730e
JL
891 (add-after 'install 'remove-camlp4
892 (lambda* (#:key outputs #:allow-other-keys)
893 (let ((out (assoc-ref outputs "out")))
894 (delete-file-recursively
895 (string-append out "/lib/ocaml/site-lib/camlp4"))))))))
a747baba
JN
896 (home-page "http://projects.camlcity.org/projects/findlib.html")
897 (synopsis "Management tool for OCaml libraries")
898 (description
899 "The \"findlib\" library provides a scheme to manage reusable software
900components (packages), and includes tools that support this scheme. Packages
901are collections of OCaml modules for which metainformation can be stored. The
8f65585b 902packages are kept in the file system hierarchy, but with strict directory
a747baba
JN
903structure. The library contains functions to look the directory up that
904stores a package, to query metainformation about a package, and to retrieve
905dependency information about multiple packages. There is also a tool that
906allows the user to enter queries on the command-line. In order to simplify
907compilation and linkage, there are new frontends of the various OCaml
908compilers that can directly deal with packages.")
d8e0a08c 909 (license license:x11)))
7a76b4af 910
fa01cb52
BW
911(define-public ocaml4.01-findlib
912 (package
913 (inherit ocaml-findlib)
914 (name "ocaml4.01-findlib")
915 (native-inputs
916 `(("m4" ,m4)
917 ("ocaml" ,ocaml-4.01)))))
918
7a76b4af
JL
919;; note that some tests may hang for no obvious reason.
920(define-public ocaml-ounit
921 (package
922 (name "ocaml-ounit")
923 (version "2.0.0")
924 (source (origin
925 (method url-fetch)
926 (uri (ocaml-forge-uri "ounit" version 1258))
927 (sha256
928 (base32
929 "118xsadrx84pif9vaq13hv4yh22w9kmr0ypvhrs0viir1jr0ajjd"))))
930 (build-system ocaml-build-system)
931 (native-inputs
932 `(("libxml2" ,libxml2))) ; for xmllint
933 (arguments
337273e4
DC
934 `(#:phases
935 (modify-phases %standard-phases
936 ;; Tests are done during build.
937 (delete 'check))))
7a76b4af
JL
938 (home-page "http://ounit.forge.ocamlcore.org")
939 (synopsis "Unit testing framework for OCaml")
940 (description "Unit testing framework for OCaml. It is similar to JUnit and
941other XUnit testing frameworks.")
942 (license license:expat)))
bc2c3bc6 943
abd593c7
BW
944(define-public ocaml4.01-ounit
945 (package-with-ocaml4.01 ocaml-ounit))
946
bc2c3bc6
JL
947(define-public camlzip
948 (package
949 (name "camlzip")
950 (version "1.0.6")
951 (source (origin
952 (method url-fetch)
953 (uri (ocaml-forge-uri name version 1616))
954 (sha256
955 (base32
956 "0m6gyjw46w3qnhxfsyqyag42znl5lwargks7w7rfchr9jzwpff68"))))
957 (build-system ocaml-build-system)
958 (inputs
959 `(("zlib" ,zlib)))
960 (arguments
961 `(#:phases
962 (modify-phases %standard-phases
963 (delete 'configure)
8fe6b932
JL
964 (add-after 'install 'install-camlzip
965 (lambda* (#:key outputs #:allow-other-keys)
966 (let* ((out (assoc-ref outputs "out"))
967 (dir (string-append out "/lib/ocaml/site-lib/camlzip")))
968 (mkdir-p dir)
969 (call-with-output-file (string-append dir "/META")
970 (lambda (port)
971 (format port "version=\"1.06\"\n")
972 (format port "requires=\"unix\"\n")
973 (format port "archive(byte)=\"zip.cma\"\n")
974 (format port "archive(native)=\"zip.cmxa\"\n")
975 (format port "archive(native,plugin)=\"zip.cmxs\"\n")
976 (format port "directory=\"../zip\"\n")))))))
bc2c3bc6
JL
977 #:install-target "install-findlib"
978 #:make-flags
979 (list "all" "allopt"
980 (string-append "INSTALLDIR=" (assoc-ref %outputs "out")
981 "/lib/ocaml"))))
982 (home-page "http://forge.ocamlcore.org/projects/camlzip")
983 (synopsis "Provides easy access to compressed files")
984 (description "Provides easy access to compressed files in ZIP, GZIP and
985JAR format. It provides functions for reading from and writing to compressed
986files in these formats.")
987 (license license:lgpl2.1+)))
93eeadf0 988
6824387a
BW
989(define-public ocaml4.01-camlzip
990 (let ((base (package-with-ocaml4.01 camlzip)))
991 (package
992 (inherit base)
993 (name "ocaml4.01-camlzip")
994 ;; Version 1.05 is the last version to support OCaml 4.01.0.
995 (version "1.05")
996 (source
997 (origin
998 (method url-fetch)
999 (uri
1000 (string-append
1001 "http://forge.ocamlcore.org/frs/download.php/1037/camlzip-"
1002 version ".tar.gz"))
1003 (sha256
1004 (base32
1005 "0syh72jk9s0qwjmmfrkqchaj98m020ii082jn38pwnmb6v3p02wk")))))))
1006
93eeadf0
JL
1007(define-public ocamlmod
1008 (package
1009 (name "ocamlmod")
1010 (version "0.0.8")
1011 (source (origin
1012 (method url-fetch)
1013 (uri (ocaml-forge-uri name version 1544))
1014 (sha256
1015 (base32
1016 "1w0w8lfyymvk300dv13gvhrddpcyknvyp4g2yvq2vaw7khkhjs9g"))))
1017 (build-system ocaml-build-system)
1018 (native-inputs
1019 `(("ounit" ,ocaml-ounit)))
1020 (arguments
3dcaa122
DC
1021 `(#:phases
1022 (modify-phases %standard-phases
1023 ;; Tests are done during build.
1024 (delete 'check))))
93eeadf0
JL
1025 (home-page "https://forge.ocamlcore.org/projects/ocamlmod")
1026 (synopsis "Generate modules from OCaml source files")
1027 (description "Generate modules from OCaml source files.")
1028 (license license:lgpl2.1+))) ; with an exception
ddf2b503
JL
1029
1030(define-public ocaml-zarith
1031 (package
1032 (name "ocaml-zarith")
1033 (version "1.4.1")
1034 (source (origin
1035 (method url-fetch)
1036 (uri (ocaml-forge-uri "zarith" version 1574))
1037 (sha256
1038 (base32
1039 "0l36hzmfbvdai2kcgynh13vfdim5x2grnaw61fxqalyjm90c3di3"))))
1040 (build-system ocaml-build-system)
1041 (native-inputs
1042 `(("perl" ,perl)))
1043 (inputs
1044 `(("gmp" ,gmp)))
1045 (arguments
1046 `(#:tests? #f ; no test target
1047 #:phases
1048 (modify-phases %standard-phases
1049 (replace 'configure
1050 (lambda* (#:key #:allow-other-keys)
1051 (zero? (system* "./configure")))))))
1052 (home-page "https://forge.ocamlcore.org/projects/zarith/")
1053 (synopsis "Implements arbitrary-precision integers")
1054 (description "Implements arithmetic and logical operations over
1055arbitrary-precision integers. It uses GMP to efficiently implement arithmetic
1056over big integers. Small integers are represented as Caml unboxed integers,
1057for speed and space economy.")
1058 (license license:lgpl2.1+))) ; with an exception
ff891f10
JL
1059
1060(define-public ocaml-frontc
1061 (package
1062 (name "ocaml-frontc")
1063 (version "3.4")
1064 (source (origin
1065 (method url-fetch)
1066 (uri (string-append "https://www.irit.fr/recherches/ARCHI/MARCH/"
1067 "frontc/Frontc-" version ".tgz"))
1068 (sha256
1069 (base32
1070 "16dz153s92dgbw1rrfwbhscy73did87kfmjwyh3qpvs748h1sc4g"))))
1071 (build-system ocaml-build-system)
1072 (arguments
1073 `(#:phases
1074 (modify-phases %standard-phases
1075 (delete 'configure)
1076 (add-after 'install 'install-meta
1077 (lambda* (#:key outputs #:allow-other-keys)
1078 (let ((out (assoc-ref outputs "out")))
1079 (with-output-to-file
1080 (string-append out "/lib/ocaml/frontc/META")
1081 (lambda _
1082 (display
1083 (string-append
1084 "description = \"Parser for the C language\"
1085version = \"" ,version "\"
1086requires = \"unix\"
1087archive(byte) = \"frontc.cma\"
1088archive(native) = \"frontc.cmxa\""))))
1089 (symlink (string-append out "/lib/ocaml/frontc")
1090 (string-append out "/lib/ocaml/FrontC"))))))
1091 #:make-flags (list (string-append "PREFIX="
1092 (assoc-ref %outputs "out"))
1093 "OCAML_SITE=$(LIB_DIR)/ocaml/")))
1094 (home-page "https://www.irit.fr/FrontC")
1095 (synopsis "C parser and lexer library")
1096 (description "FrontC is an OCAML library providing a C parser and lexer.
1097The result is a syntactic tree easy to process with usual OCAML tree management.
1098It provides support for ANSI C syntax, old-C K&R style syntax and the standard
1099GNU CC attributes. It provides also a C pretty printer as an example of use.")
1100 (license license:lgpl2.1)))
0472836f 1101
2c6ef0dd
JL
1102(define-public ocaml-qcheck
1103 (package
1104 (name "ocaml-qcheck")
1105 (version "0.5.3.1")
1106 (source (origin
1107 (method url-fetch)
1108 (uri (string-append "https://github.com/c-cube/qcheck/archive/"
1109 version ".tar.gz"))
1110 (file-name (string-append name "-" version ".tar.gz"))
1111 (sha256
1112 (base32
1113 "1zs1pg5cb1iry554v3cdmmiglsrwmsqa9x8zxmzb118fnk5d3ha6"))))
1114 (build-system ocaml-build-system)
1115 (native-inputs
1116 `(("ounit" ,ocaml-ounit)))
1117 (home-page "https://github.com/c-cube/qcheck")
1118 (synopsis "QuickCheck inspired property-based testing for OCaml")
1119 (description "QuickCheck inspired property-based testing for OCaml. This
1120module allows to check invariants (properties of some types) over randomly
1121generated instances of the type. It provides combinators for generating
1122instances and printing them.")
1123 (license license:lgpl3+)))
1124
0472836f
JL
1125(define-public ocaml-qtest
1126 (package
1127 (name "ocaml-qtest")
fdb3fba3 1128 (version "2.8")
0472836f
JL
1129 (source (origin
1130 (method url-fetch)
fdb3fba3
EF
1131 (uri (string-append "https://github.com/vincent-hugot/qtest/"
1132 "archive/" version ".tar.gz"))
79234c0a 1133 (file-name (string-append name "-" version ".tar.gz"))
0472836f
JL
1134 (sha256
1135 (base32
fdb3fba3 1136 "1ff4if64mc9c7wmhjdgnlnh6k6a713piqzr4043zzj4s5pw7smxk"))))
0472836f
JL
1137 (build-system ocaml-build-system)
1138 (native-inputs
1139 `(("findlib" ,ocaml-findlib)))
1140 (propagated-inputs
e24d5271
JL
1141 `(("ounit" ,ocaml-ounit)
1142 ("qcheck" ,ocaml-qcheck)))
0472836f
JL
1143 (arguments
1144 `(#:tests? #f ; No test target.
1145 #:make-flags
1146 (list (string-append "BIN=" (assoc-ref %outputs "out") "/bin"))
1147 #:phases
1148 (modify-phases %standard-phases
1149 (delete 'configure))))
fdb3fba3 1150 (home-page "https://github.com/vincent-hugot/qtest")
0472836f
JL
1151 (synopsis "Inline (Unit) Tests for OCaml")
1152 (description "Qtest extracts inline unit tests written using a special
1153syntax in comments. Those tests are then run using the oUnit framework and the
1154qcheck library. The possibilities range from trivial tests -- extremely simple
1155to use -- to sophisticated random generation of test cases.")
1156 (license license:lgpl3+)))
3d598ebd 1157
0274521a
BW
1158(define-public ocaml4.01-qtest
1159 (package-with-ocaml4.01 ocaml-qtest))
1160
3d598ebd
JL
1161(define-public ocaml-stringext
1162 (package
1163 (name "ocaml-stringext")
1164 (version "1.4.3")
1165 (source (origin
1166 (method url-fetch)
1167 (uri (string-append "https://github.com/rgrinberg/stringext"
1168 "/archive/v" version ".tar.gz"))
b965c1ca 1169 (file-name (string-append name "-" version ".tar.gz"))
3d598ebd
JL
1170 (sha256
1171 (base32
1172 "19g6lfn03iki9f8h91hi0yiqn0b3wkxyq08b3y23wgv6jw6mssfh"))))
1173 (build-system ocaml-build-system)
1174 (native-inputs
1175 `(("qtest" ,ocaml-qtest)))
1176 (home-page "https://github.com/rgrinberg/stringext")
1177 (synopsis "Extra string functions for OCaml")
1178 (description "Provides a single module named Stringext that provides a grab
1179bag of often used but missing string functions from the stdlib. E.g, split,
1180full_split, cut, rcut, etc..")
1181 ;; the only mention of a license in this project is in its `opam' file
1182 ;; where it says `mit'.
1183 (license license:expat)))
a5b5bd1d
JL
1184
1185
1186(define-public ocaml-bisect
1187 (package
1188 (name "ocaml-bisect")
1189 (version "1.3")
1190 (source (origin
1191 (method url-fetch)
1192 (uri (ocaml-forge-uri "bisect" version 1051))
1193 (sha256
1194 (base32
1195 "0kcg2rh0qlkfpbv3nhcb75n62b04gbrz0zasq15ynln91zd5qrg0"))
1196 (patches
1197 (search-patches
1198 "ocaml-bisect-fix-camlp4-in-another-directory.patch"))))
1199 (build-system ocaml-build-system)
1200 (native-inputs
1201 `(("camlp4" ,camlp4)
1202 ("libxml2" ,libxml2)
1203 ("which" ,which)))
1204 (propagated-inputs
1205 `(("camlp4" ,camlp4)))
1206 (arguments
1207 `(#:test-target "tests"
1208 #:make-flags
1209 (list "all" (string-append "CAMLP4_LIBDIR="
1210 (assoc-ref %build-inputs "camlp4")
1211 "/lib/ocaml/site-lib/camlp4"))
1212 #:phases
1213 (modify-phases %standard-phases
1214 (replace 'configure
1215 (lambda* (#:key outputs #:allow-other-keys)
1216 (zero? (system* "./configure" "-prefix"
1217 (assoc-ref outputs "out"))))))))
1218 (home-page "http://bisect.x9c.fr")
1219 (synopsis "Code coverage tool for the OCaml language")
1220 (description "Bisect is a code coverage tool for the OCaml language. It is
1221a camlp4-based tool that allows to instrument your application before running
1222tests. After application execution, it is possible to generate a report in HTML
1223format that is the replica of the application source code annotated with code
1224coverage information.")
1345231c 1225 (properties `((ocaml4.01-variant . ,(delay ocaml4.01-bisect))))
a5b5bd1d 1226 (license license:gpl3+)))
44c23cb8 1227
1345231c
BW
1228(define-public ocaml4.01-bisect
1229 (let ((base (package-with-ocaml4.01 (strip-ocaml4.01-variant ocaml-bisect))))
1230 (package
1231 (inherit base)
1232 (arguments
1233 `(#:ocaml ,ocaml-4.01
1234 ;; Camlp4 is included with OCaml 4.01, so do not include it as a
1235 ;; separate input.
1236 ,@(strip-keyword-arguments '(#:make-flags) (package-arguments base))))
1237 (native-inputs `(,@(alist-delete "camlp4" (package-native-inputs base))))
1238 (propagated-inputs
1239 `(,@(alist-delete "camlp4" (package-propagated-inputs base)))))))
1240
44c23cb8
JL
1241(define-public ocaml-bitstring
1242 (package
1243 (name "ocaml-bitstring")
7b20cd57 1244 (version "2.1.1")
44c23cb8
JL
1245 (source (origin
1246 (method url-fetch)
1247 (uri (string-append "https://github.com/xguerin/bitstring"
1248 "/archive/v" version ".tar.gz"))
0aee7fdc 1249 (file-name (string-append name "-" version ".tar.gz"))
44c23cb8
JL
1250 (sha256
1251 (base32
7b20cd57 1252 "0vy8ibrxccii1jbsk5q6yh1kxjigqvi7lhhcmizvd5gfhf7mfyc8"))
44c23cb8
JL
1253 (patches (search-patches "ocaml-bitstring-fix-configure.patch"))))
1254 (build-system ocaml-build-system)
1255 (native-inputs
1256 `(("camlp4" ,camlp4)
1257 ("time" ,time)
1258 ("autoconf" ,autoconf)
1259 ("automake" ,automake)
1260 ("bisect" ,ocaml-bisect)))
1261 (propagated-inputs
1262 `(("camlp4" ,camlp4)))
1263 (arguments
1264 `(#:configure-flags
1265 (list "CAMLP4OF=camlp4of" "--enable-coverage")
1266 #:make-flags
1267 (list (string-append "BISECTLIB="
1268 (assoc-ref %build-inputs "bisect")
1269 "/lib/ocaml/site-lib")
1270 (string-append "OCAMLCFLAGS=-g -I "
1271 (assoc-ref %build-inputs "camlp4")
1272 "/lib/ocaml/site-lib/camlp4 -I "
1273 "$(BISECTLIB)/bisect")
1274 (string-append "OCAMLOPTFLAGS=-g -I "
1275 (assoc-ref %build-inputs "camlp4")
1276 "/lib/ocaml/site-lib/camlp4 -I "
1277 "$(BISECTLIB)/bisect"))
1278 #:phases
1279 (modify-phases %standard-phases
1280 (add-before 'configure 'fix-configure
1281 (lambda* (#:key inputs #:allow-other-keys)
1282 (substitute* "Makefile.in"
1283 (("@abs_top_builddir@")
1284 (string-append "@abs_top_builddir@:" (getenv "LIBRARY_PATH"))))
1285 (substitute* "configure"
1286 (("-/bin/sh") (string-append "-" (assoc-ref inputs "bash")
1287 "/bin/sh")))))
1288 (add-after 'install 'link-lib
1289 (lambda* (#:key outputs #:allow-other-keys)
1290 (let* ((out (assoc-ref outputs "out"))
1291 (stubs (string-append out
1292 "/lib/ocaml/site-lib/stubslibs"))
1293 (lib (string-append out
1294 "/lib/ocaml/site-lib/bitstring")))
1295 (mkdir-p stubs)
1296 (symlink (string-append lib "/dllbitstring.so")
1297 (string-append stubs "/dllbitstring.so"))))))))
1298 (home-page "https://github.com/xguerin/bitstring")
1299 (synopsis "Bitstrings and bitstring matching for OCaml")
1300 (description "Adds Erlang-style bitstrings and matching over bitstrings as
1301a syntax extension and library for OCaml. You can use this module to both parse
1302and generate binary formats, files and protocols. Bitstring handling is added
1303as primitives to the language, making it exceptionally simple to use and very
1304powerful.")
1305 (license license:isc)))
704b990c
JL
1306
1307(define-public ocaml-result
1308 (package
1309 (name "ocaml-result")
1310 (version "1.2")
1311 (source (origin
1312 (method url-fetch)
1313 (uri (string-append "https://github.com/janestreet/result"
1314 "/archive/" version ".tar.gz"))
232557c1 1315 (file-name (string-append name "-" version ".tar.gz"))
704b990c
JL
1316 (sha256
1317 (base32
1318 "1pgpfsgvhxnh0i37fkvp9j8nadns9hz9iqgabj4dr519j2gr1xvw"))))
1319 (build-system ocaml-build-system)
1320 (arguments
1321 `(#:tests? #f
1322 #:phases
1323 (modify-phases %standard-phases
1324 (delete 'configure))))
1325 (home-page "https://github.com/janestreet/result")
1326 (synopsis "Compatibility Result module")
1327 (description "Uses the new result type defined in OCaml >= 4.03 while
1328staying compatible with older version of OCaml should use the Result module
1329defined in this library.")
1330 (license license:bsd-3)))
a359c727
JL
1331
1332(define-public ocaml-topkg
1333 (package
1334 (name "ocaml-topkg")
1335 (version "0.8.1")
1336 (source (origin
1337 (method url-fetch)
1338 (uri (string-append "http://erratique.ch/software/topkg/releases/"
1339 "topkg-" version ".tbz"))
1340 (sha256
1341 (base32
1342 "18rrh6fmf708z7dd30amljmcgaypj3kk49jrmrj68r4wnw8004j8"))))
1343 (build-system ocaml-build-system)
1344 (native-inputs
1345 `(("opam" ,opam)))
1346 (propagated-inputs
1347 `(("result" ,ocaml-result)))
1348 (arguments
1349 `(#:tests? #f
1350 #:build-flags '("build")
1351 #:phases
1352 (modify-phases %standard-phases
1353 (delete 'configure))))
1354 (home-page "http://erratique.ch/software/topkg")
1355 (synopsis "Transitory OCaml software packager")
1356 (description "Topkg is a packager for distributing OCaml software. It
1357provides an API to describe the files a package installs in a given build
1358configuration and to specify information about the package's distribution,
1359creation and publication procedures.")
1360 (license license:isc)))
63147e5e
JL
1361
1362(define-public ocaml-rresult
1363 (package
1364 (name "ocaml-rresult")
1365 (version "0.5.0")
1366 (source (origin
1367 (method url-fetch)
1368 (uri (string-append "http://erratique.ch/software/rresult/releases/"
1369 "rresult-" version ".tbz"))
1370 (sha256
1371 (base32
1372 "1xxycxhdhaq8p9vhwi93s2mlxjwgm44fcxybx5vghzgbankz9yhm"))))
1373 (build-system ocaml-build-system)
1374 (native-inputs
1375 `(("opam" ,opam)))
1376 (propagated-inputs
1377 `(("topkg" ,ocaml-topkg)))
1378 (arguments
1379 `(#:tests? #f
1380 #:build-flags '("build")
1381 #:phases
1382 (modify-phases %standard-phases
1383 (delete 'configure))))
1384 (home-page "http://erratique.ch/software/rresult")
1385 (synopsis "Result value combinators for OCaml")
1386 (description "Handle computation results and errors in an explicit and
1387declarative manner, without resorting to exceptions. It defines combinators
1388to operate on the result type available from OCaml 4.03 in the standard
1389library.")
1390 (license license:isc)))
eb1ba731 1391
0c4dbdc2
BW
1392(define-public ocaml-sqlite3
1393 (package
1394 (name "ocaml-sqlite3")
1395 (version "4.1.2")
1396 (source
1397 (origin
1398 (method url-fetch)
1399 (uri (string-append
1400 "https://github.com/mmottl/sqlite3-ocaml/releases/download/v"
1401 version "/sqlite3-ocaml-" version ".tar.gz"))
1402 (sha256
1403 (base32
1404 "14c1nir7c6bivajg0vyx853y7la7r5d25g1v5hjb2wfi73r15p1m"))))
1405 (build-system ocaml-build-system)
1406 (native-inputs
1407 `(("pkg-config" ,pkg-config)))
1408 (inputs
1409 `(("sqlite" ,sqlite)))
1410 (home-page "https://mmottl.github.io/sqlite3-ocaml")
1411 (synopsis "SQLite3 Bindings for OCaml")
1412 (description
1413 "SQLite3-OCaml is an OCaml library with bindings to the SQLite3 client
1414API. Sqlite3 is a self-contained, serverless, zero-configuration,
1415transactional SQL database engine with outstanding performance for many use
1416cases. These bindings are written in a way that enables a friendly
1417coexistence with the old (version 2) SQLite and its OCaml wrapper
1418@code{ocaml-sqlite}.")
1419 (license license:expat)))
1420
17bd460f
BW
1421(define-public ocaml4.01-sqlite3
1422 (package-with-ocaml4.01 ocaml-sqlite3))
1423
91df9eae
BW
1424(define-public ocaml-csv
1425 (package
1426 (name "ocaml-csv")
1427 (version "1.6")
1428 (source
1429 (origin
1430 (method url-fetch)
1431 (uri
1432 (string-append
7bf837fd 1433 "https://github.com/Chris00/ocaml-csv/releases/download/"
91df9eae
BW
1434 version "/csv-" version ".tar.gz"))
1435 (sha256
1436 (base32
1437 "0rv7x843vn6scxj87hzl01yqrl26rc27lr8s7z6rp9vs745g05zj"))))
1438 (build-system ocaml-build-system)
1439 (home-page "https://github.com/Chris00/ocaml-csv")
1440 (synopsis "Pure OCaml functions to read and write CSV")
1441 (description
1442 "@dfn{Comma separated values} (CSV) is a simple tabular format supported
1443by all major spreadsheets. This library implements pure OCaml functions to
1444read and write files in this format as well as some convenience functions to
1445manipulate such data.")
1446 (license (package-license camlp4))))
1447
3dc671e1
BW
1448(define-public ocaml4.01-csv
1449 (package-with-ocaml4.01 ocaml-csv))
1450
eb1ba731
JL
1451(define-public ocaml-mtime
1452 (package
1453 (name "ocaml-mtime")
1454 (version "0.8.3")
1455 (source (origin
1456 (method url-fetch)
1457 (uri (string-append "http://erratique.ch/software/mtime/releases/"
1458 "mtime-" version ".tbz"))
1459 (sha256
1460 (base32
1461 "1hfx4ny2dkw6jf3jppz0640dafl5xgn8r2si9kpwzhmibal8qrah"))))
1462 (build-system ocaml-build-system)
1463 (native-inputs
1464 `(("opam" ,opam)))
1465 (propagated-inputs
1466 `(("topkg" ,ocaml-topkg)))
1467 (arguments
1468 `(#:tests? #f
1469 #:build-flags
1470 '("native=true" "native-dynlink=true" "jsoo=false")
1471 #:phases
1472 (modify-phases %standard-phases
1473 (delete 'configure))))
1474 (home-page "http://erratique.ch/software/mtime")
1475 (synopsis "Monotonic wall-clock time for OCaml")
1476 (description "Access monotonic wall-clock time. It allows to measure time
1477spans without being subject to operating system calendar time adjustments.")
1478 (license license:isc)))
6548e53f
JL
1479
1480(define-public ocaml-cmdliner
1481 (package
1482 (name "ocaml-cmdliner")
1483 (version "0.9.8")
1484 (source (origin
1485 (method url-fetch)
1486 (uri (string-append "http://erratique.ch/software/cmdliner/releases/"
1487 "cmdliner-" version ".tbz"))
1488 (sha256
1489 (base32
1490 "0hdxlkgiwjml9dpaa80282a8350if7mc1m6yz2mrd7gci3fszykx"))))
1491 (build-system ocaml-build-system)
1492 (native-inputs
1493 `(("opam" ,opam)))
1494 (arguments
1495 `(#:tests? #f
1496 #:build-flags '("native=true" "native-dynlink=true")
1497 #:phases
1498 (modify-phases %standard-phases
1499 (delete 'configure))))
1500 (home-page "http://erratique.ch/software/cmdliner")
1501 (synopsis "Declarative definition of command line interfaces for OCaml")
1502 (description "Cmdliner is a module for the declarative definition of command
1503line interfaces. It provides a simple and compositional mechanism to convert
1504command line arguments to OCaml values and pass them to your functions. The
1505module automatically handles syntax errors, help messages and UNIX man page
1506generation. It supports programs with single or multiple commands and respects
1507most of the POSIX and GNU conventions.")
1508 (license license:bsd-3)))
beeb2d41
JL
1509
1510(define-public ocaml-fmt
1511 (package
1512 (name "ocaml-fmt")
1513 (version "0.8.0")
1514 (source
1515 (origin
1516 (method url-fetch)
1517 (uri (string-append "http://erratique.ch/software/fmt/releases/fmt-"
1518 version ".tbz"))
1519 (sha256 (base32
1520 "16y7ibndnairb53j8a6qgipyqwjxncn4pl9jiw5bxjfjm59108px"))))
1521 (build-system ocaml-build-system)
1522 (native-inputs `(("opam" ,opam)
1523 ("topkg" ,ocaml-topkg)))
1524 (propagated-inputs `(("result" ,ocaml-result)
1525 ("cmdliner" ,ocaml-cmdliner)))
1526 (arguments `(#:tests? #f
1527 #:build-flags (list "build" "--with-base-unix" "true"
1528 "--with-cmdliner" "true")
1529 #:phases
1530 (modify-phases %standard-phases
1531 (delete 'configure))))
1532 (home-page "http://erratique.ch/software/fmt")
1533 (synopsis "OCaml Format pretty-printer combinators")
1534 (description "Fmt exposes combinators to devise Format pretty-printing
1535functions.")
1536 (license license:isc)))
f46bceb6
JL
1537
1538(define-public ocaml-astring
1539 (package
1540 (name "ocaml-astring")
1541 (version "0.8.3")
1542 (source
1543 (origin
1544 (method url-fetch)
1545 (uri (string-append "http://erratique.ch/software/astring/releases/astring-"
1546 version ".tbz"))
1547 (sha256 (base32
1548 "0ixjwc3plrljvj24za3l9gy0w30lsbggp8yh02lwrzw61ls4cri0"))))
1549 (build-system ocaml-build-system)
1550 (native-inputs `(("opam" ,opam)
1551 ("topkg" ,ocaml-topkg)))
1552 (arguments `(#:tests? #f
1553 #:build-flags (list "build")
1554 #:phases
1555 (modify-phases %standard-phases
1556 (delete 'configure))))
1557 (home-page "http://erratique.ch/software/astring")
1558 (synopsis "Alternative String module for OCaml")
1559 (description "Astring exposes an alternative String module for OCaml. This
1560module balances minimality and expressiveness for basic, index-free, string
1561processing and provides types and functions for substrings, string sets and
1562string maps. The String module exposed by Astring has exception safe functions,
1563removes deprecated and rarely used functions, alters some signatures and names,
1564adds a few missing functions and fully exploits OCaml's newfound string
1565immutability.")
1566 (license license:isc)))
69705efe
JL
1567
1568(define-public ocaml-alcotest
1569 (package
1570 (name "ocaml-alcotest")
1571 (version "0.7.2")
1572 (source (origin
1573 (method url-fetch)
1574 (uri (string-append "https://github.com/mirage/alcotest/releases/"
1575 "download/" version "/alcotest-" version ".tbz"))
1576 (sha256
1577 (base32
1578 "0g5lzk0gpfx4q8hyhr460gr4lab5wakfxsmhfwvb3yinxwzs95gc"))))
1579 (build-system ocaml-build-system)
1580 (arguments `(#:tests? #f
1581 #:build-flags (list "build")
1582 #:phases
1583 (modify-phases %standard-phases
1584 (delete 'configure))))
1585 (native-inputs `(("opam" ,opam)
1586 ("topkg" ,ocaml-topkg)))
1587 (propagated-inputs `(("fmt" ,ocaml-fmt)
1588 ("astring" ,ocaml-astring)))
1589 (home-page "https://github.com/mirage/alcotest")
1590 (synopsis "Lightweight OCaml test framework")
1591 (description "Alcotest exposes simple interface to perform unit tests. It
1592exposes a simple TESTABLE module type, a check function to assert test
1593predicates and a run function to perform a list of unit -> unit test callbacks.
1594Alcotest provides a quiet and colorful output where only faulty runs are fully
1595displayed at the end of the run (with the full logs ready to inspect), with a
1596simple (yet expressive) query language to select the tests to run.")
1597 (license license:isc)))
0a7b43a8
JL
1598
1599(define-public ocaml-ppx-tools
1600 (package
1601 (name "ocaml-ppx-tools")
1602 (version "5.0+4.02.0")
1603 (source
1604 (origin
1605 (method url-fetch)
1606 (uri (string-append "https://github.com/alainfrisch/ppx_tools/archive/"
1607 version ".tar.gz"))
1608 (sha256 (base32
1609 "0rjg4rngi8k9873z4zq95zn9hj8qyw1vcrf11y15aqasfpqq16rc"))))
1610 (build-system ocaml-build-system)
1611 (arguments `(#:phases (modify-phases %standard-phases (delete 'configure))
1612 #:tests? #f))
1613 (home-page "https://github.com/alainfrisch/ppx_tools")
1614 (synopsis "Tools for authors of ppx rewriters and other syntactic tools")
1615 (description "Tools for authors of ppx rewriters and other syntactic tools.")
1616 (license license:expat)))
1342fce1
JL
1617
1618(define-public ocaml-react
1619 (package
1620 (name "ocaml-react")
1621 (version "1.2.0")
1622 (source
1623 (origin
1624 (method url-fetch)
1625 (uri (string-append "http://erratique.ch/software/react/releases/react-"
1626 version ".tbz"))
1627 (sha256 (base32
1628 "0knhgbngphv5sp1yskfd97crf169qhpc0igr6w7vqw0q36lswyl8"))))
1629 (build-system ocaml-build-system)
1630 (native-inputs `(("opam" ,opam)))
1631 (arguments `(#:tests? #f
1632 #:build-flags (list "native=true" "native-dynlink=true")
1633 #:phases
1634 (modify-phases %standard-phases
1635 (delete 'configure))))
1636 (home-page "http://erratique.ch/software/react")
1637 (synopsis "Declarative events and signals for OCaml")
1638 (description "React is an OCaml module for functional reactive programming
1639(FRP). It provides support to program with time varying values: declarative
1640events and signals. React doesn't define any primitive event or signal, it
1641lets the client choose the concrete timeline.")
1642 (license license:bsd-3)))
37f17e2a
JL
1643
1644(define-public ocaml-ssl
1645 (package
1646 (name "ocaml-ssl")
26b438e0 1647 (version "0.5.5")
37f17e2a
JL
1648 (source
1649 (origin
1650 (method url-fetch)
1651 (uri (string-append "https://github.com/savonet/ocaml-ssl/archive/"
1652 version ".tar.gz"))
04eecf4b 1653 (file-name (string-append name "-" version ".tar.gz"))
37f17e2a 1654 (sha256 (base32
26b438e0 1655 "15p7652cvzdrlqxc1af11mg07wasxr1fsaj44gcmmh6bmav7wfzq"))))
37f17e2a
JL
1656 (build-system ocaml-build-system)
1657 (arguments `(#:tests? #f
1658 #:make-flags (list "OCAMLFIND_LDCONF=ignore")
1659 #:phases
1660 (modify-phases %standard-phases
d10092b8 1661 (add-after 'unpack 'bootstrap
37f17e2a 1662 (lambda* (#:key #:allow-other-keys)
d10092b8 1663 (system* "sh" "bootstrap")
37f17e2a
JL
1664 (substitute* "src/OCamlMakefile"
1665 (("/bin/sh") (which "bash")))
1666 (substitute* "configure"
1667 (("/bin/sh") (which "bash"))))))))
1668 (native-inputs `(("autoconf" ,autoconf)
1669 ("automake" ,automake)
1670 ("which" ,which)))
1671 (propagated-inputs `(("openssl" ,openssl)))
1672 (home-page "https://github.com/savonet/ocaml-ssl/")
1673 (synopsis "OCaml bindings for OpenSSL")
36dba63b
TGR
1674 (description
1675 "OCaml-SSL is a set of bindings for OpenSSL, a library for communicating
1676through Transport Layer Security (@dfn{TLS}) encrypted connections.")
37f17e2a 1677 (license license:lgpl2.1)))
1fdfbadf
JL
1678
1679(define-public ocaml-lwt
1680 (package
1681 (name "ocaml-lwt")
1682 (version "2.6.0")
1683 (source
1684 (origin
1685 (method url-fetch)
1686 (uri (string-append "https://github.com/ocsigen/lwt/archive/" version
1687 ".tar.gz"))
14ebf2fc 1688 (file-name (string-append name "-" version ".tar.gz"))
1fdfbadf
JL
1689 (sha256 (base32
1690 "1gbw0g8a5a4b16diqrmlhc8ilnikrm4w3jjm1zq310maqg8z0zxz"))))
1691 (build-system ocaml-build-system)
1692 (arguments
1693 `(#:configure-flags
1694 (list "--enable-ssl" "--enable-glib" "--enable-react"
1695 "--enable-ppx")
1696 #:phases
1697 (modify-phases %standard-phases
1698 (add-before 'configure 'disable-some-checks
1699 (lambda* (#:key #:allow-other-keys)
1700 (substitute* "tests/unix/main.ml"
1701 (("Test_mcast.suite;") ""))))
1702 (add-after 'install 'link-stubs
1703 (lambda* (#:key outputs #:allow-other-keys)
1704 (let* ((out (assoc-ref outputs "out"))
1705 (stubs (string-append out "/lib/ocaml/site-lib/stubslibs"))
1706 (lib (string-append out "/lib/ocaml/site-lib/lwt")))
1707 (mkdir-p stubs)
1708 (symlink (string-append lib "/dlllwt-glib_stubs.so")
1709 (string-append stubs "/dlllwt-glib_stubs.so"))
1710 (symlink (string-append lib "/dlllwt-unix_stubs.so")
1711 (string-append stubs "/dlllwt-unix_stubs.so"))))))))
1712 (native-inputs `(("pkg-config" ,pkg-config)
1713 ("ppx-tools" ,ocaml-ppx-tools)))
1714 (inputs `(("libev" ,libev)
1715 ("glib" ,glib)))
1716 (propagated-inputs `(("result" ,ocaml-result)
1717 ("ocaml-ssl" ,ocaml-ssl)
1718 ("ocaml-react" ,ocaml-react)))
1719 (home-page "https://github.com/ocsigen/lwt")
1720 (synopsis "Cooperative threads and I/O in monadic style")
1721 (description "Lwt provides typed, composable cooperative threads. These
1722make it easy to run normally-blocking I/O operations concurrently in a single
1723process. Also, in many cases, Lwt threads can interact without the need for
1724locks or other synchronization primitives.")
1725 (license license:lgpl2.1)))
9dc7dcb2
JL
1726
1727(define-public ocaml-logs
1728 (package
1729 (name "ocaml-logs")
1730 (version "0.6.2")
1731 (source (origin
1732 (method url-fetch)
1733 (uri (string-append "http://erratique.ch/software/logs/releases/"
1734 "logs-" version ".tbz"))
1735 (sha256
1736 (base32
1737 "1khbn7jqpid83zn8rvyh1x1sirls7zc878zj4fz985m5xlsfy853"))))
1738 (build-system ocaml-build-system)
1739 (arguments `(#:tests? #f
1740 #:build-flags (list "build" "--with-js_of_ocaml" "false")
1741 #:phases
1742 (modify-phases %standard-phases
1743 (delete 'configure))))
1744 (native-inputs `(("opam" ,opam)))
1745 (propagated-inputs `(("fmt" ,ocaml-fmt)
1746 ("lwt" ,ocaml-lwt)
1747 ("mtime" ,ocaml-mtime)
1748 ("result" ,ocaml-result)
1749 ("cmdliner" ,ocaml-cmdliner)
1750 ("topkg" ,ocaml-topkg)))
1751 (home-page "http://erratique.ch/software/logs")
1752 (synopsis "Logging infrastructure for OCaml")
1753 (description "Logs provides a logging infrastructure for OCaml. Logging is
1754performed on sources whose reporting level can be set independently. Log
1755message report is decoupled from logging and is handled by a reporter.")
1756 (license license:isc)))
fbf38b09
JL
1757
1758(define-public ocaml-fpath
1759 (package
1760 (name "ocaml-fpath")
1761 (version "0.7.1")
1762 (source (origin
1763 (method url-fetch)
1764 (uri (string-append "http://erratique.ch/software/fpath/releases/"
1765 "fpath-" version ".tbz"))
1766 (sha256
1767 (base32
1768 "05134ij27xjl6gaqsc65yl19vfj6cjxq3mbm9bf4mija8grdpn6g"))))
1769 (build-system ocaml-build-system)
1770 (arguments `(#:tests? #f
1771 #:build-flags (list "build")
1772 #:phases
1773 (modify-phases %standard-phases
1774 (delete 'configure))))
1775 (native-inputs `(("opam" ,opam)))
1776 (propagated-inputs `(("topkg" ,ocaml-topkg)
1777 ("astring" ,ocaml-astring)))
1778 (home-page "http://erratique.ch/software/fpath")
1779 (synopsis "File system paths for OCaml")
1780 (description "Fpath is an OCaml module for handling file system paths with
1781POSIX or Windows conventions. Fpath processes paths without accessing the
1782file system and is independent from any system library.")
1783 (license license:isc)))
33e0702d
JL
1784
1785(define-public ocaml-bos
1786 (package
1787 (name "ocaml-bos")
1788 (version "0.1.4")
1789 (source (origin
1790 (method url-fetch)
1791 (uri (string-append "http://erratique.ch/software/bos/releases/"
1792 "bos-" version ".tbz"))
1793 (sha256
1794 (base32
1795 "1ly66lysk4w6mdy4k1n3ynlpfpq7lw4wshcpzgx58v6x613w5s7q"))))
1796 (build-system ocaml-build-system)
1797 (arguments `(#:tests? #f
1798 #:build-flags (list "build")
1799 #:phases
1800 (modify-phases %standard-phases
1801 (delete 'configure))))
1802 (native-inputs `(("opam" ,opam)))
1803 (propagated-inputs `(("topkg" ,ocaml-topkg)
1804 ("astring" ,ocaml-astring)
1805 ("fmt" ,ocaml-fmt)
1806 ("fpath" ,ocaml-fpath)
1807 ("logs" ,ocaml-logs)
1808 ("rresult" ,ocaml-rresult)))
1809 (home-page "http://erratique.ch/software/bos")
1810 (synopsis "Basic OS interaction for OCaml")
1811 (description "Bos provides support for basic and robust interaction with
1812the operating system in OCaml. It has functions to access the process
1813environment, parse command line arguments, interact with the file system and
1814run command line programs.")
1815 (license license:isc)))
036b8579
JL
1816
1817(define-public ocaml-xmlm
1818 (package
1819 (name "ocaml-xmlm")
1820 (version "1.2.0")
1821 (source (origin
1822 (method url-fetch)
1823 (uri (string-append "http://erratique.ch/software/xmlm/releases/"
1824 "xmlm-" version ".tbz"))
1825 (sha256
1826 (base32
1827 "1jywcrwn5z3gkgvicr004cxmdaqfmq8wh72f81jqz56iyn5024nh"))))
1828 (build-system ocaml-build-system)
1829 (arguments `(#:tests? #f
1830 #:phases
1831 (modify-phases %standard-phases
1832 (delete 'configure)
1833 (replace 'build
1834 (lambda* (#:key #:allow-other-keys)
1835 (zero? (system* "pkg/build" "true")))))))
1836 (native-inputs `(("opam" ,opam)))
1837 (home-page "http://erratique.ch/software/xmlm")
1838 (synopsis "Streaming XML codec for OCaml")
1839 (description "Xmlm is a streaming codec to decode and encode the XML data
1840format. It can process XML documents without a complete in-memory
1841representation of the data.")
1842 (license license:isc)))
6e9b678e 1843
9bf9b3c0
BW
1844(define-public ocaml4.01-xmlm
1845 (package-with-ocaml4.01 ocaml-xmlm))
1846
6e9b678e
JL
1847(define-public ocaml-ulex
1848 (package
1849 (name "ocaml-ulex")
1850 (version "1.1")
1851 (source (origin
1852 (method url-fetch)
1853 (uri (string-append "http://www.cduce.org/download/ulex-"
1854 version ".tar.gz"))
1855 (sha256
1856 (base32
1857 "0fjlkwps14adfgxdrbb4yg65fhyimplvjjs1xqj5np197cig67x0"))))
1858 (build-system ocaml-build-system)
1859 (arguments `(#:phases (modify-phases %standard-phases (delete 'configure))
1860 #:tests? #f
1861 #:make-flags
1862 (list "all.opt"
1863 (string-append "OCAMLBUILD=ocamlbuild -byte-plugin "
1864 "-cflags -I,"
1865 (assoc-ref %build-inputs "camlp4")
1866 "/lib/ocaml/site-lib/camlp4"))))
1867 (native-inputs `(("camlp4" ,camlp4)))
1868 (home-page "http://www.cduce.org/download.html#side")
1869 (synopsis "Lexer generator for Unicode and OCaml")
1870 (description "Lexer generator for Unicode and OCaml.")
1871 (license license:expat)))
33f16b9a
JL
1872
1873(define-public ocaml-uchar
1874 (package
1875 (name "ocaml-uchar")
1876 (version "0.0.1")
1877 (source
1878 (origin
1879 (method url-fetch)
1880 (uri (string-append "https://github.com/ocaml/uchar/releases/download/v"
1881 version "/uchar-" version ".tbz"))
1882 (sha256 (base32
1883 "0ficw1x7ymbd6m8hqw3w1aycwm1hbwd6bad3c5pspwnzh3qlikhi"))))
1884 (build-system ocaml-build-system)
1885 (arguments `(#:tests? #f
1886 #:build-flags (list "native=true" "native-dynlink=true")
1887 #:phases
1888 (modify-phases %standard-phases
1889 (delete 'configure))))
1890 (native-inputs `(("opam" ,opam)))
1891 (home-page "https://github.com/ocaml/uchar")
1892 (synopsis "Compatibility library for OCaml's Uchar module")
1893 (description "The uchar package provides a compatibility library for the
1894`Uchar` module introduced in OCaml 4.03.")
1895 (license license:lgpl2.1)))
84290923
JL
1896
1897(define-public ocaml-uutf
1898 (package
1899 (name "ocaml-uutf")
1900 (version "1.0.0")
1901 (source (origin
1902 (method url-fetch)
1903 (uri (string-append "http://erratique.ch/software/uutf/releases/"
1904 "uutf-" version ".tbz"))
1905 (sha256
1906 (base32
1907 "08i0cw02cxw4mi2rs01v9xi307qshs6fnd1dlqyb52kcxzblpp37"))))
1908 (build-system ocaml-build-system)
1909 (arguments `(#:tests? #f
1910 #:build-flags (list "build")
1911 #:phases
1912 (modify-phases %standard-phases
1913 (delete 'configure))))
1914 (native-inputs `(("opam" ,opam)
1915 ("topkg" ,ocaml-topkg)))
1916 (propagated-inputs `(("uchar" ,ocaml-uchar)
1917 ("cmdliner" ,ocaml-cmdliner)))
1918 (home-page "http://erratique.ch/software/uutf")
1919 (synopsis "Non-blocking streaming Unicode codec for OCaml")
1920 (description "Uutf is a non-blocking streaming codec to decode and encode
1921the UTF-8, UTF-16, UTF-16LE and UTF-16BE encoding schemes. It can efficiently
1922work character by character without blocking on IO. Decoders perform character
1923position tracking and support newline normalization.
1924
1925Functions are also provided to fold over the characters of UTF encoded OCaml
1926string values and to directly encode characters in OCaml Buffer.t values.")
1927 (license license:isc)))
800ab1fb
JL
1928
1929(define-public ocaml-jsonm
1930 (package
1931 (name "ocaml-jsonm")
1932 (version "1.0.0")
1933 (source (origin
1934 (method url-fetch)
1935 (uri (string-append "http://erratique.ch/software/jsonm/releases/"
1936 "jsonm-" version ".tbz"))
1937 (sha256
1938 (base32
1939 "1v3ln6d965lplj28snjdqdqablpp1kx8bw2cfx0m6i157mqyln62"))))
1940 (build-system ocaml-build-system)
1941 (arguments `(#:tests? #f
1942 #:build-flags (list "build")
1943 #:phases
1944 (modify-phases %standard-phases
1945 (delete 'configure))))
1946 (native-inputs `(("opam" ,opam)
1947 ("topkg" ,ocaml-topkg)))
1948 (propagated-inputs `(("uutf" ,ocaml-uutf)
1949 ("cmdliner" ,ocaml-cmdliner)))
1950 (home-page "http://erratique.ch/software/jsonm")
1951 (synopsis "Non-blocking streaming JSON codec for OCaml")
1952 (description "Jsonm is a non-blocking streaming codec to decode and encode
1953the JSON data format. It can process JSON text without blocking on IO and
1954without a complete in-memory representation of the data.")
1955 (license license:isc)))
fd6e260e
JL
1956
1957(define-public ocaml-ocurl
1958 (package
1959 (name "ocaml-ocurl")
1960 (version "0.7.9")
1961 (source (origin
1962 (method url-fetch)
1963 (uri (string-append "http://ygrek.org.ua/p/release/ocurl/ocurl-"
1964 version ".tar.gz"))
1965 (sha256
1966 (base32
1967 "0pm6nm33wi0p9h765k6zb94ljpknryam4qd1hmb2rsk2y0y1181n"))))
1968 (build-system ocaml-build-system)
1969 (arguments `(#:phases
1970 (modify-phases %standard-phases
1971 (add-before 'configure 'fix-/bin/sh
1972 (lambda* (#:key inputs #:allow-other-keys)
1973 (substitute* "configure"
1974 (("-/bin/sh") (string-append "-" (which "bash")))))))))
1975 (native-inputs `(("pkg-config" ,pkg-config)))
1976 (inputs `(("curl" ,curl)))
1977 (home-page "http://ocurl.forge.ocamlcore.org/")
1978 (synopsis "OCaml bindings for libcurl")
1979 (description "Client-side URL transfer library, supporting HTTP and a
1980multitude of other network protocols (FTP/SMTP/RTSP/etc).")
1981 (license license:isc)))
5d08f98d
JL
1982
1983(define-public ocaml-base64
1984 (package
1985 (name "ocaml-base64")
1986 (version "2.1.2")
1987 (source (origin
1988 (method url-fetch)
1989 (uri (string-append "https://github.com/mirage/ocaml-base64/"
1990 "releases/download/v" version "/base64-"
1991 version ".tbz"))
1992 (file-name (string-append name "-" version ".tar.gz"))
1993 (sha256
1994 (base32
1995 "1p45sawchmrkr22gkmydjc4ary23pisp58zsnb7iq7d82nxs1lfq"))))
1996 (build-system ocaml-build-system)
1997 (arguments
1998 `(#:build-flags (list "build" "--tests" "true")
1999 #:phases
2000 (modify-phases %standard-phases
2001 (delete 'configure))))
2002 (native-inputs
2003 `(("topkg" ,ocaml-topkg)
2004 ("opam" ,opam)
2005 ("rresult" ,ocaml-rresult)
2006 ("bos" ,ocaml-bos)
2007 ("alcotest" ,ocaml-alcotest)))
2008 (home-page "https://github.com/mirage/ocaml-base64")
2009 (synopsis "Base64 encoding for OCaml")
2010 (description "Base64 is a group of similar binary-to-text encoding schemes
2011that represent binary data in an ASCII string format by translating it into a
2012radix-64 representation. It is specified in RFC 4648.")
2013 (license license:isc)))
c590f1ae
JL
2014
2015(define-public ocamlify
2016 (package
2017 (name "ocamlify")
2018 (version "0.0.2")
2019 (source (origin
2020 (method url-fetch)
2021 (uri (ocaml-forge-uri name version 1209))
2022 (sha256
2023 (base32
2024 "1f0fghvlbfryf5h3j4as7vcqrgfjb4c8abl5y0y5h069vs4kp5ii"))))
2025 (build-system ocaml-build-system)
2026 ; tests are done during build
2027 (arguments
2028 `(#:phases
2029 (modify-phases %standard-phases
2030 (delete 'check))))
2031 (home-page "https://forge.ocamlcore.org/projects/ocamlify")
2032 (synopsis "Include files in OCaml code")
2033 (description "OCamlify allows to create OCaml source code by including
2034whole files into OCaml string or string list. The code generated can be
2035compiled as a standard OCaml file. It allows embedding external resources as
2036OCaml code.")
2037 (license license:lgpl2.1+))); with the OCaml static compilation exception
41e8e079
JL
2038
2039(define-public omake
2040 (package
2041 (name "omake")
2042 (version "0.10.1")
2043 (source (origin
2044 (method url-fetch)
2045 (uri (string-append "http://download.camlcity.org/download/"
2046 "omake-" version ".tar.gz"))
2047 (sha256
2048 (base32
2049 "093ansbppms90hiqvzar2a46fj8gm9iwnf8gn38s6piyp70lrbsj"))
2050 (patches (search-patches "omake-fix-non-determinism.patch"))))
2051 (build-system ocaml-build-system)
2052 (arguments
2053 `(#:make-flags
2054 (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
2055 #:tests? #f ; no test target
2056 #:phases
2057 (modify-phases %standard-phases
2058 (add-before 'configure 'fix-makefile
2059 (lambda* (#:key outputs #:allow-other-keys)
2060 (substitute* "mk/osconfig_unix.mk"
2061 (("CC = cc") "CC = gcc")))))))
2062 (native-inputs `(("hevea" ,hevea)))
2063 (home-page "http://projects.camlcity.org/projects/omake.html")
2064 (synopsis "Build system designed for scalability and portability")
2065 (description "Similar to make utilities you may have used, but it features
2066many additional enhancements, including:
2067
2068@enumerate
2069@item Support for projects spanning several directories or directory hierarchies.
2070@item Fast, reliable, automated, scriptable dependency analysis using MD5 digests,
2071 with full support for incremental builds.
2072@item Dependency analysis takes the command lines into account — whenever the
2073 command line used to build a target changes, the target is considered
2074 out-of-date.
2075@item Fully scriptable, includes a library that providing support for standard
2076 tasks in C, C++, OCaml, and LaTeX projects, or a mixture thereof.
2077@end enumerate")
2078 (license (list license:lgpl2.1 ; libmojave
2079 license:expat ; OMake scripts
2080 license:gpl2)))) ; OMake itself, with ocaml linking exception
2081 ; see LICENSE.OMake
0e9e94b7
JL
2082
2083(define-public ocaml-batteries
2084 (package
2085 (name "ocaml-batteries")
2086 (version "2.5.3")
2087 (source (origin
2088 (method url-fetch)
2089 (uri (ocaml-forge-uri "batteries" version 1650))
2090 (sha256
2091 (base32
2092 "1a97w3x2l1jr5x9kj5gqm1x6b0q9fjqdcsvls7arnl3bvzgsia0n"))))
2093 (build-system ocaml-build-system)
2094 (native-inputs
2095 `(("qtest" ,ocaml-qtest)
2096 ("bisect" ,ocaml-bisect)
2097 ("ounit" ,ocaml-ounit)))
2098 (arguments
2099 `(#:phases
2100 (modify-phases %standard-phases
2101 (delete 'check) ; tests are run by the build phase
2102 (replace 'build
2103 (lambda* (#:key outputs #:allow-other-keys)
2104 (zero? (system* "ocaml" "setup.ml" "-build")))))))
2105 (home-page "http://batteries.forge.ocamlcore.org/")
2106 (synopsis "Development platform for the OCaml programming language")
2107 (description "Define a standard set of libraries which may be expected on
2108every compliant installation of OCaml and organize these libraries into a
2109hierarchy of modules.")
2110 (license license:lgpl2.1+)))
f8a12de1 2111
de59e24a
BW
2112(define-public ocaml4.01-batteries
2113 (package-with-ocaml4.01 ocaml-batteries))
2114
f8a12de1
JL
2115(define-public ocaml-pcre
2116 (package
2117 (name "ocaml-pcre")
2118 (version "7.2.3")
2119 (source (origin
2120 (method url-fetch)
2121 (uri (string-append "https://github.com/mmottl/pcre-ocaml/archive"
2122 "/v" version ".tar.gz"))
2123 (file-name (string-append name "-" version ".tar.gz"))
2124 (sha256
2125 (base32
2126 "0rj6dw79px4sj2kq0iss2nzq3rnsn9wivvc0f44wa1mppr6njfb3"))))
2127 (build-system ocaml-build-system)
2128 (arguments
2129 `(#:phases
2130 (modify-phases %standard-phases
2131 (add-after 'install 'link-lib
2132 (lambda* (#:key outputs #:allow-other-keys)
2133 (let* ((out (assoc-ref outputs "out"))
2134 (stubs (string-append out "/lib/ocaml/site-lib/stubslibs"))
2135 (lib (string-append out "/lib/ocaml/site-lib/pcre")))
2136 (mkdir-p stubs)
2137 (symlink (string-append lib "/dllpcre_stubs.so")
2138 (string-append stubs "/dllpcre_stubs.so"))))))))
2139 (native-inputs
2140 `(("batteries" ,ocaml-batteries)
2141 ("pcre:bin" ,pcre "bin")))
2142 (propagated-inputs `(("pcre" ,pcre)))
2143 (home-page "https://mmottl.github.io/pcre-ocaml")
2144 (synopsis "Bindings to the Perl Compatibility Regular Expressions library")
2145 (description "Pcre-ocaml offers library functions for string pattern
2146matching and substitution, similar to the functionality offered by the Perl
2147language.")
2148 (license license:lgpl2.1+))); with the OCaml link exception
3763eea7
JL
2149
2150(define-public ocaml-expect
2151 (package
2152 (name "ocaml-expect")
2153 (version "0.0.5")
2154 (source (origin
2155 (method url-fetch)
2156 (uri (ocaml-forge-uri name version 1372))
2157 (sha256
2158 (base32
2159 "07xq8w2x2vffc32z7vk6y14jwbfb1cw0m2lm1jzi60hnr1dvg8by"))))
2160 (build-system ocaml-build-system)
2161 (native-inputs
2162 `(("ocaml-pcre" ,ocaml-pcre)
2163 ("ounit" ,ocaml-ounit)))
2164 (propagated-inputs `(("batteries" ,ocaml-batteries)))
2165 (home-page "https://forge.ocamlcore.org/projects/ocaml-expect/")
2166 (synopsis "Simple implementation of expect")
2167 (description "Help building unitary testing of interactive program. You
2168can match the question using a regular expression or a timeout.")
2169 (license license:lgpl2.1+))) ; with the OCaml static compilation exception
77a515e9
JL
2170
2171(define-public ocaml-fileutils
2172 (package
2173 (name "ocaml-fileutils")
2174 (version "0.5.1")
2175 (source (origin
2176 (method url-fetch)
2177 (uri (ocaml-forge-uri name version 1651))
2178 (sha256
2179 (base32
2180 "0g6zx2rcvacklxyli19ixcf6ich9ipxsps4k3jz98f5zlaab0a7g"))))
2181 (build-system ocaml-build-system)
2182 (native-inputs `(("ounit" ,ocaml-ounit)))
2183 (home-page "http://ocaml-fileutils.forge.ocamlcore.org")
2184 (synopsis "Pure OCaml functions to manipulate real file and filename")
2185 (description "Library to provide pure OCaml functions to manipulate real
2186file (POSIX like) and filename.")
2187 (license license:lgpl2.1+))) ; with the OCaml static compilation exception
5eed45a8
JL
2188
2189(define-public ocaml-oasis
2190 (package
2191 (name "ocaml-oasis")
2192 (version "0.4.8")
2193 (source (origin
2194 (method url-fetch)
2195 (uri (ocaml-forge-uri name version 1669))
2196 (sha256
2197 (base32
2198 "1ln7vc7ip6s5xbi20mhnn087xi4a2m5vqawx0703qqnfkzhmslqy"))
2199 (modules '((guix build utils)))
2200 (snippet
6cbee49d
MW
2201 '(begin
2202 (substitute* "test/test-main/Test.ml"
2203 ;; most of these tests fail because ld cannot find crti.o, but according
2204 ;; to the log file, the environment variables {LD_,}LIBRARY_PATH
2205 ;; are set correctly whene LD_LIBRARY_PATH is defined beforhand.
2206 (("TestBaseCompat.tests;") "")
2207 (("TestExamples.tests;") "")
2208 (("TestFull.tests;") "")
2209 (("TestPluginDevFiles.tests;") "")
2210 (("TestPluginInternal.tests;") "")
2211 (("TestPluginOCamlbuild.tests;") "")
2212 (("TestPluginOMake.tests;") ""))
2213 #t))))
5eed45a8
JL
2214 (build-system ocaml-build-system)
2215 (native-inputs
2216 `(("ocamlify" ,ocamlify)
2217 ("ocamlmod" ,ocamlmod)
2218 ("ounit" ,ocaml-ounit)
2219 ("omake" ,omake)
2220 ("ocaml-expect" ,ocaml-expect)
2221 ("ocaml-pcre" ,ocaml-pcre)
2222 ("ocaml-fileutils" ,ocaml-fileutils)
2223 ("camlp4" ,camlp4)
2224 ("texlive" ,texlive)
2225 ("pkg-config" ,pkg-config)))
2226 (home-page "https://oasis.forge.ocamlcore.org")
2227 (synopsis "Integrates a configure, build, install system in OCaml projects")
2228 (description "OASIS is a tool to integrate a configure, build and install
2229system in your OCaml projects. It helps to create standard entry points in your
2230build system and allows external tools to analyse your project easily.")
2231 (license license:lgpl2.1+))) ; with ocaml static compilation exception
f95ebba5
JL
2232
2233(define-public ocaml-js-build-tools
2234 (package
2235 (name "ocaml-js-build-tools")
2236 (version "113.33.06")
2237 (source (janestreet-origin "js-build-tools" version
2238 "0r8z4fz8iy5y6hkdlkpwf6rk4qigcr3dzyv35585xgg2ahf12zy6"))
2239 (native-inputs
2240 `(("oasis" ,ocaml-oasis)
2241 ("opam" ,opam)))
2242 (build-system ocaml-build-system)
2243 (arguments janestreet-arguments)
2244 (home-page "https://github.com/janestreet/js-build-tools")
2245 (synopsis "Collection of tools to help building Jane Street Packages")
2246 (description "This package contains tools to help building Jane Street
2247packages, but can be used for other purposes. It contains:
2248@enumerate
2249@item an @command{oasis2opam-install} tool to produce a @file{.install} file
2250from the oasis build log
2251@item a @code{js_build_tools} ocamlbuild plugin with various goodies.
2252@end enumerate")
2253 (license license:asl2.0)))
f5c8cf3b
JL
2254
2255(define-public ocaml-bin-prot
2256 (package
2257 (name "ocaml-bin-prot")
2258 (version "113.33.03")
2259 (source (janestreet-origin "bin_prot" version
2260 "1ws8c017z8nbj3vw92ndvjk9011f71rmp3llncbv8r5fc76wqv3l"))
2261 (native-inputs
2262 `(("js-build-tools" ,ocaml-js-build-tools)
2263 ("opam" ,opam)))
2264 (build-system ocaml-build-system)
2265 (arguments janestreet-arguments)
2266 (home-page "https://github.com/janestreet/bin_prot/")
2267 (synopsis "Binary protocol generator")
2268 (description "This library contains functionality for reading and writing
2269OCaml-values in a type-safe binary protocol. It is extremely efficient,
2270typically supporting type-safe marshalling and unmarshalling of even highly
2271structured values at speeds sufficient to saturate a gigabit connection. The
2272protocol is also heavily optimized for size, making it ideal for long-term
2273storage of large amounts of data.")
2274 (license license:asl2.0)))
6bdf77a2
JL
2275
2276(define-public ocaml-fieldslib
2277 (package
2278 (name "ocaml-fieldslib")
2279 (version "113.33.03")
2280 (source (janestreet-origin "fieldslib" version
2281 "1rm3bn54bzk2hlq8f3w067ak8s772w4a8f78i3yh79vxfzq8ncvv"))
2282 (native-inputs
2283 `(("js-build-tools" ,ocaml-js-build-tools)
2284 ("opam" ,opam)))
2285 (build-system ocaml-build-system)
2286 (arguments janestreet-arguments)
2287 (home-page "https://github.com/janestreet/fieldslib/")
2288 (synopsis "Syntax extension to record fields")
2289 (description "Syntax extension to define first class values representing
2290record fields, to get and set record fields, iterate and fold over all fields
2291of a record and create new record values.")
2292 (license license:asl2.0)))
c3339950
JL
2293
2294(define-public ocaml-ppx-core
2295 (package
2296 (name "ocaml-ppx-core")
2297 (version "113.33.03")
2298 (source (janestreet-origin "ppx_core" version
2299 "0f69l4czhgssnhb5ds2j9dbqjyz8dp1y3i3x0i4h6pxnms20zbxa"))
2300 (build-system ocaml-build-system)
2301 (native-inputs
2302 `(("js-build-tools" ,ocaml-js-build-tools)
2303 ("opam" ,opam)))
2304 (inputs `(("ppx-tools" ,ocaml-ppx-tools)))
2305 (arguments janestreet-arguments)
2306 (home-page "https://github.com/janestreet/ppx_core/")
2307 (synopsis "Standard library for ppx rewriters")
2308 (description "Ppx_core is a standard library for OCaml AST transformers.
2309It contains:
2310@enumerate
2311@item various auto-generated AST traversal using an open recursion scheme
2312@item helpers for building AST fragments
2313@item helpers for matching AST fragments
2314@item a framework for dealing with attributes and extension points.
2315@end enumerate")
2316 (license license:asl2.0)))
567b4e02
JL
2317
2318(define-public ocaml-ppx-optcomp
2319 (package
2320 (name "ocaml-ppx-optcomp")
2321 (version "113.33.03")
2322 (source (janestreet-origin "ppx_optcomp" version
2323 "13an8p2r7sd0d5lv54mlzrxdni47408bwqi3bjcx4m6005170q30"))
2324 (build-system ocaml-build-system)
2325 (native-inputs
2326 `(("js-build-tools" ,ocaml-js-build-tools)
2327 ("opam" ,opam)))
2328 (propagated-inputs
2329 `(("ppx-tools" ,ocaml-ppx-tools)
2330 ("ppx-core" ,ocaml-ppx-core)))
2331 (arguments janestreet-arguments)
2332 (home-page "https://github.com/janestreet/ppx_optcomp/")
2333 (synopsis "Optional compilation for OCaml")
2334 (description "Ppx_optcomp stands for Optional Compilation. It is a tool
2335used to handle optional compilations of pieces of code depending of the word
2336size, the version of the compiler, ...")
2337 (license license:asl2.0)))
9e568786
JL
2338
2339(define-public ocaml-ppx-driver
2340 (package
2341 (name "ocaml-ppx-driver")
2342 (version "113.33.03")
2343 (source (janestreet-origin "ppx_driver" version
2344 "011zzr45897j49b7iiybb29k7pspcx36mlnp7nh6pxb8b0ga76fh"))
2345 (build-system ocaml-build-system)
2346 (native-inputs
2347 `(("js-build-tools" ,ocaml-js-build-tools)
2348 ("opam" ,opam)
2349 ("ppx-optcomp" ,ocaml-ppx-optcomp)))
2350 (propagated-inputs
2351 `(("ppx-optcomp" ,ocaml-ppx-optcomp)
2352 ("ppx-core" ,ocaml-ppx-core)))
2353 (arguments janestreet-arguments)
2354 (home-page "https://github.com/janestreet/ppx_driver/")
2355 (synopsis "Feature-full driver for OCaml AST transformers")
2356 (description "A driver is an executable created from a set of OCaml AST
2357transformers linked together with a command line frontend. The aim is to
2358provide a tool that can be used to:
2359@enumerate
2360@item easily view the pre-processed version of a file, no need to construct a
2361 complex command line: @command{ppx file.ml} will do
2362@item use a single executable to run several transformations: no need to fork
2363 many times just for pre-processing
2364@item improved errors for misspelled/misplaced attributes and extension points.
2365@end enumerate")
2366 (license license:asl2.0)))
f6dde36a
JL
2367
2368(define-public ocaml-cppo
2369 (package
2370 (name "ocaml-cppo")
2371 (version "1.4.1")
2372 (source
2373 (origin
2374 (method url-fetch)
2375 (uri (string-append "https://github.com/mjambon/cppo/archive/v" version
2376 ".tar.gz"))
2377 (sha256 (base32
2378 "02gma6nw09vfnd6h7bl3n70lwz7m9z2svplxyfh6h5bf4lqgqzjv"))
2379 (file-name (string-append name "-" version ".tar.gz"))))
2380 (build-system ocaml-build-system)
2381 (arguments
2382 `(#:phases (modify-phases %standard-phases (delete 'configure))
2383 #:make-flags (list (string-append "BINDIR="
2384 (assoc-ref %outputs "out") "/bin"))
2385 #:tests? #f))
2386 (home-page "https://github.com/mjambon/cppo")
2387 (synopsis "Equivalent of the C preprocessor for OCaml programs")
2388 (description "Cppo is an equivalent of the C preprocessor for OCaml
2389programs. It allows the definition of simple macros and file inclusion. Cpp ois:
2390@enumerate
2391@item more OCaml-friendly than cpp
2392@item easy to learn without consulting a manual
2393@item reasonably fast
2394@item simple to install and to maintain.
2395@end enumerate")
2396 (license license:bsd-3)))
505394d1
JL
2397
2398;; this package is not reproducible. This is related to temporary filenames
2399;; such as findlib_initxxxxx where xxxxx is random.
2400(define-public ocaml-ppx-deriving
2401 (package
2402 (name "ocaml-ppx-deriving")
2403 (version "4.1")
2404 (source
2405 (origin
2406 (method url-fetch)
2407 (uri (string-append "https://github.com/whitequark/ppx_deriving//archive/v"
2408 version ".tar.gz"))
2409 (sha256 (base32
2410 "1fr16g121j6zinwcprzlhx2py4271n9jzs2m9hq2f3qli2b1p0vl"))
2411 (file-name (string-append name "-" version ".tar.gz"))))
2412 (build-system ocaml-build-system)
2413 (native-inputs
2414 `(("js-build-tools" ,ocaml-js-build-tools)
2415 ("cppo" ,ocaml-cppo)
2416 ("ounit" ,ocaml-ounit)
2417 ("opam" ,opam)))
2418 (propagated-inputs
2419 `(("result" ,ocaml-result)
2420 ("ppx-tools" ,ocaml-ppx-tools)))
2421 (arguments
2422 `(#:phases
2423 (modify-phases %standard-phases
2424 (delete 'configure)
2425 (add-before 'install 'fix-environment
2426 (lambda* (#:key outputs #:allow-other-keys)
2427 ;; the installation procedures looks for the installed module
2428 (setenv "OCAMLPATH"
2429 (string-append (getenv "OCAMLPATH") ":"
2430 (getenv "OCAMLFIND_DESTDIR"))))))))
2431 (home-page "https://github.com/whitequark/ppx_deriving/")
2432 (synopsis "Type-driven code generation for OCaml >=4.02")
2433 (description "Ppx_deriving provides common infrastructure for generating
2434code based on type definitions, and a set of useful plugins for common tasks.")
2435 (license license:expat)))
e6515b55
JL
2436
2437(define-public ocaml-ppx-type-conv
2438 (package
2439 (name "ocaml-ppx-type-conv")
2440 (version "113.33.03")
2441 (source
2442 (janestreet-origin "ppx_type_conv" version
2443 "1sp602ads2f250nv4d4rgw54d14k7flyhb4w8ff084f657hhmxv2"))
2444 (build-system ocaml-build-system)
2445 (native-inputs
2446 `(("js-build-tools" ,ocaml-js-build-tools)
2447 ("opam" ,opam)))
2448 (propagated-inputs
2449 `(("ppx-deriving" ,ocaml-ppx-deriving)
2450 ("ppx-tools" ,ocaml-ppx-tools)
2451 ("result" ,ocaml-result)
2452 ("ppx-core" ,ocaml-ppx-core)
2453 ("ppx-driver" ,ocaml-ppx-driver)))
2454 (arguments janestreet-arguments)
2455 (home-page "https://github.com/janestreet/ppx_type_conv/")
2456 (synopsis "Support Library for type-driven code generators")
2457 (description "The type_conv library factors out functionality needed by
2458different preprocessors that generate code from type specifications.")
2459 (license license:asl2.0)))
be1e892d
JL
2460
2461(define-public ocaml-ppx-inline-test
2462 (package
2463 (name "ocaml-ppx-inline-test")
2464 (version "113.33.03")
2465 (source (janestreet-origin "ppx_inline_test" version
2466 "0859ni43fl39dd5g6cxfhq0prxmx59bd2bfq8jafp593ba4q0icq"))
2467 (build-system ocaml-build-system)
2468 (native-inputs
2469 `(("js-build-tools" ,ocaml-js-build-tools)
2470 ("opam" ,opam)
2471 ("ppx-core" ,ocaml-ppx-core)))
2472 (propagated-inputs
2473 `(("ppx-driver" ,ocaml-ppx-driver)
2474 ("ppx-tools" ,ocaml-ppx-tools)
2475 ("ppx-core" ,ocaml-ppx-core)))
2476 (arguments janestreet-arguments)
2477 (home-page "https://github.com/janestreet/ppx_inline_test/")
2478 (synopsis "Syntax extension for writing in-line tests in ocaml code")
2479 (description "Syntax extension for writing in-line tests in ocaml code.")
2480 (license license:asl2.0)))
9a63fef9
JL
2481
2482(define-public ocaml-ppx-bench
2483 (package
2484 (name "ocaml-ppx-bench")
2485 (version "113.33.03")
2486 (source (janestreet-origin "ppx_bench" version
2487 "1hky3y17qpb925rymf97wv54di9gaqdmkix7wpkjw14qzl512b68"))
2488 (build-system ocaml-build-system)
2489 (native-inputs
2490 `(("js-build-tools" ,ocaml-js-build-tools)
2491 ("opam" ,opam)
2492 ("ppx-core" ,ocaml-ppx-core)))
2493 (propagated-inputs
2494 `(("ppx-driver" ,ocaml-ppx-driver)
2495 ("ppx-tools" ,ocaml-ppx-tools)
2496 ("ppx-inline-test" ,ocaml-ppx-inline-test)
2497 ("ppx-core" ,ocaml-ppx-core)))
2498 (arguments janestreet-arguments)
2499 (home-page "https://github.com/janestreet/ppx_bench/")
2500 (synopsis "Syntax extension for writing in-line benchmarks in ocaml code")
2501 (description "Syntax extension for writing in-line benchmarks in ocaml code.")
2502 (license license:asl2.0)))
953ecc04
JL
2503
2504(define-public ocaml-ppx-compare
2505 (package
2506 (name "ocaml-ppx-compare")
2507 (version "113.33.03")
2508 (source (janestreet-origin "ppx_compare" version
2509 "0bfhi33kq9l4q6zzc6svki2csracz5j4731c3npcy6cs73jynn0z"))
2510 (build-system ocaml-build-system)
2511 (native-inputs
2512 `(("js-build-tools" ,ocaml-js-build-tools)
2513 ("opam" ,opam)
2514 ("ppx-core" ,ocaml-ppx-core)))
2515 (propagated-inputs
2516 `(("ppx-driver" ,ocaml-ppx-driver)
2517 ("ppx-tools" ,ocaml-ppx-tools)
2518 ("ppx-core" ,ocaml-ppx-core)
2519 ("ppx-type-conv" ,ocaml-ppx-type-conv)))
2520 (arguments janestreet-arguments)
2521 (home-page "https://github.com/janestreet/ppx_compare/")
2522 (synopsis "Generation of comparison functions from types")
2523 (description "Generation of fast comparison functions from type expressions
2524and definitions. Ppx_compare is a ppx rewriter that derives comparison functions
2525from type representations. The scaffolded functions are usually much faster
2526than ocaml's Pervasives.compare. Scaffolding functions also gives you more
2527flexibility by allowing you to override them for a specific type and more safety
2528by making sure that you only compare comparable values.")
2529 (license license:asl2.0)))
d19c1b41
JL
2530
2531(define-public ocaml-sexplib
2532 (package
2533 (name "ocaml-sexplib")
2534 (version "113.33.03")
2535 (source (janestreet-origin "sexplib" version
2536 "1ffjmj8if9lyv965cgn2ld1xv7g52qsr8mqflbm515ck1i8l2ima"))
2537 (build-system ocaml-build-system)
2538 (native-inputs
2539 `(("js-build-tools" ,ocaml-js-build-tools)
2540 ("opam" ,opam)))
2541 (arguments janestreet-arguments)
2542 (home-page "https://github.com/janestreet/sexplib/")
2543 (synopsis "Library for serializing OCaml values to and from S-expressions")
2544 (description "Sexplib contains functionality for parsing and pretty-printing
2545s-expressions.")
2546 (license license:asl2.0)))
ef0051b2
JL
2547
2548(define-public ocaml-typerep
2549 (package
2550 (name "ocaml-typerep")
2551 (version "113.33.03")
2552 (source (janestreet-origin "typerep" version
2553 "1b9v5bmi824a9d4sx0f40ixq0yfcbiqxafg4a1jx95xg9199zafy"))
2554 (native-inputs
2555 `(("js-build-tools" ,ocaml-js-build-tools)
2556 ("opam" ,opam)))
2557 (build-system ocaml-build-system)
2558 (arguments janestreet-arguments)
2559 (home-page "https://github.com/janestreet/typerep/")
2560 (synopsis "Typerep is a library for runtime types")
2561 (description "Typerep is a library for runtime types.")
2562 (license license:asl2.0)))
d1d90df6
JL
2563
2564(define-public ocaml-variantslib
2565 (package
2566 (name "ocaml-variantslib")
2567 (version "113.33.03")
2568 (source (janestreet-origin "variantslib" version
2569 "05vp799vl38fvl98ga5miwbzh09cnnpapi6q6gdvwyqi6w7s919n"))
2570 (native-inputs
2571 `(("js-build-tools" ,ocaml-js-build-tools)
2572 ("opam" ,opam)))
2573 (build-system ocaml-build-system)
2574 (arguments janestreet-arguments)
2575 (home-page "https://github.com/janestreet/variantslib")
2576 (synopsis "OCaml variants as first class values")
2577 (description "OCaml variants as first class values.")
2578 (license license:asl2.0)))
334436f0
JL
2579
2580(define-public ocaml-ppx-sexp-conv
2581 (package
2582 (name "ocaml-ppx-sexp-conv")
2583 (version "113.33.03")
2584 (source (janestreet-origin "ppx_sexp_conv" version
2585 "1rbj6d5dl625gdxih34xcrdvikci6h8i2dl9x3wraa4qrgishiw7"))
2586 (build-system ocaml-build-system)
2587 (native-inputs
2588 `(("js-build-tools" ,ocaml-js-build-tools)
2589 ("opam" ,opam)
2590 ("ppx-core" ,ocaml-ppx-core)))
2591 (propagated-inputs
2592 `(("sexplib" ,ocaml-sexplib)
2593 ("ppx-core" ,ocaml-ppx-core)
2594 ("ppx-type-conv" ,ocaml-ppx-type-conv)
2595 ("ppx-tools" ,ocaml-ppx-tools)))
2596 (arguments janestreet-arguments)
2597 (home-page "https://github.com/janestreet/ppx_sexp_conv")
2598 (synopsis "Generation of S-expression conversion functions from type definitions")
2599 (description "Generation of S-expression conversion functions from type
2600definitions.")
2601 (license license:asl2.0)))
14af90cf
JL
2602
2603(define-public ocaml-ppx-variants-conv
2604 (package
2605 (name "ocaml-ppx-variants-conv")
2606 (version "113.33.03")
2607 (source (janestreet-origin "ppx_variants_conv" version
2608 "0vnn2l1118cj72413d3f7frlw6yc09l8f64jlzkzbgb9bxpalx34"))
2609 (build-system ocaml-build-system)
2610 (native-inputs
2611 `(("js-build-tools" ,ocaml-js-build-tools)
2612 ("opam" ,opam)))
2613 (propagated-inputs
2614 `(("ppx-core" ,ocaml-ppx-core)
2615 ("variantslib" ,ocaml-variantslib)
2616 ("ppx-tools" ,ocaml-ppx-tools)
2617 ("ppx-type-conv" ,ocaml-ppx-type-conv)))
2618 (arguments janestreet-arguments)
2619 (home-page "https://github.com/janestreet/ppx_variants_conv")
2620 (synopsis "Generation of accessor and iteration functions for ocaml variant
2621types")
2622 (description "Generation of accessor and iteration functions for ocaml
2623variant types.")
2624 (license license:asl2.0)))
651563bd
JL
2625
2626(define-public ocaml-ppx-here
2627 (package
2628 (name "ocaml-ppx-here")
2629 (version "113.33.03")
2630 (source (janestreet-origin "ppx_here" version
2631 "1ay8lfxi0qg3ib2zkwh4h0vqk3gjmxaz572gzab0bbxyqn3z86v7"))
2632 (build-system ocaml-build-system)
2633 (native-inputs
2634 `(("js-build-tools" ,ocaml-js-build-tools)
2635 ("opam" ,opam)))
2636 (propagated-inputs
2637 `(("ppx-driver" ,ocaml-ppx-driver)
2638 ("ppx-core" ,ocaml-ppx-core)))
2639 (arguments janestreet-arguments)
2640 (home-page "https://github.com/janestreet/ppx_here")
2641 (synopsis "Expands [%here] into its location")
2642 (description "Expands [%here] into its location.")
2643 (license license:asl2.0)))
a43160ee
JL
2644
2645(define-public ocaml-ppx-assert
2646 (package
2647 (name "ocaml-ppx-assert")
2648 (version "113.33.03")
2649 (source (janestreet-origin "ppx_assert" version
2650 "1k5kxmqkibp5fk25pgz81f3c1r4mgvb5byzf6bnmxd24y60wn46p"))
2651 (build-system ocaml-build-system)
2652 (native-inputs
2653 `(("js-build-tools" ,ocaml-js-build-tools)
2654 ("opam" ,opam)))
2655 (propagated-inputs
2656 `(("ppx-compare" ,ocaml-ppx-compare)
2657 ("ppx-core" ,ocaml-ppx-core)
2658 ("ppx-driver" ,ocaml-ppx-driver)
2659 ("ppx-sexp-conv" ,ocaml-ppx-sexp-conv)
2660 ("ppx-tools" ,ocaml-ppx-tools)
2661 ("ppx-type-conv" ,ocaml-ppx-type-conv)
2662 ("ppx-sexplib" ,ocaml-sexplib)
2663 ("ppx-here" ,ocaml-ppx-here)))
2664 (arguments janestreet-arguments)
2665 (home-page "https://github.com/janestreet/ppx_assert")
2666 (synopsis "Assert-like extension nodes that raise useful errors on failure")
2667 (description "Assert-like extension nodes that raise useful errors on failure.")
2668 (license license:asl2.0)))
250ac438
JL
2669
2670(define-public ocaml-ppx-enumerate
2671 (package
2672 (name "ocaml-ppx-enumerate")
2673 (version "113.33.03")
2674 (source (janestreet-origin "ppx_enumerate" version
2675 "15g7yfv9wg2h9r6k6q1zrhygmsl4xrfn25mrb0i4czjjivzmxjh4"))
2676 (build-system ocaml-build-system)
2677 (native-inputs
2678 `(("js-build-tools" ,ocaml-js-build-tools)
2679 ("opam" ,opam)))
2680 (propagated-inputs
2681 `(("ppx-tools" ,ocaml-ppx-tools)
2682 ("ppx-type-conv" ,ocaml-ppx-type-conv)
2683 ("ppx-core" ,ocaml-ppx-core)))
2684 (arguments janestreet-arguments)
2685 (home-page "https://github.com/janestreet/ppx_enumerate")
2686 (synopsis "Generate a list containing all values of a finite type")
2687 (description "Ppx_enumerate is a ppx rewriter which generates a definition
2688for the list of all values of a type (for a type which only has finitely
2689many values).")
2690 (license license:asl2.0)))
d2203187
JL
2691
2692(define-public ocaml-ppx-let
2693 (package
2694 (name "ocaml-ppx-let")
2695 (version "113.33.03")
2696 (source (janestreet-origin "ppx_let" version
2697 "0gd6d3gdaqfwjcs7gaw1qxc30i584q6a86ndaj1bx1q63xqd6yx9"))
2698 (build-system ocaml-build-system)
2699 (native-inputs
2700 `(("js-build-tools" ,ocaml-js-build-tools)
2701 ("opam" ,opam)))
2702 (propagated-inputs
2703 `(("ppx-driver" ,ocaml-ppx-driver)
2704 ("ppx-core" ,ocaml-ppx-core)))
2705 (arguments janestreet-arguments)
2706 (home-page "https://github.com/janestreet/ppx_let")
2707 (synopsis "Monadic let-bindings")
2708 (description "A ppx rewriter for monadic and applicative let bindings,
2709match expressions, and if expressions.")
2710 (license license:asl2.0)))
edda7ebe
JL
2711
2712(define-public ocaml-ppx-typerep-conv
2713 (package
2714 (name "ocaml-ppx-typerep-conv")
2715 (version "113.33.03")
2716 (source (janestreet-origin "ppx_typerep_conv" version
2717 "0g0xqm9s1b2jjvxb8yp69281q2s3bwz6sibn10fvgcdawpa0rmrg"))
2718 (build-system ocaml-build-system)
2719 (native-inputs
2720 `(("js-build-tools" ,ocaml-js-build-tools)
2721 ("opam" ,opam)))
2722 (propagated-inputs
2723 `(("ppx-tools" ,ocaml-ppx-tools)
2724 ("ppx-type-conv" ,ocaml-ppx-type-conv)
2725 ("ppx-core" ,ocaml-ppx-core)
2726 ("typerep" ,ocaml-typerep)))
2727 (arguments janestreet-arguments)
2728 (home-page "https://github.com/janestreet/ppx_typerep_conv")
2729 (synopsis "Generation of runtime types from type declarations")
2730 (description "Automatic generation of runtime types from type definitions.")
2731 (license license:asl2.0)))
25941ca1
JL
2732
2733(define-public ocaml-ppx-sexp-value
2734 (package
2735 (name "ocaml-ppx-sexp-value")
2736 (version "113.33.03")
2737 (source (janestreet-origin "ppx_sexp_value" version
2738 "0m3ag23mbqm0i2pv1dzilfks15ipa5q60mf57a0cd3p0pvarq10g"))
2739 (build-system ocaml-build-system)
2740 (native-inputs
2741 `(("js-build-tools" ,ocaml-js-build-tools)
2742 ("opam" ,opam)))
2743 (propagated-inputs
2744 `(("ppx-driver" ,ocaml-ppx-driver)
2745 ("ppx-here" ,ocaml-ppx-here)
2746 ("ppx-sexp-conv" ,ocaml-ppx-sexp-conv)
2747 ("ppx-tools" ,ocaml-ppx-tools)
2748 ("ppx-core" ,ocaml-ppx-core)))
2749 (arguments janestreet-arguments)
2750 (home-page "https://github.com/janestreet/ppx_sexp_value/")
2751 (synopsis "Simplify building s-expressions from ocaml values")
2752 (description "A ppx rewriter that simplifies building s-expressions from
2753ocaml values.")
2754 (license license:asl2.0)))
3674d7df
JL
2755
2756(define-public ocaml-ppx-pipebang
2757 (package
2758 (name "ocaml-ppx-pipebang")
2759 (version "113.33.03")
2760 (source (janestreet-origin "ppx_pipebang" version
2761 "1965c7hymp26ncmjs0pfxi2s5jlj60z2c9b194lgcwxqiav56pcw"))
2762 (build-system ocaml-build-system)
2763 (native-inputs
2764 `(("js-build-tools" ,ocaml-js-build-tools)
2765 ("opam" ,opam)))
2766 (propagated-inputs
2767 `(("ppx-driver" ,ocaml-ppx-driver)
2768 ("ppx-tools" ,ocaml-ppx-tools)
2769 ("ppx-core" ,ocaml-ppx-core)))
2770 (arguments janestreet-arguments)
2771 (home-page "https://github.com/janestreet/ppx_pipebang/")
2772 (synopsis "Inline reverse application operators `|>` and `|!`")
2773 (description "A ppx rewriter that inlines reverse application operators
2774@code{|>} and @code{|!}.")
2775 (license license:asl2.0)))
5d6d7ab0
JL
2776
2777(define-public ocaml-ppx-bin-prot
2778 (package
2779 (name "ocaml-ppx-bin-prot")
2780 (version "113.33.03")
2781 (source (janestreet-origin "ppx_bin_prot" version
2782 "173kjv36giik11zgfvsbzwfbpr66dm2pcha9vf990jgzh8hqz39h"))
2783 (build-system ocaml-build-system)
2784 (native-inputs
2785 `(("js-build-tools" ,ocaml-js-build-tools)
2786 ("opam" ,opam)))
2787 (propagated-inputs
2788 `(("bin-prot" ,ocaml-bin-prot)
2789 ("ppx-tools" ,ocaml-ppx-tools)
2790 ("ppx-type-conv" ,ocaml-ppx-type-conv)
2791 ("ppx-core" ,ocaml-ppx-core)))
2792 (arguments janestreet-arguments)
2793 (home-page "https://github.com/janestreet/ppx_bin_prot/")
2794 (synopsis "Generation of bin_prot readers and writers from types")
2795 (description "Generation of binary serialization and deserialization
2796functions from type definitions.")
2797 (license license:asl2.0)))
7ea5acc6
JL
2798
2799(define-public ocaml-ppx-fail
2800 (package
2801 (name "ocaml-ppx-fail")
2802 (version "113.33.03")
2803 (source (janestreet-origin "ppx_fail" version
2804 "1dwgad0f05gqp5rnwf9dcasidpfi7q3mrpazsw3a2vijjblbhjgn"))
2805 (build-system ocaml-build-system)
2806 (native-inputs
2807 `(("js-build-tools" ,ocaml-js-build-tools)
2808 ("opam" ,opam)))
2809 (propagated-inputs
2810 `(("ppx-driver" ,ocaml-ppx-driver)
2811 ("ppx-tools" ,ocaml-ppx-tools)
2812 ("ppx-here" ,ocaml-ppx-here)
2813 ("ppx-core" ,ocaml-ppx-core)))
2814 (arguments janestreet-arguments)
2815 (home-page "https://github.com/janestreet/ppx_fail/")
2816 (synopsis "Add location to calls to failwiths")
2817 (description "Syntax extension that makes [failwiths] always include a
2818position.")
2819 (license license:asl2.0)))
c64fecc2
JL
2820
2821(define-public ocaml-ppx-custom-printf
2822 (package
2823 (name "ocaml-ppx-custom-printf")
2824 (version "113.33.03")
2825 (source (janestreet-origin "ppx_custom_printf" version
2826 "11jlx0n87g2j1vyyp343dibx7lvvwig5j5q0nq0b80kbsq0k6yr8"))
2827 (build-system ocaml-build-system)
2828 (native-inputs
2829 `(("js-build-tools" ,ocaml-js-build-tools)
2830 ("opam" ,opam)))
2831 (propagated-inputs
2832 `(("ppx-sexp-conv" ,ocaml-ppx-sexp-conv)
2833 ("ppx-tools" ,ocaml-ppx-tools)
2834 ("ppx-core" ,ocaml-ppx-core)
2835 ("ppx-driver" ,ocaml-ppx-driver)))
2836 (arguments janestreet-arguments)
2837 (home-page "https://github.com/janestreet/ppx_custom_printf/")
2838 (synopsis "Printf-style format-strings for user-defined string conversion")
2839 (description "Extensions to printf-style format-strings for user-defined
2840string conversion.")
2841 (license license:asl2.0)))
9b8bc957
JL
2842
2843(define-public ocaml-ppx-sexp-message
2844 (package
2845 (name "ocaml-ppx-sexp-message")
2846 (version "113.33.03")
2847 (source (janestreet-origin "ppx_sexp_message" version
2848 "084w1l3gnyw4ri9vbn7bv9b2xkw1520qczfxpxdarfivdrz8xr68"))
2849 (build-system ocaml-build-system)
2850 (native-inputs
2851 `(("js-build-tools" ,ocaml-js-build-tools)
2852 ("opam" ,opam)))
2853 (propagated-inputs
2854 `(("ppx-driver" ,ocaml-ppx-driver)
2855 ("ppx-here" ,ocaml-ppx-here)
2856 ("ppx-sexp-conv" ,ocaml-ppx-sexp-conv)
2857 ("ppx-tools" ,ocaml-ppx-tools)
2858 ("ppx-core" ,ocaml-ppx-core)))
2859 (arguments janestreet-arguments)
2860 (home-page "https://github.com/janestreet/ppx_sexp_message/")
2861 (synopsis "A ppx rewriter for easy construction of s-expressions")
2862 (description "Ppx_sexp_message aims to ease the creation of s-expressions
2863in OCaml. This is mainly motivated by writing error and debugging messages,
2864where one needs to construct a s-expression based on various element of the
2865context such as function arguments.")
2866 (license license:asl2.0)))
38cb1ec6
JL
2867
2868(define-public ocaml-ppx-fields-conv
2869 (package
2870 (name "ocaml-ppx-fields-conv")
2871 (version "113.33.03")
2872 (source (janestreet-origin "ppx_fields_conv" version
2873 "1vzbdz27g5qhhfs7wx6rjf979q4xyssxqbmp6sc1sxknbghslbdv"))
2874 (build-system ocaml-build-system)
2875 (native-inputs
2876 `(("js-build-tools" ,ocaml-js-build-tools)
2877 ("opam" ,opam)
2878 ("ppx-core" ,ocaml-ppx-core)))
2879 (propagated-inputs
2880 `(("fieldslib" ,ocaml-fieldslib)
2881 ("ppx-tools" ,ocaml-ppx-tools)
2882 ("ppx-core" ,ocaml-ppx-core)
2883 ("ppx-type-conv" ,ocaml-ppx-type-conv)))
2884 (arguments janestreet-arguments)
2885 (home-page "https://github.com/janestreet/ppx_fields_conv/")
2886 (synopsis "Generation of accessor and iteration functions for ocaml records")
2887 (description "Ppx_fields_conv is a ppx rewriter that can be used to define
2888first class values representing record fields, and additional routines, to get
2889and set record fields, iterate and fold over all fields of a record and create
2890new record values.")
2891 (license license:asl2.0)))
f27522d6
JL
2892
2893(define-public ocaml-re
2894 (package
2895 (name "ocaml-re")
2896 (version "1.7.1")
2897 (source (origin
2898 (method url-fetch)
2899 (uri (string-append "https://github.com/ocaml/ocaml-re//archive/"
2900 version ".tar.gz"))
2901 (file-name (string-append name "-" version ".tar.gz"))
2902 (sha256
2903 (base32
2904 "1s3rcr76cgm4p1xmaazc58arkg2lz3zfcp1icm00m6s5ccnkh67b"))))
2905 (build-system ocaml-build-system)
2906 (native-inputs `(("ounit" ,ocaml-ounit)))
2907 (home-page "https://github.com/ocaml/ocaml-re/")
2908 (synopsis "Regular expression library for OCaml")
2909 (description "Pure OCaml regular expressions with:
2910@enumerate
2911@item Perl-style regular expressions (module Re_perl)
2912@item Posix extended regular expressions (module Re_posix)
2913@item Emacs-style regular expressions (module Re_emacs)
2914@item Shell-style file globbing (module Re_glob)
2915@item Compatibility layer for OCaml's built-in Str module (module Re_str)
2916@end enumerate")
2917 (license license:expat)))
5cd47fb0
JL
2918
2919(define-public ocaml-ppx-expect
2920 (package
2921 (name "ocaml-ppx-expect")
2922 (version "113.33.03")
2923 (source (janestreet-origin "ppx_expect" version
2924 "03sbs4s5i8l9syr45v25f5hzy7msd2b47k2a9wsq9m43d4imgkrc"))
2925 (build-system ocaml-build-system)
2926 (native-inputs
2927 `(("js-build-tools" ,ocaml-js-build-tools)
2928 ("opam" ,opam)))
2929 (propagated-inputs
2930 `(("fieldslib" ,ocaml-fieldslib)
2931 ("ppx-tools" ,ocaml-ppx-tools)
2932 ("ppx-assert" ,ocaml-ppx-assert)
2933 ("ppx-compare" ,ocaml-ppx-compare)
2934 ("ppx-core" ,ocaml-ppx-core)
2935 ("ppx-custom-printf" ,ocaml-ppx-custom-printf)
2936 ("ppx-driver" ,ocaml-ppx-driver)
2937 ("ppx-fields-conv" ,ocaml-ppx-fields-conv)
2938 ("ppx-inline-test" ,ocaml-ppx-inline-test)
2939 ("ppx-sexp-conv" ,ocaml-ppx-sexp-conv)
2940 ("ppx-variants-conv" ,ocaml-ppx-variants-conv)
2941 ("re" ,ocaml-re)
2942 ("sexplib" ,ocaml-sexplib)
2943 ("variantslib" ,ocaml-variantslib)))
2944 (arguments janestreet-arguments)
2945 (home-page "https://github.com/janestreet/ppx_expect/")
2946 (synopsis "Cram like framework for OCaml")
2947 (description "Expect-test is a framework for writing tests in OCaml, similar
2948to Cram. Expect-tests mimic the existing inline tests framework with the
2949let%expect_test construct. The body of an expect-test can contain
2950output-generating code, interleaved with %expect extension expressions to denote
2951the expected output.")
2952 (license license:asl2.0)))
2f4c2df1
JL
2953
2954(define-public ocaml-ppx-jane
2955 (package
2956 (name "ocaml-ppx-jane")
2957 (version "113.33.03")
2958 (source (janestreet-origin "ppx_jane" version
2959 "0bjxkhmzgm6x9dcvjwybbccn34khbvyyjimcbaja30fp6qcqk5yl"))
2960 (build-system ocaml-build-system)
2961 (native-inputs
2962 `(("js-build-tools" ,ocaml-js-build-tools)
2963 ("opam" ,opam)))
2964 (propagated-inputs
2965 `(("ppx-assert" ,ocaml-ppx-assert)
2966 ("ppx-bench" ,ocaml-ppx-bench)
2967 ("ppx-bin-prot" ,ocaml-ppx-bin-prot)
2968 ("ppx-compare" ,ocaml-ppx-compare)
2969 ("ppx-custom-printf" ,ocaml-ppx-custom-printf)
2970 ("ppx-deriving" ,ocaml-ppx-deriving)
2971 ("ppx-enumerate" ,ocaml-ppx-enumerate)
2972 ("ppx-expect" ,ocaml-ppx-expect)
2973 ("ppx-fail" ,ocaml-ppx-fail)
2974 ("ppx-fields-conv" ,ocaml-ppx-fields-conv)
2975 ("ppx-here" ,ocaml-ppx-here)
2976 ("ppx-inline-test" ,ocaml-ppx-inline-test)
2977 ("ppx-let" ,ocaml-ppx-let)
2978 ("ppx-pipebang" ,ocaml-ppx-pipebang)
2979 ("ppx-sexp-conv" ,ocaml-ppx-sexp-conv)
2980 ("ppx-sexp-message" ,ocaml-ppx-sexp-message)
2981 ("ppx-sexp-value" ,ocaml-ppx-sexp-value)
2982 ("ppx-typerep-conv" ,ocaml-ppx-typerep-conv)
2983 ("ppx-variants-conv" ,ocaml-ppx-variants-conv)))
2984 (arguments janestreet-arguments)
2985 (home-page "https://github.com/janestreet/ppx_jane/")
2986 (synopsis "Standard Jane Street ppx rewriters")
2987 (description "Ppx_jane is a ppx_driver including all standard ppx rewriters.")
2988 (license license:asl2.0)))
52485163
JL
2989
2990(define-public ocaml-core-kernel
2991 (package
2992 (name "ocaml-core-kernel")
2993 (version "113.33.03")
2994 (source (janestreet-origin "core_kernel" version
2995 "0fl23jrwivixawhxinbwaw9cabqnzn7fini7dxpxjjvkxdc8ip5y"))
2996 (native-inputs
2997 `(("js-build-tools" ,ocaml-js-build-tools)
2998 ("ppx-jane" ,ocaml-ppx-jane)
2999 ("opam" ,opam)))
3000 (propagated-inputs
3001 `(("bin_prot" ,ocaml-bin-prot)
3002 ("ppx-assert" ,ocaml-ppx-assert)
3003 ("ppx-bench" ,ocaml-ppx-bench)
3004 ("ppx-driver" ,ocaml-ppx-driver)
3005 ("ppx-expect" ,ocaml-ppx-expect)
3006 ("ppx-inline-test" ,ocaml-ppx-inline-test)
3007 ("typerep" ,ocaml-typerep)
3008 ("sexplib" ,ocaml-sexplib)
3009 ("variantslib" ,ocaml-variantslib)
3010 ("result" ,ocaml-result)
3011 ("fieldslib" ,ocaml-fieldslib)))
3012 (build-system ocaml-build-system)
3013 (arguments janestreet-arguments)
3014 (home-page "https://github.com/janestreet/core_kernel/")
3015 (synopsis "Portable standard library for OCaml")
3016 (description "Core is an alternative to the OCaml standard library.
3017
3018Core_kernel is the system-independent part of Core. It is aimed for cases when
3019the full Core is not available, such as in Javascript.")
3020 (license license:asl2.0)))
e31ee74d
JL
3021
3022(define-public ocaml-async-kernel
3023 (package
3024 (name "ocaml-async-kernel")
3025 (version "113.33.03")
3026 (source (janestreet-origin "async_kernel" version
3027 "04bjsaa23j831r09r38x6xx9nhryvp0z5ihickvhxqa4fb2snyvd"))
3028 (native-inputs
3029 `(("oasis" ,ocaml-oasis)
3030 ("js-build-tools" ,ocaml-js-build-tools)
3031 ("ppx-jane" ,ocaml-ppx-jane)
3032 ("opam" ,opam)))
3033 (propagated-inputs
3034 `(("core-kernel" ,ocaml-core-kernel)))
3035 (build-system ocaml-build-system)
3036 (arguments janestreet-arguments)
3037 (home-page "https://github.com/janestreet/async_kernel/")
3038 (synopsis "Monadic concurrency library")
3039 (description "Async-kernel is a library for concurrent programming in OCaml.")
3040 (license license:asl2.0)))
cf28a731
JL
3041
3042(define-public ocaml-async-rpc-kernel
3043 (package
3044 (name "ocaml-async-rpc-kernel")
3045 (version "113.33.03")
3046 (source (janestreet-origin "async_rpc_kernel" version
3047 "0y97h9pkb00v7jpf87m8cbb0ffkclj9g26ph6sq97q8dpisnkjwh"))
3048 (native-inputs
3049 `(("oasis" ,ocaml-oasis)
3050 ("js-build-tools" ,ocaml-js-build-tools)
3051 ("ppx-jane" ,ocaml-ppx-jane)
3052 ("opam" ,opam)))
3053 (propagated-inputs
3054 `(("async-kernel" ,ocaml-async-kernel)))
3055 (build-system ocaml-build-system)
3056 (arguments janestreet-arguments)
3057 (home-page "https://github.com/janestreet/async_rpc_kernel/")
3058 (synopsis "Platform-independent core of the Async RPC library")
3059 (description "Async_rpc_kernel is the platform-independent core of
3060the Async RPC library.")
3061 (license license:asl2.0)))
4a5fd872
JL
3062
3063(define-public ocaml-core
3064 (package
3065 (name "ocaml-core")
3066 (version "113.33.03")
3067 (source (janestreet-origin "core" version
3068 "1znll157qg56g9d3247fjibv1hxv3r9wxgr4nhy19j2vzdh6a268"))
3069 (native-inputs
3070 `(("oasis" ,ocaml-oasis)
3071 ("js-build-tools" ,ocaml-js-build-tools)
3072 ("ppx-jane" ,ocaml-ppx-jane)
3073 ("opam" ,opam)))
3074 (propagated-inputs
3075 `(("core-kernel" ,ocaml-core-kernel)))
3076 (build-system ocaml-build-system)
3077 (arguments janestreet-arguments)
3078 (home-page "https://github.com/janestreet/core/")
3079 (synopsis "Alternative to OCaml's standard library")
3080 (description "The Core suite of libraries is an alternative to OCaml's
3081standard library that was developed by Jane Street.")
3082 (license license:asl2.0)))
7f1620df
JL
3083
3084(define-public ocaml-async-unix
3085 (package
3086 (name "ocaml-async-unix")
3087 (version "113.33.03")
3088 (source (janestreet-origin "async_unix" version
3089 "1fwl0lfrizllcfjk8hk8m7lsz9ha2jg6qgk4gssfyz377qvpcq4h"))
3090 (native-inputs
3091 `(("oasis" ,ocaml-oasis)
3092 ("js-build-tools" ,ocaml-js-build-tools)
3093 ("ppx-jane" ,ocaml-ppx-jane)
3094 ("opam" ,opam)))
3095 (propagated-inputs
3096 `(("async-kernel" ,ocaml-async-kernel)
3097 ("core" ,ocaml-core)))
3098 (build-system ocaml-build-system)
3099 (arguments janestreet-arguments)
3100 (home-page "https://github.com/janestreet/async_unix")
3101 (synopsis "Asynchronous execution library for Unix")
3102 (description "Async_unix is an asynchronous execution library for Unix.")
3103 (license license:asl2.0)))
d7f6d048
JL
3104
3105(define-public ocaml-async-extra
3106 (package
3107 (name "ocaml-async-extra")
3108 (version "113.33.03")
3109 (source (janestreet-origin "async_extra" version
3110 "1si8jgiq5xh5sl9f2b7f9p17p7zx5h1pg557x2cxywi2x7pxqg4f"))
3111 (native-inputs
3112 `(("oasis" ,ocaml-oasis)
3113 ("js-build-tools" ,ocaml-js-build-tools)
3114 ("ppx-jane" ,ocaml-ppx-jane)
3115 ("opam" ,opam)))
3116 (propagated-inputs
3117 `(("async-rpc-kernel" ,ocaml-async-rpc-kernel)
3118 ("async-unix" ,ocaml-async-unix)
3119 ("core" ,ocaml-core)))
3120 (build-system ocaml-build-system)
3121 (arguments janestreet-arguments)
3122 (home-page "https://github.com/janestreet/async_extra")
3123 (synopsis "Extra functionnalities for the async library")
3124 (description "Async_extra provides additional functionnalities for the
3125async library.")
3126 (license license:asl2.0)))
84470902
JL
3127
3128(define-public ocaml-async
3129 (package
3130 (name "ocaml-async")
3131 (version "113.33.03")
3132 (source (janestreet-origin "async" version
3133 "0210fyhcs12kpmmd26015bgivkfd2wqkyn3c5wd7688d0f872y25"))
3134 (native-inputs
3135 `(("oasis" ,ocaml-oasis)
3136 ("js-build-tools" ,ocaml-js-build-tools)
3137 ("ppx-jane" ,ocaml-ppx-jane)
3138 ("opam" ,opam)))
3139 (propagated-inputs
3140 `(("async-extra" ,ocaml-async-extra)))
3141 (build-system ocaml-build-system)
3142 (arguments janestreet-arguments)
3143 (home-page "https://github.com/janestreet/async")
3144 (synopsis "Monadic concurrency library")
3145 (description "Async is a library for concurrent programming in OCaml.")
3146 (license license:asl2.0)))
9059d856
JL
3147
3148(define-public ocaml-ocplib-endian
3149 (package
3150 (name "ocaml-ocplib-endian")
3151 (version "1.0")
3152 (source (origin
3153 (method url-fetch)
3154 (uri (string-append "https://github.com/OCamlPro/ocplib-endian/"
3155 "archive/" version ".tar.gz"))
3156 (sha256
3157 (base32
3158 "0hwj09rnzjs0m0kazz5h2mgs6p95j0zlga8cda5srnzqmzhniwkn"))
3159 (file-name (string-append name "-" version ".tar.gz"))))
3160 (build-system ocaml-build-system)
3161 (native-inputs `(("cppo" ,ocaml-cppo)))
3162 (home-page "https://github.com/OCamlPro/ocplib-endian")
3163 (synopsis "Optimised functions to read and write int16/32/64 from strings
3164and bigarrays")
3165 (description "Optimised functions to read and write int16/32/64 from strings
3166and bigarrays, based on new primitives added in version 4.01. It works on
3167strings, bytes and bigstring (Bigarrys of chars), and provides submodules for
3168big- and little-endian, with their unsafe counter-parts.")
3169 (license license:lgpl2.1)))
0090b895
JL
3170
3171(define-public ocaml-cstruct
3172 (package
3173 (name "ocaml-cstruct")
3174 (version "2.3.1")
3175 (source (origin
3176 (method url-fetch)
3177 (uri (string-append "https://github.com/mirage/ocaml-cstruct/"
3178 "archive/v" version ".tar.gz"))
3179 (sha256
3180 (base32
3181 "15qpdc8421shq4pprdas9jznpva45229wkfqbwcxw9khaiiz7949"))
3182 (file-name (string-append name "-" version ".tar.gz"))))
3183 (build-system ocaml-build-system)
3184 (arguments
3185 `(#:configure-flags
3186 (list "--enable-lwt" "--enable-async")
3187 #:phases
3188 (modify-phases %standard-phases
3189 (add-after 'install 'link-stubs
3190 (lambda* (#:key outputs #:allow-other-keys)
3191 (let* ((out (assoc-ref outputs "out"))
3192 (stubs (string-append out "/lib/ocaml/site-lib/stubslibs"))
3193 (lib (string-append out "/lib/ocaml/site-lib/cstruct")))
3194 (mkdir-p stubs)
3195 (symlink (string-append lib "/dllcstruct_stubs.so")
3196 (string-append stubs "/dllcstruct_stubs.so"))))))))
3197 (native-inputs
3198 `(("ounit" ,ocaml-ounit)
3199 ("ppx-tools" ,ocaml-ppx-tools)
3200 ("camlp4" ,camlp4)))
3201 (propagated-inputs
3202 `(("ocplib-endian" ,ocaml-ocplib-endian)
3203 ("lwt" ,ocaml-lwt)
3204 ("async" ,ocaml-async)
3205 ("sexplib" ,ocaml-sexplib)))
3206 (home-page "https://github.com/mirage/ocaml-cstruct")
3207 (synopsis "Access C structures via a camlp4 extension")
3208 (description "Cstruct is a library and syntax extension to make it easier
3209to access C-like structures directly from OCaml. It supports both reading and
3210writing to these structures, and they are accessed via the Bigarray module.")
3211 (license license:isc)))
61bafd44
JL
3212
3213(define-public ocaml-hex
3214 (package
3215 (name "ocaml-hex")
3216 (version "1.0.0")
3217 (source (origin
3218 (method url-fetch)
3219 (uri (string-append "https://github.com/mirage/ocaml-hex/"
3220 "archive/" version ".tar.gz"))
3221 (sha256
3222 (base32
3223 "0s63g0b8gfv2xm6fv6xg7bva8h76b5pcjb0zw3f8cygs0lq9072v"))
3224 (file-name (string-append name "-" version ".tar.gz"))))
3225 (build-system ocaml-build-system)
3226 (propagated-inputs `(("cstruct" ,ocaml-cstruct)))
3227 (home-page "https://github.com/mirage/ocaml-hex/")
3228 (synopsis "Minimal library providing hexadecimal converters")
3229 (description "Hex is a minimal library providing hexadecimal converters.")
3230 (license license:isc)))
d163d97d 3231
bf7bc0d6
JL
3232(define-public ocaml-ezjsonm
3233 (package
3234 (name "ocaml-ezjsonm")
3235 (version "0.4.3")
3236 (source (origin
3237 (method url-fetch)
3238 (uri (string-append "https://github.com/mirage/ezjsonm/archive/"
3239 version ".tar.gz"))
3240 (sha256
3241 (base32
3242 "1kag0z2xlk4rw73a240dmkxh9rj6psxxcxkm7d7z0rrj6hzjajgq"))
3243 (file-name (string-append name "-" version ".tar.gz"))))
3244 (build-system ocaml-build-system)
3245 (native-inputs
3246 `(("alcotest" ,ocaml-alcotest)))
3247 (propagated-inputs
3248 `(("hex" ,ocaml-hex)
3249 ("jsonm" ,ocaml-jsonm)
3250 ("lwt" ,ocaml-lwt)
3251 ("sexplib" ,ocaml-sexplib)))
3252 (arguments
3253 `(#:configure-flags (list "--enable-lwt")))
3254 (home-page "https://github.com/mirage/ezjsonm/")
3255 (synopsis "Read and write JSON data")
3256 (description "Ezjsonm provides more convenient (but far less flexible) input
3257and output functions that go to and from [string] values than jsonm. This avoids
3258the need to write signal code, which is useful for quick scripts that manipulate
3259JSON.")
3260 (license license:isc)))
3261
3dabefee
JL
3262(define-public ocaml-uri
3263 (package
3264 (name "ocaml-uri")
3265 (version "1.9.2")
3266 (source (origin
3267 (method url-fetch)
3268 (uri (string-append "https://github.com/mirage/ocaml-uri/archive/v"
3269 version ".tar.gz"))
3270 (sha256
3271 (base32
3272 "02bzrag79prx261rxf9mlak749pwf4flpfl8p012x1xznv9m0clc"))
3273 (file-name (string-append name "-" version ".tar.gz"))))
3274 (build-system ocaml-build-system)
3275 (native-inputs
3276 `(("ounit" ,ocaml-ounit)))
3277 (propagated-inputs
3278 `(("ppx-sexp-conv" ,ocaml-ppx-sexp-conv)
3279 ("re" ,ocaml-re)
3280 ("ppx-deriving" ,ocaml-ppx-deriving)
3281 ("sexplib" ,ocaml-sexplib)
3282 ("stringext" ,ocaml-stringext)))
3283 (home-page "https://github.com/mirage/ocaml-uri")
3284 (synopsis "RFC3986 URI/URL parsing library")
3285 (description "OCaml-uri is a library for parsing URI/URL in the RFC3986 format.")
3286 (license license:isc)))
3287
6134aeb9
JL
3288(define-public ocaml-easy-format
3289 (package
3290 (name "ocaml-easy-format")
3291 (version "1.2.0")
3292 (source (origin
3293 (method url-fetch)
3294 (uri (string-append "https://github.com/mjambon/easy-format/"
3295 "archive/v" version ".tar.gz"))
3296 (sha256
3297 (base32
3298 "1zcz682y9figa84k7lgdjcab5qbzk3yy14ygfqp2dhhrvjygm252"))
3299 (file-name (string-append name "-" version ".tar.gz"))))
3300 (build-system ocaml-build-system)
3301 (arguments
3302 `(#:phases
3303 (modify-phases %standard-phases
3304 (delete 'configure))))
3305 (home-page "https://github.com/mjambon/easy-format")
3306 (synopsis "Interface to the Format module")
3307 (description "Easy-format is a high-level and functional interface to the
3308Format module of the OCaml standard library.")
3309 (license license:bsd-3)))
3310
b5c0217c
JL
3311(define-public optcomp
3312 (package
3313 (name "optcomp")
3314 (version "1.6")
3315 (source (origin
3316 (method url-fetch)
3317 (uri (string-append "https://github.com/diml/optcomp/archive/"
3318 version ".tar.gz"))
3319 (sha256
3320 (base32
3321 "0hhhb2gisah1h22zlg5iszbgqxdd7x85cwd57bd4mfkx9l7dh8jh"))
3322 (file-name (string-append name "-" version ".tar.gz"))))
3323 (build-system ocaml-build-system)
3324 (arguments
3325 `(#:use-make? #t
3326 #:make-flags
3327 (list (string-append "BUILDFLAGS=\"-cflags -I,"
3328 (assoc-ref %build-inputs "camlp4")
3329 "/lib/ocaml/site-lib/camlp4/Camlp4Parsers\""))))
3330 (native-inputs `(("camlp4" ,camlp4)))
3331 (propagated-inputs `(("camlp4" ,camlp4)))
3332 (home-page "https://github.com/diml/optcomp")
3333 (synopsis "Optional compilation for OCaml")
3334 (description "Optcomp provides an optional compilation facility with
3335cpp-like directives.")
3336 (license license:bsd-3)))
3337
9c5dbbf0
JL
3338(define-public ocaml-piqilib
3339 (package
3340 (name "ocaml-piqilib")
3341 (version "0.6.13")
3342 (source (origin
3343 (method url-fetch)
3344 (uri (string-append "https://github.com/alavrik/piqi/archive/v"
3345 version ".tar.gz"))
3346 (sha256
3347 (base32
3348 "1whqr2bb3gds2zmrzqnv8vqka9928w4lx6mi6g244kmbwb2h8d8l"))
3349 (file-name (string-append name "-" version ".tar.gz"))))
3350 (build-system ocaml-build-system)
3351 (arguments
3352 `(#:phases
3353 (modify-phases %standard-phases
3354 (add-before 'configure 'fix-ocamlpath
3355 (lambda _
3356 (substitute* '("Makefile" "make/Makefile.ocaml")
3357 (("OCAMLPATH := ") "OCAMLPATH := $(OCAMLPATH):"))
3358 #t))
3359 (replace 'configure
3360 (lambda* (#:key outputs #:allow-other-keys)
3361 (let ((out (assoc-ref outputs "out")))
3362 (substitute* "make/OCamlMakefile"
3363 (("/bin/sh") (which "bash")))
3364 (zero? (system* "./configure" "--prefix" out "--ocaml-libdir"
3365 (string-append out "/lib/ocaml/site-lib"))))))
3366 (add-after 'build 'build-ocaml
3367 (lambda* (#:key outputs #:allow-other-keys)
3368 (zero? (system* "make" "ocaml"))))
3369 (add-after 'install 'install-ocaml
3370 (lambda* (#:key outputs #:allow-other-keys)
3371 (zero? (system* "make" "ocaml-install"))))
3372 (add-after 'install-ocaml 'link-stubs
3373 (lambda* (#:key outputs #:allow-other-keys)
3374 (let* ((out (assoc-ref outputs "out"))
3375 (stubs (string-append out "/lib/ocaml/site-lib/stubslibs"))
3376 (lib (string-append out "/lib/ocaml/site-lib/piqilib")))
3377 (mkdir-p stubs)
3378 (symlink (string-append lib "/dllpiqilib_stubs.so")
3379 (string-append stubs "/dllpiqilib_stubs.so"))
3380 #t))))))
3381 (native-inputs
3382 `(("which" ,which)
3383 ("camlp4" ,camlp4)))
3384 (propagated-inputs
3385 `(("xmlm" ,ocaml-xmlm)
3386 ("ulex" ,ocaml-ulex)
3387 ("optcomp" ,optcomp)
3388 ("easy-format" ,ocaml-easy-format)
3389 ("base64" ,ocaml-base64)))
3390 (home-page "http://piqi.org")
3391 (synopsis "Data serialization and conversion library")
3392 (description "Piqilib is the common library used by the piqi command-line
3393tool and piqi-ocaml.")
3394 (license license:asl2.0)))
3395
88b1533c
JL
3396(define-public ocaml-uuidm
3397 (package
3398 (name "ocaml-uuidm")
3399 (version "0.9.6")
3400 (source (origin
3401 (method url-fetch)
3402 (uri (string-append "http://erratique.ch/software/uuidm/"
3403 "releases/uuidm-" version ".tbz"))
3404 (sha256
3405 (base32
3406 "0hz4fdx0x16k0pw9995vkz5d1hmzz6b16wck9li399rcbfnv5jlc"))))
3407 (build-system ocaml-build-system)
3408 (arguments
3409 `(#:build-flags
3410 (list "build" "--tests" "true" "--with-cmdliner" "true")
3411 #:phases
3412 (modify-phases %standard-phases
3413 (delete 'configure))))
3414 (native-inputs
3415 `(("opam" ,opam)))
3416 (propagated-inputs
3417 `(("cmdliner" ,ocaml-cmdliner)
3418 ("topkg" ,ocaml-topkg)))
3419 (home-page "http://erratique.ch/software/uuidm")
3420 (synopsis "Universally unique identifiers for OCaml")
3421 (description "Uuidm is an OCaml module implementing 128 bits universally
3422unique identifiers (UUIDs) version 3, 5 (named based with MD5, SHA-1 hashing)
3423and 4 (random based) according to RFC 4122.")
3424 (license license:isc)))
3425
8a238180
JL
3426(define-public ocaml-graph
3427 (package
3428 (name "ocaml-graph")
3429 (version "1.8.7")
3430 (source (origin
3431 (method url-fetch)
3432 (uri (string-append "http://ocamlgraph.lri.fr/download/"
3433 "ocamlgraph-" version ".tar.gz"))
3434 (sha256
3435 (base32
3436 "1845r537swjil2fcj7lgbibc2zybfwqqasrd2s7bncajs83cl1nz"))
3437 (patches (search-patches "ocaml-graph-honor-source-date-epoch.patch"))))
3438 (build-system ocaml-build-system)
3439 (arguments
3440 `(#:install-target "install-findlib"
3441 #:phases
3442 (modify-phases %standard-phases
3443 (add-before 'configure 'set-shell
3444 (lambda* (#:key inputs #:allow-other-keys)
3445 (setenv "CONFIG_SHELL" (string-append (assoc-ref inputs "bash")
3446 "/bin/sh")))))))
3447 (inputs `(("lablgtk" ,lablgtk)))
3448 (home-page "http://ocamlgraph.lri.fr/")
3449 (synopsis "Graph library for OCaml")
3450 (description "OCamlgraph is a generic graph library for OCaml.")
3451 (license license:lgpl2.1)))
3452
fc3d70ae
JL
3453(define-public ocaml-piqi
3454 (package
3455 (name "ocaml-piqi")
3456 (version "0.7.5")
3457 (source (origin
3458 (method url-fetch)
3459 (uri (string-append "https://github.com/alavrik/piqi-ocaml/"
3460 "archive/v" version ".tar.gz"))
597beb8a 3461 (file-name (string-append name "-" version ".tar.gz"))
fc3d70ae
JL
3462 (sha256
3463 (base32
3464 "0ngz6y8i98i5v2ma8nk6mc83pdsmf2z0ks7m3xi6clfg3zqbddrv"))))
3465 (build-system ocaml-build-system)
3466 (arguments
3467 `(#:make-flags
3468 (list (string-append "DESTDIR=" (assoc-ref %outputs "out"))
3469 (string-append "SHELL=" (assoc-ref %build-inputs "bash")
3470 "/bin/sh"))
3471 #:phases
3472 (modify-phases %standard-phases
3473 (delete 'configure))))
3474 (native-inputs
3475 `(("which" ,which)
3476 ("protobuf" ,protobuf))) ; for tests
3477 (propagated-inputs
3478 `(("piqilib" ,ocaml-piqilib)))
3479 (home-page "https://github.com/alavrik/piqi-ocaml")
3480 (synopsis "Protocol serialization system for OCaml")
3481 (description "Piqi is a multi-format data serialization system for OCaml.
3482It provides a uniform interface for serializing OCaml data structures to JSON,
3483XML and Protocol Buffers formats.")
3484 (license license:asl2.0)))
3485
cd1562ef
JL
3486(define-public bap
3487 (package
3488 (name "bap")
3489 (version "1.1.0")
3490 (home-page "https://github.com/BinaryAnalysisPlatform/bap")
3491 (source (origin
3492 (method url-fetch)
3493 (uri (string-append home-page "/archive/v" version ".tar.gz"))
3494 (sha256
3495 (base32
3496 "1ms95m4j1qrmy7zqmsn2izh7gq68lnmssl7chyhk977kd3sxj66m"))
3497 (file-name (string-append name "-" version ".tar.gz"))))
3498 (build-system ocaml-build-system)
3499 (native-inputs
3500 `(("oasis" ,ocaml-oasis)
67b5785e 3501 ("clang" ,clang-3.8)
cd1562ef
JL
3502 ("ounit" ,ocaml-ounit)))
3503 (propagated-inputs
3504 `(("core-kernel" ,ocaml-core-kernel)
3505 ("ppx-driver" ,ocaml-ppx-driver)
3506 ("uri" ,ocaml-uri)
67b5785e 3507 ("llvm" ,llvm-3.8)
cd1562ef
JL
3508 ("gmp" ,gmp)
3509 ("clang-runtime" ,clang-runtime)
3510 ("fileutils" ,ocaml-fileutils)
3511 ("cmdliner" ,ocaml-cmdliner)
3512 ("zarith" ,ocaml-zarith)
3513 ("uuidm" ,ocaml-uuidm)
3514 ("camlzip" ,camlzip)
3515 ("frontc" ,ocaml-frontc)
3516 ("ezjsonm" ,ocaml-ezjsonm)
3517 ("ocurl" ,ocaml-ocurl)
3518 ("piqi" ,ocaml-piqi)
3519 ("ocamlgraph" ,ocaml-graph)
3520 ("bitstring" ,ocaml-bitstring)
3521 ("ppx-jane" ,ocaml-ppx-jane)
3522 ("re" ,ocaml-re)))
67b5785e 3523 (inputs `(("llvm" ,llvm-3.8)))
cd1562ef
JL
3524 (arguments
3525 `(#:use-make? #t
3526 #:phases
3527 (modify-phases %standard-phases
3528 (replace 'configure
3529 (lambda* (#:key outputs #:allow-other-keys)
3530 (zero? (system* "./configure" "--prefix"
3531 (assoc-ref outputs "out")
3532 "--libdir"
3533 (string-append
3534 (assoc-ref outputs "out")
3535 "/lib/ocaml/site-lib")
3536 "--with-llvm-version=3.8"
3537 "--with-llvm-config=llvm-config"
3538 "--enable-everything"))))
3539 (add-after 'install 'link-stubs
3540 (lambda* (#:key outputs #:allow-other-keys)
3541 (let* ((out (assoc-ref outputs "out"))
3542 (stubs (string-append out "/lib/ocaml/site-lib/stubslibs"))
3543 (lib (string-append out "/lib/ocaml/site-lib/bap-plugin-llvm")))
3544 (mkdir-p stubs)
3545 (symlink (string-append lib "/dllllvm_plugin_stubs.so")
3546 (string-append stubs "/dllllvm_plugin_stubs.so"))))))))
3547 (synopsis "Binary Analysis Platform")
3548 (description "Binary Analysis Platform is a framework for writing program
3549analysis tools, that target binary files. The framework consists of a plethora
3550of libraries, plugins, and frontends. The libraries provide code reusability,
3551the plugins facilitate extensibility, and the frontends serve as entry points.")
3552 (license license:expat)))
3553
408091d5
JL
3554(define-public ocaml-camomile
3555 (package
3556 (name "ocaml-camomile")
3557 (version "0.8.5")
3558 (home-page "https://github.com/yoriyuki/Camomile")
3559 (source (origin
3560 (method url-fetch)
3561 (uri (string-append home-page "/releases/download/rel-" version
3562 "/camomile-" version ".tar.bz2"))
3563 (sha256
3564 (base32
3565 "003ikpvpaliy5hblhckfmln34zqz0mk3y2m1fqvbjngh3h2np045"))))
3566 (build-system ocaml-build-system)
3567 (native-inputs `(("camlp4" ,camlp4)))
3568 (arguments
3569 `(#:phases
3570 (modify-phases %standard-phases
3571 (add-before 'configure 'fix-bin/sh
3572 (lambda _
3573 (setenv "CONFIG_SHELL" (which "bash")))))))
3574 (synopsis "Comprehensive Unicode library")
3575 (description "Camomile is a Unicode library for OCaml. Camomile provides
3576Unicode character type, UTF-8, UTF-16, UTF-32 strings, conversion to/from about
3577200 encodings, collation and locale-sensitive case mappings, and more. The
3578library is currently designed for Unicode Standard 3.2.")
3579 ;; with an exception for linked libraries to use a different license
3580 (license license:lgpl2.0+)))
3581
c00233ac
PK
3582(define-public ocaml-jbuilder
3583 (package
3584 (name "ocaml-jbuilder")
0e43721f 3585 (version "1.0+beta16")
c00233ac
PK
3586 (source (origin
3587 (method url-fetch)
3588 (uri (string-append
3589 "https://github.com/janestreet/jbuilder/archive/"
3590 version ".tar.gz"))
3591 (file-name (string-append name "-" version ".tar.gz"))
3592 (sha256
3593 (base32
0e43721f 3594 "0gcy52y0mkg450yxwszp3lww303a1154566r8jb4hh5l61dh4dwj"))))
c00233ac
PK
3595 (build-system ocaml-build-system)
3596 (arguments
3597 `(#:phases
3598 (modify-phases %standard-phases
3599 (replace 'configure
3600 (lambda* (#:key outputs #:allow-other-keys)
3601 (let ((out (assoc-ref outputs "out")))
3602 (setenv "PREFIX" out))
3603 #t)))))
3604 (native-inputs
3605 `(("menhir" ,ocaml-menhir)))
3606 (propagated-inputs
3607 `(("opam" ,opam)))
3608 (home-page "https://github.com/janestreet/jbuilder")
3609 (synopsis "Composable build system for OCaml")
3610 (description "Jbuilder is a build system designed for OCaml/Reason projects
3611only. It focuses on providing the user with a consistent experience and takes
3612care of most of the low-level details of OCaml compilation. All you have to do
3613is provide a description of your project and Jbuilder will do the rest.")
3614 (license license:asl2.0)))
3615
cd4abd29
PK
3616(define-public ocaml-zed
3617 (package
3618 (name "ocaml-zed")
c959a774 3619 (version "1.6")
cd4abd29
PK
3620 (source (origin
3621 (method url-fetch)
3622 (uri (string-append "https://github.com/diml/zed/archive/"
3623 version ".tar.gz"))
3624 (file-name (string-append name "-" version ".tar.gz"))
3625 (sha256
3626 (base32
c959a774 3627 "19m5vrj60vg1b63qfsv0aabdlzgn40cqmx65s3wafqi4fs9xp6jn"))))
cd4abd29
PK
3628 (build-system ocaml-build-system)
3629 (arguments
3630 `(#:phases
3631 (modify-phases %standard-phases
3632 (delete 'configure)
3633 (replace 'build
3634 (lambda* (#:key #:allow-other-keys)
3635 (zero? (system* "jbuilder" "build"))))
3636 (delete 'check)
3637 (replace 'install
3638 (lambda* (#:key outputs #:allow-other-keys)
3639 (let ((out (assoc-ref outputs "out")))
3640 (zero? (system* "jbuilder" "install" "--prefix" out))))))))
3641 (native-inputs
3642 `(("jbuilder" ,ocaml-jbuilder)))
3643 (propagated-inputs
3644 `(("camomile" ,ocaml-camomile)
3645 ("react" ,ocaml-react)))
3646 (home-page "https://github.com/diml/zed")
3647 (synopsis "Abstract engine for text editing in OCaml")
3648 (description "Zed is an abstract engine for text edition. It can be used
3649to write text editors, edition widgets, readlines, etc. You just have to
3650connect an engine to your inputs and rendering functions to get an editor.")
3651 (license license:bsd-3)))
3652
e88ff71c
PK
3653(define-public ocaml-lambda-term
3654 (package
3655 (name "ocaml-lambda-term")
3656 (version "1.11")
3657 (source
3658 (origin
3659 (method url-fetch)
3660 (uri (string-append "https://github.com/diml/lambda-term/archive/"
3661 version ".tar.gz"))
3662 (file-name (string-append name "-" version ".tar.gz"))
3663 (sha256
3664 (base32 "10lx1jqgmmfwwlv64di4a8nia9l53v7179z70n9fx6aq5l7r8nba"))))
3665 (build-system ocaml-build-system)
3666 (arguments
3667 `(#:test-target "test"
3668 #:phases
3669 (modify-phases %standard-phases
3670 (delete 'configure)
3671 ;; currently, ocaml-lwt is an old version of lwt from before lwt.react
3672 ;; was split into a separate module called lwt_react
3673 (add-before 'build 'use-old-lwt-react-name
3674 (lambda _
3675 (substitute* "src/jbuild" (("lwt_react") "lwt.react"))))
3676 (replace 'install
3677 (lambda* (#:key outputs #:allow-other-keys)
3678 (let ((out (assoc-ref outputs "out")))
3679 (zero? (system* "jbuilder" "install" "--prefix" out))))))))
3680 (native-inputs
3681 `(("jbuilder" ,ocaml-jbuilder)))
3682 (propagated-inputs
3683 `(("lwt" ,ocaml-lwt)
3684 ("zed" ,ocaml-zed)))
3685 (home-page "https://github.com/diml/lambda-term")
3686 (synopsis "Terminal manipulation library for OCaml")
3687 (description "Lambda-Term is a cross-platform library for manipulating the
3688terminal. It provides an abstraction for keys, mouse events, colors, as well as
3689a set of widgets to write curses-like applications. The main objective of
3690Lambda-Term is to provide a higher level functional interface to terminal
3691manipulation than, for example, ncurses, by providing a native OCaml interface
3692instead of bindings to a C library.")
3693 (license license:bsd-3)))
3694
90ab26fa
PK
3695(define-public ocaml-utop
3696 (package
3697 (name "ocaml-utop")
484d68f2 3698 (version "2.0.2")
90ab26fa
PK
3699 (source (origin
3700 (method url-fetch)
3701 (uri (string-append "https://github.com/diml/utop/archive/"
3702 version ".tar.gz"))
3703 (file-name (string-append name "-" version ".tar.gz"))
3704 (sha256
3705 (base32
484d68f2 3706 "0rglznh4prcix8spi3f060jz2gngk7x8vkd291fxs10b88aqcpxf"))))
90ab26fa
PK
3707 (build-system gnu-build-system)
3708 (arguments
3709 `(#:test-target "test"
3710 #:phases
3711 (modify-phases %standard-phases
3712 (delete 'configure)
3713 (replace 'install
3714 (lambda* (#:key outputs #:allow-other-keys)
3715 (let* ((out (assoc-ref outputs "out"))
3716 (libdir (string-append out "/lib/ocaml/site-lib")))
3717 (mkdir-p libdir)
3718 (zero? (system* "jbuilder" "install"
3719 "--prefix" out
3720 "--libdir" libdir))))))))
3721 (native-inputs
3722 `(("ocaml" ,ocaml)
3723 ("cppo" ,ocaml-cppo)
3724 ("jbuilder" ,ocaml-jbuilder)))
3725 (propagated-inputs
bff6739d 3726 `(("ocaml-findlib" ,ocaml-findlib)
90ab26fa
PK
3727 ("lambda-term" ,ocaml-lambda-term)
3728 ("lwt" ,ocaml-lwt)
3729 ("react" ,ocaml-react)
3730 ("camomile" ,ocaml-camomile)
3731 ("zed" ,ocaml-zed)))
3732 (home-page "https://github.com/diml/utop")
3733 (synopsis "Improved interface to the OCaml toplevel")
3734 (description "UTop is an improved toplevel for OCaml. It can run in a
3735terminal or in Emacs. It supports line editing, history, real-time and context
3736sensitive completion, colors, and more.")
3737 (license license:bsd-3)))
3738
edac5354
PK
3739(define-public ocaml-integers
3740 (package
3741 (name "ocaml-integers")
3742 (version "0.2.2")
3743 (home-page "https://github.com/ocamllabs/ocaml-integers")
3744 (source (origin
3745 (method url-fetch)
3746 (uri (string-append home-page
3747 "/releases/download/v0.2.2/integers-"
3748 version ".tbz"))
3749 (file-name (string-append name "-" version ".tbz"))
3750 (sha256
3751 (base32
3752 "08b1ljw88ny3l0mdq6xmffjk8anfc77igryva5jz1p6f4f746ywk"))))
3753 (build-system ocaml-build-system)
3754 (arguments
3755 `(#:tests? #f; no tests
3756 #:build-flags (list "build")
3757 #:phases
3758 (modify-phases %standard-phases
3759 (delete 'configure))))
3760 (inputs
bff6739d 3761 `(("topkg" ,ocaml-topkg)
c695fb76 3762 ("opam" ,opam)))
edac5354
PK
3763 (synopsis "Various signed and unsigned integer types for OCaml")
3764 (description "The ocaml-integers library provides a number of 8-, 16-, 32-
3765and 64-bit signed and unsigned integer types, together with aliases such as
3766long and size_t whose sizes depend on the host platform.")
3767 (license license:expat)))
3768
69d08bb1
PK
3769(define-public ocaml-ctypes
3770 (package
3771 (name "ocaml-ctypes")
3772 (version "0.13.1")
3773 (home-page "https://github.com/ocamllabs/ocaml-ctypes")
3774 (source (origin
3775 (method url-fetch)
3776 (uri (string-append home-page "/archive/" version ".tar.gz"))
3777 (file-name (string-append name "-" version ".tar.gz"))
3778 (sha256
3779 (base32
3780 "17w0pr5k0zjcjns4y9n36rjpfl35zhvp3h8ggqs9lz12qhshdk2m"))))
3781 (build-system ocaml-build-system)
3782 (arguments
bff6739d 3783 `(#:make-flags
69d08bb1
PK
3784 (list (string-append "INSTALL_HEADERS = $(wildcard $($(PROJECT).dir)/*.h)"))
3785 #:phases
3786 (modify-phases %standard-phases
3787 (delete 'configure))))
3788 (native-inputs
3789 `(("pkg-config" ,pkg-config)))
3790 (inputs
3791 `(("libffi" ,libffi)
3792 ("ounit" ,ocaml-ounit)
3793 ("integers" ,ocaml-integers)
3794 ("lwt" ,ocaml-lwt)
3795 ("topkg" ,ocaml-topkg)
c695fb76 3796 ("opam" ,opam)))
69d08bb1
PK
3797 (synopsis "Library for binding to C libraries using pure OCaml")
3798 (description "Ctypes is a library for binding to C libraries using pure
3799OCaml. The primary aim is to make writing C extensions as straightforward as
3800possible. The core of ctypes is a set of combinators for describing the
3801structure of C types -- numeric types, arrays, pointers, structs, unions and
3802functions. You can use these combinators to describe the types of the
3803functions that you want to call, then bind directly to those functions -- all
3804without writing or generating any C!")
3805 (license license:expat)))
3806
c98c8237
PK
3807(define-public ocaml-ocb-stubblr
3808 (package
3809 (name "ocaml-ocb-stubblr")
3810 (version "0.1.1")
3811 (home-page "https://github.com/pqwy/ocb-stubblr")
3812 (source (origin
3813 (method url-fetch)
3814 (uri (string-append
3815 home-page "/releases/download/v0.1.1/ocb-stubblr-"
3816 version ".tbz"))
3817 (file-name (string-append name "-" version ".tbz"))
3818 (sha256
3819 (base32
3820 "167b7x1j21mkviq8dbaa0nmk4rps2ilvzwx02igsc2706784z72f"))))
3821 (build-system ocaml-build-system)
3822 (arguments
bff6739d 3823 `(#:build-flags (list "build" "--tests" "true")
c98c8237
PK
3824 #:phases
3825 (modify-phases %standard-phases
3826 (delete 'configure))))
3827 (inputs
3828 `(("topkg" ,ocaml-topkg)
c695fb76 3829 ("opam" ,opam)))
c98c8237
PK
3830 (native-inputs
3831 `(("astring" ,ocaml-astring)))
3832 (synopsis "OCamlbuild plugin for C stubs")
3833 (description "Ocb-stubblr is about ten lines of code that you need to
3834repeat over, over, over and over again if you are using ocamlbuild to build
3835OCaml projects that contain C stubs.")
3836 (license license:isc)))
3837
a9e9fd15
PK
3838(define-public ocaml-tsdl
3839 (package
3840 (name "ocaml-tsdl")
3841 (version "0.9.1")
3842 (home-page "http://erratique.ch/software/tsdl")
3843 (source (origin
3844 (method url-fetch)
3845 (uri (string-append home-page "/releases/tsdl-"
3846 version ".tbz"))
3847 (file-name (string-append name "-" version ".tar.gz"))
3848 (sha256
3849 (base32
3850 "08bb97fhvz829fb0sgjn2p20mp7b04v98zy2qxpk2w390a6c4b34"))))
3851 (build-system ocaml-build-system)
3852 (arguments
3853 `(#:build-flags '("build")
3854 #:tests? #f; tests require a display device
3855 #:phases
3856 (modify-phases %standard-phases
3857 (delete 'configure))))
3858 (native-inputs
3859 `(("opam" ,opam)
3860 ("pkg-config" ,pkg-config)))
3861 (inputs
bff6739d 3862 `(("topkg" ,ocaml-topkg)
a9e9fd15
PK
3863 ("result" ,ocaml-result)
3864 ("sdl2" ,sdl2)
3865 ("integers" ,ocaml-integers)
3866 ("ctypes" ,ocaml-ctypes)))
3867 (synopsis "Thin bindings to SDL for OCaml")
3868 (description "Tsdl is an OCaml library providing thin bindings to the
3869cross-platform SDL C library.")
3870 (license license:isc)))
3871
d163d97d
JL
3872(define-public coq-flocq
3873 (package
3874 (name "coq-flocq")
b44f13e0 3875 (version "2.6.0")
d163d97d
JL
3876 (source (origin
3877 (method url-fetch)
dd8237b6
TGR
3878 ;; Use the ‘Latest version’ link for a stable URI across releases.
3879 (uri (string-append "https://gforge.inria.fr/frs/download.php/"
3880 "latestfile/2228/flocq-" version ".tar.gz"))
d163d97d
JL
3881 (sha256
3882 (base32
b44f13e0 3883 "13fv150dcwnjrk00d7zj2c5x9jwmxgrq0ay440gkr730l8mvk3l3"))))
d163d97d
JL
3884 (build-system gnu-build-system)
3885 (native-inputs
3886 `(("ocaml" ,ocaml)
3887 ("which" ,which)
3888 ("coq" ,coq)))
3889 (arguments
3890 `(#:configure-flags
3891 (list (string-append "--libdir=" (assoc-ref %outputs "out")
3892 "/lib/coq/user-contrib/Flocq"))
3893 #:phases
3894 (modify-phases %standard-phases
3895 (add-before 'configure 'fix-remake
3896 (lambda _
3897 (substitute* "remake.cpp"
8abbe5dc
TGR
3898 (("/bin/sh") (which "sh")))
3899 #t))
d163d97d
JL
3900 (replace 'build
3901 (lambda _
8abbe5dc
TGR
3902 (invoke "./remake")
3903 #t))
d163d97d
JL
3904 (replace 'check
3905 (lambda _
8abbe5dc
TGR
3906 (invoke "./remake" "check")
3907 #t))
d163d97d 3908 ;; TODO: requires coq-gappa and coq-interval.
8abbe5dc 3909 ;(invoke "./remake" "check-more")
d163d97d
JL
3910 (replace 'install
3911 (lambda _
8abbe5dc
TGR
3912 (invoke "./remake" "install")
3913 #t)))))
d163d97d
JL
3914 (home-page "http://flocq.gforge.inria.fr/")
3915 (synopsis "Floating-point formalization for the Coq system")
3916 (description "Flocq (Floats for Coq) is a floating-point formalization for
3917the Coq system. It provides a comprehensive library of theorems on a multi-radix
3918multi-precision arithmetic. It also supports efficient numerical computations
3919inside Coq.")
3920 (license license:lgpl3+)))
88191ace
JL
3921
3922(define-public coq-gappa
3923 (package
3924 (name "coq-gappa")
3925 (version "1.3.1")
3926 (source (origin
3927 (method url-fetch)
3928 (uri (string-append "https://gforge.inria.fr/frs/download.php/file/36351/gappa-"
3929 version ".tar.gz"))
3930 (sha256
3931 (base32
3932 "0924jr6f15fx22qfsvim5vc0qxqg30ivg9zxj34lf6slbgdl3j39"))))
3933 (build-system gnu-build-system)
3934 (native-inputs
3935 `(("ocaml" ,ocaml)
3936 ("which" ,which)
3937 ("coq" ,coq)
3938 ("bison" ,bison)
3939 ("flex" ,flex)))
3940 (inputs
3941 `(("gmp" ,gmp)
3942 ("mpfr" ,mpfr)
3943 ("boost" ,boost)))
3944 (arguments
3945 `(#:configure-flags
3946 (list (string-append "--libdir=" (assoc-ref %outputs "out")
3947 "/lib/coq/user-contrib/Gappa"))
3948 #:phases
3949 (modify-phases %standard-phases
3950 (add-before 'configure 'fix-remake
3951 (lambda _
3952 (substitute* "remake.cpp"
3953 (("/bin/sh") (which "sh")))))
3954 (replace 'build
3955 (lambda _
3956 (zero? (system* "./remake"))))
3957 (replace 'check
3958 (lambda _
3959 (zero? (system* "./remake" "check"))))
3960 (replace 'install
3961 (lambda _
3962 (zero? (system* "./remake" "install")))))))
3963 (home-page "http://gappa.gforge.inria.fr/")
3964 (synopsis "Verify and formally prove properties on numerical programs")
3965 (description "Gappa is a tool intended to help verifying and formally proving
3966properties on numerical programs dealing with floating-point or fixed-point
3967arithmetic. It has been used to write robust floating-point filters for CGAL
3968and it is used to certify elementary functions in CRlibm. While Gappa is
3969intended to be used directly, it can also act as a backend prover for the Why3
3970software verification plateform or as an automatic tactic for the Coq proof
3971assistant.")
3972 (license (list license:gpl2+ license:cecill))));either gpl2+ or cecill
380c65de
JL
3973
3974(define-public coq-mathcomp
3975 (package
3976 (name "coq-mathcomp")
2e331c9c 3977 (version "1.6.2")
380c65de
JL
3978 (source (origin
3979 (method url-fetch)
3980 (uri (string-append "https://github.com/math-comp/math-comp/archive/mathcomp-"
3981 version ".tar.gz"))
3982 (sha256
3983 (base32
2e331c9c 3984 "0lg5ncr7p4y8qqq6pfw6brqc6a9xzlfa0drprwfdn0rnyaq5nca6"))))
380c65de
JL
3985 (build-system gnu-build-system)
3986 (native-inputs
3987 `(("ocaml" ,ocaml)
3988 ("which" ,which)
3989 ("coq" ,coq)))
3990 (arguments
3991 `(#:tests? #f; No need to test formally-verified programs :)
3992 #:phases
3993 (modify-phases %standard-phases
3994 (delete 'configure)
3995 (add-before 'build 'chdir
3996 (lambda _
3997 (chdir "mathcomp")))
3998 (replace 'install
3999 (lambda* (#:key outputs #:allow-other-keys)
4000 (setenv "COQLIB" (string-append (assoc-ref outputs "out") "/lib/coq/"))
4001 (zero? (system* "make" "-f" "Makefile.coq"
4002 (string-append "COQLIB=" (assoc-ref outputs "out")
4003 "/lib/coq/")
4004 "install")))))))
4005 (home-page "https://math-comp.github.io/math-comp/")
4006 (synopsis "Mathematical Components for Coq")
4007 (description "Mathematical Components for Coq has its origins in the formal
4008proof of the Four Colour Theorem. Since then it has grown to cover many areas
4009of mathematics and has been used for large scale projects like the formal proof
4010of the Odd Order Theorem.
4011
4012The library is written using the Ssreflect proof language that is an integral
4013part of the distribution.")
4014 (license license:cecill-b)))
b09c4244
JL
4015
4016(define-public coq-coquelicot
4017 (package
4018 (name "coq-coquelicot")
3ffd180c 4019 (version "3.0.1")
b09c4244
JL
4020 (source (origin
4021 (method url-fetch)
4022 (uri (string-append "https://gforge.inria.fr/frs/download.php/"
3ffd180c 4023 "file/37045/coquelicot-" version ".tar.gz"))
b09c4244
JL
4024 (sha256
4025 (base32
3ffd180c 4026 "0hsyhsy2lwqxxx2r8xgi5csmirss42lp9bkb9yy35mnya0w78c8r"))))
b09c4244
JL
4027 (build-system gnu-build-system)
4028 (native-inputs
4029 `(("ocaml" ,ocaml)
4030 ("which" ,which)
4031 ("coq" ,coq)))
4032 (propagated-inputs
4033 `(("mathcomp" ,coq-mathcomp)))
4034 (arguments
4035 `(#:configure-flags
4036 (list (string-append "--libdir=" (assoc-ref %outputs "out")
4037 "/lib/coq/user-contrib/Coquelicot"))
4038 #:phases
4039 (modify-phases %standard-phases
4040 (add-before 'configure 'fix-remake
4041 (lambda _
4042 (substitute* "remake.cpp"
4043 (("/bin/sh") (which "sh")))))
4044 (replace 'build
4045 (lambda _
4046 (zero? (system* "./remake"))))
4047 (replace 'check
4048 (lambda _
4049 (zero? (system* "./remake" "check"))))
4050 (replace 'install
4051 (lambda _
4052 (zero? (system* "./remake" "install")))))))
4053 (home-page "http://coquelicot.saclay.inria.fr/index.html")
4054 (synopsis "Coq library for Reals")
4055 (description "Coquelicot is an easier way of writing formulas and theorem
4056statements, achieved by relying on total functions in place of dependent types
4057for limits, derivatives, integrals, power series, and so on. To help with the
4058proof process, the library comes with a comprehensive set of theorems that cover
4059not only these notions, but also some extensions such as parametric integrals,
4060two-dimensional differentiability, asymptotic behaviors. It also offers some
4061automations for performing differentiability proofs. Moreover, Coquelicot is a
4062conservative extension of Coq's standard library and provides correspondence
4063theorems between the two libraries.")
4064 (license license:lgpl3+)))
303690c4 4065
dbfb1a59
JL
4066(define-public coq-bignums
4067 (package
4068 (name "coq-bignums")
4069 (version "8.7.0")
4070 (source (origin
4071 (method url-fetch)
4072 (uri (string-append "https://github.com/coq/bignums/archive/V"
4073 version ".tar.gz"))
4074 (file-name (string-append name "-" version ".tar.gz"))
4075 (sha256
4076 (base32
4077 "03iw9jiwq9jx45gsvp315y3lxr8m9ksppmcjvxs5c23qnky6zqjx"))))
4078 (build-system gnu-build-system)
4079 (native-inputs
4080 `(("ocaml" ,ocaml)
4081 ("coq" ,coq)))
4082 (inputs
4083 `(("camlp5" ,camlp5)))
4084 (arguments
4085 `(#:tests? #f; No test target
4086 #:make-flags
4087 (list (string-append "COQLIBINSTALL=" (assoc-ref %outputs "out")
4088 "/lib/coq/user-contrib"))
4089 #:phases
4090 (modify-phases %standard-phases
4091 (delete 'configure))))
4092 (home-page "https://github.com/coq/bignums")
4093 (synopsis "Coq library for arbitrary large numbers")
4094 (description "Bignums is a coq library of arbitrary large numbers. It
4095provides BigN, BigZ, BigQ that used to be part of Coq standard library.")
4096 (license license:lgpl2.1+)))
4097
303690c4
JL
4098(define-public coq-interval
4099 (package
4100 (name "coq-interval")
6efc9996 4101 (version "3.3.0")
303690c4
JL
4102 (source (origin
4103 (method url-fetch)
4104 (uri (string-append "https://gforge.inria.fr/frs/download.php/"
f7f8930b 4105 "file/37077/interval-" version ".tar.gz"))
303690c4
JL
4106 (sha256
4107 (base32
6efc9996 4108 "08fdcf3hbwqphglvwprvqzgkg0qbimpyhnqsgv3gac4y1ap0f903"))))
303690c4
JL
4109 (build-system gnu-build-system)
4110 (native-inputs
4111 `(("ocaml" ,ocaml)
4112 ("which" ,which)
4113 ("coq" ,coq)))
4114 (propagated-inputs
4115 `(("flocq" ,coq-flocq)
6efc9996 4116 ("bignums" ,coq-bignums)
303690c4
JL
4117 ("coquelicot" ,coq-coquelicot)
4118 ("mathcomp" ,coq-mathcomp)))
4119 (arguments
4120 `(#:configure-flags
4121 (list (string-append "--libdir=" (assoc-ref %outputs "out")
4122 "/lib/coq/user-contrib/Gappa"))
4123 #:phases
4124 (modify-phases %standard-phases
4125 (add-before 'configure 'fix-remake
4126 (lambda _
4127 (substitute* "remake.cpp"
4128 (("/bin/sh") (which "sh")))))
4129 (replace 'build
4130 (lambda _
4131 (zero? (system* "./remake"))))
4132 (replace 'check
4133 (lambda _
4134 (zero? (system* "./remake" "check"))))
4135 (replace 'install
4136 (lambda _
4137 (zero? (system* "./remake" "install")))))))
4138 (home-page "http://coq-interval.gforge.inria.fr/")
4139 (synopsis "Coq tactics to simplify inequality proofs")
4140 (description "Interval provides vernacular files containing tactics for
4141simplifying the proofs of inequalities on expressions of real numbers for the
4142Coq proof assistant.")
4143 (license license:cecill-c)))