Commit | Line | Data |
---|---|---|
fdc9170b JL |
1 | ;;; GNU Guix --- Functional package management for GNU |
2 | ;;; Copyright © 2018 Julien Lepiller <julien@lepiller.eu> | |
ef6a5fcc | 3 | ;;; Copyright © 2019 Tobias Geerinck-Rice <me@tobias.gr> |
fdc9170b JL |
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) | |
ef6a5fcc | 24 | #:use-module (guix git-download) |
fdc9170b JL |
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 | |
b0192c85 | 33 | (name "java-groovy-bootstrap") |
417cf544 | 34 | (version "3.0.5") |
ef6a5fcc TGR |
35 | (source |
36 | (origin | |
37 | (method git-fetch) | |
38 | (uri (git-reference | |
b0e7b699 | 39 | (url "https://github.com/apache/groovy") |
ef6a5fcc TGR |
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 | |
417cf544 | 46 | (base32 "00556qxjmcn3a3xhfy6n0zw3d69mnw72vzm2rb6n4ihzkk7579nm")) |
ef6a5fcc TGR |
47 | (patches |
48 | (search-patches "groovy-add-exceptionutilsgenerator.patch")))) | |
fdc9170b JL |
49 | (build-system ant-build-system) |
50 | (arguments | |
51 | `(#:jar-name "groovy.jar" | |
417cf544 | 52 | #:source-dir "src/main/java:src/main/antlr2:subprojects/parser-antlr4/src/main/java:src/antlr" |
fdc9170b JL |
53 | #:test-dir "src/test" |
54 | #:tests? #f | |
417cf544 | 55 | #:jdk ,openjdk9 |
fdc9170b JL |
56 | #:main-class "groovy.ui.GroovyMain" |
57 | #:phases | |
58 | (modify-phases %standard-phases | |
fdc9170b JL |
59 | (add-before 'build 'generate-parsers |
60 | (lambda _ | |
417cf544 | 61 | (with-directory-excursion "src/main/antlr2/org/codehaus/groovy/antlr/java" |
fdc9170b | 62 | (invoke "antlr" "java.g")) |
417cf544 | 63 | (with-directory-excursion "src/main/antlr2/org/codehaus/groovy/antlr" |
fdc9170b JL |
64 | (mkdir "parser") |
65 | (with-directory-excursion "parser" | |
66 | (invoke "antlr" "../groovy.g"))) | |
417cf544 JL |
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") | |
fdc9170b JL |
73 | #t)) |
74 | (add-before 'build 'generate-exception-utils | |
75 | (lambda _ | |
76 | (invoke "javac" "-cp" (getenv "CLASSPATH") | |
417cf544 | 77 | "-source" "1.8" "-target" "1.8" |
fdc9170b JL |
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") | |
417cf544 JL |
83 | #t)) |
84 | (add-before 'build 'set-source-level | |
85 | (lambda _ | |
86 | (substitute* "build.xml" | |
87 | (("<javac") "<javac source=\"1.8\" target=\"1.8\"")) | |
fdc9170b JL |
88 | #t))))) |
89 | (native-inputs | |
417cf544 JL |
90 | `(("antlr2" ,antlr2) |
91 | ("antlr4" ,java-tunnelvisionlabs-antlr4) | |
92 | ("java-jsr305" ,java-jsr305) | |
93 | ("java-junit" ,java-junit) | |
fdc9170b | 94 | ("java-hamcrest-core" ,java-hamcrest-core) |
fdc9170b JL |
95 | ("java-jmock-1" ,java-jmock-1) |
96 | ("java-xmlunit-legacy" ,java-xmlunit-legacy))) | |
97 | (inputs | |
417cf544 JL |
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) | |
fdc9170b | 103 | ("java-classpathx-servletapi" ,java-classpathx-servletapi) |
417cf544 | 104 | ("java-commons-cli" ,java-commons-cli) |
fdc9170b | 105 | ("java-jansi" ,java-jansi) |
417cf544 JL |
106 | ("java-jline-2" ,java-jline-2) |
107 | ("java-picocli" ,java-picocli) | |
108 | ("java-xstream" ,java-xstream))) | |
fdc9170b JL |
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))) | |
b0192c85 JL |
114 | |
115 | (define groovy-bootstrap | |
116 | (package | |
117 | (inherit java-groovy-bootstrap) | |
118 | (name "groovy-bootstrap") | |
119 | (arguments | |
120 | `(#:jar-name "groovy.jar" | |
417cf544 | 121 | #:jdk ,openjdk9 |
b0192c85 JL |
122 | ;Requires groovy-xml and logback-classic which are circular dependencies |
123 | #:tests? #f | |
124 | #:phases | |
125 | (modify-phases %standard-phases | |
b0192c85 JL |
126 | (add-before 'build 'generate-parser |
127 | (lambda _ | |
417cf544 | 128 | (with-directory-excursion "src/main/antlr2/org/codehaus/groovy/antlr/java" |
b0192c85 | 129 | (invoke "antlr" "java.g")) |
417cf544 | 130 | (with-directory-excursion "src/main/antlr2/org/codehaus/groovy/antlr" |
b0192c85 JL |
131 | (mkdir "parser") |
132 | (with-directory-excursion "parser" | |
133 | (invoke "antlr" "../groovy.g"))) | |
417cf544 JL |
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") | |
b0192c85 JL |
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") | |
417cf544 | 155 | "src/main/java/org/codehaus/groovy/tools/DgmConverter.java") |
b0192c85 | 156 | (invoke "java" "-cp" (string-append (getenv "CLASSPATH") |
417cf544 | 157 | ":src/main/java") |
b0192c85 JL |
158 | "org.codehaus.groovy.tools.DgmConverter") |
159 | #t)) | |
160 | (add-before 'build 'copy-resources | |
161 | (lambda _ | |
417cf544 | 162 | (with-directory-excursion "src/main/java" |
b0192c85 | 163 | (for-each (lambda (file) |
417cf544 | 164 | (mkdir-p (string-append "../../../target/classes/" |
b0192c85 JL |
165 | (dirname file))) |
166 | (copy-file file | |
417cf544 | 167 | (string-append "../../../target/classes/" |
b0192c85 JL |
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" | |
417cf544 | 176 | "-cp" (getenv "CLASSPATH") |
b0192c85 JL |
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."))) | |
a3f253a4 JL |
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" | |
417cf544 | 201 | #:jdk ,openjdk9 |
a3f253a4 JL |
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" | |
417cf544 | 211 | "-cp" (getenv "CLASSPATH") |
a3f253a4 JL |
212 | "-d" "build/classes" |
213 | "-j"; joint compilation | |
214 | (append | |
215 | (find-files "src/test" "TestSupport.java") | |
216 | (find-files "src/test" "HeadlessTestSupport.java") | |
417cf544 | 217 | (find-files "src/test" "AstAssert.groovy") |
a3f253a4 JL |
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) | |
417cf544 | 224 | ("groovy-parser-antlr4" ,groovy-parser-antlr4) |
a3f253a4 JL |
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."))) | |
6f077852 | 232 | |
417cf544 | 233 | (define (groovy-subproject name) |
6f077852 JL |
234 | (package |
235 | (inherit groovy-bootstrap) | |
417cf544 | 236 | (name name) |
6f077852 | 237 | (arguments |
417cf544 JL |
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 | |
6f077852 JL |
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" | |
417cf544 JL |
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") | |
6f077852 JL |
258 | "-C" "build/classes" ".") |
259 | #t)) | |
417cf544 | 260 | (add-before 'build 'copy-resources |
e0e4bae2 | 261 | (lambda _ |
417cf544 JL |
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"))) | |
e0e4bae2 JL |
266 | #t)) |
267 | (replace 'check | |
417cf544 JL |
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.")))) | |
19ff61f4 JL |
344 | |
345 | (define groovy-templates | |
417cf544 JL |
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 | |
19ff61f4 | 373 | well-suited to applications where the text to be generated follows the form of |
417cf544 | 374 | a static template.")))) |
f14a1978 JL |
375 | |
376 | (define groovy-groovydoc | |
417cf544 JL |
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.")))) | |
b869c5ce JL |
396 | |
397 | (define groovy-ant | |
417cf544 JL |
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.")))) | |
5b46d3f6 JL |
459 | |
460 | (define groovy-bsf | |
417cf544 JL |
461 | (let ((base (groovy-subproject "groovy-bsf"))) |
462 | (package | |
463 | (inherit base) | |
464 | (arguments | |
465 | `(#:test-exclude (list | |
5b46d3f6 JL |
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") | |
417cf544 JL |
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.")))) | |
b221e8e2 JL |
514 | |
515 | (define groovy-swing | |
417cf544 JL |
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.")))) | |
136987cf JL |
538 | |
539 | (define groovy-console | |
417cf544 JL |
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.")))) | |
a6494dcf JL |
599 | |
600 | (define groovy-docgenerator | |
417cf544 JL |
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.")))) | |
dabce250 JL |
620 | |
621 | (define groovy-groovysh | |
417cf544 JL |
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.")))) | |
0280865c JL |
636 | |
637 | (define groovy-jmx | |
417cf544 JL |
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.")))) | |
dae9335c JL |
649 | |
650 | (define groovy-json | |
417cf544 JL |
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.")))) | |
3537fb61 JL |
661 | |
662 | (define groovy-jsr223 | |
417cf544 JL |
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.")))) | |
4ab3b0c5 JL |
674 | |
675 | (define groovy-nio | |
417cf544 JL |
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.")))) | |
107ebf7b JL |
685 | |
686 | (define groovy-servlet | |
417cf544 JL |
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.")))) | |
2af51fd0 JL |
703 | |
704 | (define groovy-sql | |
417cf544 JL |
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.")))) | |
dc51a0a8 JL |
714 | |
715 | (define groovy-testng | |
417cf544 JL |
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.")))) | |
88da2d2f JL |
727 | |
728 | (define groovy-macro | |
417cf544 JL |
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.")))) | |
22103f16 JL |
775 | |
776 | (define-public groovy | |
777 | (package | |
778 | (inherit groovy-bootstrap) | |
779 | (name "groovy") | |
780 | (arguments | |
781 | `(#:tests? #f; No tests | |
417cf544 | 782 | #:jdk ,openjdk9 |
22103f16 JL |
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 | |
417cf544 | 800 | "MAX_FD=\"maximum\"\nJAVA_HOME=" |
22103f16 JL |
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"))) | |
417cf544 JL |
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" | |
22103f16 | 822 | "groovy-swing" "groovy-templates" "groovy-testng" |
417cf544 JL |
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" | |
22103f16 JL |
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) | |
417cf544 | 844 | ("groovy-astbuilder" ,groovy-astbuilder) |
22103f16 | 845 | ("groovy-bsf" ,groovy-bsf) |
417cf544 JL |
846 | ("groovy-cli-commons" ,groovy-cli-commons) |
847 | ("groovy-cli-picocli" ,groovy-cli-picocli) | |
22103f16 | 848 | ("groovy-console" ,groovy-console) |
417cf544 JL |
849 | ("groovy-datetime" ,groovy-datetime) |
850 | ("groovy-dateutil" ,groovy-dateutil) | |
22103f16 JL |
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) | |
417cf544 | 858 | ("groovy-parser-antlr4" ,groovy-parser-antlr4) |
22103f16 JL |
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) | |
697a9d0d | 864 | ("groovy-xml" ,groovy-xml) |
417cf544 JL |
865 | ("groovy-yaml" ,groovy-yaml) |
866 | ("java-tunnelvisionlabs-antlr4-runtime" | |
867 | ,java-tunnelvisionlabs-antlr4-runtime) | |
22103f16 | 868 | ("java-commons-cli" ,java-commons-cli) |
417cf544 JL |
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) | |
22103f16 | 873 | ("java-classpathx-servletapi" ,java-classpathx-servletapi) |
417cf544 | 874 | ("java-picocli" ,java-picocli) |
22103f16 JL |
875 | ("java-jansi" ,java-jansi) |
876 | ("java-jline-2" ,java-jline-2) | |
417cf544 | 877 | ("java-xstream" ,java-xstream) |
22103f16 JL |
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."))) |