container: Gracefully report mount errors in the child process.
[jackhill/guix/guix.git] / gnu / packages / ocaml.scm
CommitLineData
d192efae
CR
1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
69b8f08c 3;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
b9d8756b 4;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
c900f843 5;;; Copyright © 2015 David Hashe <david.hashe@dhashe.com>
90907a22 6;;; Copyright © 2016 Eric Bavier <bavier@member.fsf.org>
a747baba 7;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
d192efae
CR
8;;;
9;;; This file is part of GNU Guix.
10;;;
11;;; GNU Guix is free software; you can redistribute it and/or modify it
12;;; under the terms of the GNU General Public License as published by
13;;; the Free Software Foundation; either version 3 of the License, or (at
14;;; your option) any later version.
15;;;
16;;; GNU Guix is distributed in the hope that it will be useful, but
17;;; WITHOUT ANY WARRANTY; without even the implied warranty of
18;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19;;; GNU General Public License for more details.
20;;;
21;;; You should have received a copy of the GNU General Public License
22;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
23
24(define-module (gnu packages ocaml)
69b8f08c 25 #:use-module ((guix licenses) #:hide (zlib))
d192efae
CR
26 #:use-module (guix packages)
27 #:use-module (guix download)
90907a22 28 #:use-module (guix svn-download)
69b8f08c 29 #:use-module (guix utils)
d192efae
CR
30 #:use-module (guix build-system gnu)
31 #:use-module (gnu packages)
2f6d3e41 32 #:use-module (gnu packages gcc)
3573b634
AE
33 #:use-module (gnu packages gnome)
34 #:use-module (gnu packages gtk)
0705f79c
MW
35 #:use-module (gnu packages base)
36 #:use-module (gnu packages emacs)
37 #:use-module (gnu packages texinfo)
69b8f08c
MW
38 #:use-module (gnu packages pkg-config)
39 #:use-module (gnu packages compression)
69b8f08c 40 #:use-module (gnu packages xorg)
8f9ac901 41 #:use-module (gnu packages tex)
90907a22
EB
42 #:use-module (gnu packages ghostscript)
43 #:use-module (gnu packages lynx)
a34cedc4
LC
44 #:use-module (gnu packages perl)
45 #:use-module (gnu packages python)
a747baba 46 #:use-module (gnu packages m4)
a34cedc4
LC
47 #:use-module (gnu packages ncurses)
48 #:use-module (gnu packages version-control)
49 #:use-module (gnu packages curl))
d192efae
CR
50
51(define-public ocaml
52 (package
53 (name "ocaml")
be78e52c 54 (version "4.02.3")
d192efae 55 (source (origin
69b8f08c
MW
56 (method url-fetch)
57 (uri (string-append
58 "http://caml.inria.fr/pub/distrib/ocaml-"
59 (version-major+minor version)
60 "/ocaml-" version ".tar.xz"))
61 (sha256
62 (base32
3854f3d7
LF
63 "1qwwvy8nzd87hk8rd9sm667nppakiapnx4ypdwcrlnav2dz6kil3"))
64 (patches (search-patches "ocaml-CVE-2015-8869.patch"))))
d192efae 65 (build-system gnu-build-system)
6372e336
JN
66 (native-search-paths
67 (list (search-path-specification
68 (variable "OCAMLPATH")
69 (files (list (string-append "lib/ocaml"))))))
69b8f08c
MW
70 (native-inputs
71 `(("perl" ,perl)
72 ("pkg-config" ,pkg-config)))
73 (inputs
74 `(("libx11" ,libx11)
2f6d3e41 75 ;; For libiberty, needed for objdump support.
379d4142 76 ("gcc:lib" ,(canonical-package gcc-4.9) "lib")
2f6d3e41 77 ("zlib" ,zlib))) ;also needed for objdump support
d192efae 78 (arguments
69b8f08c
MW
79 `(#:modules ((guix build gnu-build-system)
80 (guix build utils)
81 (web server))
82 #:phases
83 (modify-phases %standard-phases
84 (add-after 'unpack 'patch-/bin/sh-references
85 (lambda* (#:key inputs #:allow-other-keys)
86 (let* ((sh (string-append (assoc-ref inputs "bash")
87 "/bin/sh"))
88 (quoted-sh (string-append "\"" sh "\"")))
89 (with-fluids ((%default-port-encoding #f))
90 (for-each (lambda (file)
91 (substitute* file
92 (("\"/bin/sh\"")
93 (begin
94 (format (current-error-port) "\
95patch-/bin/sh-references: ~a: changing `\"/bin/sh\"' to `~a'~%"
96 file quoted-sh)
97 quoted-sh))))
98 (find-files "." "\\.ml$"))
99 #t))))
100 (replace 'configure
101 (lambda* (#:key outputs #:allow-other-keys)
102 (let* ((out (assoc-ref outputs "out"))
103 (mandir (string-append out "/share/man")))
104 ;; Custom configure script doesn't recognize
105 ;; --prefix=<PREFIX> syntax (with equals sign).
106 (zero? (system* "./configure"
107 "--prefix" out
108 "--mandir" mandir)))))
109 (replace 'build
110 (lambda _
111 (zero? (system* "make" "-j" (number->string
112 (parallel-job-count))
113 "world.opt"))))
114 (delete 'check)
115 (add-after 'install 'check
116 (lambda _
117 (with-directory-excursion "testsuite"
118 (zero? (system* "make" "all")))))
119 (add-before 'check 'prepare-socket-test
120 (lambda _
121 (format (current-error-port)
122 "Spawning local test web server on port 8080~%")
123 (when (zero? (primitive-fork))
124 (run-server (lambda (request request-body)
125 (values '((content-type . (text/plain)))
126 "Hello!"))
127 'http '(#:port 8080)))
128 (let ((file "testsuite/tests/lib-threads/testsocket.ml"))
129 (format (current-error-port)
130 "Patching ~a to use localhost port 8080~%"
131 file)
132 (substitute* file
133 (("caml.inria.fr") "localhost")
134 (("80") "8080")
135 (("HTTP1.0") "HTTP/1.0"))
136 #t))))))
137 (home-page "https://ocaml.org/")
d192efae
CR
138 (synopsis "The OCaml programming language")
139 (description
140 "OCaml is a general purpose industrial-strength programming language with
35b9e423 141an emphasis on expressiveness and safety. Developed for more than 20 years at
d192efae
CR
142Inria it benefits from one of the most advanced type systems and supports
143functional, imperative and object-oriented styles of programming.")
69b8f08c
MW
144 ;; The compiler is distributed under qpl1.0 with a change to choice of
145 ;; law: the license is governed by the laws of France. The library is
146 ;; distributed under lgpl2.0.
147 (license (list qpl lgpl2.0))))
a34cedc4
LC
148
149(define-public opam
150 (package
151 (name "opam")
152 (version "1.1.1")
153 (source (origin
154 (method url-fetch)
155 ;; Use the '-full' version, which includes all the dependencies.
156 (uri (string-append
157 "https://github.com/ocaml/opam/releases/download/"
158 version "/opam-full-" version ".tar.gz")
159 ;; (string-append "https://github.com/ocaml/opam/archive/"
160 ;; version ".tar.gz")
161 )
162 (sha256
163 (base32
164 "1frzqkx6yn1pnyd9qz3bv3rbwv74bmc1xji8kl41r1dkqzfl3xqv"))))
165 (build-system gnu-build-system)
166 (arguments
167 '(;; Sometimes, 'make -jX' would fail right after ./configure with
168 ;; "Fatal error: exception End_of_file".
169 #:parallel-build? #f
170
171 ;; For some reason, 'ocp-build' needs $TERM to be set.
172 #:make-flags '("TERM=screen")
173 #:test-target "tests"
174
175 ;; FIXME: There's an obscure test failure:
176 ;; …/_obuild/opam/opam.asm install P1' failed.
177 #:tests? #f
178
179 #:phases (alist-cons-before
180 'build 'pre-build
181 (lambda* (#:key inputs #:allow-other-keys)
182 (let ((bash (assoc-ref inputs "bash")))
183 (substitute* "src/core/opamSystem.ml"
184 (("\"/bin/sh\"")
185 (string-append "\"" bash "/bin/sh\"")))))
186 (alist-cons-before
187 'check 'pre-check
188 (lambda _
189 (setenv "HOME" (getcwd))
190 (and (system "git config --global user.email guix@gnu.org")
191 (system "git config --global user.name Guix")))
192 %standard-phases))))
193 (native-inputs
194 `(("git" ,git) ;for the tests
195 ("python" ,python))) ;for the tests
196 (inputs
197 `(("ocaml" ,ocaml)
198 ("ncurses" ,ncurses)
199 ("curl" ,curl)))
200 (home-page "http://opam.ocamlpro.com/")
201 (synopsis "Package manager for OCaml")
202 (description
203 "OPAM is a tool to manage OCaml packages. It supports multiple
204simultaneous compiler installations, flexible package constraints, and a
205Git-friendly development workflow.")
206
207 ;; The 'LICENSE' file waives some requirements compared to LGPLv3.
208 (license lgpl3)))
83f4dc36 209
492ee988
LC
210(define-public camlp4
211 (package
212 (name "camlp4")
006faa35 213 (version "4.02+6")
492ee988
LC
214 (source (origin
215 (method url-fetch)
216 (uri (string-append "https://github.com/ocaml/camlp4/archive/"
217 version ".tar.gz"))
218 (sha256
219 (base32
006faa35 220 "0icdfzhsbgf89925gc8gl3fm8z2xzszzlib0v9dj5wyzkyv3a342"))
492ee988
LC
221 (file-name (string-append name "-" version ".tar.gz"))))
222 (build-system gnu-build-system)
fd5b2133 223 (native-inputs `(("ocaml" ,ocaml)
0d1c0660 224 ("which" ,which)))
492ee988
LC
225 (inputs `(("ocaml" ,ocaml)))
226 (arguments
227 '(#:tests? #f ;no documented test target
228 #:phases (modify-phases %standard-phases
229 (replace
230 'configure
231 (lambda* (#:key outputs #:allow-other-keys)
232 ;; This is a home-made 'configure' script.
233 (let ((out (assoc-ref outputs "out")))
234 (zero? (system* "./configure"
235 (string-append "--libdir=" out "/lib")
236 (string-append "--bindir=" out "/bin")
237 (string-append "--pkgdir=" out)))))))))
238 (home-page "https://github.com/ocaml/camlp4")
239 (synopsis "Write parsers in OCaml")
240 (description
241 "Camlp4 is a software system for writing extensible parsers for
242programming languages. It provides a set of OCaml libraries that are used to
243define grammars as well as loadable syntax extensions of such grammars.
244Camlp4 stands for Caml Preprocessor and Pretty-Printer and one of its most
245important applications is the definition of domain-specific extensions of the
246syntax of OCaml.")
247
248 ;; This is LGPLv2 with an exception that allows packages statically-linked
249 ;; against the library to be released under any terms.
250 (license lgpl2.0)))
251
83f4dc36
MW
252(define-public camlp5
253 (package
254 (name "camlp5")
d4bf3dac 255 (version "6.14")
83f4dc36
MW
256 (source (origin
257 (method url-fetch)
258 (uri (string-append "http://camlp5.gforge.inria.fr/distrib/src/"
259 name "-" version ".tgz"))
260 (sha256
261 (base32
d4bf3dac 262 "1ql04iyvclpyy9805kpddc4ndjb5d0qg4shhi2fc6bixi49fvy89"))))
83f4dc36
MW
263 (build-system gnu-build-system)
264 (inputs
265 `(("ocaml" ,ocaml)))
266 (arguments
267 `(#:tests? #f ; XXX TODO figure out how to run the tests
268 #:phases
269 (modify-phases %standard-phases
270 (replace 'configure
271 (lambda* (#:key outputs #:allow-other-keys)
272 (let* ((out (assoc-ref outputs "out"))
273 (mandir (string-append out "/share/man")))
274 ;; Custom configure script doesn't recognize
275 ;; --prefix=<PREFIX> syntax (with equals sign).
276 (zero? (system* "./configure"
277 "--prefix" out
278 "--mandir" mandir)))))
279 (replace 'build
280 (lambda _
281 (zero? (system* "make" "-j" (number->string
282 (parallel-job-count))
283 "world.opt")))))))
284 (home-page "http://camlp5.gforge.inria.fr/")
285 (synopsis "Pre-processor Pretty Printer for OCaml")
286 (description
287 "Camlp5 is a Pre-Processor-Pretty-Printer for Objective Caml. It offers
288tools for syntax (Stream Parsers and Grammars) and the ability to modify the
289concrete syntax of the language (Quotations, Syntax Extensions).")
290 ;; Most files are distributed under bsd-3, but ocaml_stuff/* is under qpl.
291 (license (list bsd-3 qpl))))
d6b7b5ed
MW
292
293(define-public hevea
294 (package
295 (name "hevea")
f5a8491b 296 (version "2.28")
d6b7b5ed
MW
297 (source (origin
298 (method url-fetch)
8f26f239 299 (uri (string-append "http://hevea.inria.fr/old/"
d6b7b5ed
MW
300 name "-" version ".tar.gz"))
301 (sha256
302 (base32
f5a8491b 303 "14fns13wlnpiv9i05841kvi3cq4b9v2sw5x3ff6ziws28q701qnd"))))
d6b7b5ed
MW
304 (build-system gnu-build-system)
305 (inputs
306 `(("ocaml" ,ocaml)))
307 (arguments
308 `(#:tests? #f ; no test suite
309 #:make-flags (list (string-append "PREFIX=" %output))
310 #:phases (modify-phases %standard-phases
f5a8491b
EB
311 (delete 'configure)
312 (add-before 'build 'patch-/bin/sh
313 (lambda _
314 (substitute* "_tags"
315 (("/bin/sh") (which "sh")))
316 #t)))))
d6b7b5ed
MW
317 (home-page "http://hevea.inria.fr/")
318 (synopsis "LaTeX to HTML translator")
319 (description
320 "HeVeA is a LaTeX to HTML translator that generates modern HTML 5. It is
321written in Objective Caml.")
322 (license qpl)))
1973183b
MW
323
324(define-public coq
325 (package
326 (name "coq")
327 (version "8.4pl6")
328 (source (origin
329 (method url-fetch)
330 (uri (string-append "https://coq.inria.fr/distrib/V" version
331 "/files/" name "-" version ".tar.gz"))
332 (sha256
333 (base32
334 "1mpbj4yf36kpjg2v2sln12i8dzqn8rag6fd07hslj2lpm4qs4h55"))))
335 (build-system gnu-build-system)
336 (native-inputs
337 `(("texlive" ,texlive)
338 ("hevea" ,hevea)))
339 (inputs
340 `(("ocaml" ,ocaml)
341 ("camlp5" ,camlp5)))
342 (arguments
343 `(#:phases
344 (modify-phases %standard-phases
345 (replace 'configure
346 (lambda* (#:key outputs #:allow-other-keys)
347 (let* ((out (assoc-ref outputs "out"))
348 (mandir (string-append out "/share/man"))
349 (browser "icecat -remote \"OpenURL(%s,new-tab)\""))
350 (zero? (system* "./configure"
351 "--prefix" out
352 "--mandir" mandir
353 "--browser" browser)))))
354 (replace 'build
355 (lambda _
356 (zero? (system* "make" "-j" (number->string
357 (parallel-job-count))
358 "world"))))
359 (delete 'check)
360 (add-after 'install 'check
361 (lambda _
362 (with-directory-excursion "test-suite"
363 (zero? (system* "make"))))))))
364 (home-page "https://coq.inria.fr")
365 (synopsis "Proof assistant for higher-order logic")
366 (description
367 "Coq is a proof assistant for higher-order logic, which allows the
368development of computer programs consistent with their formal specification.
369It is developed using Objective Caml and Camlp5.")
370 ;; The code is distributed under lgpl2.1.
371 ;; Some of the documentation is distributed under opl1.0+.
372 (license (list lgpl2.1 opl1.0+))))
0705f79c
MW
373
374(define-public proof-general
375 (package
376 (name "proof-general")
377 (version "4.2")
378 (source (origin
379 (method url-fetch)
380 (uri (string-append
381 "http://proofgeneral.inf.ed.ac.uk/releases/"
382 "ProofGeneral-" version ".tgz"))
383 (sha256
384 (base32
385 "09qb0myq66fw17v4ziz401ilsb5xlxz1nl2wsp69d0vrfy0bcrrm"))))
386 (build-system gnu-build-system)
387 (native-inputs
388 `(("which" ,which)
b8fc3622 389 ("emacs" ,emacs-minimal)
0705f79c
MW
390 ("texinfo" ,texinfo)))
391 (inputs
392 `(("host-emacs" ,emacs)
393 ("perl" ,perl)
394 ("coq" ,coq)))
395 (arguments
396 `(#:tests? #f ; no check target
397 #:make-flags (list (string-append "PREFIX=" %output)
398 (string-append "DEST_PREFIX=" %output))
399 #:modules ((guix build gnu-build-system)
400 (guix build utils)
401 (guix build emacs-utils))
402 #:imported-modules (,@%gnu-build-system-modules
403 (guix build emacs-utils))
404 #:phases
405 (modify-phases %standard-phases
406 (delete 'configure)
407 (add-after 'unpack 'disable-byte-compile-error-on-warn
408 (lambda _
409 (substitute* "Makefile"
410 (("\\(setq byte-compile-error-on-warn t\\)")
411 "(setq byte-compile-error-on-warn nil)"))
412 #t))
413 (add-after 'unpack 'patch-hardcoded-paths
414 (lambda* (#:key inputs outputs #:allow-other-keys)
415 (let ((out (assoc-ref outputs "out"))
416 (coq (assoc-ref inputs "coq"))
417 (emacs (assoc-ref inputs "host-emacs")))
418 (define (coq-prog name)
419 (string-append coq "/bin/" name))
420 (emacs-substitute-variables "coq/coq.el"
421 ("coq-prog-name" (coq-prog "coqtop"))
422 ("coq-compiler" (coq-prog "coqc"))
423 ("coq-dependency-analyzer" (coq-prog "coqdep")))
424 (substitute* "Makefile"
425 (("/sbin/install-info") "install-info"))
426 (substitute* "bin/proofgeneral"
427 (("^PGHOMEDEFAULT=.*" all)
428 (string-append all
429 "PGHOME=$PGHOMEDEFAULT\n"
430 "EMACS=" emacs "/bin/emacs")))
431 #t)))
432 (add-after 'unpack 'clean
433 (lambda _
434 ;; Delete the pre-compiled elc files for Emacs 23.
435 (zero? (system* "make" "clean"))))
436 (add-after 'install 'install-doc
437 (lambda* (#:key make-flags #:allow-other-keys)
438 ;; XXX FIXME avoid building/installing pdf files,
439 ;; due to unresolved errors building them.
440 (substitute* "Makefile"
441 ((" [^ ]*\\.pdf") ""))
442 (zero? (apply system* "make" "install-doc"
443 make-flags)))))))
444 (home-page "http://proofgeneral.inf.ed.ac.uk/")
e881752c
AK
445 (synopsis "Generic front-end for proof assistants based on Emacs")
446 (description
0705f79c
MW
447 "Proof General is a major mode to turn Emacs into an interactive proof
448assistant to write formal mathematical proofs using a variety of theorem
449provers.")
450 (license gpl2+)))
b9d8756b 451
3573b634
AE
452(define-public lablgtk
453 (package
454 (name "lablgtk")
455 (version "2.18.3")
456 (source
457 (origin
458 (method url-fetch)
459 (uri (string-append "https://forge.ocamlcore.org/frs/download.php/"
460 "1479/lablgtk-2.18.3.tar.gz"))
461 (sha256
462 (base32
463 "1bybn3jafxf4cx25zvn8h2xj9agn1xjbn7j3ywxxqx6az7rfnnwp"))))
464 (build-system gnu-build-system)
465 (native-inputs
466 `(("camlp4" ,camlp4)
467 ("ocaml" ,ocaml)
468 ("pkg-config" ,pkg-config)))
469 ;; FIXME: Add inputs gtkgl-2.0, libpanelapplet-2.0, gtkspell-2.0,
470 ;; and gtk+-quartz-2.0 once available.
471 (inputs
472 `(("gtk+" ,gtk+-2)
c900f843 473 ("gtksourceview" ,gtksourceview-2)
3573b634
AE
474 ("libgnomecanvas" ,libgnomecanvas)
475 ("libgnomeui" ,libgnomeui)
476 ("libglade" ,libglade)
477 ("librsvg" ,librsvg)))
478 (arguments
479 `(#:tests? #f ; no check target
ef89cb42 480
8c1088bb
JN
481 ;; opt: also install cmxa files
482 #:make-flags (list "all" "opt")
ef89cb42
LC
483 ;; Occasionally we would get "Error: Unbound module GtkThread" when
484 ;; compiling 'gtkThInit.ml', with 'make -j'. So build sequentially.
485 #:parallel-build? #f
486
3573b634
AE
487 #:phases
488 (modify-phases %standard-phases
489 (replace 'install
490 (lambda* (#:key inputs outputs #:allow-other-keys)
491 (let ((out (assoc-ref outputs "out"))
492 (ocaml (assoc-ref inputs "ocaml")))
493 ;; Install into the output and not the ocaml directory.
494 (substitute* "config.make"
495 ((ocaml) out))
496 (system* "make" "old-install")
497 #t))))))
498 (home-page "http://lablgtk.forge.ocamlcore.org/")
499 (synopsis "GTK+ bindings for OCaml")
500 (description
501 "LablGtk is an OCaml interface to GTK+ 1.2 and 2.x. It provides
502a strongly-typed object-oriented interface that is compatible with the
503dynamic typing of GTK+. Most widgets and methods are available. LablGtk
504also provides bindings to
505gdk-pixbuf, the GLArea widget (in combination with LablGL), gnomecanvas,
506gnomeui, gtksourceview, gtkspell,
507libglade (and it an generate OCaml code from .glade files),
508libpanel, librsvg and quartz.")
509 (license lgpl2.1)))
510
b9d8756b
AE
511(define-public unison
512 (package
513 (name "unison")
514 (version "2.48.3")
515 (source
516 (origin
90907a22
EB
517 (method svn-fetch)
518 (uri (svn-reference
519 (url (string-append "https://webdav.seas.upenn.edu/svn/"
520 "unison/branches/"
521 (version-major+minor version)))
522 (revision 535)))
523 (file-name (string-append name "-" version "-checkout"))
524 (sha256
525 (base32
526 "0486s53wyayicj9f2raj2dvwvk4xyzar219rccc1iczdwixm4x05"))
527 (modules '((guix build utils)
528 (ice-9 rdelim)
529 (ice-9 regex)
530 (srfi srfi-1)))
531 (snippet
532 `(begin
533 ;; The svn revision in the release tarball appears to be
534 ;; artificially manipulated in order to set the desired point
535 ;; version number. Because the point version is calculated during
536 ;; the build, we can offset pointVersionOrigin by the desired
537 ;; point version and write that into "Rev: %d". We do this rather
538 ;; than hardcoding the necessary revision number, for
539 ;; maintainability.
540 (with-atomic-file-replacement "src/mkProjectInfo.ml"
541 (lambda (in out)
542 (let ((pt-ver (string->number (third (string-split ,version #\.))))
543 (pt-rx (make-regexp "^let pointVersionOrigin = ([0-9]+)"))
544 (rev-rx (make-regexp "Rev: [0-9]+")))
545 (let loop ((pt-origin #f))
546 (let ((line (read-line in 'concat)))
547 (cond
548 ((regexp-exec pt-rx line)
549 => (lambda (m)
550 (display line out)
551 (loop (string->number (match:substring m 1)))))
552 ((regexp-exec rev-rx line)
553 => (lambda (m)
554 (format out "~aRev: ~d~a"
555 (match:prefix m)
556 (+ pt-origin pt-ver)
557 (match:suffix m))
558 (dump-port in out))) ;done
559 (else
560 (display line out)
561 (loop pt-origin))))))))
562 ;; Without the '-fix' argument, the html file produced does not
563 ;; have functioning internal hyperlinks.
564 (substitute* "doc/Makefile"
565 (("hevea unison") "hevea -fix unison"))))))
b9d8756b 566 (build-system gnu-build-system)
90907a22
EB
567 (outputs '("out"
568 "doc")) ; 1.9 MiB of documentation
b9d8756b 569 (native-inputs
90907a22
EB
570 `(("ocaml" ,ocaml)
571 ;; For documentation
572 ("ghostscript" ,ghostscript)
573 ("texlive" ,texlive)
574 ("hevea" ,hevea)
575 ("lynx" ,lynx)))
b9d8756b
AE
576 (arguments
577 `(#:parallel-build? #f
578 #:parallel-tests? #f
579 #:test-target "selftest"
580 #:tests? #f ; Tests require writing to $HOME.
581 ; If some $HOME is provided, they fail with the message
582 ; "Fatal error: Skipping some tests -- remove me!"
583 #:phases
584 (modify-phases %standard-phases
585 (delete 'configure)
586 (add-before 'install 'prepare-install
587 (lambda* (#:key outputs #:allow-other-keys)
588 (let* ((out (assoc-ref outputs "out"))
589 (bin (string-append out "/bin")))
590 (mkdir-p bin)
591 (setenv "HOME" out) ; forces correct INSTALLDIR in Makefile
90907a22
EB
592 #t)))
593 (add-after 'install 'install-doc
594 (lambda* (#:key inputs outputs #:allow-other-keys)
595 (let ((doc (string-append (assoc-ref outputs "doc")
596 "/share/doc/unison")))
597 (mkdir-p doc)
598 ;; This file needs write-permissions, because it's
599 ;; overwritten by 'docs' during documentation generation.
600 (chmod "src/strings.ml" #o600)
601 (and (zero? (system* "make" "docs"
602 "TEXDIRECTIVES=\\\\draftfalse"))
603 (begin
604 (for-each (lambda (f)
605 (install-file f doc))
606 (map (lambda (ext)
607 (string-append
608 "doc/unison-manual." ext))
609 ;; Install only html documentation,
610 ;; since the build is currently
611 ;; non-reproducible with the ps, pdf,
612 ;; and dvi docs.
613 '(;;"ps" "pdf" "dvi"
614 "html")))
615 #t))))))))
b9d8756b
AE
616 (home-page "https://www.cis.upenn.edu/~bcpierce/unison/")
617 (synopsis "File synchronizer")
618 (description
619 "Unison is a file-synchronization tool. It allows two replicas of
620a collection of files and directories to be stored on different hosts
621(or different disks on the same host), modified separately, and then
622brought up to date by propagating the changes in each replica
623to the other.")
624 (license gpl3+)))
a747baba
JN
625
626(define-public ocaml-findlib
627 (package
628 (name "ocaml-findlib")
629 (version "1.6.1")
630 (source (origin
631 (method url-fetch)
632 (uri (string-append "http://download.camlcity.org/download/"
633 "findlib" "-" version ".tar.gz"))
634 (sha256
635 (base32
636 "02abg1lsnwvjg3igdyb8qjgr5kv1nbwl4gaf8mdinzfii5p82721"))
fc1adab1 637 (patches (search-patches "ocaml-findlib-make-install.patch"))))
a747baba
JN
638 (build-system gnu-build-system)
639 (native-inputs
640 `(("camlp4" ,camlp4)
641 ("m4" ,m4)
642 ("ocaml" ,ocaml)))
643 (arguments
644 `(#:tests? #f ; no test suite
645 #:parallel-build? #f
646 #:make-flags (list "all" "opt")
647 #:phases (modify-phases %standard-phases
648 (replace
649 'configure
650 (lambda* (#:key inputs outputs #:allow-other-keys)
651 (let ((out (assoc-ref outputs "out")))
652 (system*
653 "./configure"
654 "-bindir" (string-append out "/bin")
655 "-config" (string-append out "/etc/ocamfind.conf")
656 "-mandir" (string-append out "/share/man")
657 "-sitelib" (string-append out "/lib/ocaml/site-lib")
658 "-with-toolbox")))))))
659 (home-page "http://projects.camlcity.org/projects/findlib.html")
660 (synopsis "Management tool for OCaml libraries")
661 (description
662 "The \"findlib\" library provides a scheme to manage reusable software
663components (packages), and includes tools that support this scheme. Packages
664are collections of OCaml modules for which metainformation can be stored. The
665packages are kept in the filesystem hierarchy, but with strict directory
666structure. The library contains functions to look the directory up that
667stores a package, to query metainformation about a package, and to retrieve
668dependency information about multiple packages. There is also a tool that
669allows the user to enter queries on the command-line. In order to simplify
670compilation and linkage, there are new frontends of the various OCaml
671compilers that can directly deal with packages.")
672 (license x11)))