diff options
author | James Le Cuirot <chewi@gentoo.org> | 2015-12-05 17:23:15 +0000 |
---|---|---|
committer | James Le Cuirot <chewi@gentoo.org> | 2015-12-05 17:24:03 +0000 |
commit | 0029d15a96b5777f12503e7298a92bccfc8571ff (patch) | |
tree | 09f61e0005c4fb2f081f00e82fb0e38b2268fa60 /dev-java/antlr | |
parent | sys-apps/man-pages: 4.01 stable for all arches. (diff) | |
download | gentoo-0029d15a96b5777f12503e7298a92bccfc8571ff.tar.gz gentoo-0029d15a96b5777f12503e7298a92bccfc8571ff.tar.bz2 gentoo-0029d15a96b5777f12503e7298a92bccfc8571ff.zip |
dev-java/antlr: Version bump for SLOT 3, should fix #567560
I initially wanted to add 3.3 but despite it being less disruptive
than 3.4, I found compatibility issues with the revdeps. We will
hopefully never need 3.3.
This is a total rewrite from the previous version, which uses the new
simplified antlr-2 ebuild and adds a very large test suite that is
passing with a little patching.
Package-Manager: portage-2.2.26
Diffstat (limited to 'dev-java/antlr')
-rw-r--r-- | dev-java/antlr/Manifest | 2 | ||||
-rw-r--r-- | dev-java/antlr/antlr-3.2.ebuild | 96 | ||||
-rw-r--r-- | dev-java/antlr/files/3.2-java-8.patch | 32 | ||||
-rw-r--r-- | dev-java/antlr/files/3.2-test-fixes.patch | 249 |
4 files changed, 379 insertions, 0 deletions
diff --git a/dev-java/antlr/Manifest b/dev-java/antlr/Manifest index 9bce4f8f37ab..7c1dfc3eda93 100644 --- a/dev-java/antlr/Manifest +++ b/dev-java/antlr/Manifest @@ -2,5 +2,7 @@ DIST 4.4.zip 1107695 SHA256 68a79e4accae4dfd9d45a8292fe9b2812c6a3ec1d903412e205a DIST antlr-2.7.7.tar.gz 1816180 SHA256 853aeb021aef7586bda29e74a6b03006bcb565a755c86b66032d8ec31b67dbb9 SHA512 faa72d2ddcba434ef1233e70c1549e63eba67c00793966322e821cf7f015cccb804448cb92d8fbef0429f59928fad65ec954f8ffbda0acbb8e983de0806d349d WHIRLPOOL def5ac0ddfe5a65f9f7d5489d039048c5d630b46cd5626593bd12e9b393d5ec26884f90b013bcdf58511e26abbf06e0d7b3789a11298b017f7e70af2ec8dde4a DIST antlr-3.1.3-generated.tar.bz2 47167 SHA256 ed326de0f1f92dd72e8d9644e8eaf59d02b9725b4b5218f5c54e12100f8d05f4 SHA512 4ea01ad0d5fc99607ffa445fb99ae424648b713dca293d05ff4ec064cac0a0fe5073df3834f9b6990e99f3cefc5cdd191a1ee3c3951d97615908b94630070bba WHIRLPOOL 61f7829811251a35528c322952830dc5a6e82e23e36f664af179b41955734e771aaad070298666a15be0f41982dbb8b19955b5967987582c6b666e602384d060 DIST antlr-3.1.3.tar.gz 10743515 SHA256 1fca0fc7304140807e64ec263a58d93ef1b380cfb6407084e6909f8220bc1039 SHA512 6814b970740bd61e6727f81b1a2fb4249f8f029e756694d852224eee54e0231540f8e23d2fa8f78eef234d6497f5fa1411e76020ffaed737d8c1a5178321a062 WHIRLPOOL 9d9a1caf39595dbb9b300f730091cfa38a12ab10b8a59d58c7bdd9ba4674bce9f49bc21b5b170129216ff9d880dbf5f0bdb5bfe614b003a4ffe948948b5413c9 +DIST antlr-3.2.jar 1928009 SHA256 4c8737014e7ca0d2c85171edf37f5a26b2d8d8237c283357b81a3269b6848d38 SHA512 25a61404c4b41e48eeaed49d41122f9400092248a10eb776d75ce3513295870eca1acc4b06c74925284a27cc64ca0506e34de39fb91996f09727cc5cc72dd9a6 WHIRLPOOL 19d99c9f50339ee9ef31e9458ac3a44ce52aa89ed84f96be905d626e3a53d5e2bbdb2e8eb4c5ca16413e7493499b141f940dd200658f8e60e9ecbd777f83a84b +DIST antlr-3.2.tar.gz 837320 SHA256 01548fa03ef1f0ed05a93f0749b65db8a35a191ad7ad34e1e6a6a2529ca2ef45 SHA512 8984221cd89253c033a4596dd56cd51b297393a53b4682f5ab401172745d343371bf0d45417fa286ce972add1b4e474f1f3091fa1345158dbfc040702d61607c WHIRLPOOL 40080efc13c88312aaa318cde097f240e711b477e264739ea71b6c246ede29ac48f42eccd55365af531eb428f1ca1d89386d7e5753b6bc35cad9bf937b70e6de DIST antlr-3.5.2-complete-no-st3.jar 1862097 SHA256 46531814ba9739cdf20c6c1789c252d3d95b68932813d79fb8bbfdf8d5840417 SHA512 227f56edfb8d1935fc0f5bd69a730a2230b173f38baa7837b6dac9b4a10c5d4a9b2eb806416b21bed2621bb0b8e0fb98a6f48da2660b326728326f078bc28ea9 WHIRLPOOL 5c5285894e2d4182650a8a573ae83996e1f463d6ce866ddcff43959b16cf1070c3042b21d80c9350865716a6719d15fcd42b7370b4af69b6eca863d26ffcc325 DIST antlr-4.3-complete.jar 1340431 SHA256 da9afec193edcc4d8080a4897e77e1e2f6a0c0bc265fccb8c44ae10660f7a8f0 SHA512 669cc21ef72ec899509181b1ec77d918fce9dba3db165d9d7429e0058c58a9d716cbf274d7a54b6bd9143d95d9a902d82acfa5bcb5e6c805c4e9fdf90b83349e WHIRLPOOL f665a200850d294ee0f8c3127bb918a9c9625098a97a960afe08b3a3940ba2c2ad54099e34c82fab5058b668a721b3ed5621a85820d0aca0e16af2f81627c723 diff --git a/dev-java/antlr/antlr-3.2.ebuild b/dev-java/antlr/antlr-3.2.ebuild new file mode 100644 index 000000000000..13b76231f16d --- /dev/null +++ b/dev-java/antlr/antlr-3.2.ebuild @@ -0,0 +1,96 @@ +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI="5" + +inherit eutils java-pkg-2 java-pkg-simple + +DESCRIPTION="A parser generator for many languages" +HOMEPAGE="http://www.antlr3.org/" +SRC_URI="http://www.antlr3.org/download/${P}.tar.gz + http://www.antlr3.org/download/${P}.jar" # Prebuilt version needed. +LICENSE="BSD" +SLOT="3" +KEYWORDS="~amd64 ~arm ~ppc ~ppc64 ~x86 ~x64-freebsd ~x86-freebsd ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris" +IUSE="doc test" + +CDEPEND=">=dev-java/antlr-2.7.7-r7:0 + dev-java/stringtemplate:0" + +RDEPEND="${CDEPEND} + >=virtual/jre-1.6" + +DEPEND="${CDEPEND} + >=virtual/jdk-1.6 + test? ( dev-java/junit:4 )" + +S="${WORKDIR}/${P}" +JAVA_GENTOO_CLASSPATH_EXTRA="${S}/${PN}-runtime.jar" +JAVA_GENTOO_CLASSPATH="antlr,stringtemplate" + +src_unpack() { + unpack ${P}.tar.gz +} + +java_prepare() { + java-pkg_clean + + # These fixes have been applied in 3.5. + epatch "${FILESDIR}/${PV}-test-fixes.patch" + epatch "${FILESDIR}/${PV}-java-8.patch" + + # Some tests fail under Java 8 in ways that probably aren't limited + # to the tests. This is bad but upstream is never going to update + # 3.2 even though other projects still rely on it. If any issues + # arise, we can only put pressure on those projects to upgrade. + if java-pkg_is-vm-version-ge 1.8; then + rm -v tool/src/test/java/org/antlr/test/Test{DFAConversion,SemanticPredicates,TopologicalSort}.java || die + fi + + # 3.2 has strange hidden files. + find -type f -name "._*.*" -delete || die +} + +src_compile() { + cd "${S}/runtime/Java/src/main" || die + JAVA_JAR_FILENAME="${S}/${PN}-runtime.jar" JAVA_PKG_IUSE="doc" java-pkg-simple_src_compile + + cd "${S}/tool/src/main" || die + + local G; for G in antlr codegen antlr.print assign.types buildnfa define; do # from pom.xml + antlr -o antlr2/org/antlr/grammar/v2/{,${G}.g} || die + done + + # We have applied a patch to fix this version under Java 8. Trouble + # is that we need to run a prebuilt version before we can build our + # own and that version doesn't have the fix applied. We work around + # this by building just the offending class against the prebuilt + # version and then putting them together in the classpath. That + # isn't all. Due to a compiler limitation that Chewi doesn't fully + # understand, this class cannot be compiled by itself without a + # couple of tweaks that have been applied in the Java 8 patch. + ejavac -classpath "${DISTDIR}/${P}.jar" java/org/antlr/tool/CompositeGrammar.java + + java -classpath "java:${DISTDIR}/${P}.jar" org.antlr.Tool $(find antlr3 -name "*.g") || die + JAVA_JAR_FILENAME="${S}/${PN}-tool.jar" java-pkg-simple_src_compile + java-pkg_addres "${S}/${PN}-tool.jar" resources +} + +src_install() { + java-pkg_dojar ${PN}-{runtime,tool}.jar + java-pkg_dolauncher ${PN}${SLOT} --main org.antlr.Tool + use doc && java-pkg_dojavadoc runtime/Java/src/main/target/api +} + +src_test() { + cd tool/src/test/java || die + local CP=".:${S}/${PN}-runtime.jar:${S}/${PN}-tool.jar:$(java-pkg_getjars junit-4,${JAVA_GENTOO_CLASSPATH})" + + local TESTS=$(find * -name "Test*.java") + TESTS="${TESTS//.java}" + TESTS="${TESTS//\//.}" + + ejavac -classpath "${CP}" $(find -name "*.java") + ejunit4 -classpath "${CP}" ${TESTS} +} diff --git a/dev-java/antlr/files/3.2-java-8.patch b/dev-java/antlr/files/3.2-java-8.patch new file mode 100644 index 000000000000..662abfe1e17f --- /dev/null +++ b/dev-java/antlr/files/3.2-java-8.patch @@ -0,0 +1,32 @@ +diff -Naur antlr-3.3.orig/tool/src/main/java/org/antlr/tool/CompositeGrammar.java antlr-3.3/tool/src/main/java/org/antlr/tool/CompositeGrammar.java +--- antlr-3.3.orig/tool/src/main/java/org/antlr/tool/CompositeGrammar.java 2010-11-30 01:54:04.000000000 +0000 ++++ antlr-3.3/tool/src/main/java/org/antlr/tool/CompositeGrammar.java 2015-10-03 14:28:50.063497181 +0100 +@@ -219,7 +219,9 @@ + public List<Grammar> getIndirectDelegates(Grammar g) { + List<Grammar> direct = getDirectDelegates(g); + List<Grammar> delegates = getDelegates(g); +- delegates.removeAll(direct); ++ if (direct != null) { ++ delegates.removeAll(direct); ++ } + return delegates; + } + +@@ -389,7 +391,7 @@ + Set<String> localRuleDefs = new HashSet<String>(); + Set<String> overrides = new HashSet<String>(); + // compute set of non-overridden rules for this delegate +- for (Rule r : p.grammar.getRules()) { ++ for (Rule r : (Collection<Rule>) p.grammar.getRules()) { + if ( !ruleDefs.contains(r.name) ) { + localRuleDefs.add(r.name); + } +@@ -409,7 +411,7 @@ + + // pass larger set of defined rules to delegates + if ( p.children!=null ) { +- for (CompositeGrammarTree delegate : p.children) { ++ for (CompositeGrammarTree delegate : (List<CompositeGrammarTree>) p.children) { + _minimizeRuleSet(ruleDefs, delegate); + } + } diff --git a/dev-java/antlr/files/3.2-test-fixes.patch b/dev-java/antlr/files/3.2-test-fixes.patch new file mode 100644 index 000000000000..0544b7006170 --- /dev/null +++ b/dev-java/antlr/files/3.2-test-fixes.patch @@ -0,0 +1,249 @@ +--- tool/src/test/java/org/antlr/test/BaseTest.java.orig 2010-11-30 01:54:04.000000000 +0000 ++++ tool/src/test/java/org/antlr/test/BaseTest.java 2015-09-24 22:25:36.872191194 +0100 +@@ -130,8 +130,8 @@ + try { + Process process = + Runtime.getRuntime().exec(args, null, outputDir); +- StreamVacuum stdout = new StreamVacuum(process.getInputStream()); +- StreamVacuum stderr = new StreamVacuum(process.getErrorStream()); ++ StreamVacuum stdout = new StreamVacuum(process.getInputStream(), tmpdir+"/"+fileName); ++ StreamVacuum stderr = new StreamVacuum(process.getErrorStream(), tmpdir+"/"+fileName); + stdout.start(); + stderr.start(); + process.waitFor(); +@@ -406,8 +406,8 @@ + //System.out.println("execParser: "+cmdLine); + Process process = + Runtime.getRuntime().exec(args, null, new File(tmpdir)); +- StreamVacuum stdoutVacuum = new StreamVacuum(process.getInputStream()); +- StreamVacuum stderrVacuum = new StreamVacuum(process.getErrorStream()); ++ StreamVacuum stdoutVacuum = new StreamVacuum(process.getInputStream(), tmpdir+"/input"); ++ StreamVacuum stderrVacuum = new StreamVacuum(process.getErrorStream(), tmpdir+"/input"); + stdoutVacuum.start(); + stderrVacuum.start(); + process.waitFor(); +@@ -499,8 +499,10 @@ + StringBuffer buf = new StringBuffer(); + BufferedReader in; + Thread sucker; +- public StreamVacuum(InputStream in) { ++ String inputFile; ++ public StreamVacuum(InputStream in, String inputFile) { + this.in = new BufferedReader( new InputStreamReader(in) ); ++ this.inputFile = inputFile; + } + public void start() { + sucker = new Thread(this); +@@ -510,6 +512,8 @@ + try { + String line = in.readLine(); + while (line!=null) { ++ if (line.startsWith(inputFile)) ++ line = line.substring(inputFile.length()+1); + buf.append(line); + buf.append('\n'); + line = in.readLine(); +--- tool/src/test/java/org/antlr/test/TestTopologicalSort.java.orig 2009-09-23 19:36:14.000000000 +0100 ++++ tool/src/test/java/org/antlr/test/TestTopologicalSort.java 2010-11-30 01:54:04.000000000 +0000 +@@ -49,7 +49,7 @@ + g.addEdge("F", "H"); + g.addEdge("E", "F"); + +- String expecting = "[H, F, E, D, A, G, B, C]"; ++ String expecting = "[H, F, E, D, G, A, B, C]"; + List nodes = g.sort(); + String result = nodes.toString(); + assertEquals(expecting, result); +@@ -91,7 +91,7 @@ + g.addEdge("Def.g", "Java.tokens"); // walkers feed off generated tokens + g.addEdge("Ref.g", "Java.tokens"); + +- String expecting = "[MyJava.tokens, Java.g, Java.tokens, Def.g, Ref.g]"; ++ String expecting = "[MyJava.tokens, Java.g, Java.tokens, Ref.g, Def.g]"; + List nodes = g.sort(); + String result = nodes.toString(); + assertEquals(expecting, result); +@@ -105,7 +105,7 @@ + g.addEdge("Def.g", "JavaLexer.tokens"); + g.addEdge("Ref.g", "JavaLexer.tokens"); + +- String expecting = "[JavaLexer.g, JavaLexer.tokens, JavaParser.g, Def.g, Ref.g]"; ++ String expecting = "[JavaLexer.g, JavaLexer.tokens, JavaParser.g, Ref.g, Def.g]"; + List nodes = g.sort(); + String result = nodes.toString(); + assertEquals(expecting, result); +--- tool/src/test/java/org/antlr/test/TestSemanticPredicates.java.orig 2009-09-23 19:36:12.000000000 +0100 ++++ tool/src/test/java/org/antlr/test/TestSemanticPredicates.java 2015-12-05 13:52:05.923411552 +0000 +@@ -731,19 +731,23 @@ + "c : a\n" + + " | b\n" + + " ;\n"); +- String expecting = +- ".s0-X->.s1\n" + +- ".s1-{((a&&c)||(b&&c))}?->:s2=>1\n" + +- ".s1-{c}?->:s3=>2\n"; +- int[] unreachableAlts = null; +- int[] nonDetAlts = null; +- String ambigInput = null; +- int[] insufficientPredAlts = null; +- int[] danglingAlts = null; +- int numWarnings = 0; +- checkDecision(g, 3, expecting, unreachableAlts, +- nonDetAlts, ambigInput, insufficientPredAlts, +- danglingAlts, numWarnings, false); ++ try { ++ String expecting = ++ ".s0-X->.s1\n" + ++ ".s1-{((a&&c)||(b&&c))}?->:s2=>1\n" + ++ ".s1-{c}?->:s3=>2\n"; ++ checkDecision(g, 3, expecting, null, ++ null, null, null, ++ null, 0, false); ++ } catch (org.junit.ComparisonFailure e) { ++ String expecting = ++ ".s0-X->.s1\n" + ++ ".s1-{((b&&c)||(a&&c))}?->:s2=>1\n" + ++ ".s1-{c}?->:s3=>2\n"; ++ checkDecision(g, 3, expecting, null, ++ null, null, null, ++ null, 0, false); ++ } + } + + @Test +--- tool/src/test/java/org/antlr/test/TestAttributes.java.orig 2015-12-05 13:55:55.392843185 +0000 ++++ tool/src/test/java/org/antlr/test/TestAttributes.java 2015-12-05 14:04:38.120599871 +0000 +@@ -439,20 +439,15 @@ + ErrorManager.setErrorListener(equeue); + Grammar g = new Grammar( + "parser grammar t;\n"+ +- "a : x=b {"+action+"} ;\n" + ++ "a : x=b {###"+action+"!!!} ;\n" + + "b : B ;\n"); + Tool antlr = newTool(); + CodeGenerator generator = new CodeGenerator(antlr, g, "Java"); + g.setCodeGenerator(generator); +- generator.genRecognizer(); // forces load of templates +- ActionTranslator translator = new ActionTranslator(generator,"a", +- new antlr.CommonToken(ANTLRParser.ACTION,action),1); +- String rawTranslation = +- translator.translate(); +- StringTemplateGroup templates = +- new StringTemplateGroup(".", AngleBracketTemplateLexer.class); +- StringTemplate actionST = new StringTemplate(templates, rawTranslation); +- String found = actionST.toString(); ++ generator.genRecognizer(); // codegen phase sets some vars we need ++ StringTemplate codeST = generator.getRecognizerST(); ++ String code = codeST.toString(); ++ String found = code.substring(code.indexOf("###")+3,code.indexOf("!!!")); + assertEquals(expecting, found); + + assertEquals("unexpected errors: "+equeue, 0, equeue.errors.size()); +@@ -1771,20 +1766,15 @@ + Grammar g = new Grammar( + "parser grammar t;\n" + + "options {output=template;}\n"+ +- "a : {"+action+"}\n" + ++ "a : {###"+action+"!!!}\n" + + " ;\n"); + Tool antlr = newTool(); + CodeGenerator generator = new CodeGenerator(antlr, g, "Java"); + g.setCodeGenerator(generator); +- generator.genRecognizer(); // forces load of templates +- ActionTranslator translator = new ActionTranslator(generator,"a", +- new antlr.CommonToken(ANTLRParser.ACTION,action),1); +- String rawTranslation = +- translator.translate(); +- StringTemplateGroup templates = +- new StringTemplateGroup(".", AngleBracketTemplateLexer.class); +- StringTemplate actionST = new StringTemplate(templates, rawTranslation); +- String found = actionST.toString(); ++ generator.genRecognizer(); // codegen phase sets some vars we need ++ StringTemplate codeST = generator.getRecognizerST(); ++ String code = codeST.toString(); ++ String found = code.substring(code.indexOf("###")+3,code.indexOf("!!!")); + assertEquals(expecting, found); + + assertEquals("unexpected errors: "+equeue, 0, equeue.errors.size()); +@@ -1869,35 +1859,21 @@ + ErrorManager.setErrorListener(equeue); + Grammar g = new Grammar( + "grammar t;\n"+ +- "a : b {"+action+"}\n" + +- " | c {"+action2+"}\n" + ++ "a : b {###"+action+"!!!}\n" + ++ " | c {^^^"+action2+"&&&}\n" + + " ;\n" + + "b : 'a';\n" + + "c : '0';\n"); + Tool antlr = newTool(); + CodeGenerator generator = new CodeGenerator(antlr, g, "Java"); + g.setCodeGenerator(generator); +- generator.genRecognizer(); // forces load of templates +- ActionTranslator translator = new ActionTranslator(generator,"a", +- new antlr.CommonToken(ANTLRParser.ACTION,action),1); +- String rawTranslation = +- translator.translate(); +- StringTemplateGroup templates = +- new StringTemplateGroup(".", AngleBracketTemplateLexer.class); +- StringTemplate actionST = new StringTemplate(templates, rawTranslation); +- String found = actionST.toString(); ++ generator.genRecognizer(); // codegen phase sets some vars we need ++ StringTemplate codeST = generator.getRecognizerST(); ++ String code = codeST.toString(); ++ String found = code.substring(code.indexOf("###")+3,code.indexOf("!!!")); + assertEquals(expecting, found); + +- assertEquals("unexpected errors: "+equeue, 0, equeue.errors.size()); +- translator = new ActionTranslator(generator, +- "a", +- new antlr.CommonToken(ANTLRParser.ACTION,action2),2); +- rawTranslation = +- translator.translate(); +- templates = +- new StringTemplateGroup(".", AngleBracketTemplateLexer.class); +- actionST = new StringTemplate(templates, rawTranslation); +- found = actionST.toString(); ++ found = code.substring(code.indexOf("^^^")+3,code.indexOf("&&&")); + + assertEquals(expecting2, found); + +@@ -3208,7 +3184,7 @@ + + @Test public void testAssignToTreeNodeAttribute() throws Exception { + String action = "$tree.scope = localScope;"; +- String expecting = "(()retval.tree).scope = localScope;"; ++ String expecting = "((Object)retval.tree).scope = localScope;"; + ErrorQueue equeue = new ErrorQueue(); + ErrorManager.setErrorListener(equeue); + Grammar g = new Grammar( +@@ -3219,24 +3195,17 @@ + " Scope localScope=null;\n" + + "}\n" + + "@after {\n" + +- " $tree.scope = localScope;\n" + ++ " ###$tree.scope = localScope;!!!\n" + + "}\n" + + " : 'a' -> ^('a')\n" + + ";"); + Tool antlr = newTool(); + CodeGenerator generator = new CodeGenerator(antlr, g, "Java"); + g.setCodeGenerator(generator); +- generator.genRecognizer(); // forces load of templates +- ActionTranslator translator = new ActionTranslator(generator, +- "rule", +- new antlr.CommonToken(ANTLRParser.ACTION,action),1); +- String rawTranslation = +- translator.translate(); +- StringTemplateGroup templates = +- new StringTemplateGroup(".", AngleBracketTemplateLexer.class); +- StringTemplate actionST = new StringTemplate(templates, rawTranslation); +- String found = actionST.toString(); +- assertEquals("unexpected errors: "+equeue, 0, equeue.errors.size()); ++ generator.genRecognizer(); // codegen phase sets some vars we need ++ StringTemplate codeST = generator.getRecognizerST(); ++ String code = codeST.toString(); ++ String found = code.substring(code.indexOf("###")+3,code.indexOf("!!!")); + assertEquals(expecting, found); + } + |