GNU bug report logs - #43639
[PATCH] [staging] gnu: groovy: Update to 3.0.5.

Previous Next

Package: guix-patches;

Reported by: Julien Lepiller <julien <at> lepiller.eu>

Date: Sat, 26 Sep 2020 22:15:02 UTC

Severity: normal

Tags: patch

Done: Julien Lepiller <julien <at> lepiller.eu>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 43639 in the body.
You can then email your comments to 43639 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to guix-patches <at> gnu.org:
bug#43639; Package guix-patches. (Sat, 26 Sep 2020 22:15:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Julien Lepiller <julien <at> lepiller.eu>:
New bug report received and forwarded. Copy sent to guix-patches <at> gnu.org. (Sat, 26 Sep 2020 22:15:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Julien Lepiller <julien <at> lepiller.eu>
To: guix-patches <at> gnu.org
Subject: [PATCH] [staging] gnu: groovy: Update to 3.0.5.
Date: Sun, 27 Sep 2020 00:13:35 +0200
Hi Guix!

The following patch series updates groovy to 3.0.5. groovy-ant depends
on a newer version of ant/java8 than we have in master, so I had to
update it.  This lead me to change the recipe slightly, which
propagated to ant, so I thought I could as well update it as well. The
change to ant's recipe (and version) leads to ~500 rebuilds, so this is
going to staging.

The first three patches are required, but already pushed in master.

Then, I add asm-8 and 3 subpackages. Groovy requires a fork of antlr4,
not antlr4 itself, but this fork has a cyclic dependency on itself.

antlr4 has a runtime library and a binary that generates a parser. The
binary depends on the runtime library. In that fork, the runtime
requires the binary, to generate a parser. To break the cycle, I use an
old version of antlr4 (4.1), and fix the parser (it generates the
parser for a different runtime library after all). Then, I can use this
runtime to build the binary.

Now, the binary uses a runtime that doesn't fully work, so I rebuild
the runtime with it (so this time it generates the parser properly),
and use this runtime to rebuild the final binary.

Then, there's java-javaparser and the actual update of groovy. I
changed the way groovy subprojects are built, using a procedure
(groovy-subproject) that returns a package that builds the subproject.
I also added a few additional subprojects that didn't exist in the
previous version. Unfortunately, I'm missing the junit5 and jaxb
because of missing dependencies.




Information forwarded to guix-patches <at> gnu.org:
bug#43639; Package guix-patches. (Sat, 26 Sep 2020 22:19:02 GMT) Full text and rfc822 format available.

Message #8 received at 43639 <at> debbugs.gnu.org (full text, mbox):

From: Julien Lepiller <julien <at> lepiller.eu>
To: 43639 <at> debbugs.gnu.org
Subject: [PATCH 01/15] gnu: Add java-treelayout.
Date: Sun, 27 Sep 2020 00:18:10 +0200
* gnu/packages/java.scm (java-treelayout): New variable.
---
 gnu/packages/java.scm | 31 +++++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index e8de1bc154..ad8011fbd8 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -8168,6 +8168,37 @@ import org.antlr.grammar.v2.ANTLRTreePrinter;"))
     (propagated-inputs
      `(("stringtemplate" ,java-stringtemplate-3)))))
 
+(define-public java-treelayout
+  (package
+    (name "java-treelayout")
+    (version "1.0.3")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/abego/treelayout")
+                     (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "18my8ql9b1y0n0zrvkih7xfhf3dpgfhyfifvkcfhmwcvw3divxak"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name (string-append ,name "-" ,version ".jar")
+       #:source-dir "org.abego.treelayout/src/main/java"
+       #:test-dir "org.abego.treelayout/src/test"))
+    (inputs
+     `(("java-junit" ,java-junit)))
+    (native-inputs
+     `(("java-hamcrest-core" ,java-hamcrest-core)))
+    (home-page "http://treelayout.sourceforge.net")
+    (synopsis "Tree Layout Algorithm in Java")
+    (description "TreeLayout creates tree layouts for arbitrary trees.  It is
+not restricted to a specific output or format, but can be used for any kind of
+two dimensional diagram.  Examples are Swing based components, SVG files, etc.
+This is possible because TreeLayout separates the layout of a tree from the
+actual rendering.")
+    (license license:bsd-3)))
+
 (define-public java-commons-cli-1.2
   ;; This is a bootstrap dependency for Maven2.
   (package
-- 
2.28.0





Information forwarded to guix-patches <at> gnu.org:
bug#43639; Package guix-patches. (Sat, 26 Sep 2020 22:19:02 GMT) Full text and rfc822 format available.

Message #11 received at 43639 <at> debbugs.gnu.org (full text, mbox):

From: Julien Lepiller <julien <at> lepiller.eu>
To: 43639 <at> debbugs.gnu.org
Subject: [PATCH 02/15] gnu: Add java-antlr4-runtime.
Date: Sun, 27 Sep 2020 00:18:11 +0200
* gnu/packages/java.scm (java-antlr4-runtime): New variable.
* gnu/packages/patches/java-antlr4-Add-standalone-generator.patch: New
file.
* gnu/packages/patches/java-antlr4-fix-code-too-large.java: New file.
* gnu/local.mk (dist_patch_DATA): Add them.
---
 gnu/local.mk                                  |  2 +
 gnu/packages/java.scm                         | 34 +++++++
 ...java-antlr4-Add-standalone-generator.patch | 52 +++++++++++
 .../java-antlr4-fix-code-too-large.java       | 90 +++++++++++++++++++
 4 files changed, 178 insertions(+)
 create mode 100644 gnu/packages/patches/java-antlr4-Add-standalone-generator.patch
 create mode 100644 gnu/packages/patches/java-antlr4-fix-code-too-large.java

diff --git a/gnu/local.mk b/gnu/local.mk
index ba94adfe72..8e2f1976bf 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1159,6 +1159,8 @@ dist_patch_DATA =						\
   %D%/packages/patches/jamvm-2.0.0-aarch64-support.patch	\
   %D%/packages/patches/jamvm-2.0.0-disable-branch-patching.patch	\
   %D%/packages/patches/jamvm-2.0.0-opcode-guard.patch		\
+  %D%/packages/patches/java-antlr4-Add-standalone-generator.patch	\
+  %D%/packages/patches/java-antlr4-fix-code-too-large.java	\
   %D%/packages/patches/java-apache-ivy-port-to-latest-bouncycastle.patch	\
   %D%/packages/patches/java-commons-collections-fix-java8.patch \
   %D%/packages/patches/java-jeromq-fix-tests.patch		\
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index ad8011fbd8..0fd0d5e29f 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -8199,6 +8199,40 @@ This is possible because TreeLayout separates the layout of a tree from the
 actual rendering.")
     (license license:bsd-3)))
 
+(define-public java-antlr4-runtime
+  (package
+    (name "java-antlr4-runtime")
+    (version "4.8")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/antlr/antlr4")
+                     (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1qal3add26qxskm85nk7r758arladn5rcyjinmhlhznmpbbv9j8m"))
+              (patches
+                (search-patches "java-antlr4-Add-standalone-generator.patch"
+                                "java-antlr4-fix-code-too-large.java"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "java-antlr4-runtime.jar"
+       #:source-dir "runtime/Java/src/org"
+       #:tests? #f; tests depend on java-antlr4 itself
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'copy-resources
+           (lambda _
+             (copy-recursively "runtime/Java/src/main/dot"
+                               "build/classes")
+             #t)))))
+    (home-page "https://antlr.org")
+    (synopsis "ANTLR runtime library")
+    (description "This package contains the runtime library used with generated
+sources by ANTLR.")
+    (license license:bsd-3)))
+
 (define-public java-commons-cli-1.2
   ;; This is a bootstrap dependency for Maven2.
   (package
diff --git a/gnu/packages/patches/java-antlr4-Add-standalone-generator.patch b/gnu/packages/patches/java-antlr4-Add-standalone-generator.patch
new file mode 100644
index 0000000000..75b6dce39f
--- /dev/null
+++ b/gnu/packages/patches/java-antlr4-Add-standalone-generator.patch
@@ -0,0 +1,52 @@
+From 3b43b79da15be994348f13035474925ba592fe1f Mon Sep 17 00:00:00 2001
+From: Julien Lepiller <julien <at> lepiller.eu>
+Date: Fri, 15 Sep 2017 10:06:42 +0200
+Subject: [PATCH] Add standalone template generator
+
+---
+ tool/src/org/antlr/v4/unicode/UnicodeRenderer.java | 33 ++++++++++++++++++++++
+ 1 file changed, 33 insertions(+)
+ create mode 100644 tool/src/org/antlr/v4/unicode/UnicodeRenderer.java
+
+diff --git a/tool/src/org/antlr/v4/unicode/UnicodeRenderer.java b/tool/src/org/antlr/v4/unicode/UnicodeRenderer.java
+new file mode 100644
+index 0000000..9e53213
+--- /dev/null
++++ b/tool/src/org/antlr/v4/unicode/UnicodeRenderer.java
+@@ -0,0 +1,33 @@
++package org.antlr.v4.unicode;
++
++import org.stringtemplate.v4.*;
++import org.stringtemplate.v4.misc.ErrorBuffer;
++import org.antlr.v4.unicode.UnicodeDataTemplateController;
++
++import java.io.File;
++import java.io.FileWriter;
++import java.io.IOException;
++import java.util.Map;
++import java.util.Map.Entry;
++
++public class UnicodeRenderer extends UnicodeDataTemplateController {
++    public static void main(String[] arg)
++        throws IOException {
++        String inputdir =  arg[0];
++        String input =     arg[1];
++        String output =    arg[2];
++
++        FileWriter fileWriter = new FileWriter(new File(output));
++        ErrorBuffer listener = new ErrorBuffer();
++
++        STGroupDir group = new STGroupDir(inputdir);
++        ST st = group.getInstanceOf(input);
++
++        for(Entry<String, Object> entry : getProperties().entrySet())
++        	st.add(entry.getKey(), entry.getValue());
++
++        st.write(new AutoIndentWriter(fileWriter), listener);
++        fileWriter.flush();
++        fileWriter.close();
++    }
++}
+-- 
+2.13.5
+
diff --git a/gnu/packages/patches/java-antlr4-fix-code-too-large.java b/gnu/packages/patches/java-antlr4-fix-code-too-large.java
new file mode 100644
index 0000000000..9e9f92349d
--- /dev/null
+++ b/gnu/packages/patches/java-antlr4-fix-code-too-large.java
@@ -0,0 +1,90 @@
+From d22db2048534bdf3d9615117291f9d86564ff10d Mon Sep 17 00:00:00 2001
+From: Julien Lepiller <julien <at> lepiller.eu>
+Date: Sat, 19 Sep 2020 21:05:48 +0200
+Subject: [PATCH] Separate addPropertyAliases in two methods
+
+The quantity of data used to generate addPropertyAliases creates a big
+method, that is too big for java and results in "error: code too large".
+This is most likely due to added data between the expected version of
+icu and the actual version of icu in Guix.
+---
+ .../org/antlr/v4/tool/templates/unicodedata.st | 17 ++++++++++++++---
+ .../unicode/UnicodeDataTemplateController.java | 18 ++++++++++--------
+ 2 files changed, 24 insertions(+), 11 deletions(-)
+
+diff --git a/tool/resources/org/antlr/v4/tool/templates/unicodedata.st b/tool/resources/org/antlr/v4/tool/templates/unicodedata.st
+index 0f22c73..3573873 100644
+--- a/tool/resources/org/antlr/v4/tool/templates/unicodedata.st
++++ b/tool/resources/org/antlr/v4/tool/templates/unicodedata.st
+@@ -1,4 +1,4 @@
+-unicodedata(propertyCodePointRanges, propertyAliases) ::= <<
++unicodedata(propertyCodePointRanges, propertyAliasesA, propertyAliasesB) ::= <<
+ package org.antlr.v4.unicode;
+ 
+ import java.util.Arrays;
+@@ -15,7 +15,7 @@ import org.antlr.v4.runtime.misc.Interval;
+  */
+ public abstract class UnicodeData {
+        private static final Map\<String, IntervalSet\> propertyCodePointRanges = new HashMap\<\>(<length(propertyCodePointRanges)>);
+-       private static final Map\<String, String\> propertyAliases = new HashMap\<\>(<length(propertyAliases)>);
++       private static final Map\<String, String\> propertyAliases = new HashMap\<\>(<length(propertyAliasesA)> + <length(propertyAliasesB)>);
+ 
+        // Work around Java 64k bytecode method limit by splitting up static
+        // initialization into one method per Unicode property
+@@ -30,9 +30,20 @@ static private void addProperty<i>() {
+        propertyCodePointRanges.put("<k>".toLowerCase(Locale.US), codePointRanges);
+ \}}; separator="\n\n">
+ 
++       // Property aliases
++       static private void addPropertyAliases1() {
++              <propertyAliasesA.keys:{ k | propertyAliases.put("<k>".toLowerCase(Locale.US), "<propertyAliasesA.(k)>".toLowerCase(Locale.US)); }; separator="\n">
++       }
++
++       // Property aliases
++       static private void addPropertyAliases2() {
++              <propertyAliasesB.keys:{ k | propertyAliases.put("<k>".toLowerCase(Locale.US), "<propertyAliasesB.(k)>".toLowerCase(Locale.US)); }; separator="\n">
++       }
++
+        // Property aliases
+        static private void addPropertyAliases() {
+-              <propertyAliases.keys:{ k | propertyAliases.put("<k>".toLowerCase(Locale.US), "<propertyAliases.(k)>".toLowerCase(Locale.US)); }; separator="\n">
++             addPropertyAliases1();
++             addPropertyAliases2();
+        }
+ 
+        // Put it all together
+diff --git a/tool/src/org/antlr/v4/unicode/UnicodeDataTemplateController.java b/tool/src/org/antlr/v4/unicode/UnicodeDataTemplateController.java
+index da244a3..dc591cb 100644
+--- a/tool/src/org/antlr/v4/unicode/UnicodeDataTemplateController.java
++++ b/tool/src/org/antlr/v4/unicode/UnicodeDataTemplateController.java
+@@ -78,17 +78,19 @@ public abstract class UnicodeDataTemplateController {
+ 		addTR35ExtendedPictographicPropertyCodesToCodePointRanges(propertyCodePointRanges);
+ 		addEmojiPresentationPropertyCodesToCodePointRanges(propertyCodePointRanges);
+ 
+-		Map<String, String> propertyAliases = new LinkedHashMap<>();
+-		addUnicodeCategoryCodesToNames(propertyAliases);
+-		addUnicodeBinaryPropertyCodesToNames(propertyAliases);
+-		addUnicodeScriptCodesToNames(propertyAliases);
+-		addUnicodeBlocksToNames(propertyAliases);
+-		addUnicodeIntPropertyCodesToNames(propertyAliases);
+-		propertyAliases.put("EP", "Extended_Pictographic");
++		Map<String, String> propertyAliases1 = new LinkedHashMap<>();
++		Map<String, String> propertyAliases2 = new LinkedHashMap<>();
++		addUnicodeCategoryCodesToNames(propertyAliases1);
++		addUnicodeBinaryPropertyCodesToNames(propertyAliases1);
++		addUnicodeScriptCodesToNames(propertyAliases1);
++		addUnicodeBlocksToNames(propertyAliases2);
++		addUnicodeIntPropertyCodesToNames(propertyAliases2);
++		propertyAliases2.put("EP", "Extended_Pictographic");
+ 
+ 		Map<String, Object> properties = new LinkedHashMap<>();
+ 		properties.put("propertyCodePointRanges", propertyCodePointRanges);
+-		properties.put("propertyAliases", propertyAliases);
++		properties.put("propertyAliasesA", propertyAliases1);
++		properties.put("propertyAliasesB", propertyAliases2);
+ 		return properties;
+ 	}
+ 
+-- 
+2.28.0
+
-- 
2.28.0





Information forwarded to guix-patches <at> gnu.org:
bug#43639; Package guix-patches. (Sat, 26 Sep 2020 22:19:03 GMT) Full text and rfc822 format available.

Message #14 received at 43639 <at> debbugs.gnu.org (full text, mbox):

From: Julien Lepiller <julien <at> lepiller.eu>
To: 43639 <at> debbugs.gnu.org
Subject: [PATCH 03/15] gnu: Add antlr4.
Date: Sun, 27 Sep 2020 00:18:12 +0200
* gnu/packages/java.scm (antlr4): New variable.
---
 gnu/packages/java.scm | 161 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 161 insertions(+)

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 0fd0d5e29f..674135071b 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -8233,6 +8233,167 @@ actual rendering.")
 sources by ANTLR.")
     (license license:bsd-3)))
 
+(define-public antlr4
+  (package
+    (inherit java-antlr4-runtime)
+    (name "antlr4")
+    (arguments
+     `(#:jar-name "antlr4.jar"
+       #:source-dir "tool/src"
+       #:test-dir "tool-testsuite/test:runtime-testsuite/test:runtime-testsuite/annotations/src"
+       #:test-include (list "**/Test*.java")
+       #:test-exclude (list
+                        ;; no runnable method
+                        "**/TestOutputReading.java"
+                        ;; no @Test methods
+                        "**/TestParserErrors.java"
+                        "**/TestSemPredEvalParser.java"
+                        "**/TestSets.java"
+                        "**/TestListeners.java"
+                        "**/TestParseTrees.java"
+                        "**/TestParserExec.java"
+                        "**/TestLexerErrors.java"
+                        "**/TestPerformance.java"
+                        "**/TestCompositeParsers.java"
+                        "**/TestLexerExec.java"
+                        "**/TestSemPredEvalLexer.java"
+                        "**/TestLeftRecursion.java"
+                        "**/TestFullContextParsing.java"
+                        "**/TestCompositeLexers.java"
+                        ;; Null pointer exception
+                        "**/TestCompositeGrammars.java"
+                        ;; Wrong assumption on emoji
+                        "**/TestUnicodeData.java")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'fix-build.xml
+           (lambda _
+             ;; tests are not in a java subdirectory
+             (substitute* "build.xml"
+               (("\\$\\{test.home\\}/java") "${test.home}"))
+             #t))
+         ;; tests require to have a working antlr4 binary
+         (delete 'check)
+         (add-after 'bin-install 'check
+           (lambda _
+             (invoke "ant" "compile-tests")
+             (invoke "ant" "check" "-Dtest.home=runtime-testsuite/annotations/src")
+             (invoke "ant" "check" "-Dtest.home=runtime-testsuite/test")
+             (invoke "ant" "check" "-Dtest.home=tool-testsuite/test")
+             #t))
+         (add-before 'check 'remove-unrelated-languages
+           (lambda _
+             ;; There are tests for other languages that ANTLR can generate, but
+             ;; we don't have the infrastructure for that yet.  Let's test Java
+             ;; generation only.
+             (for-each
+               (lambda (language)
+                 (delete-file-recursively
+                   (string-append "runtime-testsuite/test/org/antlr/v4/test/runtime/"
+                                  language)))
+               '("cpp" "csharp" "go" "javascript" "php" "python" "python2"
+                 "python3" "swift"))
+             #t))
+         (add-before 'check 'generate-test-parsers
+           (lambda* (#:key outputs #:allow-other-keys)
+             (define (run-antlr dir filename package)
+               (invoke "antlr4" "-lib" dir "-visitor" "-no-listener"
+                       "-package" package (string-append dir "/" filename)
+                       "-Xlog"))
+             (setenv "PATH" (string-append (getenv "PATH") ":"
+                                           (assoc-ref outputs "out") "/bin"))
+             (run-antlr "runtime-testsuite/test/org/antlr/v4/test/runtime/java/api"
+                        "Java.g4" "org.antlr.v4.test.runtime.java.api")
+             (run-antlr "runtime-testsuite/test/org/antlr/v4/test/runtime/java/api"
+                        "VisitorBasic.g4" "org.antlr.v4.test.runtime.java.api")
+             (run-antlr "runtime-testsuite/test/org/antlr/v4/test/runtime/java/api"
+                        "VisitorCalc.g4" "org.antlr.v4.test.runtime.java.api")
+             #t))
+         (add-before 'check 'remove-graphemes
+           (lambda _
+             ;; When running antlr on grahemes.g4, we get a runtime exception:
+             ;; set is empty.  So delete the file that depends on it.
+             (delete-file
+               "runtime-testsuite/test/org/antlr/v4/test/runtime/java/api/perf/TimeLexerSpeed.java")
+             #t))
+         (add-after 'install 'bin-install
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((jar (string-append (assoc-ref outputs "out") "/share/java"))
+                   (bin (string-append (assoc-ref outputs "out") "/bin")))
+               (mkdir-p bin)
+               (with-output-to-file (string-append bin "/antlr4")
+                 (lambda _
+                   (display
+                     (string-append "#!" (which "sh") "\n"
+                                    "java -cp " jar "/antlr4.jar:"
+                                    (string-join
+                                      (apply
+                                        append
+                                        (map
+                                          (lambda (input)
+                                            (find-files (assoc-ref inputs input)
+                                                  ".*\\.jar"))
+                                          '("antlr3" "java-stringtemplate"
+                                            "java-antlr4-runtime" "java-treelayout"
+                                            "java-jsonp-api" "java-icu4j")))
+                                      ":")
+                                    " org.antlr.v4.Tool $*"))))
+               (chmod (string-append bin "/antlr4") #o755)
+               #t)))
+         (add-before 'build 'copy-resources
+           (lambda _
+             (copy-recursively "tool/resources/" "build/classes")
+             #t))
+         (add-before 'build 'generate-unicode
+           (lambda _
+             ;; First: build the generator
+             (invoke "javac" "-cp" (getenv "CLASSPATH")
+                     "tool/src/org/antlr/v4/unicode/UnicodeRenderer.java"
+                     "tool/src/org/antlr/v4/unicode/UnicodeDataTemplateController.java")
+             ;; Then use it
+             (invoke "java" "-cp" (string-append (getenv "CLASSPATH")
+                                                 ":tool/src:runtime/Java")
+                     "org.antlr.v4.unicode.UnicodeRenderer"
+                     "tool/resources/org/antlr/v4/tool/templates"
+                     "unicodedata"
+                     "tool/src/org/antlr/v4/unicode/UnicodeData.java")
+             ;; It seems there is a bug with our ST4
+             (substitute* "tool/src/org/antlr/v4/unicode/UnicodeData.java"
+               (("\\\\>") ">"))
+             ;; Remove the additional file
+             (delete-file "tool/src/org/antlr/v4/unicode/UnicodeRenderer.java")
+             #t))
+         (add-before 'build 'generate-grammar
+           (lambda* (#:key inputs #:allow-other-keys)
+             (with-directory-excursion "tool/src/org/antlr/v4/parse"
+               (for-each (lambda (file)
+                           (display file)
+                           (newline)
+                           (invoke "antlr3" file))
+                         '("ANTLRLexer.g" "ANTLRParser.g" "BlockSetTransformer.g"
+                           "GrammarTreeVisitor.g" "ATNBuilder.g"
+                           "ActionSplitter.g" "LeftRecursiveRuleWalker.g")))
+             (with-directory-excursion "tool/src/org/antlr/v4/codegen"
+               (install-file "../parse/ANTLRParser.tokens" ".")
+               (display "SourceGenTriggers.g\n")
+               (invoke "antlr3" "SourceGenTriggers.g"))
+             #t)))))
+    (inputs
+     `(("antlr3" ,antlr3)
+       ("java-antlr4-runtime" ,java-antlr4-runtime)
+       ("java-icu4j" ,java-icu4j)
+       ("java-jsonp-api" ,java-jsonp-api)
+       ("java-stringtemplate" ,java-stringtemplate)
+       ("java-treelayout" ,java-treelayout)))
+    (native-inputs
+     `(("java-junit" ,java-junit)))
+    (synopsis "Parser and lexer generator in Java")
+    (description "ANTLR (ANother Tool for Language Recognition) is a powerful
+parser generator for reading, processing, executing, or translating structured
+text or binary files.  It's widely used to build languages, tools, and
+frameworks.  From a grammar, ANTLR generates a parser that can build and walk
+parse trees.")))
+
 (define-public java-commons-cli-1.2
   ;; This is a bootstrap dependency for Maven2.
   (package
-- 
2.28.0





Information forwarded to guix-patches <at> gnu.org:
bug#43639; Package guix-patches. (Sat, 26 Sep 2020 22:19:03 GMT) Full text and rfc822 format available.

Message #17 received at 43639 <at> debbugs.gnu.org (full text, mbox):

From: Julien Lepiller <julien <at> lepiller.eu>
To: 43639 <at> debbugs.gnu.org
Subject: [PATCH 04/15] gnu: ant/java8: Update to 1.10.8.
Date: Sun, 27 Sep 2020 00:18:13 +0200
* gnu/packages/java.scm (ant/java8): Update to 1.10.8.
---
 gnu/packages/java.scm | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 674135071b..dd3ff73e2e 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -2431,14 +2431,14 @@ new Date();"))
 (define-public ant/java8
   (package (inherit ant-bootstrap)
     (name "ant")
-    (version "1.10.1")
+    (version "1.10.8")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://apache/ant/source/apache-ant-"
                                   version "-src.tar.gz"))
               (sha256
                (base32
-                "10p3dh77lkzzzcy32dk9azljixzadp46fggjfbvgkl8mmb8cxxv8"))
+                "066k2isig5xm70cihj9p73hkp5w7h5zbfqz5kxb6cwr9cb86xl2k"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -2466,7 +2466,7 @@ new Date();"))
                ;; "check" phase, because the dependency on "test-jar" would always
                ;; result in the tests to be run.
                (substitute* "build.xml"
-                 (("depends=\"jars,test-jar\"") "depends=\"jars\""))
+                 (("depends=\"jars,test-jar") "depends=\"jars"))
                (invoke "bash" "bootstrap.sh"
                        (string-append "-Ddist.dir="
                                       (assoc-ref outputs "out")))))))))
-- 
2.28.0





Information forwarded to guix-patches <at> gnu.org:
bug#43639; Package guix-patches. (Sat, 26 Sep 2020 22:19:04 GMT) Full text and rfc822 format available.

Message #20 received at 43639 <at> debbugs.gnu.org (full text, mbox):

From: Julien Lepiller <julien <at> lepiller.eu>
To: 43639 <at> debbugs.gnu.org
Subject: [PATCH 05/15] gnu: ant: Update to 1.9.15.
Date: Sun, 27 Sep 2020 00:18:14 +0200
* gnu/packages/java.scm (ant): Update to 1.9.15.
---
 gnu/packages/java.scm | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index dd3ff73e2e..253839e5f4 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -2479,14 +2479,14 @@ new Date();"))
 ;; requires Java 8.
 (define-public ant
   (package (inherit ant/java8)
-    (version "1.9.9")
+    (version "1.9.15")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://apache/ant/source/apache-ant-"
                                   version "-src.tar.gz"))
               (sha256
                (base32
-                "1k28mka0m3isy9yr8gz84kz1f3f879rwaxrd44vdn9xbfwvwk86n"))))
+                "1xy30f1w5gaqk6g3f0vw7ygix4rb6032qkcw42y4z8wd9jihgygd"))))
     (native-inputs
      `(("jdk" ,icedtea-7 "jdk")
        ("zip" ,zip)
-- 
2.28.0





Information forwarded to guix-patches <at> gnu.org:
bug#43639; Package guix-patches. (Sat, 26 Sep 2020 22:19:04 GMT) Full text and rfc822 format available.

Message #23 received at 43639 <at> debbugs.gnu.org (full text, mbox):

From: Julien Lepiller <julien <at> lepiller.eu>
To: 43639 <at> debbugs.gnu.org
Subject: [PATCH 06/15] gnu: Add java-asm-8.
Date: Sun, 27 Sep 2020 00:18:15 +0200
* gnu/packages/java.scm (java-asm-8): New variable.
---
 gnu/packages/java.scm | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 253839e5f4..3b6f3bed69 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -5140,6 +5140,30 @@ including java-asm.")
        ((#:tests? _) #f)))
     (native-inputs `())))
 
+(define-public java-asm-8
+  (package
+    (inherit java-asm)
+    (version "8.0.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://gitlab.ow2.org/asm/asm")
+                     (commit (string-append
+                               "ASM_" (string-join (string-split version #\.)
+                                                   "_")))))
+              (file-name (git-file-name "java-asm" version))
+              (sha256
+               (base32
+                "1s6j27zc1i76gh891w2g48b1c3abp9w8zp5j54yb1vm5h8djkd69"))))
+    (arguments
+     `(#:jar-name "asm8.jar"
+       #:source-dir "asm/src/main/java"
+       #:test-dir "asm/src/test"
+       ;; tests depend on junit5
+       #:tests? #f))
+    (propagated-inputs '())
+    (native-inputs '())))
+
 (define-public java-cglib
   (package
     (name "java-cglib")
-- 
2.28.0





Information forwarded to guix-patches <at> gnu.org:
bug#43639; Package guix-patches. (Sat, 26 Sep 2020 22:19:04 GMT) Full text and rfc822 format available.

Message #26 received at 43639 <at> debbugs.gnu.org (full text, mbox):

From: Julien Lepiller <julien <at> lepiller.eu>
To: 43639 <at> debbugs.gnu.org
Subject: [PATCH 07/15] gnu: Add java-asm-tree-8.
Date: Sun, 27 Sep 2020 00:18:16 +0200
* gnu/packages/java.scm (java-asm-tree-8): New variable.
---
 gnu/packages/java.scm | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 3b6f3bed69..5afe22fcd4 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -5164,6 +5164,19 @@ including java-asm.")
     (propagated-inputs '())
     (native-inputs '())))
 
+(define-public java-asm-tree-8
+  (package
+    (inherit java-asm-8)
+    (name "java-asm-tree")
+    (arguments
+     `(#:jar-name "asm-tree.jar"
+       #:source-dir "asm-tree/src/main/java"
+       #:test-dir "asm-tree/src/test"
+       ;; tests depend on junit5
+       #:tests? #f))
+    (inputs
+     `(("java-asm" ,java-asm-8)))))
+
 (define-public java-cglib
   (package
     (name "java-cglib")
-- 
2.28.0





Information forwarded to guix-patches <at> gnu.org:
bug#43639; Package guix-patches. (Sat, 26 Sep 2020 22:20:02 GMT) Full text and rfc822 format available.

Message #29 received at 43639 <at> debbugs.gnu.org (full text, mbox):

From: Julien Lepiller <julien <at> lepiller.eu>
To: 43639 <at> debbugs.gnu.org
Subject: [PATCH 08/15] gnu: Add java-asm-analysis-8.
Date: Sun, 27 Sep 2020 00:18:17 +0200
* gnu/packages/java.scm (java-asm-analysis-8): New variable.
---
 gnu/packages/java.scm | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 5afe22fcd4..f1540e5b43 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -5177,6 +5177,20 @@ including java-asm.")
     (inputs
      `(("java-asm" ,java-asm-8)))))
 
+(define-public java-asm-analysis-8
+  (package
+    (inherit java-asm-8)
+    (name "java-asm-analysis")
+    (arguments
+     `(#:jar-name "asm-analysis.jar"
+       #:source-dir "asm-analysis/src/main/java"
+       #:test-dir "asm-analysis/src/test"
+       ;; tests depend on junit5
+       #:tests? #f))
+    (inputs
+     `(("java-asm" ,java-asm-8)
+       ("java-asm-tree" ,java-asm-tree-8)))))
+
 (define-public java-cglib
   (package
     (name "java-cglib")
-- 
2.28.0





Information forwarded to guix-patches <at> gnu.org:
bug#43639; Package guix-patches. (Sat, 26 Sep 2020 22:20:02 GMT) Full text and rfc822 format available.

Message #32 received at 43639 <at> debbugs.gnu.org (full text, mbox):

From: Julien Lepiller <julien <at> lepiller.eu>
To: 43639 <at> debbugs.gnu.org
Subject: [PATCH 09/15] gnu: Add java-asm-util-8.
Date: Sun, 27 Sep 2020 00:18:18 +0200
* gnu/packages/java.scm (java-asm-util-8): New variable.
---
 gnu/packages/java.scm | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index f1540e5b43..0e02528a38 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -5191,6 +5191,21 @@ including java-asm.")
      `(("java-asm" ,java-asm-8)
        ("java-asm-tree" ,java-asm-tree-8)))))
 
+(define-public java-asm-util-8
+  (package
+    (inherit java-asm-8)
+    (name "java-asm-util")
+    (arguments
+     `(#:jar-name "asm-util8.jar"
+       #:source-dir "asm-util/src/main/java"
+       #:test-dir "asm-util/src/test"
+       ;; tests depend on junit5
+       #:tests? #f))
+    (inputs
+     `(("java-asm" ,java-asm-8)
+       ("java-asm-analysis" ,java-asm-analysis-8)
+       ("java-asm-tree" ,java-asm-tree-8)))))
+
 (define-public java-cglib
   (package
     (name "java-cglib")
-- 
2.28.0





Information forwarded to guix-patches <at> gnu.org:
bug#43639; Package guix-patches. (Sat, 26 Sep 2020 22:20:03 GMT) Full text and rfc822 format available.

Message #35 received at 43639 <at> debbugs.gnu.org (full text, mbox):

From: Julien Lepiller <julien <at> lepiller.eu>
To: 43639 <at> debbugs.gnu.org
Subject: [PATCH 10/15] gnu: Add java-antlr4-runtime-4.1.
Date: Sun, 27 Sep 2020 00:18:19 +0200
* gnu/packages/java.scm (java-antlr4-runtime-4.1): New variable.
---
 gnu/packages/java.scm | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 0e02528a38..40a10be8b2 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -8460,6 +8460,30 @@ text or binary files.  It's widely used to build languages, tools, and
 frameworks.  From a grammar, ANTLR generates a parser that can build and walk
 parse trees.")))
 
+(define-public java-antlr4-runtime-4.1
+  (package
+    (inherit java-antlr4-runtime)
+    (version "4.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/antlr/antlr4")
+                     (commit version)))
+              (file-name (git-file-name "antlr4" version))
+              (sha256
+               (base32
+                "1i8hmx5an58cjyvhji0xgpvd6lq00z1k1mjys025q2wqc25wv4c1"))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments java-antlr4-runtime)
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (add-before 'configure 'chmod
+             (lambda _
+               (chmod "build.xml" #o644)
+               #t))))))
+    (inputs
+     `(("java-treelayout" ,java-treelayout)))))
+
 (define-public java-commons-cli-1.2
   ;; This is a bootstrap dependency for Maven2.
   (package
-- 
2.28.0





Information forwarded to guix-patches <at> gnu.org:
bug#43639; Package guix-patches. (Sat, 26 Sep 2020 22:20:03 GMT) Full text and rfc822 format available.

Message #38 received at 43639 <at> debbugs.gnu.org (full text, mbox):

From: Julien Lepiller <julien <at> lepiller.eu>
To: 43639 <at> debbugs.gnu.org
Subject: [PATCH 11/15] gnu: Add antlr4-4.1.
Date: Sun, 27 Sep 2020 00:18:20 +0200
* gnu/packages/java.scm (antlr4-4.1): New variable.
---
 gnu/packages/java.scm | 36 ++++++++++++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 40a10be8b2..198a06c292 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -8484,6 +8484,42 @@ parse trees.")))
     (inputs
      `(("java-treelayout" ,java-treelayout)))))
 
+(define-public antlr4-4.1
+  (package
+    (inherit antlr4)
+    (version (package-version java-antlr4-runtime-4.1))
+    (source (package-source java-antlr4-runtime-4.1))
+    (arguments
+      (substitute-keyword-arguments (package-arguments antlr4)
+        ((#:test-dir _)
+         "tool/test")
+        ((#:test-exclude excludes)
+         `(list "**/TestParseErrors.java"
+                "**/TestTopologicalSort.java"
+                ,@excludes))
+        ((#:phases phases)
+         `(modify-phases ,phases
+            (delete 'generate-unicode)
+            (replace 'check
+              (lambda _
+                (invoke "ant" "check")
+                #t))
+            (add-before 'configure 'chmod
+              (lambda _
+                (chmod "build.xml" #o644)
+                #t))
+            (delete 'remove-graphemes)
+            (delete 'remove-unrelated-languages)
+            (delete 'generate-test-parsers)))))
+    (inputs
+      (map
+        (match-lambda
+          ((name package)
+           (if (equal? name "java-antlr4-runtime")
+               (list name java-antlr4-runtime-4.1)
+               (list name package))))
+        (package-inputs antlr4)))))
+
 (define-public java-commons-cli-1.2
   ;; This is a bootstrap dependency for Maven2.
   (package
-- 
2.28.0





Information forwarded to guix-patches <at> gnu.org:
bug#43639; Package guix-patches. (Sat, 26 Sep 2020 22:20:03 GMT) Full text and rfc822 format available.

Message #41 received at 43639 <at> debbugs.gnu.org (full text, mbox):

From: Julien Lepiller <julien <at> lepiller.eu>
To: 43639 <at> debbugs.gnu.org
Subject: [PATCH 13/15] gnu: Add java-tunnelvisionlabs-antlr4-runtime.
Date: Sun, 27 Sep 2020 00:18:22 +0200
* gnu/packages/java.scm (java-tunnelvisionlabs-antlr4-runtime): New
variable.
---
 gnu/packages/java.scm | 73 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 73 insertions(+)

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 73a5fbd693..83d26c4ab4 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -8558,6 +8558,79 @@ parse trees.")))
     (description "This package contains annotations used during the build of
 the runtime library of ANTLR.")))
 
+(define java-tunnelvisionlabs-antlr4-runtime-bootstrap
+  (package
+    (inherit java-antlr4-runtime)
+    (name "java-tunnelvisionlabs-antlr4-runtime")
+    (version (package-version java-tunnelvisionlabs-antlr4-runtime-annotations))
+    (source (package-source java-tunnelvisionlabs-antlr4-runtime-annotations))
+    (arguments
+     `(#:jar-name "java-antlr4-runtime.jar"
+       #:source-dir "runtime/Java/src"
+       #:tests? #f; tests require antlr4, but antlr4 depends on this package
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'generate-xpath-lexer
+           (lambda _
+             (invoke "antlr4" "-lib" "runtime/Java/src/org/antlr/v4/runtime/tree/xpath"
+                     "-visitor" "-no-listener"
+                     "-package" "org.antlr.v4.runtime.tree.xpath"
+                     "runtime/Java/src/org/antlr/v4/runtime/tree/xpath/XPathLexer.g4")
+             ;; Generated code is for an incompatible version of the runtime
+             (substitute* "runtime/Java/src/org/antlr/v4/runtime/tree/xpath/XPathLexer.java"
+               (("LexerATNSimulator\\(this,_ATN,_decisionToDFA,_sharedContextCache\\)")
+                "LexerATNSimulator(this,_ATN)"))
+             #t))
+         (add-before 'build 'copy-resources
+           (lambda _
+             (copy-recursively "runtime/Java/src/main/dot"
+                               "build/classes")
+             #t)))))
+    (native-inputs
+     `(("antlr4" ,antlr4-4.1)
+       ("java-tunnelvisionlabs-antlr4-runtime-annotations"
+        ,java-tunnelvisionlabs-antlr4-runtime-annotations)))))
+
+(define java-tunnelvisionlabs-antlr4-bootstrap
+  (package
+    (inherit antlr4)
+    (name "java-tunnelvisionlabs-antlr4")
+    (version (package-version java-tunnelvisionlabs-antlr4-runtime-annotations))
+    (source (package-source java-tunnelvisionlabs-antlr4-runtime-annotations))
+    (arguments
+     (substitute-keyword-arguments (package-arguments antlr4)
+       ((#:test-dir _)
+        "tool/test:runtime-testsuite/src")
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (delete 'remove-unrelated-languages)
+           (delete 'remove-graphemes)
+           (delete 'generate-test-parsers)
+           (delete 'check)))))
+    (native-inputs '())
+    (inputs
+     `(("antlr3" ,antlr3)
+       ("java-antlr4-runtime" ,java-tunnelvisionlabs-antlr4-runtime-bootstrap)
+       ("java-tunnelvisionlabs-antlr4-runtime-annotations"
+        ,java-tunnelvisionlabs-antlr4-runtime-annotations)
+       ("java-icu4j" ,java-icu4j)
+       ("java-jsonp-api" ,java-jsonp-api)
+       ("java-stringtemplate" ,java-stringtemplate)
+       ("java-treelayout" ,java-treelayout)))))
+
+(define-public java-tunnelvisionlabs-antlr4-runtime
+  (package
+    (inherit java-tunnelvisionlabs-antlr4-runtime-bootstrap)
+    (native-inputs
+      (map
+        (match-lambda
+          ((name package)
+           (if (equal? name "antlr4")
+               (list name java-tunnelvisionlabs-antlr4-bootstrap)
+               (list name package))))
+        (package-native-inputs java-tunnelvisionlabs-antlr4-runtime-bootstrap)))))
+
+
 (define-public java-commons-cli-1.2
   ;; This is a bootstrap dependency for Maven2.
   (package
-- 
2.28.0





Information forwarded to guix-patches <at> gnu.org:
bug#43639; Package guix-patches. (Sat, 26 Sep 2020 22:20:04 GMT) Full text and rfc822 format available.

Message #44 received at 43639 <at> debbugs.gnu.org (full text, mbox):

From: Julien Lepiller <julien <at> lepiller.eu>
To: 43639 <at> debbugs.gnu.org
Subject: [PATCH 14/15] gnu: Add java-tunnelvisionlabs-antlr4.
Date: Sun, 27 Sep 2020 00:18:23 +0200
* gnu/packages/java.scm (java-tunnelvisionlabs-antlr4): New variable.
---
 gnu/packages/java.scm | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 83d26c4ab4..8b6f3f945b 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -8630,6 +8630,17 @@ the runtime library of ANTLR.")))
                (list name package))))
         (package-native-inputs java-tunnelvisionlabs-antlr4-runtime-bootstrap)))))
 
+(define-public java-tunnelvisionlabs-antlr4
+  (package
+    (inherit java-tunnelvisionlabs-antlr4-bootstrap)
+    (inputs
+      (map
+        (match-lambda
+          ((name package)
+           (if (equal? name "java-antlr4-runtime")
+               (list name java-tunnelvisionlabs-antlr4-runtime)
+               (list name package))))
+        (package-inputs java-tunnelvisionlabs-antlr4-bootstrap)))))
 
 (define-public java-commons-cli-1.2
   ;; This is a bootstrap dependency for Maven2.
-- 
2.28.0





Information forwarded to guix-patches <at> gnu.org:
bug#43639; Package guix-patches. (Sat, 26 Sep 2020 22:20:04 GMT) Full text and rfc822 format available.

Message #47 received at 43639 <at> debbugs.gnu.org (full text, mbox):

From: Julien Lepiller <julien <at> lepiller.eu>
To: 43639 <at> debbugs.gnu.org
Subject: [PATCH 15/15] gnu: Add java-javaparser.
Date: Sun, 27 Sep 2020 00:18:24 +0200
* gnu/packages/java.scm (java-javaparser): New variable.
---
 gnu/packages/java.scm | 95 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 95 insertions(+)

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 8b6f3f945b..c96fee2bb5 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -13441,3 +13441,98 @@ in Java, usable from Groovy, Kotlin, Scala, etc.")
 used in JVM-based languages.  They serve as an additional documentation and
 can be interpreted by IDEs and static analysis tools to improve code analysis.")
     (license license:expat)))
+
+(define-public java-javaparser
+  (package
+    (name "java-javaparser")
+    (version "3.16.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/javaparser/javaparser")
+                     (commit (string-append "javaparser-parent-" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1a4jk12ffa31fa0y8vda0739vpfj1206p0nha842b7bixbvwamv9"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  (for-each delete-file
+                            (find-files "." "\\.jar$"))
+                  #t))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f; tests require jbehave and junit5
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'fill-template
+           (lambda _
+             (with-directory-excursion "javaparser-core/src/main"
+               (copy-file "java-templates/com/github/javaparser/JavaParserBuild.java"
+                          "java/com/github/javaparser/JavaParserBuild.java")
+               (substitute* "java/com/github/javaparser/JavaParserBuild.java"
+                 (("\\$\\{project.version\\}") ,version)
+                 (("\\$\\{project.name\\}") "javaparser")
+                 (("\\$\\{project.build.finalName\\}") "javaparser")
+                 (("\\$\\{maven.version\\}") "fake")
+                 (("\\$\\{maven.build.version\\}") "fake")
+                 (("\\$\\{build.timestamp\\}") "0")
+                 (("\\$\\{java.vendor\\}") "Guix")
+                 (("\\$\\{java.vendor.url\\}") "https://gnu.org/software/guix")
+                 (("\\$\\{java.version\\}") "1.8")
+                 (("\\$\\{os.arch\\}") "any")
+                 (("\\$\\{os.name\\}") "GuixSD")
+                 (("\\$\\{os.version\\}") "not available")))
+             #t))
+         (add-before 'build 'generate-javacc
+           (lambda _
+             (with-directory-excursion "javaparser-core/src/main/java"
+               (invoke "java" "javacc" "../javacc/java.jj"))
+             #t))
+         (add-before 'build 'copy-javacc-support
+           (lambda _
+             (with-directory-excursion "javaparser-core/src/main"
+               (copy-recursively "javacc-support" "java"))
+             #t))
+         (replace 'build
+           (lambda _
+             (define (build name)
+               (format #t "Building ~a~%" name)
+               (delete-file-recursively "build/classes")
+               (mkdir-p "build/classes")
+               (apply invoke "javac"
+                      "-cp" (string-append (getenv "CLASSPATH") ":"
+                                           (string-join (find-files "build/jar" ".")
+                                                        ":"))
+                      "-d" "build/classes"
+                      (find-files (string-append name "/src/main/java")
+                                  ".*.java"))
+               (invoke "jar" "-cf" (string-append "build/jar/" name ".jar")
+                       "-C" "build/classes" "."))
+             (mkdir-p "build/classes")
+             (mkdir-p "build/test-classes")
+             (mkdir-p "build/jar")
+             (build "javaparser-core")
+             (build "javaparser-core-serialization")
+             (build "javaparser-core-generators")
+             (build "javaparser-core-metamodel-generator")
+             (build "javaparser-symbol-solver-core")
+             #t))
+         (replace 'install
+           (install-jars "build/jar")))))
+    (inputs
+     `(("java-guava" ,java-guava)
+       ("java-jboss-javassist" ,java-jboss-javassist)
+       ("java-jsonp-api" ,java-jsonp-api)))
+    (native-inputs
+     `(("javacc" ,javacc)))
+    (home-page "http://javaparser.org/")
+    (synopsis "Parser for Java")
+    (description
+     "This project contains a set of libraries implementing a Java 1.0 - Java
+11 Parser with advanced analysis functionalities.")
+    (license (list
+               ;; either lgpl or asl
+               license:lgpl3+
+               license:asl2.0))))
-- 
2.28.0





Information forwarded to guix-patches <at> gnu.org:
bug#43639; Package guix-patches. (Sat, 26 Sep 2020 22:20:05 GMT) Full text and rfc822 format available.

Message #50 received at 43639 <at> debbugs.gnu.org (full text, mbox):

From: Julien Lepiller <julien <at> lepiller.eu>
To: 43639 <at> debbugs.gnu.org
Subject: [PATCH 12/15] gnu: Add
 java-tunnelvisionlabs-antlr4-runtime-annotations.
Date: Sun, 27 Sep 2020 00:18:21 +0200
* gnu/packages/java.scm
(java-tunnelvisionlabs-antlr4-runtime-annotations): New variable.
* gnu/packages/patches/java-tunnelvisionlabs-antlr-code-too-large.patch:
New file.
* gnu/local.mk (dist_patch_DATA): Add it.
---
 gnu/local.mk                                  |  1 +
 gnu/packages/java.scm                         | 38 ++++++++
 ...unnelvisionlabs-antlr-code-too-large.patch | 87 +++++++++++++++++++
 3 files changed, 126 insertions(+)
 create mode 100644 gnu/packages/patches/java-tunnelvisionlabs-antlr-code-too-large.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 8e2f1976bf..01a825721d 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1161,6 +1161,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/jamvm-2.0.0-opcode-guard.patch		\
   %D%/packages/patches/java-antlr4-Add-standalone-generator.patch	\
   %D%/packages/patches/java-antlr4-fix-code-too-large.java	\
+  %D%/packages/patches/java-tunnelvisionlabs-antlr-code-too-large.patch	\
   %D%/packages/patches/java-apache-ivy-port-to-latest-bouncycastle.patch	\
   %D%/packages/patches/java-commons-collections-fix-java8.patch \
   %D%/packages/patches/java-jeromq-fix-tests.patch		\
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 198a06c292..73a5fbd693 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -8520,6 +8520,44 @@ parse trees.")))
                (list name package))))
         (package-inputs antlr4)))))
 
+(define-public java-tunnelvisionlabs-antlr4-runtime-annotations
+  (package
+    (inherit java-antlr4-runtime)
+    (name "java-tunnelvisionlabs-antlr4-runtime-annotations")
+    (version "4.7.4")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/tunnelvisionlabs/antlr4")
+                     (commit (string-append version "-opt"))))
+              (file-name (git-file-name "java-tunnelvisionlabs-antlr4" version))
+              (sha256
+               (base32
+                "1mf2lvvsszpialsk23ma83pwp50nd32lrbjpa847zlm5gmranbr8"))
+              (patches
+                (search-patches "java-antlr4-Add-standalone-generator.patch"
+                                "java-tunnelvisionlabs-antlr-code-too-large.patch"))))
+    (arguments
+     `(#:jar-name "java-antlr4-runtime-annotations.jar"
+       #:source-dir "runtime/JavaAnnotations/src"
+       #:tests? #f; no tests
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'build 'copy-resources
+           (lambda _
+             (copy-recursively "runtime/JavaAnnotations/resources"
+                               "build/classes")
+             #t))
+         (add-after 'copy-resources 'rebuild-jar
+           (lambda _
+             (invoke "ant" "jar")
+             #t)))))
+    (inputs '())
+    (native-inputs '())
+    (synopsis "Annotations for ANTLR's runtime library")
+    (description "This package contains annotations used during the build of
+the runtime library of ANTLR.")))
+
 (define-public java-commons-cli-1.2
   ;; This is a bootstrap dependency for Maven2.
   (package
diff --git a/gnu/packages/patches/java-tunnelvisionlabs-antlr-code-too-large.patch b/gnu/packages/patches/java-tunnelvisionlabs-antlr-code-too-large.patch
new file mode 100644
index 0000000000..7bdf05eb9c
--- /dev/null
+++ b/gnu/packages/patches/java-tunnelvisionlabs-antlr-code-too-large.patch
@@ -0,0 +1,87 @@
+From 56ae699a27eca52cc0bb14cbc9944b62136be52b Mon Sep 17 00:00:00 2001
+From: Julien Lepiller <julien <at> lepiller.eu>
+Date: Sun, 20 Sep 2020 21:07:29 +0200
+Subject: [PATCH] Separate addPropertyAliases in two methods
+
+The quantity of data used to generate addPropertyAliases creates a big
+method, that is too big for java and results in "error: code too large".
+This is most likely due to added data between the expected version of
+icu and the actual version of icu in Guix.
+---
+ .../org/antlr/v4/tool/templates/unicodedata.st | 15 ++++++++++++---
+ .../unicode/UnicodeDataTemplateController.java | 18 ++++++++++--------
+ 2 files changed, 22 insertions(+), 11 deletions(-)
+
+diff --git a/tool/resources/org/antlr/v4/tool/templates/unicodedata.st b/tool/resources/org/antlr/v4/tool/templates/unicodedata.st
+index f5052b7..125d15b 100644
+--- a/tool/resources/org/antlr/v4/tool/templates/unicodedata.st
++++ b/tool/resources/org/antlr/v4/tool/templates/unicodedata.st
+@@ -1,4 +1,4 @@
+-unicodedata(propertyCodePointRanges, propertyAliases) ::= <<
++unicodedata(propertyCodePointRanges, propertyAliasesA, propertyAliasesB) ::= <<
+ package org.antlr.v4.unicode;
+ 
+ import java.util.Arrays;
+@@ -17,7 +17,7 @@ public enum UnicodeData {
+ 	;
+ 
+ 	private static final Map\<String, IntervalSet\> propertyCodePointRanges = new HashMap\<String, IntervalSet\>(<length(propertyCodePointRanges)>);
+-	private static final Map\<String, String\> propertyAliases = new HashMap\<String, String\>(<length(propertyAliases)>);
++	private static final Map\<String, String\> propertyAliases = new HashMap\<String, String\>(<length(propertyAliasesA)> + <length(propertyAliasesB)>);
+ 
+ 	// Work around Java 64k bytecode method limit by splitting up static
+ 	// initialization into one method per Unicode property
+@@ -33,8 +33,17 @@ static private void addProperty<i>() {
+ \}}; separator="\n\n">
+ 
+ 	// Property aliases
++	static private void addPropertyAliasesA() {
++		<propertyAliasesA.keys:{ k | propertyAliases.put("<k>".toLowerCase(Locale.US), "<propertyAliasesA.(k)>".toLowerCase(Locale.US)); }; separator="\n">
++	}
++
++	static private void addPropertyAliasesB() {
++		<propertyAliasesB.keys:{ k | propertyAliases.put("<k>".toLowerCase(Locale.US), "<propertyAliasesB.(k)>".toLowerCase(Locale.US)); }; separator="\n">
++	}
++
+ 	static private void addPropertyAliases() {
+-		<propertyAliases.keys:{ k | propertyAliases.put("<k>".toLowerCase(Locale.US), "<propertyAliases.(k)>".toLowerCase(Locale.US)); }; separator="\n">
++        addPropertyAliasesA();
++        addPropertyAliasesB();
+ 	}
+ 
+ 	// Put it all together
+diff --git a/tool/src/org/antlr/v4/unicode/UnicodeDataTemplateController.java b/tool/src/org/antlr/v4/unicode/UnicodeDataTemplateController.java
+index 570190c..692cee0 100644
+--- a/tool/src/org/antlr/v4/unicode/UnicodeDataTemplateController.java
++++ b/tool/src/org/antlr/v4/unicode/UnicodeDataTemplateController.java
+@@ -74,17 +74,19 @@ public abstract class UnicodeDataTemplateController {
+ 		addTR35ExtendedPictographicPropertyCodesToCodePointRanges(propertyCodePointRanges);
+ 		addEmojiPresentationPropertyCodesToCodePointRanges(propertyCodePointRanges);
+ 
+-		Map<String, String> propertyAliases = new LinkedHashMap<String, String>();
+-		addUnicodeCategoryCodesToNames(propertyAliases);
+-		addUnicodeBinaryPropertyCodesToNames(propertyAliases);
+-		addUnicodeScriptCodesToNames(propertyAliases);
+-		addUnicodeBlocksToNames(propertyAliases);
+-		addUnicodeIntPropertyCodesToNames(propertyAliases);
+-		propertyAliases.put("EP", "Extended_Pictographic");
++		Map<String, String> propertyAliasesA = new LinkedHashMap<String, String>();
++		Map<String, String> propertyAliasesB = new LinkedHashMap<String, String>();
++		addUnicodeCategoryCodesToNames(propertyAliasesA);
++		addUnicodeBinaryPropertyCodesToNames(propertyAliasesA);
++		addUnicodeScriptCodesToNames(propertyAliasesA);
++		addUnicodeBlocksToNames(propertyAliasesB);
++		addUnicodeIntPropertyCodesToNames(propertyAliasesB);
++		propertyAliasesB.put("EP", "Extended_Pictographic");
+ 
+ 		Map<String, Object> properties = new LinkedHashMap<String, Object>();
+ 		properties.put("propertyCodePointRanges", propertyCodePointRanges);
+-		properties.put("propertyAliases", propertyAliases);
++		properties.put("propertyAliasesA", propertyAliasesA);
++		properties.put("propertyAliasesB", propertyAliasesB);
+ 		return properties;
+ 	}
+ 
+-- 
+2.28.0
+
-- 
2.28.0





Information forwarded to guix-patches <at> gnu.org:
bug#43639; Package guix-patches. (Sat, 26 Sep 2020 22:24:02 GMT) Full text and rfc822 format available.

Message #53 received at 43639 <at> debbugs.gnu.org (full text, mbox):

From: Julien Lepiller <julien <at> lepiller.eu>
To: 43639 <at> debbugs.gnu.org
Subject: [PATCH 16/16] gnu: groovy: Update to 3.0.5.
Date: Sun, 27 Sep 2020 00:23:25 +0200
* gnu/packages/groovy.scm (groovy): Update to 3.0.5.
---
 gnu/packages/groovy.scm | 1430 ++++++++++++++++-----------------------
 1 file changed, 577 insertions(+), 853 deletions(-)

diff --git a/gnu/packages/groovy.scm b/gnu/packages/groovy.scm
index e21c4e3775..c44a17b59e 100644
--- a/gnu/packages/groovy.scm
+++ b/gnu/packages/groovy.scm
@@ -31,7 +31,7 @@
 (define java-groovy-bootstrap
   (package
     (name "java-groovy-bootstrap")
-    (version "2.4.15")
+    (version "3.0.5")
     (source
      (origin
        (method git-fetch)
@@ -43,57 +43,69 @@
                                   version)))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1q4cplimr18j93zz92kgq8b6wdv0p9svr7cdr47q8b2mbjpd0x3j"))
+        (base32 "00556qxjmcn3a3xhfy6n0zw3d69mnw72vzm2rb6n4ihzkk7579nm"))
        (patches
         (search-patches "groovy-add-exceptionutilsgenerator.patch"))))
     (build-system ant-build-system)
     (arguments
      `(#:jar-name "groovy.jar"
-       #:source-dir "src/main:subprojects/groovy-test/src/main/java"
+       #:source-dir "src/main/java:src/main/antlr2:subprojects/parser-antlr4/src/main/java:src/antlr"
        #:test-dir "src/test"
        #:tests? #f
-       #:jdk ,icedtea-8
+       #:jdk ,openjdk9
        #:main-class "groovy.ui.GroovyMain"
        #:phases
        (modify-phases %standard-phases
-         (add-before 'build 'fix-java8
-           ;; Fix "Reference to plus is ambiguous"
-           (lambda _
-             (substitute* "src/main/org/codehaus/groovy/runtime/DefaultGroovyMethods.java"
-               (("toList\\(left\\)")
-                "(List<T>)toList(left)"))
-             #t))
          (add-before 'build 'generate-parsers
            (lambda _
-             (with-directory-excursion "src/main/org/codehaus/groovy/antlr/java"
+             (with-directory-excursion "src/main/antlr2/org/codehaus/groovy/antlr/java"
                (invoke "antlr" "java.g"))
-             (with-directory-excursion "src/main/org/codehaus/groovy/antlr"
+             (with-directory-excursion "src/main/antlr2/org/codehaus/groovy/antlr"
                (mkdir "parser")
                (with-directory-excursion "parser"
                  (invoke "antlr" "../groovy.g")))
+             (invoke "antlr4" "-lib" "src/antlr"
+                     "-package" "org.apache.groovy.parser.antlr4"
+                     "-visitor" "-no-listener" "src/antlr/GroovyLexer.g4")
+             (invoke "antlr4" "-lib" "src/antlr"
+                     "-package" "org.apache.groovy.parser.antlr4"
+                     "-visitor" "-no-listener" "src/antlr/GroovyParser.g4")
              #t))
          (add-before 'build 'generate-exception-utils
            (lambda _
              (invoke "javac" "-cp" (getenv "CLASSPATH")
+                     "-source" "1.8" "-target" "1.8"
                      "config/ant/src/org/codehaus/groovy/ExceptionUtilsGenerator.java")
              (invoke "java" "-cp" (string-append (getenv "CLASSPATH")
                                                  ":config/ant/src")
                      "org.codehaus.groovy.ExceptionUtilsGenerator"
                      "build/classes/org/codehaus/groovy/runtime/ExceptionUtils.class")
+             #t))
+         (add-before 'build 'set-source-level
+           (lambda _
+             (substitute* "build.xml"
+               (("<javac") "<javac source=\"1.8\" target=\"1.8\""))
              #t)))))
     (native-inputs
-     `(("java-junit" ,java-junit)
+     `(("antlr2" ,antlr2)
+       ("antlr4" ,java-tunnelvisionlabs-antlr4)
+       ("java-jsr305" ,java-jsr305)
+       ("java-junit" ,java-junit)
        ("java-hamcrest-core" ,java-hamcrest-core)
-       ("antlr2" ,antlr2)
        ("java-jmock-1" ,java-jmock-1)
        ("java-xmlunit-legacy" ,java-xmlunit-legacy)))
     (inputs
-     `(("java-commons-cli" ,java-commons-cli)
-       ("java-asm" ,java-asm)
+     `(("java-antlr4-runtime" ,java-tunnelvisionlabs-antlr4-runtime)
+       ("java-antlr4-runtime-annotations"
+        ,java-tunnelvisionlabs-antlr4-runtime-annotations)
+       ("java-asm" ,java-asm-8)
+       ("java-asm-util" ,java-asm-util-8)
        ("java-classpathx-servletapi" ,java-classpathx-servletapi)
-       ("java-xstream" ,java-xstream)
+       ("java-commons-cli" ,java-commons-cli)
        ("java-jansi" ,java-jansi)
-       ("java-jline-2" ,java-jline-2)))
+       ("java-jline-2" ,java-jline-2)
+       ("java-picocli" ,java-picocli)
+       ("java-xstream" ,java-xstream)))
     (home-page "http://groovy-lang.org/")
     (synopsis "Groovy's java bootstrap")
     (description "This package contains the java bootstrap that is used to build
@@ -106,26 +118,25 @@ groovy submodules.")
     (name "groovy-bootstrap")
     (arguments
      `(#:jar-name "groovy.jar"
-       #:jdk ,icedtea-8
+       #:jdk ,openjdk9
        ;Requires groovy-xml and logback-classic which are circular dependencies
        #:tests? #f
        #:phases
        (modify-phases %standard-phases
-         (add-before 'build 'fix-java8
-           ;; Fix "Reference to plus is ambiguous"
-           (lambda _
-             (substitute* "src/main/org/codehaus/groovy/runtime/DefaultGroovyMethods.java"
-               (("toList\\(left\\)")
-                "(List<T>)toList(left)"))
-             #t))
          (add-before 'build 'generate-parser
            (lambda _
-             (with-directory-excursion "src/main/org/codehaus/groovy/antlr/java"
+             (with-directory-excursion "src/main/antlr2/org/codehaus/groovy/antlr/java"
                (invoke "antlr" "java.g"))
-             (with-directory-excursion "src/main/org/codehaus/groovy/antlr"
+             (with-directory-excursion "src/main/antlr2/org/codehaus/groovy/antlr"
                (mkdir "parser")
                (with-directory-excursion "parser"
                  (invoke "antlr" "../groovy.g")))
+             (invoke "antlr4" "-lib" "src/antlr"
+                     "-package" "org.apache.groovy.parser.antlr4"
+                     "-visitor" "-no-listener" "src/antlr/GroovyLexer.g4")
+             (invoke "antlr4" "-lib" "src/antlr"
+                     "-package" "org.apache.groovy.parser.antlr4"
+                     "-visitor" "-no-listener" "src/antlr/GroovyParser.g4")
              #t))
          (add-before 'build 'generate-exception-utils
            (lambda _
@@ -141,19 +152,19 @@ groovy submodules.")
              (mkdir-p "target/classes/org/codehaus/groovy/runtime")
              (mkdir-p "target/classes/META-INF")
              (invoke "javac" "-cp" (getenv "CLASSPATH")
-                     "src/main/org/codehaus/groovy/tools/DgmConverter.java")
+                     "src/main/java/org/codehaus/groovy/tools/DgmConverter.java")
              (invoke "java" "-cp" (string-append (getenv "CLASSPATH")
-                                                 ":src/main")
+                                                 ":src/main/java")
                      "org.codehaus.groovy.tools.DgmConverter")
              #t))
          (add-before 'build 'copy-resources
            (lambda _
-             (with-directory-excursion "src/main"
+             (with-directory-excursion "src/main/java"
                (for-each (lambda (file)
-                           (mkdir-p (string-append "../../target/classes/"
+                           (mkdir-p (string-append "../../../target/classes/"
                                                    (dirname file)))
                            (copy-file file
-                                      (string-append "../../target/classes/"
+                                      (string-append "../../../target/classes/"
                                                      file)))
                   (find-files "." ".*.(txt|properties|xml|html)")))
              #t))
@@ -162,6 +173,7 @@ groovy submodules.")
              (mkdir-p "build/jar")
              (apply invoke "java" "-cp" (getenv "CLASSPATH")
                            "org.codehaus.groovy.tools.FileSystemCompiler"
+                           "-cp" (getenv "CLASSPATH")
                            "-d" "target/classes"
                            "-j"; joint compilation
                            (find-files "src/main"
@@ -186,7 +198,7 @@ is used to build the groovy submodules written in groovy.")))
     (name "groovy-tests-bootstrap")
     (arguments
      `(#:jar-name "groovy-tests-bootstrap.jar"
-       #:jdk ,icedtea-8
+       #:jdk ,openjdk9
        #:tests? #f; no tests
        #:phases
        (modify-phases %standard-phases
@@ -196,17 +208,20 @@ is used to build the groovy submodules written in groovy.")))
              (mkdir-p "build/jar")
              (apply invoke "java" "-cp" (getenv "CLASSPATH")
                     "org.codehaus.groovy.tools.FileSystemCompiler"
+                    "-cp" (getenv "CLASSPATH")
                     "-d" "build/classes"
                     "-j"; joint compilation
                     (append
                       (find-files "src/test" "TestSupport.java")
                       (find-files "src/test" "HeadlessTestSupport.java")
+                      (find-files "src/test" "AstAssert.groovy")
                       (find-files "src/test" "XmlAssert.java")))
              (invoke "jar" "-cf" "build/jar/groovy-tests-bootstrap.jar"
                      "-C" "build/classes" ".")
              #t)))))
     (inputs
      `(("groovy-test" ,groovy-test)
+       ("groovy-parser-antlr4" ,groovy-parser-antlr4)
        ,@(package-inputs groovy-bootstrap)))
     (native-inputs
      `(("groovy-bootstrap" ,groovy-bootstrap)
@@ -215,855 +230,548 @@ is used to build the groovy submodules written in groovy.")))
     (description "This package contains three classes required for testing
 other groovy submodules.")))
 
+(define (groovy-subproject name)
+  (package
+    (inherit groovy-bootstrap)
+    (name name)
+    (arguments
+     `(#:jar-name ,(string-append name ".jar")
+       #:test-dir ,(string-append name "/src/test")
+       #:test-include (list "**/*Test.java" "**/*.groovy")
+       #:jdk ,openjdk9
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'build
+           (lambda _
+             (mkdir-p "build/classes")
+             (mkdir-p "build/jar")
+             (apply invoke "java" "-cp" (getenv "CLASSPATH")
+                    "org.codehaus.groovy.tools.FileSystemCompiler"
+                    "-cp" (getenv "CLASSPATH")
+                    "-d" "build/classes" "-j"
+                    (append
+                      (find-files ,(string-append "subprojects/" name "/src/main/java")
+                        ".*\\.(groovy|java)$")
+                      (find-files ,(string-append "subprojects/" name "/src/main/groovy")
+                        ".*\\.(groovy|java)$")))
+             (invoke "jar" "-cf" ,(string-append "build/jar/" name ".jar")
+                     "-C" "build/classes" ".")
+             #t))
+         (add-before 'build 'copy-resources
+           (lambda _
+             (let ((resource-dir ,(string-append "subprojects/" name
+                                                 "/src/main/resources")))
+               (when (file-exists? resource-dir)
+                 (copy-recursively resource-dir "build/classes")))
+             #t))
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (mkdir-p "build/test-classes")
+               (substitute* "build.xml"
+                 (("depends=\"compile-tests\"") "depends=\"\"")
+                 (("}/java") "}/"))
+               (apply invoke "java" "-cp"
+                      (string-append (getenv "CLASSPATH") ":build/classes")
+                      "org.codehaus.groovy.tools.FileSystemCompiler" "-cp"
+                      (string-append (getenv "CLASSPATH") ":build/classes")
+                      "-d" "build/test-classes" "-j"
+                      (append
+                        (find-files ,(string-append "subprojects/" name "/src/test/java")
+                                    ".*\\.(groovy|java)$")
+                        (find-files ,(string-append "subprojects/" name "/src/test/groovy")
+                                    ".*\\.(groovy|java)$")))
+               (invoke "ant" "check"))
+             #t)))))))
+
+(define groovy-parser-antlr4
+  (let ((base (groovy-subproject "parser-antlr4")))
+    (package
+      (inherit base)
+      (name "groovy-parser-antlr4")
+      (arguments
+       `(#:tests? #f
+         ,@(substitute-keyword-arguments (package-arguments base)
+            ((#:phases phases)
+             `(modify-phases ,phases
+                (add-before 'build 'generate-parser
+                  (lambda _
+                    (invoke "antlr4" "-lib" "src/antlr"
+                            "-package" "org.apache.groovy.parser.antlr4"
+                            "-visitor" "-no-listener" "src/antlr/GroovyLexer.g4")
+                    (invoke "antlr4" "-lib" "src/antlr"
+                            "-package" "org.apache.groovy.parser.antlr4"
+                            "-visitor" "-no-listener" "src/antlr/GroovyParser.g4")
+                    (for-each
+                      (lambda (file)
+                        (install-file file
+                                      "subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4"))
+                      (find-files "src/antlr" ".*.java$"))
+                    #t)))))))
+      (native-inputs
+       `(("groovy-bootstrap" ,groovy-bootstrap)
+         ,@(package-native-inputs java-groovy-bootstrap)))
+      (synopsis "Groovy antlr4 parser submodule")
+      (description "This package contains the new parser Parrot for Groovy, which
+is based on Antlr4.  The new parser can parse Groovy source code and construct
+the related AST, which is almost identical to the one generated by the old
+parser.  Currently all features of Groovy are available."))))
+
 (define groovy-test
-  (package
-    (inherit groovy-bootstrap)
-    (name "groovy-test")
-    (arguments
-     `(#:jar-name "groovy-test.jar"
-       #:jdk ,icedtea-8
-       #:test-dir "subprojects/groovy-test/src/test"
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'build
-           (lambda _
-             (mkdir-p "build/classes")
-             (mkdir-p "build/jar")
-             (apply invoke "java" "-cp" (getenv "CLASSPATH")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/classes" "-j"; joint compilation
-                    (find-files "subprojects/groovy-test/src/main"
-                                ".*\\.(groovy|java)$"))
-             (invoke "jar" "-cf" "build/jar/groovy-test.jar"
-                     "-C" "build/classes" ".")
-             #t))
-         (replace 'check
-           (lambda _
-             (mkdir-p "build/test-classes")
-             (substitute* "build.xml"
-               (("depends=\"compile-tests\"") "depends=\"\"")
-               (("}/java") "}/groovy"))
-             (apply invoke "java" "-cp"
-                    (string-append (getenv "CLASSPATH") ":build/classes")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/test-classes" "-j"
-                    (append (find-files "subprojects/groovy-test/src/test"
-                                        ".*\\.(groovy|java)$")))
-             (invoke "ant" "check")
-             #t)))))
-    (native-inputs
-     `(("groovy-bootstrap" ,groovy-bootstrap)
-       ,@(package-native-inputs java-groovy-bootstrap)))
-    (synopsis "Groovy test submodule")
-    (description "This package contains the test submodules used to test
-other groovy submodules.")))
+  (let ((base (groovy-subproject "groovy-test")))
+    (package
+      (inherit base)
+      (arguments
+        `(;#:tests? #f
+          ,@(package-arguments base)))
+      (synopsis "Groovy test submodule")
+      (description "This package contains the test submodules used to test
+other groovy submodules."))))
 
 (define groovy-xml
-  (package
-    (inherit groovy-bootstrap)
-    (name "groovy-xml")
-    (arguments
-     `(#:jar-name "groovy-xml.jar"
-       #:jdk ,icedtea-8
-       #:test-dir "src/test"
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'chdir
-           (lambda _
-             (chdir "subprojects/groovy-xml")
-             #t))
-         (replace 'build
-           (lambda _
-             (mkdir-p "build/classes")
-             (mkdir-p "build/jar")
-             (apply invoke "java" "-cp" (getenv "CLASSPATH")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/classes" "-j"; joint compilation
-                    (find-files "src/main" ".*\\.(groovy|java)$"))
-             (invoke "jar" "-cf" "build/jar/groovy-xml.jar"
-                     "-C" "build/classes" ".")
-             #t))
-         (replace 'check
-           (lambda _
-             (mkdir-p "build/test-classes")
-             (substitute* "build.xml"
-               (("depends=\"compile-tests\"") "depends=\"\"")
-               (("}/java") "}/groovy"))
-             (apply invoke "java" "-cp"
-                    (string-append (getenv "CLASSPATH") ":build/classes")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/test-classes" "-j"
-                    (append (find-files "src/test" ".*\\.(groovy|java)$")))
-             (invoke "ant" "check")
-             #t)))))
-    (native-inputs
-     `(("groovy-bootstrap" ,groovy-bootstrap)
-       ("groovy-test" ,groovy-test)
-       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
-       ,@(package-native-inputs java-groovy-bootstrap)))
-    (synopsis "Groovy XML")
-    (description "This package contains XML-related utilities for groovy.")))
+  (let ((base (groovy-subproject "groovy-xml")))
+    (package
+      (inherit base)
+      (native-inputs
+       `(("groovy-test" ,groovy-test)
+         ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+         ,@(package-native-inputs base)))
+      (inputs
+       `(("groovy-parser-antlr4" ,groovy-parser-antlr4)
+         ,@(package-inputs base)))
+      (synopsis "Groovy XML")
+      (description "This package contains XML-related utilities for groovy."))))
 
 (define groovy-templates
-  (package
-    (inherit groovy-bootstrap)
-    (name "groovy-templates")
-    (arguments
-     `(#:jar-name "groovy-templates.jar"
-       #:jdk ,icedtea-8
-       #:test-dir "subprojects/groovy-templates/src/test"
-       #:tests? #f;Requires spock-framework which is a circular dependency
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'build
-           (lambda _
-             (mkdir-p "build/classes")
-             (mkdir-p "build/jar")
-             (apply invoke "java" "-cp" (getenv "CLASSPATH")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/classes" "-j"; joint compilation
-                    (find-files "subprojects/groovy-templates/src/main"
-                                ".*\\.(groovy|java)$"))
-             (invoke "jar" "-cf" "build/jar/groovy-templates.jar"
-                     "-C" "build/classes" ".")
-             #t)))))
-    (inputs
-     `(("groovy-xml" ,groovy-xml)
-       ,@(package-inputs groovy-bootstrap)))
-    (native-inputs
-     `(("groovy-bootstrap" ,groovy-bootstrap)
-       ("groovy-test" ,groovy-test)
-       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
-       ,@(package-native-inputs java-groovy-bootstrap)))
-    (synopsis "Groovy template engine")
-    (description "This package contains a template framework which is
+  (let ((base (groovy-subproject "groovy-templates")))
+    (package
+      (inherit base)
+      (arguments
+       `(#:tests? #f;Requires spock-framework which is a circular dependency
+         ,@(substitute-keyword-arguments (package-arguments base)
+             ((#:phases phases)
+              `(modify-phases ,phases
+                 ;; These annotations are used for QA, but do not affect build output.
+                 ;; They require findbugs, which we don't have yet.
+                 (add-before 'build 'remove-annotation
+                   (lambda _
+                     (substitute* '("subprojects/groovy-templates/src/main/groovy/groovy/text/StreamingTemplateEngine.java"
+                                    "subprojects/groovy-templates/src/main/groovy/groovy/text/TemplateEngine.java")
+                       (("import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;") "")
+                       (("@SuppressFBWarnings.*") ""))
+                     #t)))))))
+      (inputs
+       `(("groovy-xml" ,groovy-xml)
+         ,@(package-inputs base)))
+      (native-inputs
+       `(("groovy-bootstrap" ,groovy-bootstrap)
+         ("groovy-test" ,groovy-test)
+         ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+         ,@(package-native-inputs base)))
+      (synopsis "Groovy template engine")
+      (description "This package contains a template framework which is
 well-suited to applications where the text to be generated follows the form of
-a static template.")))
+a static template."))))
 
 (define groovy-groovydoc
-  (package
-    (inherit groovy-bootstrap)
-    (name "groovy-groovydoc")
-    (arguments
-     `(#:jar-name "groovy-groovydoc.jar"
-       #:jdk ,icedtea-8
-       #:test-dir "subprojects/groovy-groovydoc/src/test"
-       #:tests? #f; Requires groovy-ant which is a circular dependency
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'build 'copy-resources
-           (lambda _
-             (copy-recursively "subprojects/groovy-groovydoc/src/main/resources"
-                               "build/classes")
-             #t))
-         (replace 'build
-           (lambda _
-             (mkdir-p "build/classes")
-             (mkdir-p "build/jar")
-             (apply invoke "java" "-cp" (getenv "CLASSPATH")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/classes"
-                    "-j"; joint compilation
-                    (find-files "subprojects/groovy-groovydoc/src/main"
-                                ".*\\.(groovy|java)$"))
-             (invoke "jar" "-cf" "build/jar/groovy-groovydoc.jar"
-                     "-C" "build/classes" ".")
-             #t)))))
-    (inputs
-     `(("groovy-templates" ,groovy-templates)
-       ,@(package-inputs groovy-bootstrap)))
-    (native-inputs
-     `(("groovy-bootstrap" ,groovy-bootstrap)
-       ("groovy-test" ,groovy-test)
-       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
-       ,@(package-native-inputs java-groovy-bootstrap)))
-    (synopsis "Groovy documentation generation")
-    (description "This package contains the groovy documentation generator,
-similar to javadoc.")))
+  (let ((base (groovy-subproject "groovy-groovydoc")))
+    (package
+      (inherit base)
+      (arguments
+       `(#:tests? #f; Requires groovy-ant which is a circular dependency
+         ,@(package-arguments base)))
+      (inputs
+       `(("groovy-templates" ,groovy-templates)
+         ("groovy-parser-antlr4" ,groovy-parser-antlr4)
+         ("java-javaparser" ,java-javaparser)
+         ,@(package-inputs groovy-bootstrap)))
+      (native-inputs
+       `(("groovy-bootstrap" ,groovy-bootstrap)
+         ("groovy-test" ,groovy-test)
+         ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+         ,@(package-native-inputs java-groovy-bootstrap)))
+      (synopsis "Groovy documentation generation")
+      (description "This package contains the groovy documentation generator,
+similar to javadoc."))))
 
 (define groovy-ant
-  (package
-    (inherit groovy-bootstrap)
-    (name "groovy-ant")
-    (arguments
-     `(#:jar-name "groovy-ant.jar"
-       #:jdk ,icedtea-8
-       #:test-dir "src/test"
-       ;; FIXME: Excluding all tests because they fail
-       #:test-exclude (list
-                        "**/GroovyTest.java"
-                        "**/GroovycTest.java")
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'chdir
-           (lambda _
-             (chdir "subprojects/groovy-ant")
-             #t))
-         (add-before 'build 'copy-resources
-           (lambda _
-             (copy-recursively "src/main/resources" "build/classes")
-             #t))
-         (replace 'build
-           (lambda _
-             (mkdir-p "build/classes")
-             (mkdir-p "build/jar")
-             (apply invoke "java" "-cp" (getenv "CLASSPATH")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/classes" "-j"; joint compilation
-                    (find-files "src/main" ".*\\.(groovy|java)$"))
-             (invoke "jar" "-cf" "build/jar/groovy-ant.jar"
-                     "-C" "build/classes" ".")
-             #t))
-         (replace 'check
-           (lambda _
-             (mkdir-p "build/test-classes")
-             (substitute* "build.xml"
-               (("depends=\"compile-tests\"") "depends=\"\"")
-               (("}/java") "}/groovy"))
-             (apply invoke "java" "-cp"
-                    (string-append (getenv "CLASSPATH") ":build/classes")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/test-classes" "-j"
-                    (find-files "src/test" ".*\\.(groovy|java)$"))
-             (invoke "ant" "check")
-             #t)))))
-    (inputs
-     `(("groovy-groovydoc" ,groovy-groovydoc)
-       ,@(package-inputs groovy-bootstrap)))
-    (native-inputs
-     `(("groovy-bootstrap" ,groovy-bootstrap)
-       ("groovy-xml" ,groovy-xml)
-       ("groovy-test" ,groovy-test)
-       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
-       ,@(package-native-inputs java-groovy-bootstrap)))
-    (synopsis "Groovy ant tasks")
-    (description "This package contains groovy-related ant tasks definitions.")))
+  (let ((base (groovy-subproject "groovy-ant")))
+    (package
+      (inherit base)
+      (arguments
+       `(;#:tests? #f;Requires spock-framework which is a circular dependency
+         #:ant ,ant/java8; ant is actually a dependency of this package, and we need 1.10
+         ,@(substitute-keyword-arguments (package-arguments base)
+             ((#:phases phases)
+              `(modify-phases ,phases
+                 ;; These annotations are used for QA, but do not affect build output.
+                 ;; They require findbugs, which we don't have yet.
+                 (add-before 'build 'remove-annotation
+                   (lambda _
+                     (substitute* (find-files "subprojects/groovy-ant"
+                                              ".*.java$")
+                       (("import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;") "")
+                       (("@SuppressFBWarnings.*") ""))
+                     #t)))))))
+      (inputs
+       `(("groovy-groovydoc" ,groovy-groovydoc)
+         ("java-asm-tree" ,java-asm-tree-8)
+         ("java-asm-analysis" ,java-asm-analysis-8)
+         ,@(package-inputs base)))
+      (native-inputs
+       `(("ant-junit" ,ant-junit)
+         ("groovy-bootstrap" ,groovy-bootstrap)
+         ("groovy-xml" ,groovy-xml)
+         ("groovy-test" ,groovy-test)
+         ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+         ,@(package-native-inputs base)))
+      (synopsis "Groovy ant tasks")
+      (description "This package contains groovy-related ant tasks definitions."))))
+
+(define groovy-astbuilder
+  (let ((base (groovy-subproject "groovy-astbuilder")))
+    (package
+      (inherit base)
+      (arguments
+       (substitute-keyword-arguments (package-arguments base)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (delete 'copy-resources)
+             (add-after 'build 'copy-resources
+               (lambda _
+                 (copy-recursively
+                   "subprojects/groovy-astbuilder/src/main/resources"
+                   "build/classes")
+                 (substitute* "build.xml"
+                   (("depends=\"compile,") "depends=\""))
+                 (invoke "ant" "jar")
+                 #t))))))
+      (inputs
+       `(("groovy-bootstrap" ,groovy-bootstrap)
+         ,@(package-inputs base)))
+      (native-inputs
+       `(("groovy-test" ,groovy-test)
+         ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+         ,@(package-native-inputs base)))
+      (synopsis "Transformation to capture ASTBuilder from code statements")
+      (description "This package contains an AST transformation for use with
+ASTBuilder when building \"from string\" Groovy statements."))))
 
 (define groovy-bsf
-  (package
-    (inherit groovy-bootstrap)
-    (name "groovy-bsf")
-    (arguments
-     `(#:jar-name "groovy-bsf.jar"
-       #:jdk ,icedtea-8
-       #:test-dir "src/test"
-       #:test-exclude (list
+  (let ((base (groovy-subproject "groovy-bsf")))
+    (package
+      (inherit base)
+      (arguments
+       `(#:test-exclude (list
 ;; exception from Groovy: org.codehaus.groovy.runtime.InvokerInvocationException:
 ;; groovy.lang.MissingMethodException: No signature of method:
 ;; java.util.ArrayList.each() is applicable for argument types:
 ;; (groovy.script.MapFromList$_doit_closure1) values:
 ;; [groovy.script.MapFromList$_doit_closure1 <at> 17e554d5]
                         "**/BSFTest.java")
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'chdir
-           (lambda _
-             (chdir "subprojects/groovy-bsf")
-             #t))
-         (replace 'build
-           (lambda _
-             (mkdir-p "build/classes")
-             (mkdir-p "build/jar")
-             (apply invoke "java" "-cp" (getenv "CLASSPATH")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/classes" "-j"; joint compilation
-                    (find-files "src/main" ".*\\.(groovy|java)$"))
-             (invoke "jar" "-cf" "build/jar/groovy-bsf.jar"
-                     "-C" "build/classes" ".")
-             #t))
-         (replace 'check
-           (lambda _
-             (mkdir-p "build/test-classes")
-             (substitute* "build.xml"
-               (("depends=\"compile-tests\"") "depends=\"\""))
-             (apply invoke "java" "-cp"
-                    (string-append (getenv "CLASSPATH") ":build/classes")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/test-classes" "-j"
-                    (find-files "src/test" ".*\\.(groovy|java)$"))
-             (invoke "ant" "check")
-             #t)))))
-    (inputs
-     `(("java-commons-bsf" ,java-commons-bsf)
-       ,@(package-inputs groovy-bootstrap)))
-    (native-inputs
-     `(("groovy-bootstrap" ,groovy-bootstrap)
-       ("groovy-test" ,groovy-test)
-       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
-       ("java-commons-logging-minimal" ,java-commons-logging-minimal)
-       ,@(package-native-inputs java-groovy-bootstrap)))
-    (synopsis "Groovy BSF engine")
-    (description "This package defines the BSF engine for using Groovy inside
-any @dfn{Bean Scripting Framework} (BSF) application.")))
+         ,@(package-arguments base)))
+      (inputs
+       `(("java-commons-bsf" ,java-commons-bsf)
+         ,@(package-inputs base)))
+      (native-inputs
+       `(("groovy-bootstrap" ,groovy-bootstrap)
+         ("groovy-test" ,groovy-test)
+         ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+         ("java-commons-logging-minimal" ,java-commons-logging-minimal)
+         ,@(package-native-inputs base)))
+      (synopsis "Groovy BSF engine")
+      (description "This package defines the BSF engine for using Groovy inside
+any @dfn{Bean Scripting Framework} (BSF) application."))))
+
+(define groovy-cli-commons
+  (let ((base (groovy-subproject "groovy-cli-commons")))
+    (package
+      (inherit base)
+      (inputs
+       `(("groovy-bootstrap" ,groovy-bootstrap)
+         ,@(package-inputs base)))
+      (native-inputs
+       `(("groovy-test" ,groovy-test)
+         ,@(package-native-inputs base)))
+      (synopsis "Groovy CLI common classes")
+      (description "This package defines common classes for dealing with
+command-line arguments in Groovy."))))
+
+(define groovy-cli-picocli
+  (let ((base (groovy-subproject "groovy-cli-picocli")))
+    (package
+      (inherit base)
+      (inputs
+       `(("groovy-bootstrap" ,groovy-bootstrap)
+         ("java-picocli" ,java-picocli)
+         ,@(package-inputs base)))
+      (native-inputs
+       `(("groovy-test" ,groovy-test)
+         ,@(package-native-inputs base)))
+      (synopsis "Groovy CLI classes that use picocli")
+      (description "This package defines classes for dealing with command-line
+arguments in Groovy using the picocli library."))))
 
 (define groovy-swing
-  (package
-    (inherit groovy-bootstrap)
-    (name "groovy-swing")
-    (arguments
-     `(#:jar-name "groovy-swing.jar"
-       #:jdk ,icedtea-8
-       ;; FIXME: tests are not run
-       #:test-dir "src/test"
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'chdir
-           (lambda _
-             (chdir "subprojects/groovy-swing")
-             #t))
-         (replace 'build
-           (lambda _
-             (mkdir-p "build/classes")
-             (mkdir-p "build/jar")
-             (apply invoke "java" "-cp" (getenv "CLASSPATH")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/classes" "-j"; joint compilation
-                    (find-files "src/main" ".*\\.(groovy|java)$"))
-             (invoke "jar" "-cf" "build/jar/groovy-swing.jar"
-                     "-C" "build/classes" ".")
-             #t))
-         (replace 'check
-           (lambda _
-             (mkdir-p "build/test-classes")
-             (substitute* "src/test/groovy/groovy/util/GroovySwingTestCase.groovy"
-               (("HeadlessTestSupport.headless") "isHeadless()"))
-             (substitute* "build.xml"
-               (("depends=\"compile-tests\"") "depends=\"\"")
-               (("}/java") "}/groovy"))
-             (apply invoke "java" "-cp"
-                    (string-append (getenv "CLASSPATH") ":build/classes")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/test-classes" "-j"
-                    (find-files "src/test" ".*\\.(groovy|java)$"))
-             (invoke "ant" "check")
-             #t)))))
-    (native-inputs
-     `(("groovy-bootstrap" ,groovy-bootstrap)
-       ("groovy-test" ,groovy-test)
-       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
-       ("java-commons-logging-minimal" ,java-commons-logging-minimal)
-       ,@(package-native-inputs java-groovy-bootstrap)))
-    (synopsis "Groovy graphical library")
-    (description "This package contains the groovy bindings to Java Swing, a
-library used to build graphical interfaces.")))
+  (let ((base (groovy-subproject "groovy-swing")))
+    (package
+      (inherit base)
+      (arguments
+       (substitute-keyword-arguments (package-arguments base)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-before 'check 'fix-test
+               (lambda _
+                 (substitute*
+                   "subprojects/groovy-swing/src/test/groovy/groovy/swing/GroovySwingTestCase.groovy"
+                   (("HeadlessTestSupport.headless") "isHeadless()"))
+                 #t))))))
+      (native-inputs
+       `(("groovy-bootstrap" ,groovy-bootstrap)
+         ("groovy-test" ,groovy-test)
+         ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+         ("java-commons-logging-minimal" ,java-commons-logging-minimal)
+         ,@(package-native-inputs base)))
+      (synopsis "Groovy graphical library")
+      (description "This package contains the groovy bindings to Java Swing, a
+library used to build graphical interfaces."))))
 
 (define groovy-console
-  (package
-    (inherit groovy-bootstrap)
-    (name "groovy-console")
-    (arguments
-     `(#:jar-name "groovy-console.jar"
-       #:jdk ,icedtea-8
-       ;; FIXME: tests are not run
-       #:test-dir "src/test"
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'chdir
-           (lambda _
-             (chdir "subprojects/groovy-console")
-             #t))
-         (add-before 'build 'copy-resources
-           (lambda _
-             (copy-recursively "src/main/resources" "build/classes")
-             #t))
-         (replace 'build
-           (lambda _
-             (mkdir-p "build/classes")
-             (mkdir-p "build/jar")
-             (apply invoke "java" "-cp" (getenv "CLASSPATH")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/classes" "-j"; joint compilation
-                    (find-files "src/main" ".*\\.(groovy|java)$"))
-             (invoke "jar" "-cf" "build/jar/groovy-console.jar"
-                     "-C" "build/classes" ".")
-             #t))
-         (replace 'check
-           (lambda _
-             (mkdir-p "build/test-classes")
-             (substitute* "build.xml"
-               (("depends=\"compile-tests\"") "depends=\"\"")
-               (("}/java") "}/groovy"))
-             (substitute*
-               "../groovy-swing/src/test/groovy/groovy/util/GroovySwingTestCase.groovy"
-               (("HeadlessTestSupport.headless") "isHeadless()"))
-             (apply invoke "java" "-cp"
-                    (string-append (getenv "CLASSPATH") ":build/classes")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/test-classes" "-j"
-                    (append
-                      (find-files "../groovy-swing/src/test" ".*\\.(groovy|java)$")
-                      (find-files "src/test" ".*\\.(groovy|java)$")))
-             (invoke "ant" "check")
-             #t)))))
-    (inputs
-     `(("groovy-swing" ,groovy-swing)
-       ("groovy-templates" ,groovy-templates)
-       ,@(package-inputs groovy-bootstrap)))
-    (native-inputs
-     `(("groovy-bootstrap" ,groovy-bootstrap)
-       ("groovy-test" ,groovy-test)
-       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
-       ("java-commons-logging-minimal" ,java-commons-logging-minimal)
-       ,@(package-native-inputs java-groovy-bootstrap)))
-    (synopsis "Groovy graphical interface")
-    (description "This package contains a graphical interface to run groovy.")))
+  (let ((base (groovy-subproject "groovy-console")))
+    (package
+      (inherit base)
+      (arguments
+         (substitute-keyword-arguments (package-arguments base)
+           ((#:phases phases)
+            `(modify-phases ,phases
+               (add-before 'check 'build-swing
+                 (lambda _
+                   (substitute*
+                     "subprojects/groovy-swing/src/test/groovy/groovy/swing/GroovySwingTestCase.groovy"
+                     (("HeadlessTestSupport.headless") "isHeadless()"))
+                   (mkdir-p "build/test-classes")
+                   (apply invoke "java" "-cp"
+                          (string-append (getenv "CLASSPATH") ":build/classes")
+                          "org.codehaus.groovy.tools.FileSystemCompiler" "-cp"
+                          (string-append (getenv "CLASSPATH") ":build/classes")
+                          "-d" "build/test-classes" "-j"
+                          (append
+                            (find-files "subprojects/groovy-swing/src/test/java"
+                                        ".*\\.(groovy|java)$")
+                            (find-files "subprojects/groovy-swing/src/test/groovy"
+                                        ".*\\.(groovy|java)$")))
+                   #t))))))
+      (inputs
+       `(("groovy-swing" ,groovy-swing)
+         ("groovy-templates" ,groovy-templates)
+         ,@(package-inputs base)))
+      (native-inputs
+       `(("groovy-bootstrap" ,groovy-bootstrap)
+         ("groovy-test" ,groovy-test)
+         ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+         ("java-commons-logging-minimal" ,java-commons-logging-minimal)
+         ,@(package-native-inputs base)))
+      (synopsis "Groovy graphical interface")
+      (description "This package contains a graphical interface to run groovy."))))
+
+(define groovy-datetime
+  (let ((base (groovy-subproject "groovy-datetime")))
+    (package
+      (inherit base)
+      (native-inputs
+       `(("groovy-test" ,groovy-test)
+         ,@(package-native-inputs base)))
+      (synopsis "Date/Time API for Groovy")
+      (description "This package defines new Groovy methods which appear on
+normal JDK Date/Time API (@code{java.time}) classes inside the Groovy
+environment."))))
+
+(define groovy-dateutil
+  (let ((base (groovy-subproject "groovy-dateutil")))
+    (package
+      (inherit base)
+      (native-inputs
+       `(("groovy-test" ,groovy-test)
+         ,@(package-native-inputs base)))
+      (synopsis "Date and Calendar API for Groovy")
+      (description "This package defines new groovy methods which appear on
+normal JDK Date and Calendar classes inside the Groovy environment."))))
 
 (define groovy-docgenerator
-  (package
-    (inherit groovy-bootstrap)
-    (name "groovy-docgenerator")
-    (arguments
-     `(#:jar-name "groovy-docgenerator.jar"
-       #:jdk ,icedtea-8
-       #:tests? #f; No tests
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'chdir
-           (lambda _
-             (chdir "subprojects/groovy-docgenerator")
-             #t))
-         (add-before 'build 'copy-resources
-           (lambda _
-             (copy-recursively "src/main/resources" "build/classes")
-             #t))
-         (replace 'build
-           (lambda _
-             (mkdir-p "build/classes")
-             (mkdir-p "build/jar")
-             (apply invoke "java" "-cp" (getenv "CLASSPATH")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/classes" "-j"; joint compilation
-                    (find-files "src/main" ".*\\.(groovy|java)$"))
-             (invoke "jar" "-cf" "build/jar/groovy-docgenerator.jar"
-                     "-C" "build/classes" ".")
-             #t)))))
-    (inputs
-     `(("groovy-templates" ,groovy-templates)
-       ("groovy-swing" ,groovy-swing)
-       ("java-qdox-1.12" ,java-qdox-1.12)
-       ,@(package-inputs groovy-bootstrap)))
-    (native-inputs
-     `(("groovy-bootstrap" ,groovy-bootstrap)
-       ("groovy-test" ,groovy-test)
-       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
-       ,@(package-native-inputs java-groovy-bootstrap)))
-    (synopsis "Groovy documentation generation")
-    (description "This package contains a command line tool to generate
-documentation for groovy applications.")))
+  (let ((base (groovy-subproject "groovy-docgenerator")))
+    (package
+      (inherit base)
+      (arguments
+       `(#:tests? #f; No tests
+         ,@(package-arguments base)))
+      (inputs
+       `(("groovy-templates" ,groovy-templates)
+         ("groovy-swing" ,groovy-swing)
+         ("java-qdox-1.12" ,java-qdox-1.12)
+         ,@(package-inputs base)))
+      (native-inputs
+       `(("groovy-bootstrap" ,groovy-bootstrap)
+         ("groovy-test" ,groovy-test)
+         ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+         ,@(package-native-inputs base)))
+      (synopsis "Groovy documentation generation")
+      (description "This package contains a command line tool to generate
+documentation for groovy applications."))))
 
 (define groovy-groovysh
-  (package
-    (inherit groovy-bootstrap)
-    (name "groovy-groovysh")
-    (arguments
-     `(#:jar-name "groovy-groovysh.jar"
-       #:test-dir "src/test"
-       #:jdk ,icedtea-8
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'chdir
-           (lambda _
-             (chdir "subprojects/groovy-groovysh")
-             #t))
-         (add-before 'build 'copy-resources
-           (lambda _
-             (copy-recursively "src/main/resources" "build/classes")
-             #t))
-         (replace 'build
-           (lambda _
-             (mkdir-p "build/classes")
-             (mkdir-p "build/jar")
-             (apply invoke "java" "-cp" (getenv "CLASSPATH")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/classes" "-j"; joint compilation
-                    (find-files "src/main" ".*\\.(groovy|java)$"))
-             (invoke "jar" "-cf" "build/jar/groovy-groovysh.jar"
-                     "-C" "build/classes" ".")
-             #t))
-         (replace 'check
-           (lambda _
-             (mkdir-p "build/test-classes")
-             (substitute* "build.xml"
-               (("depends=\"compile-tests\"") "depends=\"\"")
-               (("}/java") "}/groovy"))
-             (apply invoke "java" "-cp"
-                    (string-append (getenv "CLASSPATH") ":build/classes")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/test-classes" "-j"
-                    (append (find-files "src/test" ".*\\.(groovy|java)$")))
-             (invoke "ant" "check")
-             #t)))))
-    (inputs
-     `(("groovy-xml" ,groovy-xml)
-       ("groovy-console" ,groovy-console)
-       ,@(package-inputs groovy-bootstrap)))
-    (native-inputs
-     `(("groovy-bootstrap" ,groovy-bootstrap)
-       ("groovy-test" ,groovy-test)
-       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
-       ,@(package-native-inputs java-groovy-bootstrap)))
-    (synopsis "Groovy REPL")
-    (description "This package contains the Groovy REPL.")))
+  (let ((base (groovy-subproject "groovy-groovysh")))
+    (package
+      (inherit base)
+      (inputs
+       `(("groovy-xml" ,groovy-xml)
+         ("groovy-console" ,groovy-console)
+         ,@(package-inputs base)))
+      (native-inputs
+       `(("groovy-bootstrap" ,groovy-bootstrap)
+         ("groovy-test" ,groovy-test)
+         ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+         ,@(package-native-inputs base)))
+      (synopsis "Groovy REPL")
+      (description "This package contains the Groovy REPL."))))
 
 (define groovy-jmx
-  (package
-    (inherit groovy-bootstrap)
-    (name "groovy-jmx")
-    (arguments
-     `(#:jar-name "groovy-jmx.jar"
-       #:test-dir "src/test"
-       #:jdk ,icedtea-8
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'chdir
-           (lambda _
-             (chdir "subprojects/groovy-jmx")
-             #t))
-         (replace 'build
-           (lambda _
-             (mkdir-p "build/classes")
-             (mkdir-p "build/jar")
-             (apply invoke "java" "-cp" (getenv "CLASSPATH")
-                      "org.codehaus.groovy.tools.FileSystemCompiler"
-                      "-d" "build/classes" "-j"; joint compilation
-                      (find-files "src/main" ".*\\.(groovy|java)$"))
-             (invoke "jar" "-cf" "build/jar/groovy-jmx.jar"
-                     "-C" "build/classes" ".")
-             #t))
-         (replace 'check
-           (lambda _
-             (mkdir-p "build/test-classes")
-             (substitute* "build.xml"
-               (("depends=\"compile-tests\"") "depends=\"\"")
-               (("}/java") "}/groovy"))
-             (apply invoke "java" "-cp"
-                    (string-append (getenv "CLASSPATH") ":build/classes")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/test-classes" "-j"
-                    (append (find-files "src/test" ".*\\.(groovy|java)$")))
-             (invoke "ant" "check")
-             #t)))))
-    (native-inputs
-     `(("groovy-bootstrap" ,groovy-bootstrap)
-       ("groovy-test" ,groovy-test)
-       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
-       ,@(package-native-inputs java-groovy-bootstrap)))
-    (synopsis "Groovy JMX extension")
-    (description "This package contains the JMX extension of Groovy, for
-management and monitoring of JVM-based solutions.")))
+  (let ((base (groovy-subproject "groovy-jmx")))
+    (package
+      (inherit base)
+      (native-inputs
+       `(("groovy-bootstrap" ,groovy-bootstrap)
+         ("groovy-test" ,groovy-test)
+         ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+         ,@(package-native-inputs base)))
+      (synopsis "Groovy JMX extension")
+      (description "This package contains the JMX extension of Groovy, for
+management and monitoring of JVM-based solutions."))))
 
 (define groovy-json
-  (package
-    (inherit groovy-bootstrap)
-    (name "groovy-json")
-    (arguments
-     `(#:jar-name "groovy-json.jar"
-       #:test-dir "src/test"
-       #:jdk ,icedtea-8
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'chdir
-           (lambda _
-             (chdir "subprojects/groovy-json")
-             #t))
-         (replace 'build
-           (lambda _
-             (mkdir-p "build/classes")
-             (mkdir-p "build/jar")
-             (apply invoke "java" "-cp" (getenv "CLASSPATH")
-                      "org.codehaus.groovy.tools.FileSystemCompiler"
-                      "-d" "build/classes" "-j"; joint compilation
-                      (find-files "src/main" ".*\\.(groovy|java)$"))
-             (invoke "jar" "-cf" "build/jar/groovy-json.jar"
-                     "-C" "build/classes" ".")
-             #t))
-         (replace 'check
-           (lambda _
-             (mkdir-p "build/test-classes")
-             (substitute* "build.xml"
-               (("depends=\"compile-tests\"") "depends=\"\"")
-               (("}/java") "}/groovy"))
-             (apply invoke "java" "-cp"
-                    (string-append (getenv "CLASSPATH") ":build/classes")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/test-classes" "-j"
-                    (append (find-files "src/test" ".*\\.(groovy|java)$")))
-             (invoke "ant" "check")
-             #t)))))
-    (native-inputs
-     `(("groovy-bootstrap" ,groovy-bootstrap)
-       ("groovy-test" ,groovy-test)
-       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
-       ,@(package-native-inputs java-groovy-bootstrap)))
-    (synopsis "Groovy JSON")
-    (description "This package contains JSON-related utilities for groovy.")))
+  (let ((base (groovy-subproject "groovy-json")))
+    (package
+      (inherit base)
+      (native-inputs
+       `(("groovy-bootstrap" ,groovy-bootstrap)
+         ("groovy-test" ,groovy-test)
+         ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+         ,@(package-native-inputs base)))
+      (synopsis "Groovy JSON")
+      (description "This package contains JSON-related utilities for groovy."))))
 
 (define groovy-jsr223
-  (package
-    (inherit groovy-bootstrap)
-    (name "groovy-jsr223")
-    (arguments
-     `(#:jar-name "groovy-jsr223.jar"
-       #:test-dir "src/test"
-       #:jdk ,icedtea-8
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'chdir
-           (lambda _
-             (chdir "subprojects/groovy-jsr223")
-             #t))
-         (add-before 'build 'copy-resources
-           (lambda _
-             (copy-recursively "src/main/resources" "build/classes")
-             #t))
-         (replace 'build
-           (lambda _
-             (mkdir-p "build/classes")
-             (mkdir-p "build/jar")
-             (apply invoke "java" "-cp" (getenv "CLASSPATH")
-                      "org.codehaus.groovy.tools.FileSystemCompiler"
-                      "-d" "build/classes" "-j"; joint compilation
-                      (find-files "src/main" ".*\\.(groovy|java)$"))
-             (invoke "jar" "-cf" "build/jar/groovy-jsr223.jar"
-                     "-C" "build/classes" ".")
-             #t))
-         (replace 'check
-           (lambda _
-             (mkdir-p "build/test-classes")
-             (substitute* "build.xml"
-               (("depends=\"compile-tests\"") "depends=\"\"")
-               (("}/java") "}/groovy"))
-             (apply invoke "java" "-cp"
-                    (string-append (getenv "CLASSPATH") ":build/classes")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/test-classes" "-j"
-                    (append (find-files "src/test" ".*\\.(groovy|java)$")))
-             (invoke "ant" "check")
-             #t)))))
-    (native-inputs
-     `(("groovy-bootstrap" ,groovy-bootstrap)
-       ("groovy-test" ,groovy-test)
-       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
-       ,@(package-native-inputs java-groovy-bootstrap)))
-    (synopsis "Groovy's own JSR223 implementation")
-    (description "This package contains Groovy's own JSR223 implementation.  This
-module is used for interaction between Groovy and Java code.")))
+  (let ((base (groovy-subproject "groovy-jsr223")))
+    (package
+      (inherit base)
+      (native-inputs
+       `(("groovy-bootstrap" ,groovy-bootstrap)
+         ("groovy-test" ,groovy-test)
+         ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+         ,@(package-native-inputs base)))
+      (synopsis "Groovy's own JSR223 implementation")
+      (description "This package contains Groovy's own JSR223 implementation.  This
+module is used for interaction between Groovy and Java code."))))
 
 (define groovy-nio
-  (package
-    (inherit groovy-bootstrap)
-    (name "groovy-nio")
-    (arguments
-     `(#:jar-name "groovy-nio.jar"
-       #:test-dir "src/test"
-       #:jdk ,icedtea-8
-       #:tests? #f; Requires spock-framework
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'chdir
-           (lambda _
-             (chdir "subprojects/groovy-nio")
-             #t))
-         (replace 'build
-           (lambda _
-             (mkdir-p "build/classes")
-             (mkdir-p "build/jar")
-             (apply invoke "java" "-cp" (getenv "CLASSPATH")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/classes" "-j"; joint compilation
-                    (find-files "src/main" ".*\\.(groovy|java)$"))
-             (invoke "jar" "-cf" "build/jar/groovy-nio.jar"
-                     "-C" "build/classes" ".")
-             #t)))))
-    (native-inputs
-     `(("groovy-bootstrap" ,groovy-bootstrap)
-       ("groovy-test" ,groovy-test)
-       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
-       ,@(package-native-inputs java-groovy-bootstrap)))
-    (synopsis "Groovy input-output library")
-    (description "This package implements an input/output library that extends
-the functionality of the common library of Java.")))
+  (let ((base (groovy-subproject "groovy-nio")))
+    (package
+      (inherit base)
+      (arguments
+       `(#:tests? #f; Require spock-framework
+         ,@(package-arguments base)))
+      (synopsis "Groovy input-output library")
+      (description "This package implements an input/output library that extends
+the functionality of the common library of Java."))))
 
 (define groovy-servlet
-  (package
-    (inherit groovy-bootstrap)
-    (name "groovy-servlet")
-    (arguments
-     `(#:jar-name "groovy-servlet.jar"
-       #:test-dir "src/test"
-       #:jdk ,icedtea-8
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'chdir
-           (lambda _
-             (chdir "subprojects/groovy-servlet")
-             #t))
-         (replace 'build
-           (lambda _
-             (mkdir-p "build/classes")
-             (mkdir-p "build/jar")
-             (apply invoke "java" "-cp" (getenv "CLASSPATH")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/classes"
-                    "-j"; joint compilation
-                    (find-files "src/main" ".*\\.(groovy|java)$"))
-             (invoke "jar" "-cf" "build/jar/groovy-servlet.jar"
-                     "-C" "build/classes" ".")
-             #t))
-         (replace 'check
-           (lambda _
-             (mkdir-p "build/test-classes")
-             (substitute* "build.xml"
-               (("depends=\"compile-tests\"") "depends=\"\"")
-               (("}/java") "}/groovy"))
-             (apply invoke "java" "-cp"
-                    (string-append (getenv "CLASSPATH") ":build/classes")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/test-classes"
-                    "-j"
-                    (append (find-files "src/test" ".*\\.(groovy|java)$")))
-             (invoke "ant" "check")
-             #t)))))
-    (inputs
-     `(("groovy-templates" ,groovy-templates)
-       ("groovy-xml" ,groovy-xml)
-       ,@(package-inputs groovy-bootstrap)))
-    (native-inputs
-     `(("groovy-bootstrap" ,groovy-bootstrap)
-       ("groovy-json" ,groovy-json)
-       ("groovy-test" ,groovy-test)
-       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
-       ,@(package-native-inputs java-groovy-bootstrap)))
-    (synopsis "Groovy's servlet implementation")
-    (description "This package contains a library to create groovlets, Groovy's
-version of Java servlets.")))
+  (let ((base (groovy-subproject "groovy-servlet")))
+    (package
+      (inherit base)
+      (inputs
+       `(("groovy-templates" ,groovy-templates)
+         ("groovy-xml" ,groovy-xml)
+         ,@(package-inputs base)))
+      (native-inputs
+       `(("groovy-bootstrap" ,groovy-bootstrap)
+         ("groovy-json" ,groovy-json)
+         ("groovy-test" ,groovy-test)
+         ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+         ,@(package-native-inputs base)))
+      (synopsis "Groovy's servlet implementation")
+      (description "This package contains a library to create groovlets, Groovy's
+version of Java servlets."))))
 
 (define groovy-sql
-  (package
-    (inherit groovy-bootstrap)
-    (name "groovy-sql")
-    (arguments
-     `(#:jar-name "groovy-sql.jar"
-       #:test-dir "src/test"
-       #:tests? #f;TODO: Requires hsqldb
-       #:jdk ,icedtea-8
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'chdir
-           (lambda _
-             (chdir "subprojects/groovy-sql")
-             #t))
-         (replace 'build
-           (lambda _
-             (mkdir-p "build/classes")
-             (mkdir-p "build/jar")
-             (apply invoke "java" "-cp" (getenv "CLASSPATH")
-                      "org.codehaus.groovy.tools.FileSystemCompiler"
-                      "-d" "build/classes" "-j"; joint compilation
-                      (find-files "src/main"
-                                  ".*\\.(groovy|java)$"))
-             (invoke "jar" "-cf" "build/jar/groovy-sql.jar"
-                     "-C" "build/classes" ".")
-             #t)))))
-    (native-inputs
-     `(("groovy-bootstrap" ,groovy-bootstrap)
-       ("groovy-test" ,groovy-test)
-       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
-       ,@(package-native-inputs java-groovy-bootstrap)))
-    (synopsis "Groovy SQL library")
-    (description "This package contains a facade over Java's normal JDBC APIs
-providing greatly simplified resource management and result set handling.")))
+  (let ((base (groovy-subproject "groovy-sql")))
+    (package
+      (inherit base)
+      (arguments
+       `(#:tests? #f;TODO: Requires hsqldb
+         ,@(package-arguments base)))
+      (synopsis "Groovy SQL library")
+      (description "This package contains a facade over Java's normal JDBC APIs
+providing greatly simplified resource management and result set handling."))))
 
 (define groovy-testng
-  (package
-    (inherit groovy-bootstrap)
-    (name "groovy-testng")
-    (arguments
-     `(#:jar-name "groovy-testng.jar"
-       #:tests? #f; No tests
-       #:jdk ,icedtea-8
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'chdir
-           (lambda _
-             (chdir "subprojects/groovy-testng")
-             #t))
-         (add-before 'build 'copy-resources
-           (lambda _
-             (copy-recursively "src/main/resources" "build/classes")
-             #t))
-         (replace 'build
-           (lambda _
-             (mkdir-p "build/classes")
-             (mkdir-p "build/jar")
-             (apply invoke "java" "-cp" (getenv "CLASSPATH")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/classes"
-                    "-j"; joint compilation
-                    (find-files "src/main" ".*\\.(groovy|java)$"))
-             (invoke "jar" "-cf" "build/jar/groovy-testng.jar"
-                     "-C" "build/classes" ".")
-             #t)))))
-    (native-inputs
-     `(("groovy-bootstrap" ,groovy-bootstrap)
-       ("groovy-test" ,groovy-test)
-       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
-       ,@(package-native-inputs java-groovy-bootstrap)))
-    (synopsis "Groovy testing framework")
-    (description "This package contains integration code for running TestNG
-tests in Groovy.")))
+  (let ((base (groovy-subproject "groovy-testng")))
+    (package
+      (inherit base)
+      (native-inputs
+       `(("groovy-bootstrap" ,groovy-bootstrap)
+         ("groovy-test" ,groovy-test)
+         ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+         ,@(package-native-inputs base)))
+      (synopsis "Groovy testing framework")
+      (description "This package contains integration code for running TestNG
+tests in Groovy."))))
 
 (define groovy-macro
-  (package
-    (inherit groovy-bootstrap)
-    (name "groovy-macro")
-    (arguments
-     `(#:jar-name "groovy-macro.jar"
-       #:test-dir "src/test"
-       #:jdk ,icedtea-8
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'chdir
-           (lambda _
-             (chdir "subprojects/groovy-macro")
-             #t))
-         (replace 'build
-           (lambda _
-             (mkdir-p "build/classes")
-             (mkdir-p "build/jar")
-             (apply invoke "java" "-cp" (getenv "CLASSPATH")
-                    "org.codehaus.groovy.tools.FileSystemCompiler"
-                    "-d" "build/classes" "-j"; joint compilation
-                    (find-files "src/main" ".*\\.(groovy|java)$"))
-             (invoke "jar" "-cf" "build/jar/groovy-macro.jar"
-                     "-C" "build/classes" ".")
-             #t))
-         (replace 'check
-           (lambda _
-             (mkdir-p "build/test-classes")
-             (substitute* "build.xml"
-               (("depends=\"compile-tests\"") "depends=\"\"")
-               (("}/java") "}/groovy"))
-             (apply invoke "java" "-cp"
-                   (string-append (getenv "CLASSPATH") ":build/classes")
-                   "org.codehaus.groovy.tools.FileSystemCompiler"
-                   "-d" "build/test-classes" "-j"
-                   (append (find-files "src/test" ".*\\.(groovy|java)$")))
-             (invoke "ant" "check")
-             #t)))))
-    (inputs
-     `(("groovy-templates" ,groovy-templates)
-       ("groovy-xml" ,groovy-xml)
-       ,@(package-inputs groovy-bootstrap)))
-    (native-inputs
-     `(("groovy-bootstrap" ,groovy-bootstrap)
-       ("groovy-json" ,groovy-json)
-       ("groovy-test" ,groovy-test)
-       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
-       ,@(package-native-inputs java-groovy-bootstrap)))
-    (synopsis "Groovy macro processor")
-    (description "This package contains a high-level library to create macro
-and modify groovy's @dfn{Abstract Syntax Tree} (AST).")))
+  (let ((base (groovy-subproject "groovy-macro")))
+    (package
+      (inherit base)
+      (arguments
+       (substitute-keyword-arguments (package-arguments base)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (delete 'copy-resources)
+             (add-after 'build 'copy-resources
+               (lambda _
+                 (copy-recursively "subprojects/groovy-macro/src/main/resources"
+                                   "build/classes")
+                 (substitute* "build.xml"
+                   (("depends=\"compile,") "depends=\""))
+                 (invoke "ant" "jar")
+                 #t))))))
+      (inputs
+       `(("groovy-templates" ,groovy-templates)
+         ("groovy-xml" ,groovy-xml)
+         ,@(package-inputs base)))
+      (native-inputs
+       `(("groovy-bootstrap" ,groovy-bootstrap)
+         ("groovy-json" ,groovy-json)
+         ("groovy-test" ,groovy-test)
+         ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+         ,@(package-native-inputs base)))
+      (synopsis "Groovy macro processor")
+      (description "This package contains a high-level library to create macro
+and modify groovy's @dfn{Abstract Syntax Tree} (AST)."))))
+
+(define groovy-yaml
+  (let ((base (groovy-subproject "groovy-yaml")))
+    (package
+      (inherit base)
+      (inputs
+       `(("groovy-json" ,groovy-json)
+         ("java-fasterxml-jackson-annotations" ,java-fasterxml-jackson-annotations)
+         ("java-fasterxml-jackson-core" ,java-fasterxml-jackson-core)
+         ("java-fasterxml-jackson-databind" ,java-fasterxml-jackson-databind)
+         ("java-fasterxml-jackson-dataformat-yaml" ,java-fasterxml-jackson-dataformat-yaml)
+         ,@(package-inputs base)))
+      (native-inputs
+       `(("groovy-test" ,groovy-test)
+         ,@(package-native-inputs base)))
+      (synopsis "Groovy YAML")
+      (description "This package contains YAML-related utilities for groovy."))))
 
 (define-public groovy
   (package
@@ -1071,7 +779,7 @@ and modify groovy's @dfn{Abstract Syntax Tree} (AST).")))
     (name "groovy")
     (arguments
      `(#:tests? #f; No tests
-       #:jdk ,icedtea-8
+       #:jdk ,openjdk9
        #:phases
        (modify-phases %standard-phases
          (delete 'configure)
@@ -1089,7 +797,7 @@ and modify groovy's @dfn{Abstract Syntax Tree} (AST).")))
                    (("@GROOVYJAR@") "groovy.jar")
                    (("MAX_FD=\"maximum\"")
                     (string-append
-                      "MAX_FD=\"maximum\"\nJAVAHOME="
+                      "MAX_FD=\"maximum\"\nJAVA_HOME="
                       (assoc-ref inputs "jdk"))))
                  ;; Groovy uses class loading. It's not enough to put the class
                  ;; in the loader's classpath, as it causes breakages:
@@ -1105,14 +813,17 @@ and modify groovy's @dfn{Abstract Syntax Tree} (AST).")))
                        (lambda (jar)
                          (symlink jar (string-append out-lib "/" (basename jar))))
                        (find-files (assoc-ref inputs input) ".*.jar")))
-                   '("groovy-bootstrap" "groovy-ant" "groovy-bsf"
-                     "groovy-console" "groovy-docgenerator"
-                     "groovy-groovydoc" "groovy-groovysh"
-                     "groovy-jmx" "groovy-json" "groovy-jsr223"
-                     "groovy-nio" "groovy-servlet" "groovy-sql"
+                   '("groovy-bootstrap" "groovy-ant" "groovy-astbuilder"
+                     "groovy-bsf" "groovy-cli-commons" "groovy-cli-picocli"
+                     "groovy-console" "groovy-datetime" "groovy-dateutil"
+                     "groovy-docgenerator" "groovy-groovydoc" "groovy-groovysh"
+                     "groovy-jmx" "groovy-json" "groovy-jsr223" "groovy-nio"
+                     "groovy-parser-antlr4" "groovy-servlet" "groovy-sql"
                      "groovy-swing" "groovy-templates" "groovy-testng"
-                     "groovy-xml" "java-commons-cli" "java-asm"
-                     "java-classpathx-servletapi" "java-xstream"
+                     "groovy-xml" "groovy-yaml" "java-commons-cli"
+                     "java-tunnelvisionlabs-antlr4-runtime" "java-asm"
+                     "java-asm-analysis" "java-asm-tree" "java-asm-util"
+                     "java-classpathx-servletapi" "java-xstream" "java-picocli"
                      "java-jansi" "java-jline-2"))
                  ;; antlr.jar is present twice in antlr2.  Symlink doesn't like
                  ;; it, so we symlink it here.
@@ -1130,8 +841,13 @@ and modify groovy's @dfn{Abstract Syntax Tree} (AST).")))
     (inputs
      `(("groovy-bootstrap" ,groovy-bootstrap)
        ("groovy-ant" ,groovy-ant)
+       ("groovy-astbuilder" ,groovy-astbuilder)
        ("groovy-bsf" ,groovy-bsf)
+       ("groovy-cli-commons" ,groovy-cli-commons)
+       ("groovy-cli-picocli" ,groovy-cli-picocli)
        ("groovy-console" ,groovy-console)
+       ("groovy-datetime" ,groovy-datetime)
+       ("groovy-dateutil" ,groovy-dateutil)
        ("groovy-docgenerator" ,groovy-docgenerator)
        ("groovy-groovydoc" ,groovy-groovydoc)
        ("groovy-groovysh" ,groovy-groovysh)
@@ -1139,18 +855,26 @@ and modify groovy's @dfn{Abstract Syntax Tree} (AST).")))
        ("groovy-json" ,groovy-json)
        ("groovy-jsr223" ,groovy-jsr223)
        ("groovy-nio" ,groovy-nio)
+       ("groovy-parser-antlr4" ,groovy-parser-antlr4)
        ("groovy-servlet" ,groovy-servlet)
        ("groovy-sql" ,groovy-sql)
        ("groovy-swing" ,groovy-swing)
        ("groovy-templates" ,groovy-templates)
        ("groovy-testng" ,groovy-testng)
        ("groovy-xml" ,groovy-xml)
+       ("groovy-yaml" ,groovy-yaml)
+       ("java-tunnelvisionlabs-antlr4-runtime"
+        ,java-tunnelvisionlabs-antlr4-runtime)
        ("java-commons-cli" ,java-commons-cli)
-       ("java-asm" ,java-asm)
+       ("java-asm" ,java-asm-8)
+       ("java-asm-analysis" ,java-asm-analysis-8)
+       ("java-asm-tree" ,java-asm-tree-8)
+       ("java-asm-util" ,java-asm-util-8)
        ("java-classpathx-servletapi" ,java-classpathx-servletapi)
-       ("java-xstream" ,java-xstream)
+       ("java-picocli" ,java-picocli)
        ("java-jansi" ,java-jansi)
        ("java-jline-2" ,java-jline-2)
+       ("java-xstream" ,java-xstream)
        ("antlr2" ,antlr2)))
     (synopsis "Programming language for the JVM")
     (description "Apache Groovy is a powerful, optionally typed and dynamic
-- 
2.28.0





Reply sent to Julien Lepiller <julien <at> lepiller.eu>:
You have taken responsibility. (Wed, 14 Oct 2020 01:47:02 GMT) Full text and rfc822 format available.

Notification sent to Julien Lepiller <julien <at> lepiller.eu>:
bug acknowledged by developer. (Wed, 14 Oct 2020 01:47:02 GMT) Full text and rfc822 format available.

Message #58 received at 43639-done <at> debbugs.gnu.org (full text, mbox):

From: Julien Lepiller <julien <at> lepiller.eu>
To: 43639-done <at> debbugs.gnu.org
Subject: [PATCH] [staging] gnu: groovy: Update to 3.0.5.
Date: Wed, 14 Oct 2020 03:44:58 +0200
Since there was no review, pushed as 069ddd9900..417cf5445b on staging.




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Wed, 11 Nov 2020 12:24:06 GMT) Full text and rfc822 format available.

This bug report was last modified 4 years and 224 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.