gnu: Add clojure.

* gnu/packages/java.scm (clojure): New variable.
This commit is contained in:
Alex Vong 2016-07-05 16:24:20 +08:00 committed by Ricardo Wurmus
parent 3fa2dc2740
commit 8293b116e6
No known key found for this signature in database
GPG key ID: 197A5888235FACAC

View file

@ -142,6 +142,147 @@ (define-public java-swt
license:mpl2.0
license:lgpl2.1+))))
(define-public clojure
(let* ((remove-archives '(begin
(for-each delete-file
(find-files "." ".*\\.(jar|zip)"))
#t))
(submodule (lambda (prefix version hash)
(origin
(method url-fetch)
(uri (string-append "https://github.com/clojure/"
prefix version ".tar.gz"))
(sha256 (base32 hash))
(modules '((guix build utils)))
(snippet remove-archives)))))
(package
(name "clojure")
(version "1.8.0")
(source
(origin
(method url-fetch)
(uri
(string-append "http://repo1.maven.org/maven2/org/clojure/clojure/"
version "/clojure-" version ".zip"))
(sha256
(base32 "1nip095fz5c492sw15skril60i1vd21ibg6szin4jcvyy3xr6cym"))
(modules '((guix build utils)))
(snippet remove-archives)))
(build-system ant-build-system)
(arguments
`(#:modules ((guix build ant-build-system)
(guix build utils)
(ice-9 ftw)
(ice-9 regex)
(srfi srfi-1)
(srfi srfi-26))
#:test-target "test"
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'unpack-submodule-sources
(lambda* (#:key inputs #:allow-other-keys)
(for-each
(lambda (name)
(mkdir-p name)
(with-directory-excursion name
(or (zero? (system* "tar"
;; Use xz for repacked tarball.
"--xz"
"--extract"
"--verbose"
"--file" (assoc-ref inputs name)
"--strip-components=1"))
(error "failed to unpack tarball" name)))
(copy-recursively (string-append name "/src/main/clojure/")
"src/clj/"))
'("data-generators-src"
"java-classpath-src"
"test-check-src"
"test-generative-src"
"tools-namespace-src"
"tools-reader-src"))
#t))
;; The javadoc target is not built by default.
(add-after 'build 'build-doc
(lambda _
(zero? (system* "ant" "javadoc"))))
;; Needed since no install target is provided.
(replace 'install
(lambda* (#:key outputs #:allow-other-keys)
(let ((java-dir (string-append (assoc-ref outputs "out")
"/share/java/")))
;; Install versioned to avoid collisions.
(install-file (string-append "clojure-" ,version ".jar")
java-dir)
#t)))
;; Needed since no install-doc target is provided.
(add-after 'install 'install-doc
(lambda* (#:key outputs #:allow-other-keys)
(let ((doc-dir (string-append (assoc-ref outputs "out")
"/share/doc/clojure-"
,version "/")))
(copy-recursively "doc/clojure" doc-dir)
(copy-recursively "target/javadoc/"
(string-append doc-dir "javadoc/"))
(for-each (cut install-file <> doc-dir)
(filter (cut string-match
".*\\.(html|markdown|md|txt)"
<>)
(scandir "./")))
#t))))))
;; The native-inputs below are needed to run the tests.
(native-inputs
`(("data-generators-src"
,(submodule "data.generators/archive/data.generators-"
"0.1.2"
"0kki093jp4ckwxzfnw8ylflrfqs8b1i1wi9iapmwcsy328dmgzp1"))
("java-classpath-src"
,(submodule "java.classpath/archive/java.classpath-"
"0.2.3"
"0sjymly9xh1lkvwn5ygygpsfwz4dabblnlq0c9bx76rkvq62fyng"))
("test-check-src"
,(submodule "test.check/archive/test.check-"
"0.9.0"
"0p0mnyhr442bzkz0s4k5ra3i6l5lc7kp6ajaqkkyh4c2k5yck1md"))
("test-generative-src"
,(submodule "test.generative/archive/test.generative-"
"0.5.2"
"1pjafy1i7yblc7ixmcpfq1lfbyf3jaljvkgrajn70sws9xs7a9f8"))
("tools-namespace-src"
,(submodule "tools.namespace/archive/tools.namespace-"
"0.2.11"
"10baak8v0hnwz2hr33bavshm7y49mmn9zsyyms1dwjz45p5ymhy0"))
("tools-reader-src"
,(submodule "tools.reader/archive/tools.reader-"
"0.10.0"
"09i3lzbhr608h76mhdjm3932gg9xi8sflscla3c5f0v1nkc28cnr"))))
(home-page "https://clojure.org/")
(synopsis "Lisp dialect running on the JVM")
(description "Clojure is a dynamic, general-purpose programming language,
combining the approachability and interactive development of a scripting
language with an efficient and robust infrastructure for multithreaded
programming. Clojure is a compiled language, yet remains completely dynamic
every feature supported by Clojure is supported at runtime. Clojure
provides easy access to the Java frameworks, with optional type hints and type
inference, to ensure that calls to Java can avoid reflection.
Clojure is a dialect of Lisp, and shares with Lisp the code-as-data philosophy
and a powerful macro system. Clojure is predominantly a functional programming
language, and features a rich set of immutable, persistent data structures.
When mutable state is needed, Clojure offers a software transactional memory
system and reactive Agent system that ensure clean, correct, multithreaded
designs.")
;; Clojure is licensed under EPL1.0
;; ASM bytecode manipulation library is licensed under BSD-3
;; Guava Murmur3 hash implementation is licensed under APL2.0
;; src/clj/repl.clj is licensed under CPL1.0
;;
;; See readme.html or readme.txt for details.
(license (list license:epl1.0
license:bsd-3
license:asl2.0
license:cpl1.0)))))
(define-public ant
(package
(name "ant")