Add bap and dependencies

Julien LepillerThu Feb 23 21:07:13+0100 2017

83301f9

Add bap and dependencies

README.md

2121
* _z3_: A constraint solver
2222
* _angr_: A binary analysis tool
2323
* _radare2_: A disassembler and analysis tool
24+
* _bap_: A binary analysis platform
2425
2526
Games
2627
-----

more/packages/ocaml.scm unknown status 1

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)))

more/packages/patches/ocaml-piqilib-fix-makefile.patch unknown status 1

1+
From 336e69d6882a1b8d725c43f1c2e340ef4464bac5 Mon Sep 17 00:00:00 2001
2+
From: Julien Lepiller <julien@lepiller.eu>
3+
Date: Sat, 31 Dec 2016 11:21:14 +0100
4+
Subject: [PATCH] fix OCAMLPATH in makefile
5+
6+
---
7+
 Makefile            | 2 +-
8+
 make/Makefile.ocaml | 3 ++-
9+
 2 files changed, 3 insertions(+), 2 deletions(-)
10+
11+
diff --git a/Makefile b/Makefile
12+
index 4db87da..9315887 100644
13+
--- a/Makefile
14+
+++ b/Makefile
15+
@@ -23,7 +23,7 @@ OCAMLFIND_DESTDIR := $(shell cygpath -w $(OCAMLFIND_DESTDIR))
16+
 endif
17+
 export OCAMLFIND_DESTDIR
18+
19+
-OCAMLPATH := $(PIQI_ROOT)/deps
20+
+OCAMLPATH := $(OCAMLPATH):$(PIQI_ROOT)/deps
21+
 ifeq ($(SYSTEM),$(filter $(SYSTEM),mingw mingw64))
22+
 OCAMLPATH := $(shell cygpath -w $(OCAMLPATH))
23+
 endif
24+
diff --git a/make/Makefile.ocaml b/make/Makefile.ocaml
25+
index 2b6324d..b82c041 100644
26+
--- a/make/Makefile.ocaml
27+
+++ b/make/Makefile.ocaml
28+
@@ -1,7 +1,7 @@
29+
 OCAMLMAKEFILE := $(PIQI_ROOT)/make/OCamlMakefile
30+
31+
32+
-OCAMLPATH := $(PIQI_BUILD)/lib/ocaml
33+
+OCAMLPATH := $(OCAMLPATH):$(PIQI_BUILD)/lib/ocaml
34+
 ifeq ($(SYSTEM),$(filter $(SYSTEM),mingw mingw64))
35+
 OCAMLPATH := $(shell cygpath -w $(OCAMLPATH))
36+
 endif
37+
@@ -23,6 +23,7 @@ post_target::
38+
39+
40+
 .ml.mli: $(EXTRADEPS)
41+
+			echo $(OCAMLPATH)
42+
 			$(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \
43+
 			if [ -z "$$pp" ]; then \
44+
 			  $(ECHO) $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \
45+
--
46+
2.11.0
47+

more/packages/patches/ocamlgraph-honor-source-date-epoch.patch unknown status 1

1+
From 354ef78aac0b887fae3c10b28eb2b0d83f66bdfe Mon Sep 17 00:00:00 2001
2+
From: Julien Lepiller <julien@lepiller.eu>
3+
Date: Mon, 2 Jan 2017 17:05:24 +0100
4+
Subject: [PATCH] Honor SOURCE_DATE_EPOCH
5+
6+
---
7+
 Makefile.in | 7 ++++++-
8+
 1 file changed, 6 insertions(+), 1 deletion(-)
9+
10+
diff --git a/Makefile.in b/Makefile.in
11+
index a32b4b8..ef4c174 100644
12+
--- a/Makefile.in
13+
+++ b/Makefile.in
14+
@@ -113,11 +113,16 @@ graph.cmx: $(CMI) $(CMX)
15+
	$(OCAMLOPT) $(INCLUDES) -pack -o $@ $^
16+
 
17+
 VERSION=1.8.7
18+
+ifdef SOURCE_DATE_EPOCH
19+
+BUILD_DATE=$(shell date -u -d "@$(SOURCE_DATE_EPOCH)" 2>/dev/null || date -u -r "$(SOURCE_DATE_EPOCH)" 2>/dev/null || date)
20+
+else
21+
+BUILD_DATE=$(shell date)
22+
+endif
23+
 
24+
 src/version.ml: Makefile
25+
	rm -f $@
26+
	echo "let version = \""$(VERSION)"\"" > $@
27+
-	echo "let date = \""`date`"\"" >> $@
28+
+	echo "let date = \""$(BUILD_DATE)"\"" >> $@
29+
 
30+
 # gtk2 graph editor
31+
 ###################
32+
-- 
33+
2.11.0
34+