summaryrefslogtreecommitdiff
blob: 11cfea4c720da4cc7fdf4955912881524362efd6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# Copyright 1999-2016 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

# Switch to ^^ when we switch to EAPI=6.
#MY_PN="${PN^^}"
MY_PN="GROOVY"
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 ~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
}