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>
5 ;;; This file is part of GNU Guix.
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.
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.
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/>.
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))
31 (define java-groovy-bootstrap
33 (name "java-groovy-bootstrap")
39 (url "https://github.com/apache/groovy")
40 (commit (string-append
42 (string-map (lambda (x) (if (eq? x #\.) #\_ x))
44 (file-name (git-file-name name version))
46 (base32 "00556qxjmcn3a3xhfy6n0zw3d69mnw72vzm2rb6n4ihzkk7579nm"))
48 (search-patches "groovy-add-exceptionutilsgenerator.patch"))))
49 (build-system ant-build-system)
51 `(#:jar-name "groovy.jar"
52 #:source-dir "src/main/java:src/main/antlr2:subprojects/parser-antlr4/src/main/java:src/antlr"
56 #:main-class "groovy.ui.GroovyMain"
58 (modify-phases %standard-phases
59 (add-before 'build 'generate-parsers
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"
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")
74 (add-before 'build 'generate-exception-utils
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")
81 "org.codehaus.groovy.ExceptionUtilsGenerator"
82 "build/classes/org/codehaus/groovy/runtime/ExceptionUtils.class")
84 (add-before 'build 'set-source-level
86 (substitute* "build.xml"
87 (("<javac") "<javac source=\"1.8\" target=\"1.8\""))
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)))
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
113 (license license:asl2.0)))
115 (define groovy-bootstrap
117 (inherit java-groovy-bootstrap)
118 (name "groovy-bootstrap")
120 `(#:jar-name "groovy.jar"
122 ;Requires groovy-xml and logback-classic which are circular dependencies
125 (modify-phases %standard-phases
126 (add-before 'build 'generate-parser
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"
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")
141 (add-before 'build 'generate-exception-utils
143 (invoke "javac" "-cp" (getenv "CLASSPATH")
144 "config/ant/src/org/codehaus/groovy/ExceptionUtilsGenerator.java")
145 (invoke "java" "-cp" (string-append (getenv "CLASSPATH")
147 "org.codehaus.groovy.ExceptionUtilsGenerator"
148 "target/classes/org/codehaus/groovy/runtime/ExceptionUtils.class")
150 (add-before 'build 'generate-dgminfo
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")
158 "org.codehaus.groovy.tools.DgmConverter")
160 (add-before 'build 'copy-resources
162 (with-directory-excursion "src/main/java"
163 (for-each (lambda (file)
164 (mkdir-p (string-append "../../../target/classes/"
167 (string-append "../../../target/classes/"
169 (find-files "." ".*.(txt|properties|xml|html)")))
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" ".")
185 `(("java-apache-ivy" ,java-apache-ivy)
186 ,@(package-inputs java-groovy-bootstrap)))
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.")))
195 (define groovy-tests-bootstrap
197 (inherit groovy-bootstrap)
198 (name "groovy-tests-bootstrap")
200 `(#:jar-name "groovy-tests-bootstrap.jar"
202 #:tests? #f; no tests
204 (modify-phases %standard-phases
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")
213 "-j"; joint compilation
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" ".")
223 `(("groovy-test" ,groovy-test)
224 ("groovy-parser-antlr4" ,groovy-parser-antlr4)
225 ,@(package-inputs groovy-bootstrap)))
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.")))
233 (define (groovy-subproject name)
235 (inherit groovy-bootstrap)
238 `(#:jar-name ,(string-append name ".jar")
239 #:test-dir ,(string-append name "/src/test")
240 #:test-include (list "**/*Test.java" "**/*.groovy")
243 (modify-phases %standard-phases
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"
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" ".")
260 (add-before 'build 'copy-resources
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")))
268 (lambda* (#:key tests? #:allow-other-keys)
270 (mkdir-p "build/test-classes")
271 (substitute* "build.xml"
272 (("depends=\"compile-tests\"") "depends=\"\"")
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"
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"))
287 (define groovy-parser-antlr4
288 (let ((base (groovy-subproject "parser-antlr4")))
291 (name "groovy-parser-antlr4")
294 ,@(substitute-keyword-arguments (package-arguments base)
296 `(modify-phases ,phases
297 (add-before 'build 'generate-parser
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")
308 "subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4"))
309 (find-files "src/antlr" ".*.java$"))
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."))))
321 (let ((base (groovy-subproject "groovy-test")))
326 ,@(package-arguments base)))
327 (synopsis "Groovy test submodule")
328 (description "This package contains the test submodules used to test
329 other groovy submodules."))))
332 (let ((base (groovy-subproject "groovy-xml")))
336 `(("groovy-test" ,groovy-test)
337 ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
338 ,@(package-native-inputs base)))
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."))))
345 (define groovy-templates
346 (let ((base (groovy-subproject "groovy-templates")))
350 `(#:tests? #f;Requires spock-framework which is a circular dependency
351 ,@(substitute-keyword-arguments (package-arguments base)
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
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.*") ""))
364 `(("groovy-xml" ,groovy-xml)
365 ,@(package-inputs base)))
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."))))
376 (define groovy-groovydoc
377 (let ((base (groovy-subproject "groovy-groovydoc")))
381 `(#:tests? #f; Requires groovy-ant which is a circular dependency
382 ,@(package-arguments base)))
384 `(("groovy-templates" ,groovy-templates)
385 ("groovy-parser-antlr4" ,groovy-parser-antlr4)
386 ("java-javaparser" ,java-javaparser)
387 ,@(package-inputs groovy-bootstrap)))
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."))))
398 (let ((base (groovy-subproject "groovy-ant")))
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)
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
411 (substitute* (find-files "subprojects/groovy-ant"
413 (("import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;") "")
414 (("@SuppressFBWarnings.*") ""))
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)))
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."))))
431 (define groovy-astbuilder
432 (let ((base (groovy-subproject "groovy-astbuilder")))
436 (substitute-keyword-arguments (package-arguments base)
438 `(modify-phases ,phases
439 (delete 'copy-resources)
440 (add-after 'build 'copy-resources
443 "subprojects/groovy-astbuilder/src/main/resources"
445 (substitute* "build.xml"
446 (("depends=\"compile,") "depends=\""))
450 `(("groovy-bootstrap" ,groovy-bootstrap)
451 ,@(package-inputs base)))
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."))))
461 (let ((base (groovy-subproject "groovy-bsf")))
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]
472 ,@(package-arguments base)))
474 `(("java-commons-bsf" ,java-commons-bsf)
475 ,@(package-inputs base)))
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."))))
486 (define groovy-cli-commons
487 (let ((base (groovy-subproject "groovy-cli-commons")))
491 `(("groovy-bootstrap" ,groovy-bootstrap)
492 ,@(package-inputs base)))
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."))))
500 (define groovy-cli-picocli
501 (let ((base (groovy-subproject "groovy-cli-picocli")))
505 `(("groovy-bootstrap" ,groovy-bootstrap)
506 ("java-picocli" ,java-picocli)
507 ,@(package-inputs base)))
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."))))
516 (let ((base (groovy-subproject "groovy-swing")))
520 (substitute-keyword-arguments (package-arguments base)
522 `(modify-phases ,phases
523 (add-before 'check 'fix-test
526 "subprojects/groovy-swing/src/test/groovy/groovy/swing/GroovySwingTestCase.groovy"
527 (("HeadlessTestSupport.headless") "isHeadless()"))
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."))))
539 (define groovy-console
540 (let ((base (groovy-subproject "groovy-console")))
544 (substitute-keyword-arguments (package-arguments base)
546 `(modify-phases ,phases
547 (add-before 'check 'build-swing
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"
559 (find-files "subprojects/groovy-swing/src/test/java"
560 ".*\\.(groovy|java)$")
561 (find-files "subprojects/groovy-swing/src/test/groovy"
562 ".*\\.(groovy|java)$")))
565 `(("groovy-swing" ,groovy-swing)
566 ("groovy-templates" ,groovy-templates)
567 ,@(package-inputs base)))
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."))))
577 (define groovy-datetime
578 (let ((base (groovy-subproject "groovy-datetime")))
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
589 (define groovy-dateutil
590 (let ((base (groovy-subproject "groovy-dateutil")))
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."))))
600 (define groovy-docgenerator
601 (let ((base (groovy-subproject "groovy-docgenerator")))
605 `(#:tests? #f; No tests
606 ,@(package-arguments base)))
608 `(("groovy-templates" ,groovy-templates)
609 ("groovy-swing" ,groovy-swing)
610 ("java-qdox-1.12" ,java-qdox-1.12)
611 ,@(package-inputs base)))
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."))))
621 (define groovy-groovysh
622 (let ((base (groovy-subproject "groovy-groovysh")))
626 `(("groovy-xml" ,groovy-xml)
627 ("groovy-console" ,groovy-console)
628 ,@(package-inputs base)))
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."))))
638 (let ((base (groovy-subproject "groovy-jmx")))
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."))))
651 (let ((base (groovy-subproject "groovy-json")))
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."))))
662 (define groovy-jsr223
663 (let ((base (groovy-subproject "groovy-jsr223")))
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."))))
676 (let ((base (groovy-subproject "groovy-nio")))
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."))))
686 (define groovy-servlet
687 (let ((base (groovy-subproject "groovy-servlet")))
691 `(("groovy-templates" ,groovy-templates)
692 ("groovy-xml" ,groovy-xml)
693 ,@(package-inputs base)))
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."))))
705 (let ((base (groovy-subproject "groovy-sql")))
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."))))
715 (define groovy-testng
716 (let ((base (groovy-subproject "groovy-testng")))
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."))))
729 (let ((base (groovy-subproject "groovy-macro")))
733 (substitute-keyword-arguments (package-arguments base)
735 `(modify-phases ,phases
736 (delete 'copy-resources)
737 (add-after 'build 'copy-resources
739 (copy-recursively "subprojects/groovy-macro/src/main/resources"
741 (substitute* "build.xml"
742 (("depends=\"compile,") "depends=\""))
746 `(("groovy-templates" ,groovy-templates)
747 ("groovy-xml" ,groovy-xml)
748 ,@(package-inputs base)))
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)."))))
760 (let ((base (groovy-subproject "groovy-yaml")))
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)))
771 `(("groovy-test" ,groovy-test)
772 ,@(package-native-inputs base)))
773 (synopsis "Groovy YAML")
774 (description "This package contains YAML-related utilities for groovy."))))
776 (define-public groovy
778 (inherit groovy-bootstrap)
781 `(#:tests? #f; No tests
784 (modify-phases %standard-phases
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"
797 (("@GROOVYJAR@") "groovy.jar")
798 (("MAX_FD=\"maximum\"")
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.
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"))
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"))
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)
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.")))