[bug#72621] gnu: Add clasp.
Commit Message
From: Ashish SHUKLA <ashish.is@lostca.se>
* gnu/packages/lisp.scm (clasp-cl): New variable.
Change-Id: I1d1dbc358c0e05577d3d535600c2f9863ad29fad
---
Hi,
This patch adds Clasp Common Lisp implementation[0] to Guix. Most of
it is inspired/based off the work in nixpkgs[1].
References:
[0] https://clasp-developers.github.io/
[1] https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/compilers/clasp/default.nix
Thanks!
gnu/packages/lisp.scm | 72 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 72 insertions(+)
base-commit: ca5ff8aa8b50ac317003d76cc4ea2a621d5a3819
Comments
Hi! I've applied your patch, and it seems to have some problems.
1) We already have the package with name "clasp", consider renaming it
to something like "clasp-cl".
2) The license of clasp should be "lgpl2.1+", not "lgpl2.1".
3) After renaming run "guix lint" on the package, it has quite a lot of
warnings.
4) I see you use gnu-build-system, and modify it a lot to use ninja. We
have meson-build-system in GNU Guix, shouldn't it be used instead?
Also I've looked at clasp git repo, they have package definition for GNU
Guix, maybe you should check it out!
Patch applied as 1e2aca13eedc71b869e43525549080ba153e2887 with some
minor modifications. And I renamed the package to "clasp-cl", as there
is already a different "clasp" package in "potassco.scm".
Thanks.
@@ -28,6 +28,7 @@
;;; Copyright © 2023 Andrew Kravchuk <awkravchuk@gmail.com>
;;; Copyright © 2024 Andreas Enge <andreas@enge.fr>
;;; Copyright © 2024 bigbug <bigbookofbug@proton.me>
+;;; Copyright © 2024 Ashish SHUKLA <ashish.is@lostca.se>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -367,6 +368,77 @@ (define-public ccl
interface.")
(license license:asl2.0)))
+(define-public clasp-cl
+ (package
+ (name "clasp")
+ (version "2.6.0")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "https://github.com/clasp-developers/clasp/releases/download/"
+ version "/clasp-" version ".tar.gz"))
+ (sha256 (base32 "10jjhcid6qp64gx29iyy5rqqijwy8hrvx66f0xabdj8w3007ky39"))))
+ (build-system gnu-build-system)
+ (inputs (list boost fmt gmp libelf libunwind clang-15 llvm-15
+ `(,gcc "lib")))
+ (native-inputs (list sbcl ninja pkg-config binutils-gold))
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (delete 'check)
+ (add-after 'unpack 'patch-koga
+ (lambda* _
+ (call-with-port (open-file "src/koga/units.lisp" "a")
+ (lambda (p)
+ (display "(defmethod configure-unit (c (u (eql :git))))\n" p)))))
+ (add-before 'configure 'set-configure-environment
+ (lambda* _
+ (setenv "SOURCE_DATE_EPOCH" "1")
+ (setenv "ASDF_OUTPUT_TRANSLATIONS"
+ (string-append (getenv "PWD")
+ ":"
+ (getenv "PWD")
+ "/__fasls"))))
+ (replace 'configure
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out"))
+ (clang (assoc-ref inputs "clang"))
+ (ld-flags
+ (string-join
+ (apply append
+ (map (lambda (f)
+ (list "-L" f "-rpath" f))
+ (string-split (getenv "LIBRARY_PATH") #\:)))
+ ",")))
+ (invoke "sbcl"
+ "--script"
+ "./koga"
+ "--skip-sync"
+ "--build-mode=bytecode-faso"
+ (string-append "--cc=" clang "/bin/clang")
+ (string-append "--cxx=" clang "/bin/clang++")
+ (string-append "--ldflags=-Wl," ld-flags)
+ "--reproducible-build"
+ "--package-path=/"
+ (string-append "--bin-path=" out "/bin")
+ (string-append "--lib-path=" out "/lib")
+ (string-append "--share-path=" out "/share")))))
+ (replace 'build
+ (lambda* _
+ (invoke "ninja" "-C" "build")))
+ (replace 'install
+ (lambda* _
+ (invoke "ninja" "-C" "build" "install"))))))
+ (home-page "https://clasp-developers.github.io/")
+ (synopsis "Common Lisp implementation based on LLVM and C++.")
+ (description "Clasp is a new Common Lisp implementation that seamlessly
+ interoperates with C++ libraries and programs using LLVM for compilation to
+ native code. This allows Clasp to take advantage of a vast array of
+ preexisting libraries and programs, such as out of the scientific computing
+ ecosystem. Embedding them in a Common Lisp environment allows you to make use
+ of rapid prototyping, incremental development, and other capabilities that
+ make it a powerful language.")
+ (license license:lgpl2.1)))
+
(define-public cl-asdf
(package
(name "cl-asdf")