commit:     52d0cdff64091542e27b945de4f1be716b09a02f
Author:     Patrice Clement <monsieurp <AT> gentoo <DOT> org>
AuthorDate: Sun Nov  1 21:32:31 2015 +0000
Commit:     Patrice Clement <monsieurp <AT> gentoo <DOT> org>
CommitDate: Sun Nov  1 21:32:31 2015 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=52d0cdff

dev-java/groovy: Version bump. Fixes security bug 555470.

Package-Manager: portage-2.2.20.1
Signed-off-by: Patrice Clement <monsieurp <AT> gentoo.org>

 dev-java/groovy/Manifest                           |   1 +
 .../groovy/files/groovy-2.4.5-utils.gradle.patch   | 116 ++++++++++++++++++
 dev-java/groovy/groovy-2.4.5.ebuild                | 133 +++++++++++++++++++++
 3 files changed, 250 insertions(+)

diff --git a/dev-java/groovy/Manifest b/dev-java/groovy/Manifest
index df62640..d14223e 100644
--- a/dev-java/groovy/Manifest
+++ b/dev-java/groovy/Manifest
@@ -1,2 +1,3 @@
+DIST groovy-2.4.5.zip 10214173 SHA256 
6fbbe2c1e16bd1c56b889cbcadff04d055a96568883f885ed904265e4e9d8780 SHA512 
055b664d2bc9966f9dd5933ec89f22c28c18323b57db66eeec524c88bdc6ea1090f6f1dd866433d7232d837ca31ca83164d8894c0db1d69e72c7d41f20a8382d
 WHIRLPOOL 
c05dcb4afddc9ad217bb99d6cc9618e6a67e7f13f52b99ecc155a9b8e97079dcd8f83402cad61acdbcca4141018965320b8194a84dbf6036f2daf699a2111149
 DIST groovy-src-1.7.5.zip 12875363 SHA256 
9864b36d681ecc4e4a8f86c8b958203f8e2c01c150a3f992f5f63df552979067 SHA512 
fa0f617d1894e6fd7b30216b69dc3060154a31d28a3831e7135b18377c5bc368d193d914d2b77a7daf28498562fb96c04794c874101b23dafb4421e3a1d59404
 WHIRLPOOL 
478346b89661f6b57cc5740df038e8bf3ced62a84a4de1dea3da94a9519cae6eba43cf583c4a81b2f459f6409a7387c2079098b12495b9f1b669260af4efaccb
 DIST groovy-src-1.8.5.zip 13131836 SHA256 
82f1e45e5886278a4c86ed15dfd90a84b7e43848c72537a235835c7557e8f8cd SHA512 
23cddae38b6d0b1b83dae7cf7ebc3fe68f7e8ddb33cd6fa421c0c3c76ca8bf5a8b3fe72cabe915901305f513a2b3269baf205a7a0dd6b1c6f751496d51e0557a
 WHIRLPOOL 
9db6d1da9304e8000de9954faf91d26d76c15e628a25a09c1291afc2ca8b33bbe24d44d891599548df6931db632ae6cd801e83cb05fb6abf33f3282f463a4482

diff --git a/dev-java/groovy/files/groovy-2.4.5-utils.gradle.patch 
b/dev-java/groovy/files/groovy-2.4.5-utils.gradle.patch
new file mode 100644
index 0000000..6f4638a
--- /dev/null
+++ b/dev-java/groovy/files/groovy-2.4.5-utils.gradle.patch
@@ -0,0 +1,116 @@
+--- gradle/utils.gradle.orig   2015-11-01 21:06:26.246486000 +0000
++++ gradle/utils.gradle        2015-11-01 21:06:57.719486000 +0000
+@@ -16,57 +16,47 @@
+  *  specific language governing permissions and limitations
+  *  under the License.
+  */
+-import org.codehaus.groovy.classgen.AnnotationVisitor
+-import org.objectweb.asm.ClassWriter
+-import org.objectweb.asm.FieldVisitor
+-import org.objectweb.asm.Label
+-import org.objectweb.asm.MethodVisitor
+-
+-import static org.objectweb.asm.Opcodes.*
+-
+-buildscript {
+-    repositories {
+-        mavenCentral()
+-    }
+-    dependencies {
+-        classpath "org.ow2.asm:asm:$asmVersion"
+-    }
+-}
++import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
++import static org.objectweb.asm.Opcodes.ACC_STATIC;
++import static org.objectweb.asm.Opcodes.ACC_SUPER;
++import static org.objectweb.asm.Opcodes.ALOAD;
++import static org.objectweb.asm.Opcodes.ATHROW;
++import static org.objectweb.asm.Opcodes.INVOKESPECIAL;
++import static org.objectweb.asm.Opcodes.RETURN;
++import static org.objectweb.asm.Opcodes.V1_5;
++
++import java.io.File;
++import java.io.FileOutputStream;
++
++import org.objectweb.asm.ClassWriter;
++import org.objectweb.asm.Label;
++import org.objectweb.asm.MethodVisitor;
+ 
+-/**
+- * This tasks generates an utility class which allows sneaky throwing.
+- */
+-task exceptionUtils {
+-    ext.classFiles = [
+-            
"${buildDir}/generated-classes/org/codehaus/groovy/runtime/ExceptionUtils.class",
+-            
"${compileJava.destinationDir}/org/codehaus/groovy/runtime/ExceptionUtils.class"]
+-    outputs.files classFiles
++public class ExceptionUtils {
++      private final static String gentooClassDestination = 
"target/classes/org/codehaus/groovy/runtime/ExceptionUtils.class";
+ 
+-    doLast {
++      public static void main(String[] args) {
+         ClassWriter cw = new ClassWriter(0);
+-        FieldVisitor fv;
+         MethodVisitor mv;
+-        AnnotationVisitor av0;
+-
+-        cw.visit(V1_5, ACC_PUBLIC + ACC_SUPER, 
'org/codehaus/groovy/runtime/ExceptionUtils', null, 'java/lang/Object', null);
+ 
+-        cw.visitSource('ExceptionUtils.java', null);
++        cw.visit(V1_5, ACC_PUBLIC + ACC_SUPER, 
"org/codehaus/groovy/runtime/ExceptionUtils", null, "java/lang/Object", null);
++        cw.visitSource("ExceptionUtils.java", null);  
+ 
+-        mv = cw.visitMethod(ACC_PUBLIC, '<init>', '()V', null, null);
++        mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
+         mv.visitCode();
+         Label l0 = new Label();
+         mv.visitLabel(l0);
+         mv.visitLineNumber(18, l0);
+         mv.visitVarInsn(ALOAD, 0);
+-        mv.visitMethodInsn(INVOKESPECIAL, 'java/lang/Object', '<init>', 
'()V', false);
++        mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", 
"()V", false);
+         mv.visitInsn(RETURN);
+         Label l1 = new Label();
+         mv.visitLabel(l1);
+-        mv.visitLocalVariable('this', 
'Lorg/codehaus/groovy/runtime/ExceptionUtils;', null, l0, l1, 0);
++        mv.visitLocalVariable("this", 
"Lorg/codehaus/groovy/runtime/ExceptionUtils;", null, l0, l1, 0);
+         mv.visitMaxs(1, 1);
+         mv.visitEnd();
+ 
+-        mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, 'sneakyThrow', 
'(Ljava/lang/Throwable;)V', null, null);
++        mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "sneakyThrow", 
"(Ljava/lang/Throwable;)V", null, null);
+         mv.visitCode();
+         Label l2 = new Label();
+         mv.visitLabel(l2);
+@@ -75,19 +65,21 @@
+         mv.visitInsn(ATHROW);
+         Label l3 = new Label();
+         mv.visitLabel(l3);
+-        mv.visitLocalVariable('e', 'Ljava/lang/Throwable;', null, l2, l3, 0);
++        mv.visitLocalVariable("e", "Ljava/lang/Throwable;", null, l2, l3, 0);
+         mv.visitMaxs(1, 1);
+         mv.visitEnd();
+ 
+         cw.visitEnd();
++        FileOutputStream fos = null;
+ 
+-        logger.lifecycle('Generating ExceptionUtils')
+-        classFiles.each { classFile ->
+-            def output = file(classFile)
+-            output.parentFile.mkdirs()
+-            output.withOutputStream {
+-                it << cw.toByteArray()
+-            }
+-        }
+-    }
++        File f = new File(gentooClassDestination);
++        f.getParentFile().mkdirs();
++        try {
++                      fos = new FileOutputStream(f);
++                      fos.write(cw.toByteArray());
++                      fos.close();
++              } catch (Exception e) {
++                      e.printStackTrace();
++              }
++      }
+ }

diff --git a/dev-java/groovy/groovy-2.4.5.ebuild 
b/dev-java/groovy/groovy-2.4.5.ebuild
new file mode 100644
index 0000000..62183ff
--- /dev/null
+++ b/dev-java/groovy/groovy-2.4.5.ebuild
@@ -0,0 +1,133 @@
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=5
+JAVA_PKG_IUSE="doc source"
+
+inherit java-pkg-2 java-pkg-simple versionator
+
+MY_PN="${PN^^}"
+MY_PV="$(replace_all_version_separators _ ${PV})"
+MY_P="${MY_PN}_${MY_PV}"
+
+DESCRIPTION="A multi-faceted language for the Java platform"
+HOMEPAGE="http://www.groovy-lang.org/";
+SRC_URI="https://github.com/apache/incubator-${PN}/archive/${MY_P}.zip -> 
${P}.zip"
+LICENSE="Apache-2.0"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc ~ppc64 ~x86"
+IUSE=""
+
+CDEPEND="
+       dev-java/jansi:0
+       dev-java/xstream:0
+       dev-java/commons-cli:1
+       >=dev-java/asm-5.0.3:4
+       >=dev-java/antlr-2.7.7-r7:0
+"
+
+RDEPEND="
+       ${CDEPEND}
+       >=virtual/jre-1.6"
+DEPEND="
+       ${CDEPEND}
+       >=virtual/jdk-1.6
+       app-arch/unzip"
+
+JAVA_GENTOO_CLASSPATH="
+       asm-4
+       antlr
+       jansi
+       xstream
+       commons-cli-1
+"
+
+S="${WORKDIR}/incubator-${PN}-${MY_P}"
+
+# ExceptionUtil filename.
+EU="ExceptionUtils.java"
+
+# List of antlr grammar files.
+ANTLR_GRAMMAR_FILES=(
+       org/codehaus/groovy/antlr/groovy.g
+       org/codehaus/groovy/antlr/java/java.g
+)
+
+# Patches utils.gradle. It basically rewrites ExceptionUtils.
+PATCHES=(
+       "${FILESDIR}"/"${P}-utils.gradle.patch"
+)
+
+# Add target/classes to the CP as we're generating an extra class there.
+JAVA_GENTOO_CLASSPATH_EXTRA="target/classes"
+
+# This function cleans up the source directory.
+# We're ONLY interested in the "src/main" directory content and nothing else.
+# (for the time being).
+groovy_cleanup_source_files() {
+       ebegin "Cleaning up useless files"
+       mv src/main "${T}" || die
+       mv gradle/utils.gradle "${T}" || die
+       rm -rf * || die
+       mv "${T}"/main/* . || die
+       rm -rf "${T}"/main || die
+       eend $?
+}
+
+java_prepare() {
+       epatch "${PATCHES[@]}"
+       groovy_cleanup_source_files
+}
+
+# This function generates the ANTLR grammar files.
+generate_antlr_grammar() {
+       for grammar_file in "${@}"; do
+               local my_grammar_file=$(basename ${grammar_file})
+
+               einfo "Generating \"${my_grammar_file}\" grammar file"
+               local my_grammar_dir=$(dirname ${grammar_file})
+
+               cd "${S}/${my_grammar_dir}" || die
+               antlr ${my_grammar_file} || die
+
+               cd "${S}" || die
+       done
+}
+
+# This function generates ExceptionUtils.class.
+# ExceptionUtils is a helper class needed when compiling Groovy 2.x.
+# Normally, this class is generated via a Gradle task at compile time. Since we
+# don't use Gradle here.. we've translated it into a plain Java file and have
+# it generate the same data.
+generate_exceptionutils() {
+       ebegin "Copying ${EU}"
+       mv "${T}/utils.gradle" "${EU}" || die
+       eend $?
+
+       ejavac -classpath "$(java-pkg_getjar --build-only asm-4 asm.jar)" ${EU}
+
+       ebegin "Running ${EU%.java}"
+       $(java-config -J) -classpath "$(java-pkg_getjar --build-only asm-4 
asm.jar):." ${EU%.java} || die
+       eend $?
+}
+
+src_compile() {
+       generate_antlr_grammar "${ANTLR_GRAMMAR_FILES[@]}"
+       generate_exceptionutils
+       java-pkg-simple_src_compile
+}
+
+src_install() {
+       java-pkg_dolauncher "groovyc" --main 
org.codehaus.groovy.tools.FileSystemCompiler
+       java-pkg_dolauncher "groovy" --main groovy.ui.GroovyMain
+       java-pkg-simple_src_install
+
+       # TODO: groovy console and groovy shell are parts of the "subprojects"
+       # directory. figure out a way to compile them. :\
+       # java-pkg_dolauncher "groovysh" --main groovy.ui.InteractiveShell
+       # java-pkg_dolauncher "groovyConsole" --main groovy.ui.Console
+
+       # TODO: grape is written in groovy and to compile it, you need .. 
groovy.
+       # java-pkg_dolauncher "grape" --main org.codehaus.groovy.tools.GrapeMain
+}

Reply via email to