gnu: emacs-consult: Fix grammar.
[jackhill/guix/guix.git] / gnu / packages / groovy.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2018 Julien Lepiller <julien@lepiller.eu>
3 ;;; Copyright © 2019 Tobias Geerinck-Rice <me@tobias.gr>
4 ;;;
5 ;;; This file is part of GNU Guix.
6 ;;;
7 ;;; GNU Guix is free software; you can redistribute it and/or modify it
8 ;;; under the terms of the GNU General Public License as published by
9 ;;; the Free Software Foundation; either version 3 of the License, or (at
10 ;;; your option) any later version.
11 ;;;
12 ;;; GNU Guix is distributed in the hope that it will be useful, but
13 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
14 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 ;;; GNU General Public License for more details.
16 ;;;
17 ;;; You should have received a copy of the GNU General Public License
18 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
19
20 (define-module (gnu packages groovy)
21 #:use-module ((guix licenses) #:prefix license:)
22 #:use-module (guix packages)
23 #:use-module (guix download)
24 #:use-module (guix git-download)
25 #:use-module (guix utils)
26 #:use-module (guix build-system ant)
27 #:use-module (gnu packages)
28 #:use-module (gnu packages java)
29 #:use-module (gnu packages xml))
30
31 (define java-groovy-bootstrap
32 (package
33 (name "java-groovy-bootstrap")
34 (version "3.0.5")
35 (source
36 (origin
37 (method git-fetch)
38 (uri (git-reference
39 (url "https://github.com/apache/groovy")
40 (commit (string-append
41 "GROOVY_"
42 (string-map (lambda (x) (if (eq? x #\.) #\_ x))
43 version)))))
44 (file-name (git-file-name name version))
45 (sha256
46 (base32 "00556qxjmcn3a3xhfy6n0zw3d69mnw72vzm2rb6n4ihzkk7579nm"))
47 (patches
48 (search-patches "groovy-add-exceptionutilsgenerator.patch"))))
49 (build-system ant-build-system)
50 (arguments
51 `(#:jar-name "groovy.jar"
52 #:source-dir "src/main/java:src/main/antlr2:subprojects/parser-antlr4/src/main/java:src/antlr"
53 #:test-dir "src/test"
54 #:tests? #f
55 #:jdk ,openjdk9
56 #:main-class "groovy.ui.GroovyMain"
57 #:phases
58 (modify-phases %standard-phases
59 (add-before 'build 'generate-parsers
60 (lambda _
61 (with-directory-excursion "src/main/antlr2/org/codehaus/groovy/antlr/java"
62 (invoke "antlr" "java.g"))
63 (with-directory-excursion "src/main/antlr2/org/codehaus/groovy/antlr"
64 (mkdir "parser")
65 (with-directory-excursion "parser"
66 (invoke "antlr" "../groovy.g")))
67 (invoke "antlr4" "-lib" "src/antlr"
68 "-package" "org.apache.groovy.parser.antlr4"
69 "-visitor" "-no-listener" "src/antlr/GroovyLexer.g4")
70 (invoke "antlr4" "-lib" "src/antlr"
71 "-package" "org.apache.groovy.parser.antlr4"
72 "-visitor" "-no-listener" "src/antlr/GroovyParser.g4")
73 #t))
74 (add-before 'build 'generate-exception-utils
75 (lambda _
76 (invoke "javac" "-cp" (getenv "CLASSPATH")
77 "-source" "1.8" "-target" "1.8"
78 "config/ant/src/org/codehaus/groovy/ExceptionUtilsGenerator.java")
79 (invoke "java" "-cp" (string-append (getenv "CLASSPATH")
80 ":config/ant/src")
81 "org.codehaus.groovy.ExceptionUtilsGenerator"
82 "build/classes/org/codehaus/groovy/runtime/ExceptionUtils.class")
83 #t))
84 (add-before 'build 'set-source-level
85 (lambda _
86 (substitute* "build.xml"
87 (("<javac") "<javac source=\"1.8\" target=\"1.8\""))
88 #t)))))
89 (native-inputs
90 `(("antlr2" ,antlr2)
91 ("antlr4" ,java-tunnelvisionlabs-antlr4)
92 ("java-jsr305" ,java-jsr305)
93 ("java-junit" ,java-junit)
94 ("java-hamcrest-core" ,java-hamcrest-core)
95 ("java-jmock-1" ,java-jmock-1)
96 ("java-xmlunit-legacy" ,java-xmlunit-legacy)))
97 (inputs
98 `(("java-antlr4-runtime" ,java-tunnelvisionlabs-antlr4-runtime)
99 ("java-antlr4-runtime-annotations"
100 ,java-tunnelvisionlabs-antlr4-runtime-annotations)
101 ("java-asm" ,java-asm-8)
102 ("java-asm-util" ,java-asm-util-8)
103 ("java-classpathx-servletapi" ,java-classpathx-servletapi)
104 ("java-commons-cli" ,java-commons-cli)
105 ("java-jansi" ,java-jansi)
106 ("java-jline-2" ,java-jline-2)
107 ("java-picocli" ,java-picocli)
108 ("java-xstream" ,java-xstream)))
109 (home-page "http://groovy-lang.org/")
110 (synopsis "Groovy's java bootstrap")
111 (description "This package contains the java bootstrap that is used to build
112 groovy submodules.")
113 (license license:asl2.0)))
114
115 (define groovy-bootstrap
116 (package
117 (inherit java-groovy-bootstrap)
118 (name "groovy-bootstrap")
119 (arguments
120 `(#:jar-name "groovy.jar"
121 #:jdk ,openjdk9
122 ;Requires groovy-xml and logback-classic which are circular dependencies
123 #:tests? #f
124 #:phases
125 (modify-phases %standard-phases
126 (add-before 'build 'generate-parser
127 (lambda _
128 (with-directory-excursion "src/main/antlr2/org/codehaus/groovy/antlr/java"
129 (invoke "antlr" "java.g"))
130 (with-directory-excursion "src/main/antlr2/org/codehaus/groovy/antlr"
131 (mkdir "parser")
132 (with-directory-excursion "parser"
133 (invoke "antlr" "../groovy.g")))
134 (invoke "antlr4" "-lib" "src/antlr"
135 "-package" "org.apache.groovy.parser.antlr4"
136 "-visitor" "-no-listener" "src/antlr/GroovyLexer.g4")
137 (invoke "antlr4" "-lib" "src/antlr"
138 "-package" "org.apache.groovy.parser.antlr4"
139 "-visitor" "-no-listener" "src/antlr/GroovyParser.g4")
140 #t))
141 (add-before 'build 'generate-exception-utils
142 (lambda _
143 (invoke "javac" "-cp" (getenv "CLASSPATH")
144 "config/ant/src/org/codehaus/groovy/ExceptionUtilsGenerator.java")
145 (invoke "java" "-cp" (string-append (getenv "CLASSPATH")
146 ":config/ant/src")
147 "org.codehaus.groovy.ExceptionUtilsGenerator"
148 "target/classes/org/codehaus/groovy/runtime/ExceptionUtils.class")
149 #t))
150 (add-before 'build 'generate-dgminfo
151 (lambda _
152 (mkdir-p "target/classes/org/codehaus/groovy/runtime")
153 (mkdir-p "target/classes/META-INF")
154 (invoke "javac" "-cp" (getenv "CLASSPATH")
155 "src/main/java/org/codehaus/groovy/tools/DgmConverter.java")
156 (invoke "java" "-cp" (string-append (getenv "CLASSPATH")
157 ":src/main/java")
158 "org.codehaus.groovy.tools.DgmConverter")
159 #t))
160 (add-before 'build 'copy-resources
161 (lambda _
162 (with-directory-excursion "src/main/java"
163 (for-each (lambda (file)
164 (mkdir-p (string-append "../../../target/classes/"
165 (dirname file)))
166 (copy-file file
167 (string-append "../../../target/classes/"
168 file)))
169 (find-files "." ".*.(txt|properties|xml|html)")))
170 #t))
171 (replace 'build
172 (lambda _
173 (mkdir-p "build/jar")
174 (apply invoke "java" "-cp" (getenv "CLASSPATH")
175 "org.codehaus.groovy.tools.FileSystemCompiler"
176 "-cp" (getenv "CLASSPATH")
177 "-d" "target/classes"
178 "-j"; joint compilation
179 (find-files "src/main"
180 ".*\\.(groovy|java)$"))
181 (invoke "jar" "-cf" "build/jar/groovy.jar"
182 "-C" "target/classes" ".")
183 #t)))))
184 (inputs
185 `(("java-apache-ivy" ,java-apache-ivy)
186 ,@(package-inputs java-groovy-bootstrap)))
187 (native-inputs
188 `(("java-groovy-bootstrap" ,java-groovy-bootstrap)
189 ,@(package-native-inputs java-groovy-bootstrap)))
190 (synopsis "Groovy compiler")
191 (description "This package contains the first version of the Groovy compiler.
192 Although already usable, it doesn't contain the groovy library yet. This package
193 is used to build the groovy submodules written in groovy.")))
194
195 (define groovy-tests-bootstrap
196 (package
197 (inherit groovy-bootstrap)
198 (name "groovy-tests-bootstrap")
199 (arguments
200 `(#:jar-name "groovy-tests-bootstrap.jar"
201 #:jdk ,openjdk9
202 #:tests? #f; no tests
203 #:phases
204 (modify-phases %standard-phases
205 (replace 'build
206 (lambda _
207 (mkdir-p "build/classes")
208 (mkdir-p "build/jar")
209 (apply invoke "java" "-cp" (getenv "CLASSPATH")
210 "org.codehaus.groovy.tools.FileSystemCompiler"
211 "-cp" (getenv "CLASSPATH")
212 "-d" "build/classes"
213 "-j"; joint compilation
214 (append
215 (find-files "src/test" "TestSupport.java")
216 (find-files "src/test" "HeadlessTestSupport.java")
217 (find-files "src/test" "AstAssert.groovy")
218 (find-files "src/test" "XmlAssert.java")))
219 (invoke "jar" "-cf" "build/jar/groovy-tests-bootstrap.jar"
220 "-C" "build/classes" ".")
221 #t)))))
222 (inputs
223 `(("groovy-test" ,groovy-test)
224 ("groovy-parser-antlr4" ,groovy-parser-antlr4)
225 ,@(package-inputs groovy-bootstrap)))
226 (native-inputs
227 `(("groovy-bootstrap" ,groovy-bootstrap)
228 ,@(package-native-inputs java-groovy-bootstrap)))
229 (synopsis "Groovy test classes")
230 (description "This package contains three classes required for testing
231 other groovy submodules.")))
232
233 (define (groovy-subproject name)
234 (package
235 (inherit groovy-bootstrap)
236 (name name)
237 (arguments
238 `(#:jar-name ,(string-append name ".jar")
239 #:test-dir ,(string-append name "/src/test")
240 #:test-include (list "**/*Test.java" "**/*.groovy")
241 #:jdk ,openjdk9
242 #:phases
243 (modify-phases %standard-phases
244 (replace 'build
245 (lambda _
246 (mkdir-p "build/classes")
247 (mkdir-p "build/jar")
248 (apply invoke "java" "-cp" (getenv "CLASSPATH")
249 "org.codehaus.groovy.tools.FileSystemCompiler"
250 "-cp" (getenv "CLASSPATH")
251 "-d" "build/classes" "-j"
252 (append
253 (find-files ,(string-append "subprojects/" name "/src/main/java")
254 ".*\\.(groovy|java)$")
255 (find-files ,(string-append "subprojects/" name "/src/main/groovy")
256 ".*\\.(groovy|java)$")))
257 (invoke "jar" "-cf" ,(string-append "build/jar/" name ".jar")
258 "-C" "build/classes" ".")
259 #t))
260 (add-before 'build 'copy-resources
261 (lambda _
262 (let ((resource-dir ,(string-append "subprojects/" name
263 "/src/main/resources")))
264 (when (file-exists? resource-dir)
265 (copy-recursively resource-dir "build/classes")))
266 #t))
267 (replace 'check
268 (lambda* (#:key tests? #:allow-other-keys)
269 (when tests?
270 (mkdir-p "build/test-classes")
271 (substitute* "build.xml"
272 (("depends=\"compile-tests\"") "depends=\"\"")
273 (("}/java") "}/"))
274 (apply invoke "java" "-cp"
275 (string-append (getenv "CLASSPATH") ":build/classes")
276 "org.codehaus.groovy.tools.FileSystemCompiler" "-cp"
277 (string-append (getenv "CLASSPATH") ":build/classes")
278 "-d" "build/test-classes" "-j"
279 (append
280 (find-files ,(string-append "subprojects/" name "/src/test/java")
281 ".*\\.(groovy|java)$")
282 (find-files ,(string-append "subprojects/" name "/src/test/groovy")
283 ".*\\.(groovy|java)$")))
284 (invoke "ant" "check"))
285 #t)))))))
286
287 (define groovy-parser-antlr4
288 (let ((base (groovy-subproject "parser-antlr4")))
289 (package
290 (inherit base)
291 (name "groovy-parser-antlr4")
292 (arguments
293 `(#:tests? #f
294 ,@(substitute-keyword-arguments (package-arguments base)
295 ((#:phases phases)
296 `(modify-phases ,phases
297 (add-before 'build 'generate-parser
298 (lambda _
299 (invoke "antlr4" "-lib" "src/antlr"
300 "-package" "org.apache.groovy.parser.antlr4"
301 "-visitor" "-no-listener" "src/antlr/GroovyLexer.g4")
302 (invoke "antlr4" "-lib" "src/antlr"
303 "-package" "org.apache.groovy.parser.antlr4"
304 "-visitor" "-no-listener" "src/antlr/GroovyParser.g4")
305 (for-each
306 (lambda (file)
307 (install-file file
308 "subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4"))
309 (find-files "src/antlr" ".*.java$"))
310 #t)))))))
311 (native-inputs
312 `(("groovy-bootstrap" ,groovy-bootstrap)
313 ,@(package-native-inputs java-groovy-bootstrap)))
314 (synopsis "Groovy antlr4 parser submodule")
315 (description "This package contains the new parser Parrot for Groovy, which
316 is based on Antlr4. The new parser can parse Groovy source code and construct
317 the related AST, which is almost identical to the one generated by the old
318 parser. Currently all features of Groovy are available."))))
319
320 (define groovy-test
321 (let ((base (groovy-subproject "groovy-test")))
322 (package
323 (inherit base)
324 (arguments
325 `(;#:tests? #f
326 ,@(package-arguments base)))
327 (synopsis "Groovy test submodule")
328 (description "This package contains the test submodules used to test
329 other groovy submodules."))))
330
331 (define groovy-xml
332 (let ((base (groovy-subproject "groovy-xml")))
333 (package
334 (inherit base)
335 (native-inputs
336 `(("groovy-test" ,groovy-test)
337 ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
338 ,@(package-native-inputs base)))
339 (inputs
340 `(("groovy-parser-antlr4" ,groovy-parser-antlr4)
341 ,@(package-inputs base)))
342 (synopsis "Groovy XML")
343 (description "This package contains XML-related utilities for groovy."))))
344
345 (define groovy-templates
346 (let ((base (groovy-subproject "groovy-templates")))
347 (package
348 (inherit base)
349 (arguments
350 `(#:tests? #f;Requires spock-framework which is a circular dependency
351 ,@(substitute-keyword-arguments (package-arguments base)
352 ((#:phases phases)
353 `(modify-phases ,phases
354 ;; These annotations are used for QA, but do not affect build output.
355 ;; They require findbugs, which we don't have yet.
356 (add-before 'build 'remove-annotation
357 (lambda _
358 (substitute* '("subprojects/groovy-templates/src/main/groovy/groovy/text/StreamingTemplateEngine.java"
359 "subprojects/groovy-templates/src/main/groovy/groovy/text/TemplateEngine.java")
360 (("import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;") "")
361 (("@SuppressFBWarnings.*") ""))
362 #t)))))))
363 (inputs
364 `(("groovy-xml" ,groovy-xml)
365 ,@(package-inputs base)))
366 (native-inputs
367 `(("groovy-bootstrap" ,groovy-bootstrap)
368 ("groovy-test" ,groovy-test)
369 ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
370 ,@(package-native-inputs base)))
371 (synopsis "Groovy template engine")
372 (description "This package contains a template framework which is
373 well-suited to applications where the text to be generated follows the form of
374 a static template."))))
375
376 (define groovy-groovydoc
377 (let ((base (groovy-subproject "groovy-groovydoc")))
378 (package
379 (inherit base)
380 (arguments
381 `(#:tests? #f; Requires groovy-ant which is a circular dependency
382 ,@(package-arguments base)))
383 (inputs
384 `(("groovy-templates" ,groovy-templates)
385 ("groovy-parser-antlr4" ,groovy-parser-antlr4)
386 ("java-javaparser" ,java-javaparser)
387 ,@(package-inputs groovy-bootstrap)))
388 (native-inputs
389 `(("groovy-bootstrap" ,groovy-bootstrap)
390 ("groovy-test" ,groovy-test)
391 ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
392 ,@(package-native-inputs java-groovy-bootstrap)))
393 (synopsis "Groovy documentation generation")
394 (description "This package contains the groovy documentation generator,
395 similar to javadoc."))))
396
397 (define groovy-ant
398 (let ((base (groovy-subproject "groovy-ant")))
399 (package
400 (inherit base)
401 (arguments
402 `(;#:tests? #f;Requires spock-framework which is a circular dependency
403 #:ant ,ant/java8; ant is actually a dependency of this package, and we need 1.10
404 ,@(substitute-keyword-arguments (package-arguments base)
405 ((#:phases phases)
406 `(modify-phases ,phases
407 ;; These annotations are used for QA, but do not affect build output.
408 ;; They require findbugs, which we don't have yet.
409 (add-before 'build 'remove-annotation
410 (lambda _
411 (substitute* (find-files "subprojects/groovy-ant"
412 ".*.java$")
413 (("import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;") "")
414 (("@SuppressFBWarnings.*") ""))
415 #t)))))))
416 (inputs
417 `(("groovy-groovydoc" ,groovy-groovydoc)
418 ("java-asm-tree" ,java-asm-tree-8)
419 ("java-asm-analysis" ,java-asm-analysis-8)
420 ,@(package-inputs base)))
421 (native-inputs
422 `(("ant-junit" ,ant-junit)
423 ("groovy-bootstrap" ,groovy-bootstrap)
424 ("groovy-xml" ,groovy-xml)
425 ("groovy-test" ,groovy-test)
426 ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
427 ,@(package-native-inputs base)))
428 (synopsis "Groovy ant tasks")
429 (description "This package contains groovy-related ant tasks definitions."))))
430
431 (define groovy-astbuilder
432 (let ((base (groovy-subproject "groovy-astbuilder")))
433 (package
434 (inherit base)
435 (arguments
436 (substitute-keyword-arguments (package-arguments base)
437 ((#:phases phases)
438 `(modify-phases ,phases
439 (delete 'copy-resources)
440 (add-after 'build 'copy-resources
441 (lambda _
442 (copy-recursively
443 "subprojects/groovy-astbuilder/src/main/resources"
444 "build/classes")
445 (substitute* "build.xml"
446 (("depends=\"compile,") "depends=\""))
447 (invoke "ant" "jar")
448 #t))))))
449 (inputs
450 `(("groovy-bootstrap" ,groovy-bootstrap)
451 ,@(package-inputs base)))
452 (native-inputs
453 `(("groovy-test" ,groovy-test)
454 ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
455 ,@(package-native-inputs base)))
456 (synopsis "Transformation to capture ASTBuilder from code statements")
457 (description "This package contains an AST transformation for use with
458 ASTBuilder when building \"from string\" Groovy statements."))))
459
460 (define groovy-bsf
461 (let ((base (groovy-subproject "groovy-bsf")))
462 (package
463 (inherit base)
464 (arguments
465 `(#:test-exclude (list
466 ;; exception from Groovy: org.codehaus.groovy.runtime.InvokerInvocationException:
467 ;; groovy.lang.MissingMethodException: No signature of method:
468 ;; java.util.ArrayList.each() is applicable for argument types:
469 ;; (groovy.script.MapFromList$_doit_closure1) values:
470 ;; [groovy.script.MapFromList$_doit_closure1@17e554d5]
471 "**/BSFTest.java")
472 ,@(package-arguments base)))
473 (inputs
474 `(("java-commons-bsf" ,java-commons-bsf)
475 ,@(package-inputs base)))
476 (native-inputs
477 `(("groovy-bootstrap" ,groovy-bootstrap)
478 ("groovy-test" ,groovy-test)
479 ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
480 ("java-commons-logging-minimal" ,java-commons-logging-minimal)
481 ,@(package-native-inputs base)))
482 (synopsis "Groovy BSF engine")
483 (description "This package defines the BSF engine for using Groovy inside
484 any @dfn{Bean Scripting Framework} (BSF) application."))))
485
486 (define groovy-cli-commons
487 (let ((base (groovy-subproject "groovy-cli-commons")))
488 (package
489 (inherit base)
490 (inputs
491 `(("groovy-bootstrap" ,groovy-bootstrap)
492 ,@(package-inputs base)))
493 (native-inputs
494 `(("groovy-test" ,groovy-test)
495 ,@(package-native-inputs base)))
496 (synopsis "Groovy CLI common classes")
497 (description "This package defines common classes for dealing with
498 command-line arguments in Groovy."))))
499
500 (define groovy-cli-picocli
501 (let ((base (groovy-subproject "groovy-cli-picocli")))
502 (package
503 (inherit base)
504 (inputs
505 `(("groovy-bootstrap" ,groovy-bootstrap)
506 ("java-picocli" ,java-picocli)
507 ,@(package-inputs base)))
508 (native-inputs
509 `(("groovy-test" ,groovy-test)
510 ,@(package-native-inputs base)))
511 (synopsis "Groovy CLI classes that use picocli")
512 (description "This package defines classes for dealing with command-line
513 arguments in Groovy using the picocli library."))))
514
515 (define groovy-swing
516 (let ((base (groovy-subproject "groovy-swing")))
517 (package
518 (inherit base)
519 (arguments
520 (substitute-keyword-arguments (package-arguments base)
521 ((#:phases phases)
522 `(modify-phases ,phases
523 (add-before 'check 'fix-test
524 (lambda _
525 (substitute*
526 "subprojects/groovy-swing/src/test/groovy/groovy/swing/GroovySwingTestCase.groovy"
527 (("HeadlessTestSupport.headless") "isHeadless()"))
528 #t))))))
529 (native-inputs
530 `(("groovy-bootstrap" ,groovy-bootstrap)
531 ("groovy-test" ,groovy-test)
532 ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
533 ("java-commons-logging-minimal" ,java-commons-logging-minimal)
534 ,@(package-native-inputs base)))
535 (synopsis "Groovy graphical library")
536 (description "This package contains the groovy bindings to Java Swing, a
537 library used to build graphical interfaces."))))
538
539 (define groovy-console
540 (let ((base (groovy-subproject "groovy-console")))
541 (package
542 (inherit base)
543 (arguments
544 (substitute-keyword-arguments (package-arguments base)
545 ((#:phases phases)
546 `(modify-phases ,phases
547 (add-before 'check 'build-swing
548 (lambda _
549 (substitute*
550 "subprojects/groovy-swing/src/test/groovy/groovy/swing/GroovySwingTestCase.groovy"
551 (("HeadlessTestSupport.headless") "isHeadless()"))
552 (mkdir-p "build/test-classes")
553 (apply invoke "java" "-cp"
554 (string-append (getenv "CLASSPATH") ":build/classes")
555 "org.codehaus.groovy.tools.FileSystemCompiler" "-cp"
556 (string-append (getenv "CLASSPATH") ":build/classes")
557 "-d" "build/test-classes" "-j"
558 (append
559 (find-files "subprojects/groovy-swing/src/test/java"
560 ".*\\.(groovy|java)$")
561 (find-files "subprojects/groovy-swing/src/test/groovy"
562 ".*\\.(groovy|java)$")))
563 #t))))))
564 (inputs
565 `(("groovy-swing" ,groovy-swing)
566 ("groovy-templates" ,groovy-templates)
567 ,@(package-inputs base)))
568 (native-inputs
569 `(("groovy-bootstrap" ,groovy-bootstrap)
570 ("groovy-test" ,groovy-test)
571 ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
572 ("java-commons-logging-minimal" ,java-commons-logging-minimal)
573 ,@(package-native-inputs base)))
574 (synopsis "Groovy graphical interface")
575 (description "This package contains a graphical interface to run groovy."))))
576
577 (define groovy-datetime
578 (let ((base (groovy-subproject "groovy-datetime")))
579 (package
580 (inherit base)
581 (native-inputs
582 `(("groovy-test" ,groovy-test)
583 ,@(package-native-inputs base)))
584 (synopsis "Date/Time API for Groovy")
585 (description "This package defines new Groovy methods which appear on
586 normal JDK Date/Time API (@code{java.time}) classes inside the Groovy
587 environment."))))
588
589 (define groovy-dateutil
590 (let ((base (groovy-subproject "groovy-dateutil")))
591 (package
592 (inherit base)
593 (native-inputs
594 `(("groovy-test" ,groovy-test)
595 ,@(package-native-inputs base)))
596 (synopsis "Date and Calendar API for Groovy")
597 (description "This package defines new groovy methods which appear on
598 normal JDK Date and Calendar classes inside the Groovy environment."))))
599
600 (define groovy-docgenerator
601 (let ((base (groovy-subproject "groovy-docgenerator")))
602 (package
603 (inherit base)
604 (arguments
605 `(#:tests? #f; No tests
606 ,@(package-arguments base)))
607 (inputs
608 `(("groovy-templates" ,groovy-templates)
609 ("groovy-swing" ,groovy-swing)
610 ("java-qdox-1.12" ,java-qdox-1.12)
611 ,@(package-inputs base)))
612 (native-inputs
613 `(("groovy-bootstrap" ,groovy-bootstrap)
614 ("groovy-test" ,groovy-test)
615 ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
616 ,@(package-native-inputs base)))
617 (synopsis "Groovy documentation generation")
618 (description "This package contains a command line tool to generate
619 documentation for groovy applications."))))
620
621 (define groovy-groovysh
622 (let ((base (groovy-subproject "groovy-groovysh")))
623 (package
624 (inherit base)
625 (inputs
626 `(("groovy-xml" ,groovy-xml)
627 ("groovy-console" ,groovy-console)
628 ,@(package-inputs base)))
629 (native-inputs
630 `(("groovy-bootstrap" ,groovy-bootstrap)
631 ("groovy-test" ,groovy-test)
632 ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
633 ,@(package-native-inputs base)))
634 (synopsis "Groovy REPL")
635 (description "This package contains the Groovy REPL."))))
636
637 (define groovy-jmx
638 (let ((base (groovy-subproject "groovy-jmx")))
639 (package
640 (inherit base)
641 (native-inputs
642 `(("groovy-bootstrap" ,groovy-bootstrap)
643 ("groovy-test" ,groovy-test)
644 ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
645 ,@(package-native-inputs base)))
646 (synopsis "Groovy JMX extension")
647 (description "This package contains the JMX extension of Groovy, for
648 management and monitoring of JVM-based solutions."))))
649
650 (define groovy-json
651 (let ((base (groovy-subproject "groovy-json")))
652 (package
653 (inherit base)
654 (native-inputs
655 `(("groovy-bootstrap" ,groovy-bootstrap)
656 ("groovy-test" ,groovy-test)
657 ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
658 ,@(package-native-inputs base)))
659 (synopsis "Groovy JSON")
660 (description "This package contains JSON-related utilities for groovy."))))
661
662 (define groovy-jsr223
663 (let ((base (groovy-subproject "groovy-jsr223")))
664 (package
665 (inherit base)
666 (native-inputs
667 `(("groovy-bootstrap" ,groovy-bootstrap)
668 ("groovy-test" ,groovy-test)
669 ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
670 ,@(package-native-inputs base)))
671 (synopsis "Groovy's own JSR223 implementation")
672 (description "This package contains Groovy's own JSR223 implementation. This
673 module is used for interaction between Groovy and Java code."))))
674
675 (define groovy-nio
676 (let ((base (groovy-subproject "groovy-nio")))
677 (package
678 (inherit base)
679 (arguments
680 `(#:tests? #f; Require spock-framework
681 ,@(package-arguments base)))
682 (synopsis "Groovy input-output library")
683 (description "This package implements an input/output library that extends
684 the functionality of the common library of Java."))))
685
686 (define groovy-servlet
687 (let ((base (groovy-subproject "groovy-servlet")))
688 (package
689 (inherit base)
690 (inputs
691 `(("groovy-templates" ,groovy-templates)
692 ("groovy-xml" ,groovy-xml)
693 ,@(package-inputs base)))
694 (native-inputs
695 `(("groovy-bootstrap" ,groovy-bootstrap)
696 ("groovy-json" ,groovy-json)
697 ("groovy-test" ,groovy-test)
698 ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
699 ,@(package-native-inputs base)))
700 (synopsis "Groovy's servlet implementation")
701 (description "This package contains a library to create groovlets, Groovy's
702 version of Java servlets."))))
703
704 (define groovy-sql
705 (let ((base (groovy-subproject "groovy-sql")))
706 (package
707 (inherit base)
708 (arguments
709 `(#:tests? #f;TODO: Requires hsqldb
710 ,@(package-arguments base)))
711 (synopsis "Groovy SQL library")
712 (description "This package contains a facade over Java's normal JDBC APIs
713 providing greatly simplified resource management and result set handling."))))
714
715 (define groovy-testng
716 (let ((base (groovy-subproject "groovy-testng")))
717 (package
718 (inherit base)
719 (native-inputs
720 `(("groovy-bootstrap" ,groovy-bootstrap)
721 ("groovy-test" ,groovy-test)
722 ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
723 ,@(package-native-inputs base)))
724 (synopsis "Groovy testing framework")
725 (description "This package contains integration code for running TestNG
726 tests in Groovy."))))
727
728 (define groovy-macro
729 (let ((base (groovy-subproject "groovy-macro")))
730 (package
731 (inherit base)
732 (arguments
733 (substitute-keyword-arguments (package-arguments base)
734 ((#:phases phases)
735 `(modify-phases ,phases
736 (delete 'copy-resources)
737 (add-after 'build 'copy-resources
738 (lambda _
739 (copy-recursively "subprojects/groovy-macro/src/main/resources"
740 "build/classes")
741 (substitute* "build.xml"
742 (("depends=\"compile,") "depends=\""))
743 (invoke "ant" "jar")
744 #t))))))
745 (inputs
746 `(("groovy-templates" ,groovy-templates)
747 ("groovy-xml" ,groovy-xml)
748 ,@(package-inputs base)))
749 (native-inputs
750 `(("groovy-bootstrap" ,groovy-bootstrap)
751 ("groovy-json" ,groovy-json)
752 ("groovy-test" ,groovy-test)
753 ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
754 ,@(package-native-inputs base)))
755 (synopsis "Groovy macro processor")
756 (description "This package contains a high-level library to create macro
757 and modify groovy's @dfn{Abstract Syntax Tree} (AST)."))))
758
759 (define groovy-yaml
760 (let ((base (groovy-subproject "groovy-yaml")))
761 (package
762 (inherit base)
763 (inputs
764 `(("groovy-json" ,groovy-json)
765 ("java-fasterxml-jackson-annotations" ,java-fasterxml-jackson-annotations)
766 ("java-fasterxml-jackson-core" ,java-fasterxml-jackson-core)
767 ("java-fasterxml-jackson-databind" ,java-fasterxml-jackson-databind)
768 ("java-fasterxml-jackson-dataformat-yaml" ,java-fasterxml-jackson-dataformat-yaml)
769 ,@(package-inputs base)))
770 (native-inputs
771 `(("groovy-test" ,groovy-test)
772 ,@(package-native-inputs base)))
773 (synopsis "Groovy YAML")
774 (description "This package contains YAML-related utilities for groovy."))))
775
776 (define-public groovy
777 (package
778 (inherit groovy-bootstrap)
779 (name "groovy")
780 (arguments
781 `(#:tests? #f; No tests
782 #:jdk ,openjdk9
783 #:phases
784 (modify-phases %standard-phases
785 (delete 'configure)
786 (delete 'build)
787 (replace 'install
788 (lambda* (#:key outputs inputs #:allow-other-keys)
789 (let* ((out (assoc-ref outputs "out"))
790 (out-bin (string-append out "/bin"))
791 (out-lib (string-append out "/lib")))
792 (with-directory-excursion "src/bin"
793 (substitute* "startGroovy"
794 (("\"\\\\\"") "\"")
795 (("\\\\\"\"") "\"")
796 (("\\\\\\$") "$")
797 (("@GROOVYJAR@") "groovy.jar")
798 (("MAX_FD=\"maximum\"")
799 (string-append
800 "MAX_FD=\"maximum\"\nJAVA_HOME="
801 (assoc-ref inputs "jdk"))))
802 ;; Groovy uses class loading. It's not enough to put the class
803 ;; in the loader's classpath, as it causes breakages:
804 ;; the compiler would give this error:
805 ;; "Prohibited package name: java.lang"
806 ;; So we symlink dependencies in this package's output. The
807 ;; starter class (in groovy-bootstrap) is where the class loader
808 ;; will look for dependencies, so we put it there too.
809 (mkdir-p out-lib)
810 (for-each
811 (lambda (input)
812 (for-each
813 (lambda (jar)
814 (symlink jar (string-append out-lib "/" (basename jar))))
815 (find-files (assoc-ref inputs input) ".*.jar")))
816 '("groovy-bootstrap" "groovy-ant" "groovy-astbuilder"
817 "groovy-bsf" "groovy-cli-commons" "groovy-cli-picocli"
818 "groovy-console" "groovy-datetime" "groovy-dateutil"
819 "groovy-docgenerator" "groovy-groovydoc" "groovy-groovysh"
820 "groovy-jmx" "groovy-json" "groovy-jsr223" "groovy-nio"
821 "groovy-parser-antlr4" "groovy-servlet" "groovy-sql"
822 "groovy-swing" "groovy-templates" "groovy-testng"
823 "groovy-xml" "groovy-yaml" "java-commons-cli"
824 "java-tunnelvisionlabs-antlr4-runtime" "java-asm"
825 "java-asm-analysis" "java-asm-tree" "java-asm-util"
826 "java-classpathx-servletapi" "java-xstream" "java-picocli"
827 "java-jansi" "java-jline-2"))
828 ;; antlr.jar is present twice in antlr2. Symlink doesn't like
829 ;; it, so we symlink it here.
830 (symlink (string-append (assoc-ref inputs "antlr2") "/lib/antlr.jar")
831 (string-append out-lib "/antlr.jar"))
832 (for-each
833 (lambda (tool)
834 (install-file tool out-bin)
835 (chmod (string-append out-bin "/" tool) #o755))
836 '("grape" "groovy" "groovyc" "groovyConsole" "groovydoc"
837 "groovysh" "java2groovy" "startGroovy")))
838 (install-file "src/conf/groovy-starter.conf"
839 (string-append out "/conf"))
840 #t))))))
841 (inputs
842 `(("groovy-bootstrap" ,groovy-bootstrap)
843 ("groovy-ant" ,groovy-ant)
844 ("groovy-astbuilder" ,groovy-astbuilder)
845 ("groovy-bsf" ,groovy-bsf)
846 ("groovy-cli-commons" ,groovy-cli-commons)
847 ("groovy-cli-picocli" ,groovy-cli-picocli)
848 ("groovy-console" ,groovy-console)
849 ("groovy-datetime" ,groovy-datetime)
850 ("groovy-dateutil" ,groovy-dateutil)
851 ("groovy-docgenerator" ,groovy-docgenerator)
852 ("groovy-groovydoc" ,groovy-groovydoc)
853 ("groovy-groovysh" ,groovy-groovysh)
854 ("groovy-jmx" ,groovy-jmx)
855 ("groovy-json" ,groovy-json)
856 ("groovy-jsr223" ,groovy-jsr223)
857 ("groovy-nio" ,groovy-nio)
858 ("groovy-parser-antlr4" ,groovy-parser-antlr4)
859 ("groovy-servlet" ,groovy-servlet)
860 ("groovy-sql" ,groovy-sql)
861 ("groovy-swing" ,groovy-swing)
862 ("groovy-templates" ,groovy-templates)
863 ("groovy-testng" ,groovy-testng)
864 ("groovy-xml" ,groovy-xml)
865 ("groovy-yaml" ,groovy-yaml)
866 ("java-tunnelvisionlabs-antlr4-runtime"
867 ,java-tunnelvisionlabs-antlr4-runtime)
868 ("java-commons-cli" ,java-commons-cli)
869 ("java-asm" ,java-asm-8)
870 ("java-asm-analysis" ,java-asm-analysis-8)
871 ("java-asm-tree" ,java-asm-tree-8)
872 ("java-asm-util" ,java-asm-util-8)
873 ("java-classpathx-servletapi" ,java-classpathx-servletapi)
874 ("java-picocli" ,java-picocli)
875 ("java-jansi" ,java-jansi)
876 ("java-jline-2" ,java-jline-2)
877 ("java-xstream" ,java-xstream)
878 ("antlr2" ,antlr2)))
879 (synopsis "Programming language for the JVM")
880 (description "Apache Groovy is a powerful, optionally typed and dynamic
881 language, with static-typing and static compilation capabilities, for the Java
882 platform. It integrates smoothly with any Java program, and immediately
883 delivers to your application powerful features, including scripting
884 capabilities, Domain-Specific Language authoring, runtime and compile-time
885 meta-programming and functional programming.")))