aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDanny Milosavljevic <dannym@friendly-machines.com>2025-03-26 02:08:08 +0100
committerDanny Milosavljevic <dannym@friendly-machines.com>2025-03-26 02:08:08 +0100
commite4ca2ae0954215864a107a875604d3679559e808 (patch)
tree0f747b5e084527445aaba9557730cdabbe18c2ab
parent169894151fdcde249ba6e2c248b3e894f74eaa15 (diff)
downloadguix-e4ca2ae0954215864a107a875604d3679559e808.tar.gz
guix-e4ca2ae0954215864a107a875604d3679559e808.zip
gnu: Add lean4.
* gnu/packages/lean.scm (lean4): New variable. Change-Id: I9f51b7475eabdecd98fb05378a2cf91ed516c5ed
-rw-r--r--gnu/packages/lean.scm86
1 files changed, 86 insertions, 0 deletions
diff --git a/gnu/packages/lean.scm b/gnu/packages/lean.scm
index 1533200426..82bca77dd7 100644
--- a/gnu/packages/lean.scm
+++ b/gnu/packages/lean.scm
@@ -21,7 +21,11 @@
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (gnu packages lean)
+ #:use-module (ice-9 match)
+ #:use-module (gnu packages base)
#:use-module (gnu packages bash)
+ #:use-module (gnu packages llvm)
+ #:use-module (gnu packages maths)
#:use-module (gnu packages multiprecision)
#:use-module (guix build-system cmake)
#:use-module (guix build-system python)
@@ -31,7 +35,11 @@
#:use-module (guix git-download)
#:use-module (guix download)
#:use-module (gnu packages graphviz)
+ #:use-module (gnu packages libevent)
+ #:use-module (gnu packages perl)
+ #:use-module (gnu packages pkg-config)
#:use-module (gnu packages version-control)
+ #:use-module (gnu packages python)
#:use-module (gnu packages python-build)
#:use-module (gnu packages python-crypto)
#:use-module (gnu packages python-web)
@@ -75,6 +83,84 @@ core based on dependent typed theory, aiming to bridge the gap between
interactive and automated theorem proving.")
(license license:asl2.0)))
+(define-public lean4
+ (package
+ (name "lean4")
+ (version "4.17.0")
+ (home-page "https://lean-lang.org" )
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/leanprover/lean4.git")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0fmjp8hqsbppn1fqzr8lyh6fhk8vhfj1m18wlmsfk1can00mx2za"))))
+ (build-system cmake-build-system)
+ (native-inputs
+ (list git ; for the tests
+ perl ; for the tests
+ pkg-config
+ python-wrapper
+ tzdata-for-tests))
+ (inputs
+ (list cadical gmp libuv llvm))
+ (arguments
+ (list
+ #:make-flags
+ #~(list "SHELL=bash -euo pipefail")
+ #:build-type "Release" ; default upstream build type
+ ;; XXX: Test phases currently fail on 32-bit sytems.
+ ;; Tests for those architectures have been temporarily
+ ;; disabled, pending further investigation.
+ #:tests? (and (not (%current-target-system))
+ (let ((arch (%current-system)))
+ (not (or (string-prefix? "i686" arch)
+ (string-prefix? "armhf" arch)))))
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-before 'configure 'patch
+ (lambda _
+ (substitute* '("stage0/src/CMakeLists.txt"
+ "src/CMakeLists.txt")
+ ;; Convert clang option to GCC option.
+ (("--print-target-triple") "-dumpmachine")) ; -print-multiarch
+ (substitute* '("src/bin/leanc.in"
+ "src/util/ffi.cpp"
+ "stage0/src/bin/leanc.in"
+ "stage0/src/util/ffi.cpp")
+ ;; Prevent ld error from:
+ ;; "--start-group" "-lInit" "-lleanrt" "--end-group" "-lstdc++"
+ ;; "-lLake" ""
+ ((" @LEAN_EXTRA_LINKER_FLAGS@")
+ "@LEAN_EXTRA_LINKER_FLAGS@"))
+ (substitute* "src/lean.mk.in"
+ (("SHELL = /usr/bin/env bash")
+ "SHELL = bash"))
+ (setenv "SHELL" "bash -euo pipefail")))
+ (replace 'check
+ (lambda* (#:key tests? parallel-tests? #:allow-other-keys)
+ (when tests?
+ (with-directory-excursion "../source"
+ (invoke "ctest" "--preset" "release" "--test-dir" "../build/stage1"
+ "-E" "leancomptest_(doc_example|foreign)|leanlaketest_reverse-ffi|leanruntest_timeIO"
+ "-j" (if parallel-tests?
+ (number->string (parallel-job-count))
+ "1"))))))
+ (add-before 'install 'delete-junk
+ (lambda _
+ ;; Package is reproducible with ".git" deleted.
+ (for-each delete-file-recursively
+ (find-files "../source/src/lake/tests" "^\\.git$"
+ #:directories? #t)))))))
+ (synopsis "Theorem prover and programming language")
+ (description
+ "Lean is a theorem prover and programming language with a small trusted
+core based on dependent typed theory, aiming to bridge the gap between
+interactive and automated theorem proving.")
+ (license license:asl2.0)))
+
(define-public python-mathlibtools
(package
(name "python-mathlibtools")