summaryrefslogtreecommitdiff
path: root/gnu/packages/rocq.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/rocq.scm')
-rw-r--r--gnu/packages/rocq.scm152
1 files changed, 152 insertions, 0 deletions
diff --git a/gnu/packages/rocq.scm b/gnu/packages/rocq.scm
new file mode 100644
index 00000000000..b75e6763aa2
--- /dev/null
+++ b/gnu/packages/rocq.scm
@@ -0,0 +1,152 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2026 Dan Rostovtsev <dan@rostovtsev.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages rocq)
+ #:use-module (gnu packages base)
+ #:use-module (gnu packages gawk)
+ #:use-module (gnu packages gtk)
+ #:use-module (gnu packages multiprecision)
+ #:use-module (gnu packages ocaml)
+ #:use-module (guix build-system dune)
+ #:use-module (guix gexp)
+ #:use-module (guix git-download)
+ #:use-module (guix licenses)
+ #:use-module (guix packages))
+
+(define (rocq-arguments package-name)
+ ;; Dune parallel build is not reproducible (in rocq and camlp-streams,
+ ;; at least).
+ ;; First observed in Rocq in 2019 by bmwiedemann at OpenSUSE.
+ ;; - https://github.com/rocq-prover/rocq/issues/11229
+ ;; Was escalated to a specific package by Rocq team in 2023.
+ ;; - https://github.com/ocaml/camlp-streams/issues/9
+ ;; Was escalated to Dune by Xavier Leroy in 2023.
+ ;; - https://github.com/ocaml/dune/issues/9152
+ ;; AFAIK, no patches addressing this in any project circa 2026.
+ (list
+ #:package package-name
+ #:build-flags ''("-j1")
+ ;; The tests must be serial as well for reproducible builds.
+ #:test-flags ''("-j1")))
+
+(define-public rocq-runtime
+ (package
+ (name "rocq-runtime") ; see rocq-runtime.opam in rocq's git
+ (version "9.2.0")
+ (home-page "https://rocq-prover.org/")
+ (synopsis "The Rocq Prover -- Core Binaries and Tools")
+ (description
+ "The Rocq Prover is an interactive theorem prover, or proof assistant.
+It provides a formal language to write mathematical definitions, executable
+algorithms and theorems together with an environment for semi-interactive
+development of machine-checked proofs.
+
+This package includes the Rocq Prover core binaries, plugins, and tools, but
+not the vernacular standard library.")
+ (source
+ (origin
+ (method git-fetch)
+ ;; Opted to use github uri as recommended by "Contributing" docs.
+ ;; Signed by Nicolas Tabareau (GPG: 5F6E82ADF36B53F6)
+ (uri (git-reference
+ (url "https://github.com/rocq-prover/rocq")
+ (commit "V0.9.2")))
+ (sha256
+ (base32 "1rxq2cfqlbp8vzygmk6cwszbsn5l2vka0syhrafrnpn2rpyivya9"))))
+ (build-system dune-build-system)
+ (arguments (rocq-arguments "rocq-runtime"))
+ (propagated-inputs (list ocaml-zarith camlzip ocaml-yojson))
+ (inputs (list gmp))
+ (native-inputs (list ocaml-ounit2 which))
+ (native-search-paths
+ (map
+ (lambda (pair)
+ (let ((env (car pair))
+ (path (cdr pair)))
+ (search-path-specification (variable env) (files (list path)))))
+ '(("ROCQLIB" . "lib/ocaml/site-lib/coq")
+ ("ROCQRUNTIMELIB" . "lib/ocaml/site-lib/rocq-runtime"))))
+ ;; The source code is distributed under lgpl2.1.
+ ;; Some of the documentation is distributed under opl1.0+.
+ (license (list lgpl2.1 opl1.0+))))
+
+(define-public rocq-core
+ (package
+ (inherit rocq-runtime)
+ (name "rocq-core") ; see rocq-core.opam in rocq's git
+ (synopsis "The Rocq Prover with its standard modules")
+ (description
+ "The Rocq Prover is an interactive theorem prover, or proof assistant.
+It provides a formal language to write mathematical definitions, executable
+algorithms and theorems together with an environment for semi-interactive
+development of machine-checked proofs.
+
+This package includes the Rocq prelude, that is loaded automatically
+by Rocq in every .v file, as well as other modules bound to the
+Corelib.* and Ltac2.* namespaces.")
+ (arguments
+ (append
+ (rocq-arguments "rocq-core")
+ (list
+ #:phases
+ ;; this is the only package in rocq that /needs/ a "dunestrap"
+ #~(modify-phases %standard-phases
+ (add-before 'build 'make-dunestrap
+ (lambda _
+ (invoke "make" "DUNEOPT=-j1" "COQ_SPLIT=1" "dunestrap")))))))
+ (propagated-inputs
+ (modify-inputs (package-propagated-inputs rocq-runtime)
+ (append rocq-runtime)))))
+
+(define-public rocqide-server
+ (package
+ (inherit rocq-runtime)
+ (name "rocqide-server") ; see coqide-server.opam in rocq's git
+ (synopsis "The Rocq Prover, XML protocol server")
+ (description
+ "The Rocq Prover is an interactive theorem prover, or proof assistant.
+It provides a formal language to write mathematical definitions, executable
+algorithms and theorems together with an environment for semi-interactive
+development of machine-checked proofs.
+
+This package provides the `coqidetop` language server, an implementation of
+Rocq's XML protocol which allows clients, such as RocqIDE, to interact with
+the Rocq Prover in a structured way.")
+ (propagated-inputs
+ (modify-inputs (package-propagated-inputs rocq-runtime)
+ (append rocq-runtime)))
+ (arguments (rocq-arguments "coqide-server"))))
+
+(define-public rocqide
+ (package
+ (inherit rocq-runtime)
+ (name "rocqide") ; see rocqide.opam in rocq's git
+ (synopsis "The Rocq Prover --- GTK3 IDE")
+ (description
+ "The Rocq Prover is an interactive theorem prover, or proof assistant.
+It provides a formal language to write mathematical definitions, executable
+algorithms and theorems together with an environment for semi-interactive
+development of machine-checked proofs.
+
+This package provides the RocqIDE, a graphical user interface for the
+development of interactive proofs.")
+ (propagated-inputs
+ (modify-inputs
+ (package-propagated-inputs rocqide-server)
+ (append rocqide-server ocaml-lablgtk3-sourceview3)))
+ (arguments (rocq-arguments "rocqide"))))