projects/guix·blob bootstrap-team · refs

1192 lines · 49.1 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2018 Alex Vong <[email protected]>
3;;; Copyright © 2018 Pierre Neidhardt <[email protected]>
4;;; Copyright © 2019 Tobias Geerinckx-Rice <[email protected]>
5;;; Copyright © 2019 Jesse Gibbons <[email protected]>
6;;; Copyright © 2020 Ludovic Courtès <[email protected]>
7;;; Copyright © 2024 Roman Scherer <[email protected]>
8;;; Copyright © 2025, 2026 Mathieu Lirzin <[email protected]>
9;;;
10;;; This file is part of GNU Guix.
11;;;
12;;; GNU Guix is free software; you can redistribute it and/or modify it
13;;; under the terms of the GNU General Public License as published by
14;;; the Free Software Foundation; either version 3 of the License, or (at
15;;; your option) any later version.
16;;;
17;;; GNU Guix is distributed in the hope that it will be useful, but
18;;; WITHOUT ANY WARRANTY; without even the implied warranty of
19;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20;;; GNU General Public License for more details.
21;;;
22;;; You should have received a copy of the GNU General Public License
23;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
24
25(define-module (gnu packages clojure)
26 #:use-module (gnu packages)
27 #:use-module (gnu packages java)
28 #:use-module (gnu packages maven)
29 #:use-module (gnu packages readline)
30 #:use-module ((guix licenses) #:prefix license:)
31 #:use-module (guix packages)
32 #:use-module (guix download)
33 #:use-module (guix git-download)
34 #:use-module (guix build-system ant)
35 #:use-module (guix build-system copy)
36 #:use-module (guix build-system clojure)
37 #:use-module (ice-9 match))
38
39(define-public clojure-spec-alpha
40 (package
41 (name "clojure-spec-alpha")
42 (version "0.6.249")
43 (source (origin
44 (method git-fetch)
45 (uri (git-reference
46 (url "https://github.com/clojure/spec.alpha")
47 (commit (string-append "v" version))))
48 (file-name (git-file-name name version))
49 (sha256
50 (base32
51 "1rzy7mjzchsjpwkn3b5vg5hnmsj5h9ljxdjn48j92bgh7vl3k2r5"))))
52 (build-system clojure-build-system)
53 (arguments '(#:source-dirs '("src/main/clojure")
54 #:test-dirs '("src/test/clojure")
55 #:doc-dirs '()))
56 (native-inputs (list clojure-test-check))
57 (synopsis
58 "Clojure library to describe the structure of data and functions")
59 (description
60 "This package can be used to validate data, conform (destructure) data, explain
61invalid data, generate examples that conform to the specs, and automatically
62use generative testing to test functions.
63
64Clojure depends on this library and provides it. Thus it is not recommended
65to add a direct dependency on this package.")
66 (home-page "https://github.com/clojure/spec.alpha")
67 (license license:epl1.0)))
68
69(define-public clojure-core-specs-alpha
70 (package
71 (name "clojure-core-specs-alpha")
72 (version "0.5.81")
73 (source (origin
74 (method git-fetch)
75 (uri (git-reference
76 (url "https://github.com/clojure/core.specs.alpha")
77 (commit (string-append "v" version))))
78 (file-name (git-file-name name version))
79 (sha256
80 (base32
81 "1hy060mb2hxirynkk36plx1rvpj6i2ldn8mvnwfd02wvjvh57dad"))))
82 (build-system clojure-build-system)
83 (arguments '(#:source-dirs '("src/main/clojure")
84 #:test-dirs '()
85 #:doc-dirs '()))
86 (synopsis "Describe clojure.core macros and functions")
87 (description
88 "This package contains specs to describe Clojure core macros and functions.
89
90Clojure depends on this library and provides it. Thus it is not recommended
91to add a direct dependency on this package.")
92 (home-page "https://github.com/clojure/core.specs.alpha")
93 (license license:epl1.0)))
94
95(define-public clojure-java-classpath
96 (package
97 (name "clojure-java-classpath")
98 (version "1.1.1")
99 (source (origin
100 (method git-fetch)
101 (uri (git-reference
102 (url "https://github.com/clojure/java.classpath")
103 (commit (string-append "v" version))))
104 (file-name (git-file-name name version))
105 (sha256
106 (base32
107 "1k34yrx3gmvf46984zdgn2vb98ixf47q1vgh9p78bgmpyhrwzx2z"))))
108 (build-system clojure-build-system)
109 (arguments '(#:source-dirs '("src/main/clojure")
110 #:test-dirs '("src/test/clojure")
111 #:doc-dirs '()))
112 (synopsis "Examine the Java classpath from Clojure programs")
113 (description
114 "This package provides utilities for dealing with the JVM's classpath from
115Clojure.")
116 (home-page "https://github.com/clojure/java.classpath")
117 (license license:epl1.0)))
118
119(define-public clojure-data-generators
120 (package
121 (name "clojure-data-generators")
122 (version "1.1.1")
123 (source (origin
124 (method git-fetch)
125 (uri (git-reference
126 (url "https://github.com/clojure/data.generators")
127 (commit (string-append "v" version))))
128 (file-name (git-file-name name version))
129 (sha256
130 (base32
131 "1ynazp55v15zv5jwz1wh2p8cawjcmn0bwzgfs2dwrp6aq231jafm"))))
132 (build-system clojure-build-system)
133 (arguments '(#:source-dirs '("src/main/clojure")
134 #:test-dirs '("src/test/clojure")
135 #:doc-dirs '()))
136 (synopsis "Generators for random Clojure data")
137 (description
138 "This package contains various functions to generate random clojure data.")
139 (home-page "https://github.com/clojure/data.generators")
140 (license license:epl1.0)))
141
142(define-public clojure-tools-namespace
143 (package
144 (name "clojure-tools-namespace")
145 (version "1.5.1")
146 (source (origin
147 (method git-fetch)
148 (uri (git-reference
149 (url "https://github.com/clojure/tools.namespace")
150 (commit (string-append "v" version))))
151 (file-name (git-file-name name version))
152 (sha256
153 (base32
154 "0j1lz3xnpgvyi0mcg9mjz7hrchf3hwhbhxi2163d739dxdx60s22"))))
155 (build-system clojure-build-system)
156 (arguments '(#:source-dirs '("src/main/clojure")
157 #:test-dirs '("src/test/clojure")
158 #:doc-dirs '()))
159 (propagated-inputs (list clojure-java-classpath
160 clojure-tools-reader))
161 (synopsis "Tools for managing namespaces in Clojure")
162 (description
163 "This package parses ns declarations from source files, extract their
164dependencies, build a graph of namespace dependencies within a project, update
165that graph as files change, and reload files in the correct order.
166
167This is only about namespace dependencies within a single project. It has
168nothing to do with Leiningen, Maven, JAR files, or repositories.")
169 (home-page "https://github.com/clojure/tools.namespace")
170 (license license:epl1.0)))
171
172(define-public clojure-test-generative
173 (package
174 (name "clojure-test-generative")
175 (version "1.1.1")
176 (source (origin
177 (method git-fetch)
178 (uri (git-reference
179 (url "https://github.com/clojure/test.generative")
180 (commit (string-append "v" version))))
181 (file-name (git-file-name name version))
182 (sha256
183 (base32
184 "0lb72cr4s6rgpg18v3jr67ps6wx4p7j7mfzwnfgmm0v8rldlcycf"))))
185 (build-system clojure-build-system)
186 (arguments '(#:source-dirs '("src/main/clojure")
187 #:test-dirs '("src/examples/clojure")
188 #:doc-dirs '()))
189 (propagated-inputs (list clojure-tools-namespace
190 clojure-data-generators))
191 (synopsis "Generative test runner")
192 (description
193 "This package defines generators functions and property based testing macros.")
194 (home-page "https://github.com/clojure/test.generative")
195 (license license:epl1.0)))
196
197(define-public clojure-test-check
198 (package
199 (name "clojure-test-check")
200 (version "1.1.3")
201 (home-page "https://github.com/clojure/test.check")
202 (source (origin
203 (method git-fetch)
204 (uri (git-reference
205 (url home-page)
206 (commit (string-append "v" version))))
207 (file-name (git-file-name name version))
208 (sha256
209 (base32
210 "1j1x80rv0pli3g91wy01panlqbhgf7zqm7jdr2rzjqf2yyksc70n"))))
211 (build-system clojure-build-system)
212 (arguments
213 '(#:source-dirs '("src/main/clojure")
214 #:test-dirs '("src/test/clojure")
215 #:doc-dirs '()))
216 (synopsis "QuickCheck for Clojure")
217 (description "@code{test.check} is a Clojure property-based testing tool
218inspired by QuickCheck. The core idea of @code{test.check} is that instead of
219enumerating expected input and output for unit tests, you write properties
220about your function that should hold true for all inputs. This lets you write
221concise, powerful tests.")
222 (license license:epl1.0)))
223
224(define-public clojure-tools-reader
225 (package
226 (name "clojure-tools-reader")
227 (version "1.6.0")
228 (home-page "https://github.com/clojure/tools.reader")
229 (source (origin
230 (method git-fetch)
231 (uri (git-reference
232 (url home-page)
233 (commit (string-append "v" version))))
234 (file-name (git-file-name name version))
235 (sha256
236 (base32
237 "006zy7dpk678rzawqyqcypccw48bl4b9s4xjrwzhgq8z5s8v6lnd"))))
238 (build-system clojure-build-system)
239 (arguments
240 '(#:doc-dirs '()
241 #:source-dirs '("src/main/clojure")
242 #:test-dirs '("src/test/clojure")
243 #:test-exclude '(clojure.tools.common-tests))) ; Loaded by other tests.
244 (synopsis "Clojure reader written in Clojure")
245 (description "The clojure.tools.reader library offers all functionality
246provided by the Clojure Core reader and more. It adds metadata such as column
247and line numbers not only to lists, but also to symbols, vectors and maps.")
248 (license license:epl1.0)))
249
250(define (package-sources . packages)
251 (map package-source packages))
252
253(define-public clojure
254 (let ((provided-libraries (package-sources clojure-core-specs-alpha
255 clojure-spec-alpha))
256 (test-libraries (package-sources clojure-data-generators
257 clojure-java-classpath
258 clojure-test-check
259 clojure-test-generative
260 clojure-tools-namespace
261 clojure-tools-reader)))
262 (package
263 (name "clojure")
264 (version "1.12.4")
265 (source (let ((name+version (string-append name "-" version)))
266 (origin
267 (method git-fetch)
268 (uri (git-reference
269 (url "https://github.com/clojure/clojure")
270 (commit name+version)))
271 (file-name (string-append name+version "-checkout"))
272 (sha256
273 (base32
274 "072dv6s2gxcg8snlgkpjk6bp1cb17bgfshdq6ijsa4yslpqbf9wc")))))
275 (build-system ant-build-system)
276 (inputs (list icedtea))
277 (arguments
278 `(#:imported-modules ((guix build clojure-utils)
279 (guix build clojure-build-system)
280 ,@%ant-build-system-modules)
281 #:modules ((guix build ant-build-system)
282 ((guix build clojure-build-system) #:prefix clj:)
283 (guix build clojure-utils)
284 (guix build java-utils)
285 (guix build utils)
286 (srfi srfi-26))
287 #:test-target "test"
288 #:phases
289 (modify-phases %standard-phases
290 (add-after 'unpack 'unpack-library-sources
291 (lambda* (#:key inputs #:allow-other-keys)
292 (define (extract-provided-library name)
293 (copy-recursively
294 (string-append (assoc-ref inputs name) "/src/main/clojure")
295 "src/clj/"))
296 (for-each extract-provided-library
297 ',(map origin-actual-file-name provided-libraries))))
298 (add-after 'unpack-library-sources 'fix-manifest-classpath
299 (lambda _
300 (substitute* "build.xml"
301 (("<attribute name=\"Class-Path\" value=\".\"/>") ""))))
302 (add-after 'unpack-library-sources 'clojure-spec-skip-macros
303 ;; Disable spec macro instrumentation when compiling clojure.spec
304 ;; See: https://clojure.atlassian.net/browse/CLJ-2254
305 (lambda _
306 (substitute* "build.xml"
307 (("<sysproperty key=\"java.awt.headless\" value=\"true\"/>")
308 ,(string-join
309 '("<sysproperty key=\"java.awt.headless\" value=\"true\"/>"
310 "<sysproperty key=\"clojure.spec.skip-macros\" value=\"true\"/>\n")
311 "\n")))))
312 (add-after 'unpack-library-sources 'clojure-spec-compile
313 ;; Compile and include clojure.spec.alpha & clojure.core.specs.alpha
314 (lambda _
315 (substitute* "build.xml"
316 (("<arg value=\"clojure.math\"/>")
317 ,(string-join
318 '("<arg value=\"clojure.math\"/>"
319 "<arg value=\"clojure.spec.alpha\"/>"
320 "<arg value=\"clojure.spec.gen.alpha\"/>"
321 "<arg value=\"clojure.spec.test.alpha\"/>"
322 "<arg value=\"clojure.core.specs.alpha\"/>"))))))
323 (add-before 'build 'maven-classpath-properties
324 (lambda* (#:key inputs #:allow-other-keys)
325 (define (source-dir library)
326 (string-append (assoc-ref inputs library) "/src/main/clojure"))
327 (let* ((libraries ',(map origin-actual-file-name test-libraries))
328 (test-classpath (map source-dir libraries)))
329 (with-output-to-file "maven-classpath.properties"
330 (lambda _
331 (display "maven.compile.classpath=\n")
332 (display (string-append "maven.test.classpath="
333 (string-join test-classpath ":")
334 "\n")))))))
335 (add-before 'check 'fix-test-classpath
336 ;; Some java test files need access to compiled classes.
337 (lambda _
338 (substitute* "build.xml"
339 (("javac srcdir=\"\\$\\{jtestsrc\\}\"" cmd)
340 (string-append cmd " classpath=\"${build}\"")))))
341 (add-after 'build 'build-javadoc ant-build-javadoc)
342 (replace 'install (install-jars "./"))
343 (add-after 'install-license-files 'install-doc
344 (cut install-doc #:doc-dirs '("doc/clojure/") <...>))
345 (add-after 'install-doc 'install-javadoc
346 (install-javadoc "target/javadoc/"))
347 (add-after 'reset-gzip-timestamps 'reset-class-timestamps
348 clj:reset-class-timestamps))))
349 (native-inputs (append provided-libraries test-libraries))
350 (home-page "https://clojure.org/")
351 (synopsis "Lisp dialect running on the JVM")
352 (description "Clojure is a dynamic, general-purpose programming language,
353combining the approachability and interactive development of a scripting
354language with an efficient and robust infrastructure for multithreaded
355programming. Clojure is a compiled language, yet remains completely dynamic
356– every feature supported by Clojure is supported at runtime. Clojure
357provides easy access to the Java frameworks, with optional type hints and type
358inference, to ensure that calls to Java can avoid reflection.
359
360Clojure is a dialect of Lisp, and shares with Lisp the code-as-data philosophy
361and a powerful macro system. Clojure is predominantly a functional programming
362language, and features a rich set of immutable, persistent data structures.
363When mutable state is needed, Clojure offers a software transactional memory
364system and reactive Agent system that ensure clean, correct, multithreaded
365designs.")
366 ;; Clojure is licensed under EPL1.0
367 ;; ASM bytecode manipulation library is licensed under BSD-3
368 ;; Guava Murmur3 hash implementation is licensed under APL2.0
369 ;; src/clj/repl.clj is licensed under CPL1.0
370
371 ;; See readme.html or readme.txt for details.
372 (license (list license:epl1.0
373 license:bsd-3
374 license:asl2.0
375 license:cpl1.0)))))
376
377(define-public clojure-tools
378 (package
379 (name "clojure-tools")
380 (version "1.12.4.1582")
381 (source
382 (origin
383 (method url-fetch)
384 (uri (string-append "https://download.clojure.org/install/clojure-tools-"
385 version
386 ".tar.gz"))
387 (sha256 (base32 "08gzfblnz0zhnk6pwr9vcm6y168psgrwmqww3wqk1v7j5gr68n7x"))
388 ;; Remove AOT compiled JAR. The other JAR only contains uncompiled
389 ;; Clojure source code.
390 (snippet
391 `(delete-file ,(string-append "clojure-tools-" version ".jar")))))
392 (build-system copy-build-system)
393 (arguments
394 `(#:install-plan
395 '(("deps.edn" "lib/clojure/")
396 ("example-deps.edn" "lib/clojure/")
397 ("tools.edn" "lib/clojure/")
398 ("exec.jar" "lib/clojure/libexec/")
399 ("clojure" "bin/")
400 ("clj" "bin/"))
401 #:modules ((guix build copy-build-system)
402 (guix build utils)
403 (srfi srfi-1)
404 (ice-9 match))
405 #:phases
406 (modify-phases %standard-phases
407 (add-after 'unpack 'fix-paths
408 (lambda* (#:key outputs #:allow-other-keys)
409 (substitute* "clojure"
410 (("PREFIX") (string-append (assoc-ref outputs "out") "/lib/clojure")))
411 (substitute* "clj"
412 (("BINDIR") (string-append (assoc-ref outputs "out") "/bin"))
413 (("rlwrap") (which "rlwrap")))))
414 (add-after 'fix-paths 'copy-tools-deps-alpha-jar
415 (lambda* (#:key inputs outputs #:allow-other-keys)
416 (substitute* "clojure"
417 (("\\$install_dir/libexec/clojure-tools-\\$version\\.jar")
418 (string-join
419 (append-map (match-lambda
420 ((label . dir)
421 (find-files dir "\\.jar$")))
422 inputs)
423 ":"))))))))
424 (inputs (list rlwrap
425 clojure
426 clojure-tools-deps
427 java-commons-logging-minimal
428 java-slf4j-nop))
429 (home-page "https://clojure.org/releases/tools")
430 (synopsis "CLI tools for the Clojure programming language")
431 (description "The Clojure command line tools can be used to start a
432Clojure repl, use Clojure and Java libraries, and start Clojure programs.")
433 (license license:epl1.0)))
434
435(define-public clojure-algo-generic
436 (package
437 (name "clojure-algo-generic")
438 (version "1.0.1")
439 (source
440 (origin
441 (method git-fetch)
442 (uri (git-reference
443 (url "https://github.com/clojure/algo.generic")
444 (commit (string-append "v" version))))
445 (file-name (git-file-name name version))
446 (sha256
447 (base32 "0i10rxk5jxsw1cm2a8rsq9zgl04173cbpaj02vvc9nb4ig219a8y"))))
448 (build-system clojure-build-system)
449 (arguments
450 '(#:source-dirs '("src/main/clojure/")
451 #:test-dirs '("src/test/clojure/")
452 #:doc-dirs '()
453 #:phases
454 (modify-phases %standard-phases
455 (add-after 'unpack 'fix-import
456 (lambda _
457 (substitute*
458 "src/main/clojure/clojure/algo/generic/math_functions.clj"
459 (("clojure.algo.generic.math-functions")
460 "clojure.algo.generic.math-functions\n(:refer-clojure :exclude [abs])")))))))
461 (synopsis "Generic versions of common functions")
462 (description
463 "Generic versions of commonly used functions, implemented as multimethods
464that can be implemented for any data type.")
465 (home-page "https://github.com/clojure/algo.generic")
466 (license license:epl1.0)))
467
468(define-public clojure-algo-monads
469 (package
470 (name "clojure-algo-monads")
471 (version "0.2.1")
472 (source
473 (origin
474 (method git-fetch)
475 (uri (git-reference
476 (url "https://github.com/clojure/algo.monads")
477 (commit (string-append "v" version))))
478 (file-name (git-file-name name version))
479 (sha256
480 (base32 "1l420fzqr1mw45w1lz6iqx0s61m8w3r3ad8zmsg17cqahnfakh00"))))
481 (build-system clojure-build-system)
482 (arguments
483 '(#:source-dirs '("src/main/clojure/")
484 #:test-dirs '("src/test/clojure/")
485 #:doc-dirs '()))
486 (native-inputs
487 (list clojure-tools-macro))
488 (synopsis
489 "Monad Macros and Definitions")
490 (description
491 "This library contains the most commonly used monads as well as macros for
492defining and using monads and useful monadic functions.")
493 (home-page "https://github.com/clojure/algo.monads")
494 (license license:epl1.0)))
495
496(define-public clojure-core-async
497 (package
498 (name "clojure-core-async")
499 (version "1.8.741")
500 (home-page "https://github.com/clojure/core.async")
501 (source (origin
502 (method git-fetch)
503 (uri (git-reference
504 (url home-page)
505 (commit (string-append "v" version))))
506 (file-name (git-file-name name version))
507 (sha256
508 (base32
509 "1m6lir2xr119yxz483cz0rfw4k3a40qmmsiwl2y7kyxy65vab60z"))))
510 (build-system clojure-build-system)
511 (arguments
512 '(#:source-dirs '("src/main/clojure")
513 #:test-dirs '("src/test/clojure")
514 #:doc-dirs '()
515 #:phases
516 (modify-phases %standard-phases
517 ;; Remove ClojureScript code, we are only supporting Clojure for now.
518 (add-after 'unpack 'delete-cljs
519 (lambda _
520 (delete-file-recursively "src/main/clojure/cljs")
521 (delete-file-recursively "src/test/cljs"))))))
522 (propagated-inputs (list clojure-tools-analyzer-jvm))
523 (synopsis "Facilities for async programming and communication in Clojure")
524 (description "The core.async library adds support for asynchronous
525programming using channels to Clojure. It provides facilities for independent
526threads of activity, communicating via queue-like channels inspired by Hoare’s
527work on Communicating Sequential Processes (CSP).")
528 (license license:epl1.0)))
529
530(define-public clojure-core-cache
531 (package
532 (name "clojure-core-cache")
533 (version "1.2.249")
534 (source (origin
535 (method git-fetch)
536 (uri (git-reference
537 (url "https://github.com/clojure/core.cache")
538 (commit (string-append "v" version))))
539 (file-name (git-file-name name version))
540 (sha256
541 (base32
542 "0hdwv5dsx49i12riz3frzshwkgw26ah43667lzga2n6zgpmrh8ii"))))
543 (build-system clojure-build-system)
544 (arguments
545 '(#:source-dirs '("src/main/clojure")
546 #:test-dirs '("src/test/clojure")
547 #:doc-dirs '("docs")))
548 (propagated-inputs (list clojure-data-priority-map))
549 (synopsis "Clojure caching library")
550 (description
551 "Caching library for Clojure implementing various cache strategies such
552as First-in-first-out, Least-recently-used, Least-used, Time-to-live, Naive
553cache and Naive cache backed with soft references.")
554 (home-page "https://github.com/clojure/core.cache")
555 (license license:epl1.0)))
556
557(define-public clojure-core-match
558 (package
559 (name "clojure-core-match")
560 (version "1.1.1")
561 (source (origin
562 (method git-fetch)
563 (uri (git-reference
564 (url "https://github.com/clojure/core.match")
565 (commit (string-append "v" version))))
566 (file-name (git-file-name name version))
567 (sha256
568 (base32
569 "09kijs81js7iy810qkzn7fi996gmf7bmlm2ax571zy0yr38i2hbr"))))
570 (build-system clojure-build-system)
571 (arguments
572 '(#:source-dirs '("src/main/clojure")
573 #:test-dirs '("src/test/clojure")
574 #:doc-dirs '()))
575 (synopsis "Optimized pattern matching for Clojure")
576 (description
577 "An optimized pattern matching library for Clojure.
578It supports Clojure 1.5.1 and later as well as ClojureScript.")
579 (home-page "https://github.com/clojure/core.match")
580 (license license:epl1.0)))
581
582(define-public clojure-core-memoize
583 (package
584 (name "clojure-core-memoize")
585 (version "1.2.273")
586 (source (origin
587 (method git-fetch)
588 (uri (git-reference
589 (url "https://github.com/clojure/core.memoize")
590 (commit (string-append "v" version))))
591 (file-name (git-file-name name version))
592 (sha256
593 (base32
594 "009fj19y464an66pryygmqbnx2dqk5wkp40rbkbgkir0ax0k6j3y"))))
595 (build-system clojure-build-system)
596 (arguments
597 '(#:source-dirs '("src/main/clojure")
598 #:test-dirs '("src/test/clojure")
599 #:doc-dirs '("docs")))
600 (propagated-inputs (list clojure-core-cache))
601 (synopsis "Memoization framework for Clojure")
602 (description
603 "A manipulable, pluggable, memoization framework for Clojure implementing
604some common memoization caching strategies, such as First-in-first-out,
605Least-recently-used, Least-used and Time-to-live.")
606 (home-page "https://github.com/clojure/core.memoize")
607 (license license:epl1.0)))
608
609(define-public clojure-data-codec
610 (package
611 (name "clojure-data-codec")
612 (version "0.2.1")
613 (home-page "https://github.com/clojure/data.codec")
614 (source (origin
615 (method git-fetch)
616 (uri (git-reference
617 (url home-page)
618 (commit (string-append "v" version))))
619 (file-name (git-file-name name version))
620 (sha256
621 (base32
622 "1wxqwkbpaxjchh03lwy3ngyx6dwv7x7l1qhac42dl6bg213izil5"))))
623 (build-system clojure-build-system)
624 (arguments
625 '(#:source-dirs '("src/main/clojure")
626 #:test-dirs '("src/test/clojure")
627 #:doc-dirs '()))
628 (native-inputs (list java-commons-codec
629 clojure-test-check))
630 (synopsis "Native codec implementations for Clojure")
631 (description "Native codec implementations for Clojure. Currently only
632base64 has been implemented. Implements the standard base64 encoding
633character set, but does not yet support automatic fixed line-length encoding.
634All operations work on either byte arrays or Input/OutputStreams. Performance
635is on par with Java implementations, e.g., Apache commons-codec.")
636 (license license:epl1.0)))
637
638(define-public clojure-data-csv
639 (package
640 (name "clojure-data-csv")
641 (version "1.1.1")
642 (home-page "https://github.com/clojure/data.csv")
643 (source (origin
644 (method git-fetch)
645 (uri (git-reference
646 (url home-page)
647 (commit (string-append "v" version))))
648 (file-name (git-file-name name version))
649 (sha256
650 (base32
651 "1i43qzjn29a0xb3q54sfrn8f77nmxd0v0fn9361as07yclh8jzif"))))
652 (build-system clojure-build-system)
653 (arguments
654 '(#:source-dirs '("src/main/clojure")
655 #:test-dirs '("src/test/clojure")
656 #:doc-dirs '()))
657 (synopsis "Clojure library for reading and writing CSV data")
658 (description "@code{data.csv} is a Clojure library for reading and writing
659CSV data. @code{data.csv} follows the RFC4180 specification but is more
660relaxed.")
661 (license license:epl1.0)))
662
663(define-public clojure-data-json
664 (package
665 (name "clojure-data-json")
666 (version "2.5.2")
667 (home-page "https://github.com/clojure/data.json")
668 (source (origin
669 (method git-fetch)
670 (uri (git-reference
671 (url home-page)
672 (commit (string-append "v" version))))
673 (file-name (git-file-name name version))
674 (sha256
675 (base32
676 "0xkcd6h5g7yhr839wci6dsynmbijj9r5mrrj70gx849mkhj98411"))))
677 (build-system clojure-build-system)
678 (arguments
679 '(#:source-dirs '("src/main/clojure")
680 #:test-dirs '("src/test/clojure")
681 #:doc-dirs '()))
682 (native-inputs (list clojure-test-check))
683 (synopsis "Clojure library for reading and writing JSON data")
684 (description "@code{data.json} is a Clojure library for reading and
685writing JSON data. @code{data.xml} is compliant with the JSON spec and has no
686external dependencies")
687 (license license:epl1.0)))
688
689(define-public clojure-data-priority-map
690 (package
691 (name "clojure-data-priority-map")
692 (version "1.2.1")
693 (source (origin
694 (method git-fetch)
695 (uri (git-reference
696 (url "https://github.com/clojure/data.priority-map")
697 (commit (string-append "v" version))))
698 (file-name (git-file-name name version))
699 (sha256
700 (base32
701 "0yswqr6855n0rg0mfmjfdx0npzasm654m7sz4x0wl13grwgg220k"))))
702 (build-system clojure-build-system)
703 (arguments
704 '(#:source-dirs '("src/main/clojure")
705 #:test-dirs '("src/test/clojure")
706 #:doc-dirs '()))
707 (synopsis "Priority map implementation in Clojure")
708 (description
709 "A priority map is very similar to a sorted map, but whereas a sorted map
710produces a sequence of the entries sorted by key, a priority map produces the
711entries sorted by value. In addition to supporting all the functions a sorted
712map supports, a priority map can also be thought of as a queue of [item
713priority] pairs. To support usage as a versatile priority queue, priority
714maps also support conj/peek/pop operations.")
715 (home-page "https://github.com/clojure/data.priority-map")
716 (license license:epl1.0)))
717
718(define-public clojure-data-xml
719 (package
720 (name "clojure-data-xml")
721 (version "0.2.0-alpha10")
722 (home-page "https://github.com/clojure/data.xml")
723 (source (origin
724 (method git-fetch)
725 (uri (git-reference
726 (url home-page)
727 (commit (string-append "v" version))))
728 (file-name (git-file-name name version))
729 (sha256
730 (base32
731 "0mnhgrh20p2wwmq8a4631dkpxbgbijwi6sfhw5v784hzkjkfgkh6"))))
732 (build-system clojure-build-system)
733 (arguments
734 '(#:source-dirs '("src/main/clojure")
735 #:test-dirs '("src/test/clojure" "src/test/resources")
736 #:doc-dirs '()
737 #:phases
738 (modify-phases %standard-phases
739 (add-before 'build 'delete-cljs-tests
740 (lambda _
741 (delete-file "src/test/resources/clojure/data/xml/cljs_repl_nashorn.clj")
742 (delete-file "src/test/resources/clojure/data/xml/cljs_testsuite.clj")
743 (delete-file "src/test/clojure/clojure/data/xml/test_cljs.clj"))))))
744 (propagated-inputs (list clojure-data-codec))
745 (synopsis "Clojure library for reading and writing XML data")
746 (description "@code{data.xml} is a Clojure library for reading and writing
747XML data. @code{data.xml} has the following features:
748
749Parses XML documents into Clojure data structures
750Emits XML from Clojure data structures
751No additional dependencies if using JDK >= 1.6
752Uses StAX internally
753lazy - should allow parsing and emitting of large XML documents")
754 (license license:epl1.0)))
755
756(define-public clojure-instaparse
757 (let ((version "1.4.12"))
758 (package
759 (name "clojure-instaparse")
760 (version version)
761 (source (origin
762 (method git-fetch)
763 (uri (git-reference
764 (url "https://github.com/Engelberg/instaparse")
765 (commit (string-append "v" version))))
766 (file-name (git-file-name name version))
767 (sha256
768 (base32
769 "1xdiwsv1dc8mvrmvgs4xdqk3z6ddsammc6brhcb771yhimx8jjcr"))))
770 (build-system clojure-build-system)
771 (arguments
772 '(;; Disabled AOT, because of failing test: No implementation of
773 ;; method: :conj-flat of protocol:
774 ;; #'instaparse.auto-flatten-seq/ConjFlat found for class:
775 ;; instaparse.auto_flatten_seq.AutoFlattenSeq
776 #:aot-exclude '(#:all)
777 #:doc-dirs '("docs/")
778 #:phases
779 (modify-phases %standard-phases
780 (add-after 'unpack 'fix-import
781 (lambda _
782 (substitute*
783 "test/instaparse/defparser_test.cljc"
784 (("AssertionError")
785 "Exception")))))))
786 (synopsis "No grammar left behind")
787 (description
788 "Instaparse aims to be the simplest way to build parsers in Clojure.
789
790@itemize
791@item Turns @emph{standard EBNF or ABNF notation} for context-free grammars
792into an executable parser that takes a string as an input and produces a parse
793tree for that string.
794
795@item @dfn{No Grammar Left Behind}: Works for @emph{any} context-free grammar,
796including @emph{left-recursive}, @emph{right-recursive}, and @emph{ambiguous}
797grammars.
798
799@item Extends the power of context-free grammars with PEG-like syntax for
800lookahead and negative lookahead.
801
802@item Supports both of Clojure's most popular tree formats (hiccup and enlive)
803as output targets
804
805@item Detailed reporting of parse errors.
806
807@item Optionally produces lazy sequence of all parses (especially useful for
808diagnosing and debugging ambiguous grammars).
809
810@item ``Total parsing'' mode where leftover string is embedded in the parse
811tree.
812
813@item Optional combinator library for building grammars programmatically.
814
815@item Performant.
816@end itemize")
817 (home-page "https://github.com/Engelberg/instaparse")
818 (license license:epl1.0))))
819
820(define-public clojure-tools-analyzer
821 (package
822 (name "clojure-tools-analyzer")
823 (version "1.2.1")
824 (home-page "https://github.com/clojure/tools.analyzer")
825 (source (origin
826 (method git-fetch)
827 (uri (git-reference
828 (url home-page)
829 (commit (string-append "v" version))))
830 (file-name (git-file-name name version))
831 (sha256
832 (base32
833 "0apa3gc45rmdj19plbvglpj6i9dadkgvvidj5mcnkzi9y3h0nr27"))))
834 (build-system clojure-build-system)
835 (arguments
836 '(#:source-dirs '("src/main/clojure")
837 #:test-dirs '("src/test/clojure")
838 #:doc-dirs '()))
839 (synopsis "Analyzer for Clojure code")
840 (description "Analyzer for Clojure code, written in Clojure, which
841produces an abstract syntax tree in the EDN ( Extensible Data Notation)
842format.")
843 (license license:epl1.0)))
844
845(define-public clojure-tools-analyzer-jvm
846 (package
847 (name "clojure-tools-analyzer-jvm")
848 (version "1.3.4")
849 (home-page "https://github.com/clojure/tools.analyzer.jvm")
850 (source (origin
851 (method git-fetch)
852 (uri (git-reference
853 (url home-page)
854 (commit (string-append "v" version))))
855 (file-name (git-file-name name version))
856 (sha256
857 (base32
858 "0pk9z8zf9bgzj0wi98yx130l7570arnxfsg9508g1jvq83djpn21"))))
859 (build-system clojure-build-system)
860 (arguments
861 '(#:source-dirs '("src/main/clojure")
862 #:test-dirs '("src/test/clojure")
863 #:doc-dirs '("docs")))
864 (propagated-inputs (list clojure-tools-analyzer
865 clojure-tools-reader
866 clojure-core-memoize
867 java-asm))
868 (synopsis "Analyzer for Clojure code targeting the JVM")
869 (description "Analyzer for Clojure code, written on top of
870tools.analyzer, providing additional JVM-specific passes.")
871 (license license:epl1.0)))
872
873(define-public clojure-tools-macro
874 (package
875 (name "clojure-tools-macro")
876 (version "0.2.2")
877 (source
878 (origin
879 (method git-fetch)
880 (uri (git-reference
881 (url "https://github.com/clojure/tools.macro")
882 (commit (string-append "v" version))))
883 (file-name (git-file-name name version))
884 (sha256
885 (base32 "09xxp5vpf86akmn95mvjmd34a1pc48cjxbp6q4lvi3q8rhpkjfd5"))))
886 (build-system clojure-build-system)
887 (arguments
888 '(#:source-dirs '("src/main/clojure/")
889 #:test-dirs '("src/test/clojure/")
890 #:doc-dirs '()))
891 (synopsis "Utilities for macro writers")
892 (description "Tools for writing macros.")
893 (home-page "https://github.com/clojure/tools.macro")
894 (license license:epl1.0)))
895
896(define-public clojure-tools-cli
897 (package
898 (name "clojure-tools-cli")
899 (version "1.3.250")
900 (home-page "https://github.com/clojure/tools.cli")
901 (source (origin
902 (method git-fetch)
903 (uri (git-reference
904 (url home-page)
905 (commit (string-append "v" version))))
906 (file-name (git-file-name name version))
907 (sha256
908 (base32 "1nyw33w83gd7xlbpma03p4jwcdcp38h8y99x2rqw4zcnw19gsz4p"))))
909 (build-system clojure-build-system)
910 (arguments
911 '(#:source-dirs '("src/main/clojure/")
912 #:test-dirs '("src/test/clojure/")
913 #:doc-dirs '()))
914 (synopsis "Clojure library for working with command-line arguments")
915 (description
916 "The @code{tools.cli} library provides Clojure programmers with tools to
917work with command-line arguments.")
918 (license license:epl1.0)))
919
920(define-public clojure-tools-deps
921 (package
922 (name "clojure-tools-deps")
923 (version "0.28.1569")
924 (home-page "https://github.com/clojure/tools.deps")
925 (source (origin
926 (method git-fetch)
927 (uri (git-reference
928 (url home-page)
929 (commit (string-append "v" version))))
930 (file-name (git-file-name name version))
931 (sha256
932 (base32
933 "04s8cishxm1y4vnx8mpdk1qma6j0khmb356j69fsy14s615yjgfg"))))
934 (build-system clojure-build-system)
935 (arguments
936 `(#:source-dirs '("src/main/clojure" "src/main/resources")
937 #:java-source-dirs '("src/main/java")
938 #:test-dirs '("src/test/clojure")
939 #:doc-dirs '()
940 ;; FIXME: Could not initialize class
941 ;; org.eclipse.aether.transport.http.SslSocketFactory
942 #:tests? #f
943 #:phases
944 (modify-phases %standard-phases
945 (add-before 'build 'reference-clojure-jar-input
946 ;; Use static clojure jar from build input at runtime by default.
947 (lambda* (#:key inputs #:allow-other-keys)
948 (substitute* "src/main/resources/clojure/tools/deps/deps.edn"
949 (("org\\.clojure/clojure.*$")
950 (string-append "org.clojure/clojure {:local/root \""
951 (assoc-ref inputs "clojure")
952 "/share/java/clojure.jar\"}"))))))))
953 (propagated-inputs (list maven-resolver-api
954 maven-resolver-spi
955 maven-resolver-impl
956 maven-resolver-util
957 maven-resolver-connector-basic
958 maven-resolver-provider
959 maven-core
960 maven-resolver-transport-http
961 maven-resolver-transport-file
962 clojure-tools-gitlibs
963 clojure-tools-cli
964 clojure-data-xml
965 cognitect-aws-api))
966 (synopsis "Clojure library supporting clojure-tools")
967 (description "This package provides a functional API for transitive
968dependency graph expansion and the creation of classpaths.")
969 (license license:epl1.0)))
970
971(define-public clojure-tools-deps-alpha
972 ;; this was superseded by clojure-tools-deps
973 ;; https://github.com/clojure/tools.deps.alpha
974 ;; Keeping it to give downstream packages a chance to upgrade
975 (package
976 (name "clojure-tools-deps-alpha")
977 (version "0.15.1254")
978 (home-page "https://github.com/clojure/tools.deps.alpha")
979 (source (origin
980 (method git-fetch)
981 (uri (git-reference
982 (url home-page)
983 (commit (string-append "v" version))))
984 (file-name (git-file-name name version))
985 (sha256
986 (base32
987 "17zvizzw637az7facwipsrg9b1kjci03aycg6w5pnjpg6b6nd5m6"))))
988 (build-system clojure-build-system)
989 (arguments
990 `(#:source-dirs '("src/main/clojure" "src/main/resources")
991 #:test-dirs '("src/test/clojure")
992 #:doc-dirs '()
993 ;; FIXME: Could not initialize class org.eclipse.aether.transport.http.SslSocketFactory
994 #:tests? #f
995 #:phases
996 (modify-phases %standard-phases
997 ;; FIXME: Currently, the S3 transporter depends on ClojureScript,
998 ;; which is very difficult to package due to dependencies on Java
999 ;; libraries with non-standard build systems. Instead of actually
1000 ;; packaging these libraries, we just remove the S3 transporter that
1001 ;; depends on them.
1002 (add-after 'unpack 'remove-s3-transporter
1003 (lambda _
1004 (for-each delete-file
1005 (list
1006 (string-append
1007 "src/main/clojure/clojure/"
1008 "tools/deps/alpha/util/s3_aws_client.clj")
1009 (string-append
1010 "src/main/clojure/clojure/"
1011 "tools/deps/alpha/util/s3_transporter.clj")
1012 (string-append
1013 "src/test/clojure/clojure/"
1014 "tools/deps/alpha/util/test_s3_transporter.clj")))
1015 (substitute*
1016 "src/main/clojure/clojure/tools/deps/alpha/util/maven.clj"
1017 (("clojure.tools.deps.alpha.util.s3-transporter")
1018 "")))))))
1019 (propagated-inputs (list maven-resolver-api
1020 maven-resolver-spi
1021 maven-resolver-impl
1022 maven-resolver-util
1023 maven-resolver-connector-basic
1024 maven-resolver-provider
1025 maven-core
1026 maven-resolver-transport-http
1027 maven-resolver-transport-file
1028 clojure-tools-gitlibs
1029 clojure-tools-cli
1030 clojure-data-xml))
1031 (synopsis "Clojure library supporting clojure-tools")
1032 (description "This package provides a functional API for transitive
1033dependency graph expansion and the creation of classpaths.")
1034 (license license:epl1.0)))
1035
1036(define-public clojure-tools-gitlibs
1037 (package
1038 (name "clojure-tools-gitlibs")
1039 (version "2.6.212")
1040 (home-page "https://github.com/clojure/tools.gitlibs")
1041 (source (origin
1042 (method git-fetch)
1043 (uri (git-reference
1044 (url home-page)
1045 (commit (string-append "v" version))))
1046 (file-name (git-file-name name version))
1047 (sha256
1048 (base32
1049 "199n58dwh44rlb0m514swh6zx3flckq3lccxv9dwbypbv29n9ghq"))))
1050 (build-system clojure-build-system)
1051 (arguments
1052 '(#:source-dirs '("src/main/clojure")
1053 #:test-dirs '("src/test/clojure")
1054 #:doc-dirs '()
1055 ;; Tests attempt to clone git repositories from the internet.
1056 #:tests? #f))
1057 (synopsis "Retrieve, cache, and programmatically access git libraries")
1058 (description "To access git dependencies (for example, via
1059@code{tools.deps}), one must download git directories and working trees as
1060indicated by git SHAs. This library provides this functionality and also
1061keeps a cache of git directories and working trees that can be reused.")
1062 (license license:epl1.0)))
1063
1064(define-public clojure-tools-logging
1065 (package
1066 (name "clojure-tools-logging")
1067 (version "1.3.1")
1068 (home-page "https://github.com/clojure/tools.logging")
1069 (source (origin
1070 (method git-fetch)
1071 (uri (git-reference
1072 (url home-page)
1073 (commit (string-append "v" version))))
1074 (file-name (git-file-name name version))
1075 (sha256
1076 (base32
1077 "1jdk7b6zm73m7nki76123ik6px9rl5g5wb06298v34h56qyck8lr"))))
1078 (build-system clojure-build-system)
1079 (arguments
1080 '(#:doc-dirs '()
1081 #:source-dirs '("src/main/clojure")
1082 #:test-dirs '("src/test/clojure")
1083 #:phases
1084 (modify-phases %standard-phases
1085 ;; These tests should throw a ClassCastException, but they don't
1086 ;; under AOT. Adjust them :/
1087 (add-after 'unpack 'disable-failing-tests
1088 (lambda _
1089 (substitute* (string-append "src/test/clojure/clojure/tools"
1090 "/logging/test_readable.clj")
1091 (((string-append "\\(thrown\\? ClassCastException \\(logf "
1092 ":debug \\(Exception\\.\\)\\)\\)"))
1093 "(nil? (logf :debug (Exception.)))"))
1094 (substitute* "src/test/clojure/clojure/tools/test_logging.clj"
1095 (((string-append "\\(thrown\\? ClassCastException \\(logf "
1096 ":debug \\(Exception\\.\\)\\)\\)"))
1097 "(nil? (logf :debug (Exception.)))")))))))
1098 (native-inputs
1099 (list java-commons-logging-minimal
1100 java-log4j-1.2-api
1101 java-log4j-api
1102 java-log4j-core
1103 java-slf4j-api
1104 java-slf4j-simple))
1105 (synopsis "Clojure logging library")
1106 (description "Logging macros which delegate to a specific logging
1107implementation, selected at runtime when the clojure.tools.logging namespace
1108is first loaded.")
1109 (license license:epl1.0)))
1110
1111(define-public http-kit
1112 (package
1113 (name "http-kit")
1114 (version "2.8.1")
1115 (source (origin
1116 (method git-fetch)
1117 (uri (git-reference
1118 (url "https://github.com/http-kit/http-kit")
1119 (commit (string-append "v" version))))
1120 (file-name (git-file-name name version))
1121 (sha256
1122 (base32
1123 "1fqfl7a7ygfw43xjmmlwrl55xbz34qxpzc8230bpqvjh9n417h74"))))
1124 (build-system clojure-build-system)
1125 (arguments
1126 '(#:java-source-dirs '("src/java")
1127 #:source-dirs '("src")
1128 #:doc-dirs '()
1129 #:tests? #f)) ;XXX: too many unpackaged dependencies
1130 (synopsis
1131 "High-performance, event-driven HTTP client and server for Clojure")
1132 (description "This package provides a minimalist, event-driven,
1133high-performance Clojure HTTP client and server library with WebSocket and
1134asynchronous support.")
1135 (home-page "https://github.com/http-kit/http-kit")
1136 (license license:asl2.0)))
1137
1138(define-public cognitect-aws-api
1139 (package
1140 (name "cognitect-aws-api")
1141 (version "0.8.774")
1142 (source (origin
1143 (method git-fetch)
1144 (uri (git-reference
1145 (url "https://github.com/cognitect-labs/aws-api")
1146 (commit (string-append "v" version))))
1147 (file-name (git-file-name name version))
1148 (sha256
1149 (base32
1150 "1y3impishicd8niy1vddx6c80pnbpz24zfr7vysi4r56p1vqnwmb"))
1151 (modules '((guix build utils)))
1152 (snippet
1153 '(begin
1154 (for-each delete-file
1155 (list
1156 ;; Require Cognitect http client
1157 "src/cognitect/aws/http/cognitect.clj"
1158 ;; Requires Babashka.
1159 "test/src/bb_test_runner.clj"
1160 ;; Requires AWS Java SDK v2.
1161 "test/src/cognitect/aws/jdk_v2.clj"
1162 "test/src/cognitect/aws/signers_test.clj"
1163 ;; Remove integration tests.
1164 "test/src/cognitect/aws/client/shared_test.clj"
1165 "test/src/cognitect/aws/api_test.clj"
1166 "test/src/cognitect/client/impl_test.clj"
1167 "test/src/cognitect/client/test_double_test.clj"))
1168 ;; Remove integration tests
1169 (delete-file-recursively "test/src/cognitect/aws/integration")))))
1170 (build-system clojure-build-system)
1171 (propagated-inputs (list clojure-core-async
1172 clojure-tools-logging
1173 clojure-data-json
1174 clojure-data-xml))
1175 (native-inputs (list clojure-test-check
1176 http-kit))
1177 (arguments `(#:source-dirs '("src")
1178 #:doc-dirs '()
1179 #:test-dirs '("test/src" "test/resources")
1180 ;; Allow using java.net.http client.
1181 #:jdk ,openjdk11))
1182 (synopsis
1183 "Programmatic access to AWS services from Clojure programs")
1184 (description
1185 "This package is an idiomatic, data-oriented Clojure library for invoking AWS
1186APIs. While the library offers some helper and documentation functions you'll
1187use at development time, the only functions you ever need at runtime are
1188client, which creates a client for a given service and invoke, which invokes
1189an operation on the service. invoke takes a map and returns a map, and works
1190the same way for every operation on every service.")
1191 (home-page "https://github.com/cognitect-labs/aws-api")
1192 (license license:asl2.0)))