projects/guix·blob librewolf-updates · refs

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