guix-more/more/packages/ocaml.scm

ocaml.scm

1
;;; GNU Guix --- Functional package management for GNU
2
;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu>
3
;;;
4
;;; This file is part of GNU Guix.
5
;;;
6
;;; GNU Guix is free software; you can redistribute it and/or modify it
7
;;; under the terms of the GNU General Public License as published by
8
;;; the Free Software Foundation; either version 3 of the License, or (at
9
;;; your option) any later version.
10
;;;
11
;;; GNU Guix is distributed in the hope that it will be useful, but
12
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
13
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
;;; GNU General Public License for more details.
15
;;;
16
;;; You should have received a copy of the GNU General Public License
17
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
18
19
(define-module (more packages ocaml)
20
  #:use-module (guix packages)
21
  #:use-module (guix download)
22
  #:use-module (guix utils)
23
  #:use-module (guix build-system gnu)
24
  #:use-module (guix build-system ocaml)
25
  #:use-module ((guix licenses) #:prefix license:)
26
  #:use-module (gnu packages)
27
  #:use-module (gnu packages base)
28
  #:use-module (gnu packages bison)
29
  #:use-module (gnu packages boost)
30
  #:use-module (gnu packages emacs)
31
  #:use-module (gnu packages flex)
32
  #:use-module (gnu packages llvm)
33
  #:use-module (gnu packages maths)
34
  #:use-module (gnu packages multiprecision)
35
  #:use-module (gnu packages ocaml)
36
  #:use-module (gnu packages perl)
37
  #:use-module (gnu packages protobuf)
38
  #:use-module (gnu packages texinfo)
39
  #:use-module (more packages smt))
40
41
;; Janestreet packages are found in a similar way and all need the same patch.
42
(define (janestreet-origin name version hash)
43
  (origin (method url-fetch)
44
          (uri (string-append "https://ocaml.janestreet.com/ocaml-core/"
45
                              (version-major+minor version) "/files/"
46
                              name "-" version ".tar.gz"))
47
          (sha256 (base32 hash))
48
          (modules '((guix build utils)))
49
          (snippet
50
           (let ((pattern (string-append "lib/" name)))
51
             `(begin
52
                ;; install.ml contains an invalid reference to the ppx file and
53
                ;; propagates this error to the generated META file.  It
54
                ;; looks for it in the "lib" directory, but it is installed in
55
                ;; "lib/ocaml/site-lib/package".  This substitute does not change
56
                ;; this file for non ppx packages.
57
                (substitute* "install.ml"
58
                  ((,pattern) (string-append "lib/ocaml/site-lib/" ,name)))
59
                ;; The standard Makefile would try to install janestreet modules
60
                ;; in OCaml's directory in the store, which is read-only.
61
                (substitute* "Makefile"
62
                  (("--prefix")
63
                   "--libdir $(LIBDIR) --prefix")))))))
64
65
;; They also require almost the same set of arguments
66
(define janestreet-arguments
67
  `(#:use-make? #t
68
    #:make-flags
69
    (list (string-append "CONFIGUREFLAGS=--prefix "
70
                         (assoc-ref %outputs "out")
71
                         " --enable-tests")
72
          (string-append "LIBDIR="
73
                         (assoc-ref %outputs "out")
74
                         "/lib/ocaml/site-lib")
75
          ;; for ocaml-bin-prot, otherwise ignored
76
          (string-append "OCAML_TOPLEVEL_PATH="
77
                         (assoc-ref %build-inputs "findlib")
78
                         "/lib/ocaml/site-lib"))
79
    #:phases (modify-phases %standard-phases (delete 'configure))))
80
81
(define-public ocaml-zed
82
  (package
83
    (name "ocaml-zed")
84
    (version "1.4")
85
    (source (origin
86
              (method url-fetch)
87
              (uri (string-append "https://github.com/diml/zed/archive/"
88
                                  version ".tar.gz"))
89
              (sha256
90
               (base32
91
                "0pvfq9ikhbkv4ksn3k3vzs6wiwkihjav3n81lhxm54z9931gfwnz"))))
92
    (build-system ocaml-build-system)
93
    (propagated-inputs
94
     `(("camomile" ,ocaml-camomile)
95
       ("react" ,ocaml-react)))
96
    (home-page "https://github.com/diml/zed")
97
    (synopsis "Abstract engine for text edition in OCaml")
98
    (description "Zed is an abstract engine for text edition. It can be used to
99
write text editors, edition widgets, readlines, ...
100
101
Zed uses Camomile to fully support the Unicode specification, and implements an
102
UTF-8 encoded string type with validation, and a rope datastructure to achieve
103
efficient operations on large Unicode buffers. Zed also features a regular
104
expression search on ropes.
105
106
To support efficient text edition capabilities, Zed provides macro recording
107
and cursor management facilities.")
108
    (license license:bsd-3)))
109
110
(define-public ocaml-lambda-term
111
  (package
112
    (name "ocaml-lambda-term")
113
    (version "1.10.1")
114
    (home-page "https://github.com/diml/lambda-term")
115
    (source (origin
116
              (method url-fetch)
117
              (uri (string-append home-page "/archive/" version ".tar.gz"))
118
              (sha256
119
               (base32
120
                "1449glcsavcwbcsxbd7wcjz50y8vvin4zwpmkhq8i6jca3f3sknj"))))
121
    (build-system ocaml-build-system)
122
    (propagated-inputs
123
     `(("zed" ,ocaml-zed)
124
       ("lwt" ,ocaml-lwt)
125
       ("react" ,ocaml-react)))
126
    (arguments
127
     `(#:phases
128
       (modify-phases %standard-phases
129
        (add-after 'install 'link-stubs
130
          (lambda* (#:key outputs #:allow-other-keys)
131
            (let* ((out (assoc-ref outputs "out"))
132
                   (stubs (string-append out "/lib/ocaml/site-lib/stubslibs"))
133
                   (lib (string-append out "/lib/ocaml/site-lib/lambda-term")))
134
              (mkdir-p stubs)
135
              (symlink (string-append lib "/dlllambda-term_stubs.so")
136
                       (string-append stubs "/dlllambda-term_stubs.so"))))))))
137
    (synopsis "Terminal manipulation library for OCaml")
138
    (description "Lambda-term is a cross-platform library for manipulating the
139
terminal. It provides an abstraction for keys, mouse events, colors, as well as
140
a set of widgets to write curses-like applications.
141
142
The main objective of lambda-term is to provide a higher level functional
143
interface to terminal manipulation than, for example, ncurses, by providing a
144
native OCaml interface instead of bindings to a C library.
145
146
Lambda-term integrates with zed to provide text edition facilities in console
147
applications.")
148
    (license license:bsd-3)))
149
150
(define-public ocaml-utop
151
  (package
152
    (name "ocaml-utop")
153
    (version "1.19.3")
154
    (source (origin
155
              (method url-fetch)
156
              (uri (string-append "https://github.com/diml/utop/archive/"
157
                                  version ".tar.gz"))
158
              (file-name (string-append name "-" version ".tar.gz"))
159
              (sha256
160
               (base32
161
                "16z02vp9n97iax4fqpbi7v86r75vbabxvnd1rirh8w2miixs1g4x"))))
162
    (build-system ocaml-build-system)
163
    (native-inputs
164
     `(("cppo" ,ocaml-cppo)))
165
    (propagated-inputs
166
     `(("lambda-term" ,ocaml-lambda-term)
167
       ("lwt" ,ocaml-lwt)
168
       ("react" ,ocaml-react)))
169
    (home-page "https://github.com/diml/utop")
170
    (synopsis "Universal toplevel for OCaml")
171
    (description "utop is an improved toplevel for OCaml.  It can run in a
172
terminal or in Emacs.  It supports line edition, history, real-time and context
173
sensitive completion, colors, and more.
174
175
It integrates with the tuareg mode in Emacs.")
176
    (license license:bsd-3)))
177
178
(define-public proof-general2
179
  (package
180
    (name "proof-general2")
181
    (version "4.4")
182
    (source (origin
183
              (method url-fetch)
184
              (uri (string-append
185
                    "https://github.com/ProofGeneral/PG/archive/v"
186
                    version ".tar.gz"))
187
              (file-name (string-append name "-" version ".tar.gz"))
188
              (sha256
189
               (base32
190
                "0zif2fv6mm4pv75nh10q3p37n293495rvx470bx7ma382zc3d8hv"))))
191
    (build-system gnu-build-system)
192
    (native-inputs
193
     `(("which" ,which)
194
       ("emacs" ,emacs-minimal)
195
       ("texinfo" ,texinfo)))
196
    (inputs
197
     `(("host-emacs" ,emacs)
198
       ("perl" ,perl)
199
       ("coq" ,coq)))
200
    (arguments
201
     `(#:tests? #f  ; no check target
202
       #:make-flags (list (string-append "PREFIX=" %output)
203
                          (string-append "DEST_PREFIX=" %output)
204
                          "-j1")
205
       #:modules ((guix build gnu-build-system)
206
                  (guix build utils)
207
                  (guix build emacs-utils))
208
       #:imported-modules (,@%gnu-build-system-modules
209
                           (guix build emacs-utils))
210
       #:phases
211
       (modify-phases %standard-phases
212
         (delete 'configure)
213
         (add-after 'unpack 'disable-byte-compile-error-on-warn
214
                    (lambda _
215
                      (substitute* "Makefile"
216
                        (("\\(setq byte-compile-error-on-warn t\\)")
217
                         "(setq byte-compile-error-on-warn nil)"))
218
                      #t))
219
         (add-after 'unpack 'patch-hardcoded-paths
220
                    (lambda* (#:key inputs outputs #:allow-other-keys)
221
                      (let ((out   (assoc-ref outputs "out"))
222
                            (coq   (assoc-ref inputs "coq"))
223
                            (emacs (assoc-ref inputs "host-emacs")))
224
                        (define (coq-prog name)
225
                          (string-append coq "/bin/" name))
226
                        (substitute* "pgshell/pgshell.el"
227
                          (("/bin/sh") (which "sh")))
228
                        ;(emacs-substitute-variables "coq/coq.el"
229
                        ;  ("coq-prog-name"           (coq-prog "coqtop"))
230
                        ;  ("coq-compiler"            (coq-prog "coqc"))
231
                        ;  ("coq-dependency-analyzer" (coq-prog "coqdep")))
232
                        (substitute* "Makefile"
233
                          (("/sbin/install-info") "install-info"))
234
                        (substitute* "bin/proofgeneral"
235
                          (("^PGHOMEDEFAULT=.*" all)
236
                           (string-append all
237
                                          "PGHOME=$PGHOMEDEFAULT\n"
238
                                          "EMACS=" emacs "/bin/emacs")))
239
                        #t))))))
240
         ;(add-after 'unpack 'clean
241
         ;           (lambda _
242
         ;             ;; Delete the pre-compiled elc files for Emacs 23.
243
         ;             (zero? (system* "make" "clean"))))
244
         ;(add-after 'install 'install-doc
245
         ;           (lambda* (#:key make-flags #:allow-other-keys)
246
         ;             ;; XXX FIXME avoid building/installing pdf files,
247
         ;             ;; due to unresolved errors building them.
248
         ;             (substitute* "Makefile"
249
         ;               ((" [^ ]*\\.pdf") ""))
250
         ;             (zero? (apply system* "make" "install-doc"
251
         ;                           make-flags)))))))
252
    (home-page "http://proofgeneral.inf.ed.ac.uk/")
253
    (synopsis "Generic front-end for proof assistants based on Emacs")
254
    (description
255
     "Proof General is a major mode to turn Emacs into an interactive proof
256
assistant to write formal mathematical proofs using a variety of theorem
257
provers.")
258
    (license license:gpl2+)))
259
260
(define-public ocaml-menhir-fix
261
  (package
262
    (inherit ocaml-menhir)
263
    (version "20170607")
264
    (name "ocaml-menhir-fix")
265
    (source (origin
266
              (method url-fetch)
267
              (uri (string-append
268
                    "http://gallium.inria.fr/~fpottier/menhir/"
269
                    "menhir-" version ".tar.gz"))
270
              (sha256
271
               (base32
272
                "0qffci9qxgfabzyalx851q994yykl4n9ylr4vbplsm6is1padjh0"))))))
273
274
(define-public compcert
275
  (package
276
    (name "compcert")
277
    (version "3.0.1")
278
    (source (origin
279
              (method url-fetch)
280
              (uri (string-append "http://compcert.inria.fr/release/compcert-"
281
                                  version ".tgz"))
282
              (sha256
283
               (base32
284
                "0dgrj26dzdy4n3s9b5hwc6lm54vans1v4qx9hdp1q8w1qqcdriq9"))))
285
    (build-system gnu-build-system)
286
    (arguments
287
     `(#:phases
288
       (modify-phases %standard-phases
289
         (replace 'configure
290
           (lambda* (#:key outputs #:allow-other-keys)
291
             (zero? (system* "./configure" "x86_64-linux" "-prefix"
292
                             (assoc-ref outputs "out"))))))
293
       #:tests? #f))
294
    (native-inputs
295
     `(("ocaml" ,ocaml)
296
       ("coq" ,coq-fix)))
297
    (inputs
298
     `(("menhir" ,ocaml-menhir-fix)))
299
    (home-page "http://compcert.inria.fr")
300
    (synopsis "Certified C compiler")
301
    (description "CompCert is a certified (with coq) C compiler.  Warning: this
302
package is not free software!")
303
    ;; actually the "INRIA Non-Commercial License Agreement"
304
    ;; a non-free license.
305
    (license (license:non-copyleft "file:///LICENSE"))))
306
307
;; yet another build system <3
308
;; In this one, the autoconf-generated configure script configures the build and
309
;; builds remake from source, a make-like system specific to this package.
310
(define-public coq-flocq
311
  (package
312
    (name "coq-flocq")
313
    (version "2.5.2")
314
    (source (origin
315
              (method url-fetch)
316
              (uri (string-append "https://gforge.inria.fr/frs/download.php/file/36199/flocq-"
317
                                  version ".tar.gz"))
318
              (sha256
319
               (base32
320
                "0h5mlasirfzc0wwn2isg4kahk384n73145akkpinrxq5jsn5d22h"))))
321
    (build-system gnu-build-system)
322
    (native-inputs
323
     `(("ocaml" ,ocaml)
324
       ("which" ,which)
325
       ("coq" ,coq-fix)))
326
    (arguments
327
     `(#:configure-flags
328
       (list (string-append "--libdir=" (assoc-ref %outputs "out")
329
                            "/lib/coq/user-contrib/Flocq"))
330
       #:phases
331
       (modify-phases %standard-phases
332
         (add-before 'configure 'fix-remake
333
           (lambda _
334
             (substitute* "remake.cpp"
335
               (("/bin/sh") (which "sh")))))
336
         (replace 'build
337
           (lambda _
338
             (zero? (system* "./remake"))))
339
         (replace 'check
340
           (lambda _
341
             (zero? (system* "./remake" "check"))))
342
             ;; TODO: requires coq-gappa and coq-interval.
343
             ;(zero? (system* "./remake" "check-more"))))
344
         (replace 'install
345
           (lambda _
346
             (zero? (system* "./remake" "install")))))))
347
    (home-page "http://flocq.gforge.inria.fr/")
348
    (synopsis "Floating-point formalization for the Coq system")
349
    (description "Flocq (Floats for Coq) is a floating-point formalization for
350
the Coq system.  It provides a comprehensive library of theorems on a multi-radix
351
multi-precision arithmetic.  It also supports efficient numerical computations
352
inside Coq.")
353
    (license license:lgpl3+)))
354
355
(define-public coq-gappa
356
  (package
357
    (name "coq-gappa")
358
    (version "1.3.1")
359
    (source (origin
360
              (method url-fetch)
361
              (uri (string-append "https://gforge.inria.fr/frs/download.php/file/36351/gappa-"
362
                                  version ".tar.gz"))
363
              (sha256
364
               (base32
365
                "0924jr6f15fx22qfsvim5vc0qxqg30ivg9zxj34lf6slbgdl3j39"))))
366
    (build-system gnu-build-system)
367
    (native-inputs
368
     `(("ocaml" ,ocaml)
369
       ("which" ,which)
370
       ("coq" ,coq-fix)
371
       ("bison" ,bison)
372
       ("flex" ,flex)))
373
    (inputs
374
     `(("gmp" ,gmp)
375
       ("mpfr" ,mpfr)
376
       ("boost" ,boost)))
377
    (arguments
378
     `(#:configure-flags
379
       (list (string-append "--libdir=" (assoc-ref %outputs "out")
380
                            "/lib/coq/user-contrib/Gappa"))
381
       #:phases
382
       (modify-phases %standard-phases
383
         (add-before 'configure 'fix-remake
384
           (lambda _
385
             (substitute* "remake.cpp"
386
               (("/bin/sh") (which "sh")))))
387
         (replace 'build
388
           (lambda _
389
             (zero? (system* "./remake"))))
390
         (replace 'check
391
           (lambda _
392
             (zero? (system* "./remake" "check"))))
393
         (replace 'install
394
           (lambda _
395
             (zero? (system* "./remake" "install")))))))
396
    (home-page "http://gappa.gforge.inria.fr/")
397
    (synopsis "Verify and formally prove properties on numerical programs")
398
    (description "Gappa is a tool intended to help verifying and formally proving
399
properties on numerical programs dealing with floating-point or fixed-point
400
arithmetic.  It has been used to write robust floating-point filters for CGAL
401
and it is used to certify elementary functions in CRlibm.  While Gappa is
402
intended to be used directly, it can also act as a backend prover for the Why3
403
software verification plateform or as an automatic tactic for the Coq proof
404
assistant.")
405
    (license (list license:gpl2 license:cecill))))
406
407
(define-public coq-mathcomp
408
  (package
409
    (name "coq-mathcomp")
410
    (version "1.6.1")
411
    (source (origin
412
              (method url-fetch)
413
              (uri (string-append "https://github.com/math-comp/math-comp/archive/mathcomp-"
414
                                  version ".tar.gz"))
415
              (sha256
416
               (base32
417
                "1j9ylggjzrxz1i2hdl2yhsvmvy5z6l4rprwx7604401080p5sgjw"))))
418
    (build-system gnu-build-system)
419
    (native-inputs
420
     `(("ocaml" ,ocaml)
421
       ("which" ,which)
422
       ("coq" ,coq-fix)))
423
    (arguments
424
     `(#:tests? #f; No need to test formally-verified programs :)
425
       #:phases
426
       (modify-phases %standard-phases
427
         (delete 'configure)
428
         (add-before 'build 'chdir
429
           (lambda _
430
             (chdir "mathcomp")))
431
         (replace 'install
432
           (lambda* (#:key outputs #:allow-other-keys)
433
             (setenv "COQLIB" (string-append (assoc-ref outputs "out") "/lib/coq/"))
434
             (zero? (system* "make" "-f" "Makefile.coq"
435
                             (string-append "COQLIB=" (assoc-ref outputs "out")
436
                                            "/lib/coq/")
437
                             "install")))))))
438
    (home-page "https://math-comp.github.io/math-comp/")
439
    (synopsis "Mathematical Components for Coq")
440
    (description "Mathematical Components for Coq has its origins in the formal
441
proof of the Four Colour Theorem.  Since then it has grown to cover many areas
442
of mathematics and has been used for large scale projects like the formal proof
443
of the Odd Order Theorem.
444
445
The library is written using the Ssreflect proof language that is an integral
446
part of the distribution.")
447
    (license license:cecill-b)))
448
449
(define-public coq-coquelicot
450
  (package
451
    (name "coq-coquelicot")
452
    (version "3.0.0")
453
    (source (origin
454
              (method url-fetch)
455
              (uri (string-append "https://gforge.inria.fr/frs/download.php/"
456
                                  "file/36537/coquelicot-" version ".tar.gz"))
457
              (sha256
458
               (base32
459
                "0fx99bvsbdizj00gx2im8939y4wwl05f4qhw184j90kcx5vjxxv9"))))
460
    (build-system gnu-build-system)
461
    (native-inputs
462
     `(("ocaml" ,ocaml)
463
       ("which" ,which)
464
       ("coq" ,coq-fix)))
465
    (propagated-inputs
466
     `(("mathcomp" ,coq-mathcomp)))
467
    (arguments
468
     `(#:configure-flags
469
       (list (string-append "--libdir=" (assoc-ref %outputs "out")
470
                            "/lib/coq/user-contrib/Coquelicot"))
471
       #:phases
472
       (modify-phases %standard-phases
473
         (add-before 'configure 'fix-remake
474
           (lambda _
475
             (substitute* "remake.cpp"
476
               (("/bin/sh") (which "sh")))))
477
         (replace 'build
478
           (lambda _
479
             (zero? (system* "./remake"))))
480
         (replace 'check
481
           (lambda _
482
             (zero? (system* "./remake" "check"))))
483
         (replace 'install
484
           (lambda _
485
             (zero? (system* "./remake" "install")))))))
486
    (home-page "http://coquelicot.saclay.inria.fr/index.html")
487
    (synopsis "Coq library for Reals")
488
    (description "Coquelicot is an easier way of writing formulas and theorem
489
statements, achieved by relying on total functions in place of dependent types
490
for limits, derivatives, integrals, power series, and so on.  To help with the
491
proof process, the library comes with a comprehensive set of theorems that cover
492
not only these notions, but also some extensions such as parametric integrals,
493
two-dimensional differentiability, asymptotic behaviors.  It also offers some
494
automations for performing differentiability proofs.  Moreover, Coquelicot is a
495
conservative extension of Coq's standard library and provides correspondence
496
theorems between the two libraries.")
497
    (license license:lgpl3+)))
498
499
(define-public coq-interval
500
  (package
501
    (name "coq-interval")
502
    (version "3.2.0")
503
    (source (origin
504
              (method url-fetch)
505
              (uri (string-append "https://gforge.inria.fr/frs/download.php/"
506
                                  "file/36538/interval-" version ".tar.gz"))
507
              (sha256
508
               (base32
509
                "16ir7mizl18kwa1ls8fwjih6r87894bvc1r6lh85cd43la7nriq3"))))
510
    (build-system gnu-build-system)
511
    (native-inputs
512
     `(("ocaml" ,ocaml)
513
       ("which" ,which)
514
       ("coq" ,coq-fix)))
515
    (propagated-inputs
516
     `(("flocq" ,coq-flocq)
517
       ("coquelicot" ,coq-coquelicot)
518
       ("mathcomp" ,coq-mathcomp)))
519
    (arguments
520
     `(#:configure-flags
521
       (list (string-append "--libdir=" (assoc-ref %outputs "out")
522
                            "/lib/coq/user-contrib/Gappa"))
523
       #:phases
524
       (modify-phases %standard-phases
525
         (add-before 'configure 'fix-remake
526
           (lambda _
527
             (substitute* "remake.cpp"
528
               (("/bin/sh") (which "sh")))))
529
         (replace 'build
530
           (lambda _
531
             (zero? (system* "./remake"))))
532
         (replace 'check
533
           (lambda _
534
             (zero? (system* "./remake" "check"))))
535
         (replace 'install
536
           (lambda _
537
             (zero? (system* "./remake" "install")))))))
538
    (home-page "http://coq-interval.gforge.inria.fr/")
539
    (synopsis "Coq tactics to simplify inequality proofs")
540
    (description "Interval provides vernacular files containing tactics for
541
simplifying the proofs of inequalities on expressions of real numbers for the
542
Coq proof assistant.")
543
    (license license:cecill-c)))
544
545
(define-public coq-fix
546
  (package
547
    (inherit coq)
548
    (name "coq-fix")
549
    (version "8.6")
550
    (source (origin
551
              (method url-fetch)
552
              (uri (string-append "https://coq.inria.fr/distrib/V" version
553
                                  "/files/coq-" version ".tar.gz"))
554
              (sha256
555
               (base32
556
                "1pw1xvy1657l1k69wrb911iqqflzhhp8wwsjvihbgc72r3skqg3f"))))
557
    (native-search-paths
558
      (list (search-path-specification
559
              (variable "COQPATH")
560
              (files (list "lib/coq/user-contrib")))))))
561
562
(define-public cubicle
563
  (package
564
    (name "cubicle")
565
    (version "1.1.1")
566
    (source (origin
567
              (method url-fetch)
568
              (uri (string-append "http://cubicle.lri.fr/cubicle-"
569
                                  version ".tar.gz"))
570
              (sha256
571
               (base32
572
                "1sny9c4fm14k014pk62ibpwbrjjirkx8xmhs9jg7q1hk7y7x3q2h"))))
573
    (build-system gnu-build-system)
574
    (native-inputs
575
     `(("ocaml" ,ocaml)
576
       ("which" ,which)))
577
    (propagated-inputs
578
     `(("z3" ,z3)))
579
    (arguments
580
     `(#:configure-flags (list "--with-z3")
581
       #:tests? #f
582
       #:phases
583
       (modify-phases %standard-phases
584
         (add-before 'configure 'configure-for-release
585
           (lambda _
586
             (substitute* "Makefile.in"
587
               (("SVNREV=") "#SVNREV="))))
588
         (add-before 'configure 'fix-/bin/sh
589
           (lambda _
590
             (substitute* "configure"
591
               (("/bin/sh") (which "sh")))))
592
         (add-before 'configure 'fix-smt-z3wrapper.ml
593
           (lambda _
594
             (substitute* "Makefile.in"
595
               (("\\\\n") "")))))))
596
    (home-page "http://cubicle.lri.fr/")
597
    (synopsis "Model checker for array-based systems")
598
    (description "Cubicle is an open source model checker for verifying safety
599
properties of array-based systems.  This is a syntactically restricted class of
600
parametrized transition systems with states represented as arrays indexed by an
601
arbitrary number of processes.  Cache coherence protocols and mutual exclusion
602
algorithms are typical examples of such systems.")
603
    (license license:asl2.0)))
604