Commit | Line | Data |
---|---|---|
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) "\ | |
95 | patch-/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 | 141 | an emphasis on expressiveness and safety. Developed for more than 20 years at |
d192efae CR |
142 | Inria it benefits from one of the most advanced type systems and supports |
143 | functional, 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 | |
204 | simultaneous compiler installations, flexible package constraints, and a | |
205 | Git-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 | |
242 | programming languages. It provides a set of OCaml libraries that are used to | |
243 | define grammars as well as loadable syntax extensions of such grammars. | |
244 | Camlp4 stands for Caml Preprocessor and Pretty-Printer and one of its most | |
245 | important applications is the definition of domain-specific extensions of the | |
246 | syntax 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 | |
288 | tools for syntax (Stream Parsers and Grammars) and the ability to modify the | |
289 | concrete 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 | |
321 | written 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 | |
368 | development of computer programs consistent with their formal specification. | |
369 | It 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 |
448 | assistant to write formal mathematical proofs using a variety of theorem | |
449 | provers.") | |
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 | |
502 | a strongly-typed object-oriented interface that is compatible with the | |
503 | dynamic typing of GTK+. Most widgets and methods are available. LablGtk | |
504 | also provides bindings to | |
505 | gdk-pixbuf, the GLArea widget (in combination with LablGL), gnomecanvas, | |
506 | gnomeui, gtksourceview, gtkspell, | |
507 | libglade (and it an generate OCaml code from .glade files), | |
508 | libpanel, 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 | |
620 | a collection of files and directories to be stored on different hosts | |
621 | (or different disks on the same host), modified separately, and then | |
622 | brought up to date by propagating the changes in each replica | |
623 | to 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 | |
663 | components (packages), and includes tools that support this scheme. Packages | |
664 | are collections of OCaml modules for which metainformation can be stored. The | |
665 | packages are kept in the filesystem hierarchy, but with strict directory | |
666 | structure. The library contains functions to look the directory up that | |
667 | stores a package, to query metainformation about a package, and to retrieve | |
668 | dependency information about multiple packages. There is also a tool that | |
669 | allows the user to enter queries on the command-line. In order to simplify | |
670 | compilation and linkage, there are new frontends of the various OCaml | |
671 | compilers that can directly deal with packages.") | |
672 | (license x11))) |