guix-more/more/packages/ocaml.scm

ocaml.scm

1
;;; GNU Guix --- Functional package management for GNU
2
;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu>
3
;;;
4
;;; This file is part of GNU Guix.
5
;;;
6
;;; GNU Guix is free software; you can redistribute it and/or modify it
7
;;; under the terms of the GNU General Public License as published by
8
;;; the Free Software Foundation; either version 3 of the License, or (at
9
;;; your option) any later version.
10
;;;
11
;;; GNU Guix is distributed in the hope that it will be useful, but
12
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
13
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
;;; GNU General Public License for more details.
15
;;;
16
;;; You should have received a copy of the GNU General Public License
17
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
18
19
(define-module (more packages ocaml)
20
  #:use-module (guix packages)
21
  #:use-module (guix download)
22
  #:use-module (guix utils)
23
  #:use-module (guix build-system ocaml)
24
  #:use-module ((guix licenses) #:prefix license:)
25
  #:use-module (gnu packages)
26
  #:use-module (gnu packages base)
27
  #:use-module (gnu packages llvm)
28
  #:use-module (gnu packages multiprecision)
29
  #:use-module (gnu packages ocaml)
30
  #:use-module (gnu packages protobuf))
31
32
;; Janestreet packages are found in a similar way and all need the same patch.
33
(define (janestreet-origin name version hash)
34
  (origin (method url-fetch)
35
          (uri (string-append "https://ocaml.janestreet.com/ocaml-core/"
36
                              (version-major+minor version) "/files/"
37
                              name "-" version ".tar.gz"))
38
          (sha256 (base32 hash))
39
          (modules '((guix build utils)))
40
          (snippet
41
           (let ((pattern (string-append "lib/" name)))
42
             `(begin
43
                ;; install.ml contains an invalid reference to the ppx file and
44
                ;; propagates this error to the generated META file.  It
45
                ;; looks for it in the "lib" directory, but it is installed in
46
                ;; "lib/ocaml/site-lib/package".  This substitute does not change
47
                ;; this file for non ppx packages.
48
                (substitute* "install.ml"
49
                  ((,pattern) (string-append "lib/ocaml/site-lib/" ,name)))
50
                ;; The standard Makefile would try to install janestreet modules
51
                ;; in OCaml's directory in the store, which is read-only.
52
                (substitute* "Makefile"
53
                  (("--prefix")
54
                   "--libdir $(LIBDIR) --prefix")))))))
55
56
;; They also require almost the same set of arguments
57
(define janestreet-arguments
58
  `(#:use-make? #t
59
    #:make-flags
60
    (list (string-append "CONFIGUREFLAGS=--prefix "
61
                         (assoc-ref %outputs "out")
62
                         " --enable-tests")
63
          (string-append "LIBDIR="
64
                         (assoc-ref %outputs "out")
65
                         "/lib/ocaml/site-lib")
66
          ;; for ocaml-bin-prot, otherwise ignored
67
          (string-append "OCAML_TOPLEVEL_PATH="
68
                         (assoc-ref %build-inputs "findlib")
69
                         "/lib/ocaml/site-lib"))
70
    #:phases (modify-phases %standard-phases (delete 'configure))))
71
72
(define-public ocaml-sexplib
73
  (package
74
    (name "ocaml-sexplib")
75
    (version "113.33.03")
76
    (source (janestreet-origin "sexplib" version
77
              "1ffjmj8if9lyv965cgn2ld1xv7g52qsr8mqflbm515ck1i8l2ima"))
78
    (build-system ocaml-build-system)
79
    (native-inputs
80
     `(("js-build-tools" ,ocaml-js-build-tools)
81
       ("opam" ,opam)))
82
    (arguments janestreet-arguments)
83
    (home-page "https://github.com/janestreet/sexplib")
84
    (synopsis "Library for serializing OCaml values to and from S-expressions")
85
    (description "Sexplib contains functionality for parsing and pretty-printing
86
s-expressions.")
87
    (license license:asl2.0)))
88
89
(define-public ocaml-typerep
90
  (package
91
    (name "ocaml-typerep")
92
    (version "113.33.03")
93
    (source (janestreet-origin "typerep" version
94
              "1b9v5bmi824a9d4sx0f40ixq0yfcbiqxafg4a1jx95xg9199zafy"))
95
    (native-inputs
96
     `(("js-build-tools" ,ocaml-js-build-tools)
97
       ("opam" ,opam)))
98
    (build-system ocaml-build-system)
99
    (arguments janestreet-arguments)
100
    (home-page "https://github.com/janestreet/typerep")
101
    (synopsis "Typerep is a library for runtime types")
102
    (description "Typerep is a library for runtime types.")
103
    (license license:asl2.0)))
104
105
(define-public ocaml-variantslib
106
  (package
107
    (name "ocaml-variantslib")
108
    (version "113.33.03")
109
    (source (janestreet-origin "variantslib" version
110
              "05vp799vl38fvl98ga5miwbzh09cnnpapi6q6gdvwyqi6w7s919n"))
111
    (native-inputs
112
     `(("js-build-tools" ,ocaml-js-build-tools)
113
       ("opam" ,opam)))
114
    (build-system ocaml-build-system)
115
    (arguments janestreet-arguments)
116
    (home-page "https://github.com/janestreet/variantslib")
117
    (synopsis "OCaml variants as first class values")
118
    (description "OCaml variants as first class values.")
119
    (license license:asl2.0)))
120
121
(define-public ocaml-ppx-sexp-conv
122
  (package
123
    (name "ocaml-ppx-sexp-conv")
124
    (version "113.33.03")
125
    (source (janestreet-origin "ppx_sexp_conv" version
126
              "1rbj6d5dl625gdxih34xcrdvikci6h8i2dl9x3wraa4qrgishiw7"))
127
    (build-system ocaml-build-system)
128
    (native-inputs
129
     `(("js-build-tools" ,ocaml-js-build-tools)
130
       ("opam" ,opam)
131
       ("ppx-core" ,ocaml-ppx-core)))
132
    (propagated-inputs
133
     `(("sexplib" ,ocaml-sexplib)
134
       ("ppx-core" ,ocaml-ppx-core)
135
       ("ppx-type-conv" ,ocaml-ppx-type-conv)
136
       ("ppx-tools" ,ocaml-ppx-tools)))
137
    (arguments janestreet-arguments)
138
    (home-page "https://github.com/janestreet/ppx_sexp_conv")
139
    (synopsis "Generation of S-expression conversion functions from type
140
definitions")
141
    (description "Generation of S-expression conversion functions from type
142
definitions.")
143
    (license license:asl2.0)))
144
145
(define-public ocaml-ppx-variants-conv
146
  (package
147
    (name "ocaml-ppx-variants-conv")
148
    (version "113.33.03")
149
    (source (janestreet-origin "ppx_variants_conv" version
150
              "0vnn2l1118cj72413d3f7frlw6yc09l8f64jlzkzbgb9bxpalx34"))
151
    (build-system ocaml-build-system)
152
    (native-inputs
153
     `(("js-build-tools" ,ocaml-js-build-tools)
154
       ("opam" ,opam)))
155
    (propagated-inputs
156
     `(("ppx-core" ,ocaml-ppx-core)
157
       ("variantslib" ,ocaml-variantslib)
158
       ("ppx-tools" ,ocaml-ppx-tools)
159
       ("ppx-type-conv" ,ocaml-ppx-type-conv)))
160
    (arguments janestreet-arguments)
161
    (home-page "https://github.com/janestreet/ppx_variants_conv")
162
    (synopsis "Generation of accessor and iteration functions for ocaml variant
163
types")
164
    (description "Generation of accessor and iteration functions for ocaml
165
variant types.")
166
    (license license:asl2.0)))
167
168
(define-public ocaml-ppx-here
169
  (package
170
    (name "ocaml-ppx-here")
171
    (version "113.33.03")
172
    (source (janestreet-origin "ppx_here" version
173
              "1ay8lfxi0qg3ib2zkwh4h0vqk3gjmxaz572gzab0bbxyqn3z86v7"))
174
    (build-system ocaml-build-system)
175
    (native-inputs
176
     `(("js-build-tools" ,ocaml-js-build-tools)
177
       ("opam" ,opam)))
178
    (propagated-inputs
179
     `(("ppx-driver" ,ocaml-ppx-driver)
180
       ("ppx-core" ,ocaml-ppx-core)))
181
    (arguments janestreet-arguments)
182
    (home-page "https://github.com/janestreet/ppx_here")
183
    (synopsis "Expands [%here] into its location")
184
    (description "Expands [%here] into its location.")
185
    (license license:asl2.0)))
186
187
(define-public ocaml-ppx-assert
188
  (package
189
    (name "ocaml-ppx-assert")
190
    (version "113.33.03")
191
    (source
192
      (origin
193
        (inherit (janestreet-origin "ppx_assert" version
194
                   "1k5kxmqkibp5fk25pgz81f3c1r4mgvb5byzf6bnmxd24y60wn46p"))
195
        (modules '((guix build utils)))
196
        (snippet `(substitute* "install.ml"
197
                               (("lib/ppx_assert")
198
                                "lib/ocaml/site-lib/ppx_assert")))))
199
    (build-system ocaml-build-system)
200
    (native-inputs
201
     `(("js-build-tools" ,ocaml-js-build-tools)
202
       ("opam" ,opam)))
203
    (propagated-inputs
204
     `(("ppx-compare" ,ocaml-ppx-compare)
205
       ("ppx-core" ,ocaml-ppx-core)
206
       ("ppx-driver" ,ocaml-ppx-driver)
207
       ("ppx-sexp-conv" ,ocaml-ppx-sexp-conv)
208
       ("ppx-tools" ,ocaml-ppx-tools)
209
       ("ppx-type-conv" ,ocaml-ppx-type-conv)
210
       ("ppx-sexplib" ,ocaml-sexplib)
211
       ("ppx-here" ,ocaml-ppx-here)))
212
    (arguments janestreet-arguments)
213
    (home-page "https://github.com/janestreet/ppx_assert")
214
    (synopsis "Assert-like extension nodes that raise useful errors on failure")
215
    (description "Assert-like extension nodes that raise useful errors on failure.")
216
    (license license:asl2.0)))
217
218
(define-public ocaml-ppx-enumerate
219
  (package
220
    (name "ocaml-ppx-enumerate")
221
    (version "113.33.03")
222
    (source (janestreet-origin "ppx_enumerate" version
223
              "15g7yfv9wg2h9r6k6q1zrhygmsl4xrfn25mrb0i4czjjivzmxjh4"))
224
    (build-system ocaml-build-system)
225
    (native-inputs
226
     `(("js-build-tools" ,ocaml-js-build-tools)
227
       ("opam" ,opam)))
228
    (propagated-inputs
229
     `(("ppx-tools" ,ocaml-ppx-tools)
230
       ("ppx-type-conv" ,ocaml-ppx-type-conv)
231
       ("ppx-core" ,ocaml-ppx-core)))
232
    (arguments janestreet-arguments)
233
    (home-page "https://github.com/janestreet/ppx_enumerate")
234
    (synopsis "Generate a list containing all values of a finite type")
235
    (description "Ppx_enumerate is a ppx rewriter which generates a definition
236
for the list of all values of a type (for a type which only has finitely
237
many values).")
238
    (license license:asl2.0)))
239
240
(define-public ocaml-ppx-let
241
  (package
242
    (name "ocaml-ppx-let")
243
    (version "113.33.03")
244
    (source (janestreet-origin "ppx_let" version
245
              "0gd6d3gdaqfwjcs7gaw1qxc30i584q6a86ndaj1bx1q63xqd6yx9"))
246
    (build-system ocaml-build-system)
247
    (native-inputs
248
     `(("js-build-tools" ,ocaml-js-build-tools)
249
       ("opam" ,opam)))
250
    (propagated-inputs
251
     `(("ppx-driver" ,ocaml-ppx-driver)
252
       ("ppx-core" ,ocaml-ppx-core)))
253
    (arguments janestreet-arguments)
254
    (home-page "https://github.com/janestreet/ppx_let")
255
    (synopsis "Monadic let-bindings")
256
    (description "A ppx rewriter for monadic and applicative let bindings,
257
match expressions, and if expressions.")
258
    (license license:asl2.0)))
259
260
(define-public ocaml-ppx-typerep-conv
261
  (package
262
    (name "ocaml-ppx-typerep-conv")
263
    (version "113.33.03")
264
    (source (janestreet-origin "ppx_typerep_conv" version
265
              "0g0xqm9s1b2jjvxb8yp69281q2s3bwz6sibn10fvgcdawpa0rmrg"))
266
    (build-system ocaml-build-system)
267
    (native-inputs
268
     `(("js-build-tools" ,ocaml-js-build-tools)
269
       ("opam" ,opam)))
270
    (propagated-inputs
271
     `(("ppx-tools" ,ocaml-ppx-tools)
272
       ("ppx-type-conv" ,ocaml-ppx-type-conv)
273
       ("ppx-core" ,ocaml-ppx-core)
274
       ("typerep" ,ocaml-typerep)))
275
    (arguments janestreet-arguments)
276
    (home-page "https://github.com/janestreet/ppx_typerep_conv")
277
    (synopsis "Generation of runtime types from type declarations")
278
    (description "Automatic generation of runtime types from type definitions.")
279
    (license license:asl2.0)))
280
281
(define-public ocaml-ppx-sexp-value
282
  (package
283
    (name "ocaml-ppx-sexp-value")
284
    (version "113.33.03")
285
    (source (janestreet-origin "ppx_sexp_value" version
286
              "0m3ag23mbqm0i2pv1dzilfks15ipa5q60mf57a0cd3p0pvarq10g"))
287
    (build-system ocaml-build-system)
288
    (native-inputs
289
     `(("js-build-tools" ,ocaml-js-build-tools)
290
       ("opam" ,opam)))
291
    (propagated-inputs
292
     `(("ppx-driver" ,ocaml-ppx-driver)
293
       ("ppx-here" ,ocaml-ppx-here)
294
       ("ppx-sexp-conv" ,ocaml-ppx-sexp-conv)
295
       ("ppx-tools" ,ocaml-ppx-tools)
296
       ("ppx-core" ,ocaml-ppx-core)))
297
    (arguments janestreet-arguments)
298
    (home-page "https://github.com/janestreet/ppx_sexp_value/")
299
    (synopsis "Simplify building s-expressions from ocaml values")
300
    (description "A ppx rewriter that simplifies building s-expressions from
301
ocaml values.")
302
    (license license:asl2.0)))
303
304
(define-public ocaml-ppx-pipebang
305
  (package
306
    (name "ocaml-ppx-pipebang")
307
    (version "113.33.03")
308
    (source (janestreet-origin "ppx_pipebang" version
309
              "1965c7hymp26ncmjs0pfxi2s5jlj60z2c9b194lgcwxqiav56pcw"))
310
    (build-system ocaml-build-system)
311
    (native-inputs
312
     `(("js-build-tools" ,ocaml-js-build-tools)
313
       ("opam" ,opam)))
314
    (propagated-inputs
315
     `(("ppx-driver" ,ocaml-ppx-driver)
316
       ("ppx-tools" ,ocaml-ppx-tools)
317
       ("ppx-core" ,ocaml-ppx-core)))
318
    (arguments janestreet-arguments)
319
    (home-page "https://github.com/janestreet/ppx_pipebang/")
320
    (synopsis "Inline reverse application operators `|>` and `|!`")
321
    (description "A ppx rewriter that inlines reverse application operators
322
`|>` and `|!`.")
323
    (license license:asl2.0)))
324
325
(define-public ocaml-ppx-bin-prot
326
  (package
327
    (name "ocaml-ppx-bin-prot")
328
    (version "113.33.03")
329
    (source (janestreet-origin "ppx_bin_prot" version
330
              "173kjv36giik11zgfvsbzwfbpr66dm2pcha9vf990jgzh8hqz39h"))
331
    (build-system ocaml-build-system)
332
    (native-inputs
333
     `(("js-build-tools" ,ocaml-js-build-tools)
334
       ("opam" ,opam)))
335
    (propagated-inputs
336
     `(("bin-prot" ,ocaml-bin-prot)
337
       ("ppx-tools" ,ocaml-ppx-tools)
338
       ("ppx-type-conv" ,ocaml-ppx-type-conv)
339
       ("ppx-core" ,ocaml-ppx-core)))
340
    (arguments janestreet-arguments)
341
    (home-page "https://github.com/janestreet/ppx_bin_prot/")
342
    (synopsis "Generation of bin_prot readers and writers from types")
343
    (description "Generation of binary serialization and deserialization
344
functions from type definitions.")
345
    (license license:asl2.0)))
346
347
(define-public ocaml-ppx-fail
348
  (package
349
    (name "ocaml-ppx-fail")
350
    (version "113.33.03")
351
    (source (janestreet-origin "ppx_fail" version
352
              "1dwgad0f05gqp5rnwf9dcasidpfi7q3mrpazsw3a2vijjblbhjgn"))
353
    (build-system ocaml-build-system)
354
    (native-inputs
355
     `(("js-build-tools" ,ocaml-js-build-tools)
356
       ("opam" ,opam)))
357
    (propagated-inputs
358
     `(("ppx-driver" ,ocaml-ppx-driver)
359
       ("ppx-tools" ,ocaml-ppx-tools)
360
       ("ppx-here" ,ocaml-ppx-here)
361
       ("ppx-core" ,ocaml-ppx-core)))
362
    (arguments janestreet-arguments)
363
    (home-page "https://github.com/janestreet/ppx_fail/")
364
    (synopsis "Add location to calls to failwiths")
365
    (description "Syntax extension that makes [failwiths] always include a
366
position.")
367
    (license license:asl2.0)))
368
369
(define-public ocaml-ppx-custom-printf
370
  (package
371
    (name "ocaml-ppx-custom-printf")
372
    (version "113.33.03")
373
    (source (janestreet-origin "ppx_custom_printf" version
374
              "11jlx0n87g2j1vyyp343dibx7lvvwig5j5q0nq0b80kbsq0k6yr8"))
375
    (build-system ocaml-build-system)
376
    (native-inputs
377
     `(("js-build-tools" ,ocaml-js-build-tools)
378
       ("opam" ,opam)))
379
    (propagated-inputs
380
     `(("ppx-sexp-conv" ,ocaml-ppx-sexp-conv)
381
       ("ppx-tools" ,ocaml-ppx-tools)
382
       ("ppx-core" ,ocaml-ppx-core)
383
       ("ppx-driver" ,ocaml-ppx-driver)))
384
    (arguments janestreet-arguments)
385
    (home-page "https://github.com/janestreet/ppx_custom_printf/")
386
    (synopsis "Printf-style format-strings for user-defined string conversion")
387
    (description "Extensions to printf-style format-strings for user-defined
388
string conversion.")
389
    (license license:asl2.0)))
390
391
(define-public ocaml-ppx-sexp-message
392
  (package
393
    (name "ocaml-ppx-sexp-message")
394
    (version "113.33.03")
395
    (source (janestreet-origin "ppx_sexp_message" version
396
              "084w1l3gnyw4ri9vbn7bv9b2xkw1520qczfxpxdarfivdrz8xr68"))
397
    (build-system ocaml-build-system)
398
    (native-inputs
399
     `(("js-build-tools" ,ocaml-js-build-tools)
400
       ("opam" ,opam)))
401
    (propagated-inputs
402
     `(("ppx-driver" ,ocaml-ppx-driver)
403
       ("ppx-here" ,ocaml-ppx-here)
404
       ("ppx-sexp-conv" ,ocaml-ppx-sexp-conv)
405
       ("ppx-tools" ,ocaml-ppx-tools)
406
       ("ppx-core" ,ocaml-ppx-core)))
407
    (arguments janestreet-arguments)
408
    (home-page "https://github.com/janestreet/ppx_sexp_message/")
409
    (synopsis "A ppx rewriter for easy construction of s-expressions")
410
    (description "The aim of ppx_sexp_message is to ease the creation of
411
s-expressions in OCaml.  This is mainly motivated by writing error and debugging
412
messages, where one needs to construct a s-expression based on various element
413
of the context such as function arguments.")
414
    (license license:asl2.0)))
415
416
(define-public ocaml-ppx-fields-conv
417
  (package
418
    (name "ocaml-ppx-fields-conv")
419
    (version "113.33.03")
420
    (source (janestreet-origin "ppx_fields_conv" version
421
              "1vzbdz27g5qhhfs7wx6rjf979q4xyssxqbmp6sc1sxknbghslbdv"))
422
    (build-system ocaml-build-system)
423
    (native-inputs
424
     `(("js-build-tools" ,ocaml-js-build-tools)
425
       ("opam" ,opam)
426
       ("ppx-core" ,ocaml-ppx-core)))
427
    (propagated-inputs
428
     `(("fieldslib" ,ocaml-fieldslib)
429
       ("ppx-tools" ,ocaml-ppx-tools)
430
       ("ppx-core" ,ocaml-ppx-core)
431
       ("ppx-type-conv" ,ocaml-ppx-type-conv)))
432
    (arguments janestreet-arguments)
433
    (home-page "https://github.com/janestreet/ppx_fields_conv/")
434
    (synopsis "Generation of accessor and iteration functions for ocaml records")
435
    (description "Ppx_fields_conv is a ppx rewriter that can be used to define
436
first class values representing record fields, and additional routines, to get
437
and set record fields, iterate and fold over all fields of a record and create
438
new record values.")
439
    (license license:asl2.0)))
440
441
(define-public ocaml-re
442
  (package
443
    (name "ocaml-re")
444
    (version "1.7.1")
445
    (source (origin
446
              (method url-fetch)
447
              (uri (string-append "https://github.com/ocaml/ocaml-re//archive/"
448
                                  version ".tar.gz"))
449
              (sha256
450
               (base32
451
                "1s3rcr76cgm4p1xmaazc58arkg2lz3zfcp1icm00m6s5ccnkh67b"))))
452
    (build-system ocaml-build-system)
453
    (native-inputs `(("ounit" ,ocaml-ounit)))
454
    (home-page "https://github.com/ocaml/ocaml-re/")
455
    (synopsis "Regular expression library for OCaml")
456
    (description "Pure OCaml regular expressions with:
457
enumerate
458
@item Perl-style regular expressions (module Re_perl)
459
@item Posix extended regular expressions (module Re_posix)
460
@item Emacs-style regular expressions (module Re_emacs)
461
@item Shell-style file globbing (module Re_glob)
462
@item Compatibility layer for OCaml's built-in Str module (module Re_str)
463
@end enumerate")
464
    (license license:expat)))
465
466
(define-public ocaml-ppx-expect
467
  (package
468
    (name "ocaml-ppx-expect")
469
    (version "113.33.03")
470
    (source (janestreet-origin "ppx_expect" version
471
              "03sbs4s5i8l9syr45v25f5hzy7msd2b47k2a9wsq9m43d4imgkrc"))
472
    (build-system ocaml-build-system)
473
    (native-inputs
474
     `(("js-build-tools" ,ocaml-js-build-tools)
475
       ("opam" ,opam)))
476
    (propagated-inputs
477
     `(("fieldslib" ,ocaml-fieldslib)
478
       ("ppx-tools" ,ocaml-ppx-tools)
479
       ("ppx-assert" ,ocaml-ppx-assert)
480
       ("ppx-compare" ,ocaml-ppx-compare)
481
       ("ppx-core" ,ocaml-ppx-core)
482
       ("ppx-custom-printf" ,ocaml-ppx-custom-printf)
483
       ("ppx-driver" ,ocaml-ppx-driver)
484
       ("ppx-fields-conv" ,ocaml-ppx-fields-conv)
485
       ("ppx-inline-test" ,ocaml-ppx-inline-test)
486
       ("ppx-sexp-conv" ,ocaml-ppx-sexp-conv)
487
       ("ppx-variants-conv" ,ocaml-ppx-variants-conv)
488
       ("re" ,ocaml-re)
489
       ("sexplib" ,ocaml-sexplib)
490
       ("variantslib" ,ocaml-variantslib)))
491
    (arguments janestreet-arguments)
492
    (home-page "https://github.com/janestreet/ppx_expect/")
493
    (synopsis "Cram like framework for OCaml")
494
    (description "Expect-test is a framework for writing tests in OCaml, similar
495
to Cram.  Expect-tests mimic the existing inline tests framework with the
496
let%expect_test construct.  The body of an expect-test can contain
497
output-generating code, interleaved with %expect extension expressions to denote
498
the expected output.")
499
    (license license:asl2.0)))
500
501
(define-public ocaml-ppx-jane
502
  (package
503
    (name "ocaml-ppx-jane")
504
    (version "113.33.03")
505
    (source (janestreet-origin "ppx_jane" version
506
              "0bjxkhmzgm6x9dcvjwybbccn34khbvyyjimcbaja30fp6qcqk5yl"))
507
    (build-system ocaml-build-system)
508
    (native-inputs
509
     `(("js-build-tools" ,ocaml-js-build-tools)
510
       ("opam" ,opam)))
511
    (propagated-inputs
512
     `(("ppx-assert" ,ocaml-ppx-assert)
513
       ("ppx-bench" ,ocaml-ppx-bench)
514
       ("ppx-bin-prot" ,ocaml-ppx-bin-prot)
515
       ("ppx-compare" ,ocaml-ppx-compare)
516
       ("ppx-custom-printf" ,ocaml-ppx-custom-printf)
517
       ("ppx-deriving" ,ocaml-ppx-deriving)
518
       ("ppx-enumerate" ,ocaml-ppx-enumerate)
519
       ("ppx-expect" ,ocaml-ppx-expect)
520
       ("ppx-fail" ,ocaml-ppx-fail)
521
       ("ppx-fields-conv" ,ocaml-ppx-fields-conv)
522
       ("ppx-here" ,ocaml-ppx-here)
523
       ("ppx-inline-test" ,ocaml-ppx-inline-test)
524
       ("ppx-let" ,ocaml-ppx-let)
525
       ("ppx-pipebang" ,ocaml-ppx-pipebang)
526
       ("ppx-sexp-conv" ,ocaml-ppx-sexp-conv)
527
       ("ppx-sexp-message" ,ocaml-ppx-sexp-message)
528
       ("ppx-sexp-value" ,ocaml-ppx-sexp-value)
529
       ("ppx-typerep-conv" ,ocaml-ppx-typerep-conv)
530
       ("ppx-variants-conv" ,ocaml-ppx-variants-conv)))
531
    (arguments janestreet-arguments)
532
    (home-page "https://github.com/janestreet/ppx_jane/")
533
    (synopsis "Standard Jane Street ppx rewriters")
534
    (description "Ppx_jane is a ppx_driver including all standard ppx rewriters.")
535
    (license license:asl2.0)))
536
537
(define-public ocaml-core-kernel
538
  (package
539
    (name "ocaml-core-kernel")
540
    (version "113.33.03")
541
    (source (janestreet-origin "core_kernel" version
542
               "0fl23jrwivixawhxinbwaw9cabqnzn7fini7dxpxjjvkxdc8ip5y"))
543
    (native-inputs
544
     `(("js-build-tools" ,ocaml-js-build-tools)
545
       ("ppx-jane" ,ocaml-ppx-jane)
546
       ("opam" ,opam)))
547
    (propagated-inputs
548
     `(("bin_prot" ,ocaml-bin-prot)
549
       ("ppx-assert" ,ocaml-ppx-assert)
550
       ("ppx-bench" ,ocaml-ppx-bench)
551
       ("ppx-driver" ,ocaml-ppx-driver)
552
       ("ppx-expect" ,ocaml-ppx-expect)
553
       ("ppx-inline-test" ,ocaml-ppx-inline-test)
554
       ("typerep" ,ocaml-typerep)
555
       ("sexplib" ,ocaml-sexplib)
556
       ("variantslib" ,ocaml-variantslib)
557
       ("result" ,ocaml-result)
558
       ("fieldslib" ,ocaml-fieldslib)))
559
    (build-system ocaml-build-system)
560
    (arguments janestreet-arguments)
561
    (home-page "https://github.com/janestreet/core_kernel/")
562
    (synopsis "Portable standard library for OCaml")
563
    (description "Core is an alternative to the OCaml standard library.
564
565
Core_kernel is the system-independent part of Core. It is aimed for cases when
566
the full Core is not available, such as in Javascript.")
567
    (license license:asl2.0)))
568
569
(define-public ocaml-async-kernel
570
  (package
571
    (name "ocaml-async-kernel")
572
    (version "113.33.03")
573
    (source (janestreet-origin "async_kernel" version
574
              "04bjsaa23j831r09r38x6xx9nhryvp0z5ihickvhxqa4fb2snyvd"))
575
    (native-inputs
576
     `(("oasis" ,ocaml-oasis)
577
       ("js-build-tools" ,ocaml-js-build-tools)
578
       ("ppx-jane" ,ocaml-ppx-jane)
579
       ("opam" ,opam)))
580
    (propagated-inputs
581
     `(("core-kernel" ,ocaml-core-kernel)))
582
    (build-system ocaml-build-system)
583
    (arguments janestreet-arguments)
584
    (home-page "https://github.com/janestreet/async_kernel/")
585
    (synopsis "Monadic concurrency library")
586
    (description "Monadic concurrency library.")
587
    (license license:asl2.0)))
588
589
(define-public ocaml-async-rpc-kernel
590
  (package
591
    (name "ocaml-async-rpc-kernel")
592
    (version "113.33.03")
593
    (source (janestreet-origin "async_rpc_kernel" version
594
             "0y97h9pkb00v7jpf87m8cbb0ffkclj9g26ph6sq97q8dpisnkjwh"))
595
    (native-inputs
596
     `(("oasis" ,ocaml-oasis)
597
       ("js-build-tools" ,ocaml-js-build-tools)
598
       ("ppx-jane" ,ocaml-ppx-jane)
599
       ("opam" ,opam)))
600
    (propagated-inputs
601
     `(("async-kernel" ,ocaml-async-kernel)))
602
    (build-system ocaml-build-system)
603
    (arguments janestreet-arguments)
604
    (home-page "https://github.com/janestreet/async_rpc_kernel/")
605
    (synopsis "Platform-independent core of Async RPC library")
606
    (description "Platform-independent core of Async RPC library.")
607
    (license license:asl2.0)))
608
609
(define-public ocaml-core
610
  (package
611
    (name "ocaml-core")
612
    (version "113.33.03")
613
    (source (janestreet-origin "core" version
614
              "1znll157qg56g9d3247fjibv1hxv3r9wxgr4nhy19j2vzdh6a268"))
615
    (native-inputs
616
     `(("oasis" ,ocaml-oasis)
617
       ("js-build-tools" ,ocaml-js-build-tools)
618
       ("ppx-jane" ,ocaml-ppx-jane)
619
       ("opam" ,opam)))
620
    (propagated-inputs
621
     `(("core-kernel" ,ocaml-core-kernel)))
622
    (build-system ocaml-build-system)
623
    (arguments janestreet-arguments)
624
    (home-page "https://github.com/janestreet/core/")
625
    (synopsis "Alternative to OCaml's standard library")
626
    (description "The Core suite of libraries is an alternative to OCaml's
627
standard library that was developed by Jane Street.")
628
    (license license:asl2.0)))
629
630
(define-public ocaml-async-unix
631
  (package
632
    (name "ocaml-async-unix")
633
    (version "113.33.03")
634
    (source (janestreet-origin "async_unix" version
635
              "1fwl0lfrizllcfjk8hk8m7lsz9ha2jg6qgk4gssfyz377qvpcq4h"))
636
    (native-inputs
637
     `(("oasis" ,ocaml-oasis)
638
       ("js-build-tools" ,ocaml-js-build-tools)
639
       ("ppx-jane" ,ocaml-ppx-jane)
640
       ("opam" ,opam)))
641
    (propagated-inputs
642
     `(("async-kernel" ,ocaml-async-kernel)
643
       ("core" ,ocaml-core)))
644
    (build-system ocaml-build-system)
645
    (arguments janestreet-arguments)
646
    (home-page "https://github.com/janestreet/async_unix")
647
    (synopsis "Monadic concurrency library")
648
    (description "Monadic concurrency library.")
649
    (license license:asl2.0)))
650
651
(define-public ocaml-async-extra
652
  (package
653
    (name "ocaml-async-extra")
654
    (version "113.33.03")
655
    (source (janestreet-origin "async_extra" version
656
              "1si8jgiq5xh5sl9f2b7f9p17p7zx5h1pg557x2cxywi2x7pxqg4f"))
657
    (native-inputs
658
     `(("oasis" ,ocaml-oasis)
659
       ("js-build-tools" ,ocaml-js-build-tools)
660
       ("ppx-jane" ,ocaml-ppx-jane)
661
       ("opam" ,opam)))
662
    (propagated-inputs
663
     `(("async-rpc-kernel" ,ocaml-async-rpc-kernel)
664
       ("async-unix" ,ocaml-async-unix)
665
       ("core" ,ocaml-core)))
666
    (build-system ocaml-build-system)
667
    (arguments janestreet-arguments)
668
    (home-page "https://github.com/janestreet/async_extra")
669
    (synopsis "Monadic concurrency library")
670
    (description "Monadic concurrency library.")
671
    (license license:asl2.0)))
672
673
(define-public ocaml-async
674
  (package
675
    (name "ocaml-async")
676
    (version "113.33.03")
677
    (source (janestreet-origin "async" version
678
              "0210fyhcs12kpmmd26015bgivkfd2wqkyn3c5wd7688d0f872y25"))
679
    (native-inputs
680
     `(("oasis" ,ocaml-oasis)
681
       ("js-build-tools" ,ocaml-js-build-tools)
682
       ("ppx-jane" ,ocaml-ppx-jane)
683
       ("opam" ,opam)))
684
    (propagated-inputs
685
     `(("async-extra" ,ocaml-async-extra)))
686
    (build-system ocaml-build-system)
687
    (arguments janestreet-arguments)
688
    (home-page "https://github.com/janestreet/async")
689
    (synopsis "Monadic concurrency library")
690
    (description "Monadic concurrency library.")
691
    (license license:asl2.0)))
692
693
(define-public ocaml-ocplib-endian
694
  (package
695
    (name "ocaml-ocplib-endian")
696
    (version "1.0")
697
    (source (origin
698
              (method url-fetch)
699
              (uri (string-append "https://github.com/OCamlPro/ocplib-endian/"
700
                                  "archive/" version ".tar.gz"))
701
              (sha256
702
               (base32
703
                "0hwj09rnzjs0m0kazz5h2mgs6p95j0zlga8cda5srnzqmzhniwkn"))
704
              (file-name (string-append name "-" version ".tar.gz"))))
705
    (build-system ocaml-build-system)
706
    (native-inputs `(("cppo" ,ocaml-cppo)))
707
    (home-page "https://github.com/OCamlPro/ocplib-endian")
708
    (synopsis "Optimised functions to read and write int16/32/64 from strings
709
and bigarrays")
710
    (description "Optimised functions to read and write int16/32/64 from strings
711
and bigarrays, based on new primitives added in version 4.01. It works on
712
strings, bytes and bigstring (Bigarrys of chars), and provides submodules for
713
big- and little-endian, with their unsafe counter-parts.")
714
    (license license:lgpl2.1)))
715
716
(define-public ocaml-cstruct
717
  (package
718
    (name "ocaml-cstruct")
719
    (version "2.3.1")
720
    (source (origin
721
              (method url-fetch)
722
              (uri (string-append "https://github.com/mirage/ocaml-cstruct/"
723
                                  "archive/v" version ".tar.gz"))
724
              (sha256
725
               (base32
726
                "15qpdc8421shq4pprdas9jznpva45229wkfqbwcxw9khaiiz7949"))
727
              (file-name (string-append name "-" version ".tar.gz"))))
728
    (build-system ocaml-build-system)
729
    (arguments
730
     `(#:configure-flags
731
       (list "--enable-lwt" "--enable-async")
732
       #:phases
733
       (modify-phases %standard-phases
734
         (add-after 'install 'link-stubs
735
           (lambda* (#:key outputs #:allow-other-keys)
736
             (let* ((out (assoc-ref outputs "out"))
737
                    (stubs (string-append out "/lib/ocaml/site-lib/stubslibs"))
738
                    (lib (string-append out "/lib/ocaml/site-lib/cstruct")))
739
               (mkdir-p stubs)
740
               (symlink (string-append lib "/dllcstruct_stubs.so")
741
                        (string-append stubs "/dllcstruct_stubs.so"))))))))
742
    (native-inputs
743
     `(("ounit" ,ocaml-ounit)
744
       ("ppx-tools" ,ocaml-ppx-tools)
745
       ("camlp4" ,camlp4)))
746
    (propagated-inputs
747
     `(("ocplib-endian" ,ocaml-ocplib-endian)
748
       ("lwt" ,ocaml-lwt)
749
       ("async" ,ocaml-async)
750
       ("sexplib" ,ocaml-sexplib)))
751
    (home-page "https://github.com/mirage/ocaml-cstruct")
752
    (synopsis "Access C structures via a camlp4 extension")
753
    (description "Cstruct is a library and syntax extension to make it easier
754
to access C-like structures directly from OCaml.  It supports both reading and
755
writing to these structures, and they are accessed via the Bigarray module.")
756
    (license license:isc)))
757
758
(define-public ocaml-hex
759
  (package
760
    (name "ocaml-hex")
761
    (version "1.0.0")
762
    (source (origin
763
              (method url-fetch)
764
              (uri (string-append "https://github.com/mirage/ocaml-hex/"
765
                                  "archive/" version ".tar.gz"))
766
              (sha256
767
               (base32
768
                "0s63g0b8gfv2xm6fv6xg7bva8h76b5pcjb0zw3f8cygs0lq9072v"))
769
              (file-name (string-append name "-" version ".tar.gz"))))
770
    (build-system ocaml-build-system)
771
    (propagated-inputs `(("cstruct" ,ocaml-cstruct)))
772
    (home-page "https://github.com/mirage/ocaml-hex/")
773
    (synopsis "Minimal library providing hexadecimal converters")
774
    (description "Minimal library providing hexadecimal converters.")
775
    (license license:isc)))
776
777
(define-public ocaml-ezjsonm
778
  (package
779
    (name "ocaml-ezjsonm")
780
    (version "0.4.3")
781
    (source (origin
782
              (method url-fetch)
783
              (uri (string-append "https://github.com/mirage/ezjsonm/archive/"
784
                                  version ".tar.gz"))
785
              (sha256
786
               (base32
787
                "1kag0z2xlk4rw73a240dmkxh9rj6psxxcxkm7d7z0rrj6hzjajgq"))
788
              (file-name (string-append name "-" version ".tar.gz"))))
789
    (build-system ocaml-build-system)
790
    (native-inputs
791
     `(("alcotest" ,ocaml-alcotest)))
792
    (propagated-inputs
793
     `(("hex" ,ocaml-hex)
794
       ("jsonm" ,ocaml-jsonm)
795
       ("lwt" ,ocaml-lwt)
796
       ("sexplib" ,ocaml-sexplib)))
797
    (arguments
798
     `(#:configure-flags (list "--enable-lwt")
799
       ;; dllcstruct_stubs.so: cannot open shared object file: No such file
800
       ;; or directory. May be fixed?
801
       #:tests? #f))
802
    (home-page "https://github.com/mirage/ezjsonm/")
803
    (synopsis "An easy interface on top of the Jsonm library")
804
    (description "This version provides more convenient (but far less flexible)
805
input and output functions that go to and from [string] values.  This avoids
806
the need to write signal code, which is useful for quick scripts that
807
manipulate JSON.")
808
    (license license:isc)))
809
810
(define-public ocaml-uri
811
  (package
812
    (name "ocaml-uri")
813
    (version "1.9.2")
814
    (source (origin
815
              (method url-fetch)
816
              (uri (string-append "https://github.com/mirage/ocaml-uri/archive/v"
817
                                  version ".tar.gz"))
818
              (sha256
819
               (base32
820
                "02bzrag79prx261rxf9mlak749pwf4flpfl8p012x1xznv9m0clc"))
821
              (file-name (string-append name "-" version ".tar.gz"))))
822
    (build-system ocaml-build-system)
823
    (native-inputs
824
     `(("ounit" ,ocaml-ounit)))
825
    (propagated-inputs
826
     `(("ppx-sexp-conv" ,ocaml-ppx-sexp-conv)
827
       ("re" ,ocaml-re)
828
       ("ppx-deriving" ,ocaml-ppx-deriving)
829
       ("sexplib" ,ocaml-sexplib)
830
       ("stringext" ,ocaml-stringext)))
831
    (home-page "https://github.com/mirage/ocaml-uri")
832
    (synopsis "RFC3986 URI/URL parsing library")
833
    (description "RFC3986 URI/URL parsing library.")
834
    (license license:isc)))
835
836
(define-public ocaml-easy-format
837
  (package
838
    (name "ocaml-easy-format")
839
    (version "1.2.0")
840
    (source (origin
841
              (method url-fetch)
842
              (uri (string-append "https://github.com/mjambon/easy-format/"
843
                                  "archive/v" version ".tar.gz"))
844
              (sha256
845
               (base32
846
                "1zcz682y9figa84k7lgdjcab5qbzk3yy14ygfqp2dhhrvjygm252"))
847
              (file-name (string-append name "-" version ".tar.gz"))))
848
    (build-system ocaml-build-system)
849
    (arguments
850
     `(#:phases
851
       (modify-phases %standard-phases
852
         (delete 'configure))
853
       #:tests? #f))
854
    (home-page "https://github.com/mjambon/easy-format")
855
    (synopsis "High-level and functional interface to the Format module of the
856
OCaml standard library")
857
    (description "High-level and functional interface to the Format module of
858
the OCaml standard library.")
859
    (license license:bsd-3)))
860
861
(define-public ocaml-optcomp
862
  (package
863
    (name "ocaml-optcomp")
864
    (version "1.6")
865
    (source (origin
866
              (method url-fetch)
867
              (uri (string-append "https://github.com/diml/optcomp/archive/"
868
                                  version ".tar.gz"))
869
              (sha256
870
               (base32
871
                "0hhhb2gisah1h22zlg5iszbgqxdd7x85cwd57bd4mfkx9l7dh8jh"))
872
              (file-name (string-append name "-" version ".tar.gz"))))
873
    (build-system ocaml-build-system)
874
    (arguments
875
     `(#:use-make? #t
876
	   #:make-flags
877
       (list (string-append "BUILDFLAGS=\"-cflags -I,"
878
                            (assoc-ref %build-inputs "camlp4")
879
                            "/lib/ocaml/site-lib/camlp4/Camlp4Parsers\""))))
880
    (native-inputs `(("camlp4" ,camlp4)))
881
    (propagated-inputs `(("camlp4" ,camlp4)))
882
    (home-page "https://github.com/diml/optcomp")
883
    (synopsis "Optional compilation with cpp-like directives")
884
    (description "Optional compilation with cpp-like directives.")
885
    (license license:bsd-3)))
886
887
(define-public ocaml-piqilib
888
  (package
889
    (name "ocaml-piqilib")
890
    (version "0.6.13")
891
    (source (origin
892
              (method url-fetch)
893
              (uri (string-append "https://github.com/alavrik/piqi/archive/v"
894
                                  version ".tar.gz"))
895
              (sha256
896
               (base32
897
                "1whqr2bb3gds2zmrzqnv8vqka9928w4lx6mi6g244kmbwb2h8d8l"))
898
              (file-name (string-append name "-" version ".tar.gz"))
899
              (patches (search-patches "ocaml-piqilib-fix-makefile.patch"))))
900
    (build-system ocaml-build-system)
901
    (arguments
902
     `(#:phases
903
       (modify-phases %standard-phases
904
         (replace 'configure
905
           (lambda* (#:key outputs #:allow-other-keys)
906
             (let ((out (assoc-ref outputs "out")))
907
               (substitute* "make/OCamlMakefile"
908
                 (("/bin/sh") (which "bash")))
909
               (zero? (system* "./configure" "--prefix" out "--ocaml-libdir"
910
                               (string-append out "/lib/ocaml/site-lib"))))))
911
       (add-after 'build 'build-ocaml
912
         (lambda* (#:key outputs #:allow-other-keys)
913
           (zero? (system* "make" "ocaml")))) 
914
       (add-after 'install 'install-ocaml
915
         (lambda* (#:key outputs #:allow-other-keys)
916
           (zero? (system* "make" "ocaml-install"))))
917
       (add-after 'install-ocaml 'link-stubs
918
         (lambda* (#:key outputs #:allow-other-keys)
919
           (let* ((out (assoc-ref outputs "out"))
920
                  (stubs (string-append out "/lib/ocaml/site-lib/stubslibs"))
921
                  (lib (string-append out "/lib/ocaml/site-lib/piqilib")))
922
             (mkdir-p stubs)
923
             (symlink (string-append lib "/dllpiqilib_stubs.so")
924
                      (string-append stubs "/dllpiqilib_stubs.so"))))))))
925
    (native-inputs
926
     `(("which" ,which)
927
       ("camlp4" ,camlp4)))
928
    (propagated-inputs
929
     `(("xmlm" ,ocaml-xmlm)
930
       ("ulex" ,ocaml-ulex)
931
       ("optcomp" ,ocaml-optcomp)
932
       ("easy-format" ,ocaml-easy-format)
933
       ("base64" ,ocaml-base64)))
934
    (home-page "http://piqi.org")
935
    (synopsis "Data serialization and conversion library")
936
    (description "Common library used by piqi command-line tool and piqi-ocaml.")
937
    (license license:asl2.0)))
938
939
(define-public ocaml-uuidm
940
  (package
941
    (name "ocaml-uuidm")
942
    (version "0.9.6")
943
    (source (origin
944
              (method url-fetch)
945
              (uri (string-append "http://erratique.ch/software/uuidm/"
946
                                  "releases/uuidm-" version ".tbz"))
947
              (sha256
948
               (base32
949
                "0hz4fdx0x16k0pw9995vkz5d1hmzz6b16wck9li399rcbfnv5jlc"))))
950
    (build-system ocaml-build-system)
951
    (arguments
952
     `(#:tests? #f
953
       #:build-flags
954
       (list "build" "--with-cmdliner" "true")
955
       #:phases
956
       (modify-phases %standard-phases
957
         (delete 'configure))))
958
    (native-inputs
959
     `(("opam" ,opam)))
960
    (propagated-inputs
961
     `(("cmdliner" ,ocaml-cmdliner)
962
       ("topkg" ,ocaml-topkg)))
963
    (home-page "http://erratique.ch/software/uuidm")
964
    (synopsis "Universally unique identifiers (UUIDs) for OCaml")
965
    (description "Uuidm is an OCaml module implementing 128 bits universally
966
unique identifiers version 3, 5 (named based with MD5, SHA-1 hashing) and 4
967
(random based) according to RFC 4122.")
968
    (license license:isc)))
969
970
(define-public ocamlgraph
971
  (package
972
    (name "ocamlgraph")
973
    (version "1.8.7")
974
    (source (origin
975
              (method url-fetch)
976
              (uri (string-append "http://ocamlgraph.lri.fr/download/"
977
                                  "ocamlgraph-" version ".tar.gz"))
978
              (sha256
979
               (base32
980
                "1845r537swjil2fcj7lgbibc2zybfwqqasrd2s7bncajs83cl1nz"))
981
              (patches (search-patches "ocamlgraph-honor-source-date-epoch.patch"))))
982
    (build-system ocaml-build-system)
983
    (arguments
984
     `(#:install-target "install-findlib"
985
       #:phases
986
       (modify-phases %standard-phases
987
         (add-before 'configure 'fix-/bin/sh
988
           (lambda* (#:key inputs #:allow-other-keys)
989
             (substitute* "configure"
990
               (("-/bin/sh") (string-append "-" (assoc-ref inputs "bash")
991
                                            "/bin/sh"))))))))
992
    (inputs `(("lablgtk" ,lablgtk)))
993
    (home-page "http://ocamlgraph.lri.fr/")
994
    (synopsis "A generic graph library for OCaml")
995
    (description "A generic graph library for OCaml.")
996
    (license license:lgpl2.1)))
997
998
(define-public ocaml-piqi
999
  (package
1000
    (name "ocaml-piqi")
1001
    (version "0.7.5")
1002
    (source (origin
1003
              (method url-fetch)
1004
              (uri (string-append "https://github.com/alavrik/piqi-ocaml/"
1005
                                  "archive/v" version ".tar.gz"))
1006
              (sha256
1007
               (base32
1008
                "0ngz6y8i98i5v2ma8nk6mc83pdsmf2z0ks7m3xi6clfg3zqbddrv"))))
1009
    (build-system ocaml-build-system)
1010
    (arguments
1011
     `(#:make-flags
1012
       (list (string-append "DESTDIR=" (assoc-ref %outputs "out")))
1013
       #:phases
1014
       (modify-phases %standard-phases
1015
         (delete 'configure)
1016
         (add-before 'build 'patch-/bin/sh
1017
           (lambda _
1018
             (substitute* "make/OCamlMakefile"
1019
               (("/bin/sh") (which "sh")))
1020
             #t)))))
1021
    (native-inputs
1022
     `(("which" ,which)
1023
       ("protobuf" ,protobuf))) ; for tests
1024
    (propagated-inputs
1025
     `(("piqilib" ,ocaml-piqilib)))
1026
    (home-page "https://github.com/alavrik/piqi-ocaml")
1027
    (synopsis "Protocol serialization system for OCaml")
1028
    (description "Piqi is a multi-format data serialization system for OCaml.
1029
It provides a uniform interface for serializing OCaml data structures to JSON,
1030
XML and Protocol Buffers formats.")
1031
    (license license:asl2.0)))
1032
1033
(define-public bap
1034
  (package
1035
    (name "bap")
1036
    (version "1.1.0")
1037
    (home-page "https://github.com/BinaryAnalysisPlatform/bap")
1038
    (source (origin
1039
              (method url-fetch)
1040
              (uri (string-append home-page "/archive/v" version ".tar.gz"))
1041
              (sha256
1042
               (base32
1043
                "1ms95m4j1qrmy7zqmsn2izh7gq68lnmssl7chyhk977kd3sxj66m"))
1044
              (file-name (string-append name "-" version ".tar.gz"))))
1045
   (build-system ocaml-build-system)
1046
   (native-inputs
1047
    `(("oasis" ,ocaml-oasis)
1048
      ("clang" ,clang)
1049
      ("ounit" ,ocaml-ounit)))
1050
   (propagated-inputs
1051
    `(("core-kernel" ,ocaml-core-kernel)
1052
      ("ppx-driver" ,ocaml-ppx-driver)
1053
      ("uri" ,ocaml-uri)
1054
      ("llvm" ,llvm)
1055
      ("gmp" ,gmp)
1056
      ("clang-runtime" ,clang-runtime)
1057
      ("fileutils" ,ocaml-fileutils)
1058
      ("cmdliner" ,ocaml-cmdliner)
1059
      ("zarith" ,ocaml-zarith)
1060
      ("uuidm" ,ocaml-uuidm)
1061
      ("camlzip" ,camlzip)
1062
      ("frontc" ,ocaml-frontc)
1063
      ("ezjsonm" ,ocaml-ezjsonm)
1064
      ("ocurl" ,ocaml-ocurl)
1065
      ("piqi" ,ocaml-piqi)
1066
      ("ocamlgraph" ,ocamlgraph)
1067
      ("bitstring" ,ocaml-bitstring)
1068
      ("ppx-jane" ,ocaml-ppx-jane)
1069
      ("re" ,ocaml-re)))
1070
   (inputs `(("llvm" ,llvm)))
1071
   (arguments
1072
    `(#:use-make? #t
1073
      #:phases
1074
      (modify-phases %standard-phases
1075
        (replace 'configure
1076
          (lambda* (#:key outputs #:allow-other-keys)
1077
            (zero? (system* "./configure" "--prefix"
1078
                            (assoc-ref outputs "out")
1079
                            "--libdir"
1080
                            (string-append
1081
                              (assoc-ref outputs "out")
1082
                              "/lib/ocaml/site-lib")
1083
                            "--with-llvm-version=3.8"
1084
                            "--with-llvm-config=llvm-config"
1085
                            "--enable-everything"))))
1086
        (add-before 'install 'fix-ocamlpath
1087
          (lambda* (#:key outputs #:allow-other-keys)
1088
            (setenv "OCAMLPATH"
1089
                    (string-append
1090
                      (getenv "OCAMLPATH") ":"
1091
                      (assoc-ref outputs "out")
1092
                      "/lib/ocaml/site-lib"))
1093
            (setenv "PATH"
1094
                    (string-append (getenv "PATH") ":"
1095
                                   (assoc-ref outputs "out") "/bin"))))
1096
        (add-after 'install 'link-stubs
1097
          (lambda* (#:key outputs #:allow-other-keys)
1098
            (let* ((out (assoc-ref outputs "out"))
1099
                   (stubs (string-append out "/lib/ocaml/site-lib/stubslibs"))
1100
                   (lib (string-append out "/lib/ocaml/site-lib/bap-plugin-llvm")))
1101
              (mkdir-p stubs)
1102
              (symlink (string-append lib "/dllllvm_plugin_stubs.so")
1103
                       (string-append stubs "/dllllvm_plugin_stubs.so"))))))))
1104
   (synopsis "Binary Analysis Platform")
1105
   (description "Binary Analysis Platform is a framework for writing program
1106
analysis tools, that target binary files.  The framework consists of a plethora
1107
of libraries, plugins, and frontends.  The libraries provide code reusability,
1108
the plugins facilitate extensibility, and the frontends serve as entry points.")
1109
   (license license:expat)))
1110
1111
(define-public ocaml-camomile
1112
  (package
1113
    (name "ocaml-camomile")
1114
    (version "0.8.5")
1115
    (home-page "https://github.com/yoriyuki/Camomile")
1116
    (source (origin
1117
              (method url-fetch)
1118
              (uri (string-append home-page "/releases/download/rel-" version
1119
                                  "/camomile-" version ".tar.bz2"))
1120
              (sha256
1121
               (base32
1122
                "003ikpvpaliy5hblhckfmln34zqz0mk3y2m1fqvbjngh3h2np045"))))
1123
    (build-system ocaml-build-system)
1124
    (native-inputs `(("camlp4" ,camlp4)))
1125
    (arguments
1126
     `(#:phases
1127
       (modify-phases %standard-phases
1128
         (add-before 'configure 'fix-bin/sh
1129
           (lambda* (#:key #:allow-other-keys)
1130
             (substitute* "configure"
1131
               (("CONFIG_SHELL-/bin/sh")
1132
                (string-append "CONFIG_SHELL-" (which "bash")))))))))
1133
    (synopsis "Comprehensive Unicode library")
1134
    (description "Camomile is a Unicode library for OCaml.  Camomile provides
1135
Unicode character type, UTF-8, UTF-16, UTF-32 strings, conversion to/from about
1136
200 encodings, collation and locale-sensitive case mappings, and more.  The
1137
library is currently designed for Unicode Standard 3.2.")
1138
    (license license:lgpl2.0+))) ; with an exception
1139
1140
(define-public ocaml-zed
1141
  (package
1142
    (name "ocaml-zed")
1143
    (version "1.4")
1144
    (source (origin
1145
              (method url-fetch)
1146
              (uri (string-append "https://github.com/diml/zed/archive/"
1147
                                  version ".tar.gz"))
1148
              (sha256
1149
               (base32
1150
                "0pvfq9ikhbkv4ksn3k3vzs6wiwkihjav3n81lhxm54z9931gfwnz"))))
1151
    (build-system ocaml-build-system)
1152
    (propagated-inputs
1153
     `(("camomile" ,ocaml-camomile)
1154
       ("react" ,ocaml-react)))
1155
    (home-page "https://github.com/diml/zed")
1156
    (synopsis "Abstract engine for text edition in OCaml")
1157
    (description "Zed is an abstract engine for text edition. It can be used to
1158
write text editors, edition widgets, readlines, ...
1159
1160
Zed uses Camomile to fully support the Unicode specification, and implements an
1161
UTF-8 encoded string type with validation, and a rope datastructure to achieve
1162
efficient operations on large Unicode buffers. Zed also features a regular
1163
expression search on ropes.
1164
1165
To support efficient text edition capabilities, Zed provides macro recording
1166
and cursor management facilities.")
1167
    (license license:bsd-3)))
1168
1169
(define-public ocaml-lambda-term
1170
  (package
1171
    (name "ocaml-lambda-term")
1172
    (version "1.10.1")
1173
    (home-page "https://github.com/diml/lambda-term")
1174
    (source (origin
1175
              (method url-fetch)
1176
              (uri (string-append home-page "/archive/" version ".tar.gz"))
1177
              (sha256
1178
               (base32
1179
                "1449glcsavcwbcsxbd7wcjz50y8vvin4zwpmkhq8i6jca3f3sknj"))))
1180
    (build-system ocaml-build-system)
1181
    (propagated-inputs
1182
     `(("zed" ,ocaml-zed)
1183
       ("lwt" ,ocaml-lwt)
1184
       ("react" ,ocaml-react)))
1185
    (arguments
1186
     `(#:phases
1187
       (modify-phases %standard-phases
1188
        (add-after 'install 'link-stubs
1189
          (lambda* (#:key outputs #:allow-other-keys)
1190
            (let* ((out (assoc-ref outputs "out"))
1191
                   (stubs (string-append out "/lib/ocaml/site-lib/stubslibs"))
1192
                   (lib (string-append out "/lib/ocaml/site-lib/lambda-term")))
1193
              (mkdir-p stubs)
1194
              (symlink (string-append lib "/dlllambda-term_stubs.so")
1195
                       (string-append stubs "/dlllambda-term_stubs.so"))))))))
1196
    (synopsis "Terminal manipulation library for OCaml")
1197
    (description "Lambda-term is a cross-platform library for manipulating the
1198
terminal. It provides an abstraction for keys, mouse events, colors, as well as
1199
a set of widgets to write curses-like applications.
1200
1201
The main objective of lambda-term is to provide a higher level functional
1202
interface to terminal manipulation than, for example, ncurses, by providing a
1203
native OCaml interface instead of bindings to a C library.
1204
1205
Lambda-term integrates with zed to provide text edition facilities in console
1206
applications.")
1207
    (license license:bsd-3)))
1208
1209
(define-public ocaml-utop
1210
  (package
1211
    (name "ocaml-utop")
1212
    (version "1.19.3")
1213
    (source (origin
1214
              (method url-fetch)
1215
              (uri (string-append "https://github.com/diml/utop/archive/"
1216
                                  version ".tar.gz"))
1217
              (file-name (string-append name "-" version ".tar.gz"))
1218
              (sha256
1219
               (base32
1220
                "16z02vp9n97iax4fqpbi7v86r75vbabxvnd1rirh8w2miixs1g4x"))))
1221
    (build-system ocaml-build-system)
1222
    (native-inputs
1223
     `(("cppo" ,ocaml-cppo)))
1224
    (propagated-inputs
1225
     `(("lambda-term" ,ocaml-lambda-term)
1226
       ("lwt" ,ocaml-lwt)
1227
       ("react" ,ocaml-react)))
1228
    (home-page "https://github.com/diml/utop")
1229
    (synopsis "Universal toplevel for OCaml")
1230
    (description "utop is an improved toplevel for OCaml.  It can run in a
1231
terminal or in Emacs.  It supports line edition, history, real-time and context
1232
sensitive completion, colors, and more.
1233
1234
It integrates with the tuareg mode in Emacs.")
1235
    (license license:bsd-3)))
1236