projects/guix·blob java-team · refs

900 lines · 38.2 KiB

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