# Copyright 1999-2016 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

# Groovy's build system is Ant based, but they use Maven for fetching the dependencies.
# We just have to remove the fetch dependencies target, and then we can use Ant for this ebuild.

# We currently do not build the embeddable jar (which is created using JarJar).
# We could provide that via a USE flag.
# We also don't use automatic build rewriting as there seems to be already some level of support
# in the upstream build system

# TODO: Install all 3 documentation packages. Currently only the Groovy GDK documentation is installed
# as our java-pkg_dojavadoc function does not support multiple Javadoc installations.

EAPI="3"
WANT_ANT_TASKS="ant-antlr"
JAVA_PKG_IUSE="doc source"

inherit versionator java-pkg-2 java-ant-2

MY_PV=${PV/_rc/-RC-}
MY_P="${PN}-${MY_PV}"

DESCRIPTION="Groovy is a high-level dynamic language for the JVM"
HOMEPAGE="http://groovy.codehaus.org/"

SRC_URI="http://dist.groovy.codehaus.org/distributions/${PN}-src-${PV}.zip"
LICENSE="codehaus-groovy"
SLOT="0"
KEYWORDS="amd64 x86 ~amd64-linux ~x86-linux ~ppc-macos ~x86-macos"
IUSE="test"
RESTRICT="test"

CDEPEND=">=dev-java/asm-3.2
	>=dev-java/ant-core-1.8.0
	>=dev-java/junit-4.6
	dev-java/antlr:0
	dev-java/xstream
	dev-java/jline
	dev-java/commons-cli
	dev-java/jansi
	dev-java/servletapi:2.4
	>=dev-java/bsf-2.4
	java-virtuals/jmx"

RDEPEND=">=virtual/jre-1.5
	!<dev-java/groovy-1.6.3
	${CDEPEND}"

DEPEND=">=virtual/jdk-1.5
	dev-java/ant-ivy:2
	doc? (
		dev-java/qdox
	)
	test? (
		dev-java/jmock
		dev-java/xmlunit
		dev-db/hsqldb
		dev-java/commons-logging
		dev-java/ant-junit
		dev-java/ant-trax
	)
	${CDEPEND}"

S="${WORKDIR}/${MY_P}"

JAVA_PKG_BSFIX=""

src_prepare() {
	rm -rf bootstrap
	# security directory is needed for tests, but they currently don't pass
	#rm -rf security
	mkdir -p target/lib && cd target/lib
	mkdir compile && mkdir runtime && mkdir tools
	cd compile

	java-pkg_jar-from commons-cli-1,ant-core,antlr,asm-3,xstream,jansi
	java-pkg_jar-from jline,junit,servletapi-2.4,bsf-2.3
	java-pkg_jar-from --virtual jmx
	java-pkg_jar-from --build-only ant-ivy:2
	use doc && java-pkg_jar-from --build-only qdox-1.6,ant-antlr
}

src_compile() {
	eant -DskipTests="true" -DruntimeLibDirectory="target/lib/compile" \
		-DtoolsLibDirectory="target/lib/compile" -DskipFetch="true" -DskipEmbeddable="true"

	use doc && ANT_TASKS="ant-antlr" ANT_OPTS="-Duser.home=${T}" eant -Dno.grammars="true" -DruntimeLibDirectory="target/lib/compile" \
	 -DtoolsLibDirectory="target/lib/compile" -DtestLibDirectory="target/lib/compile" -DskipFetch="true" doc
}

src_test() {
	cd "${S}/target/lib" && mkdir test && mkdir extras && cd compile

	java-pkg_jar-from --build-only ant-junit,jmock-1.0,xmlunit-1,hsqldb,commons-logging,cglib-2.1

	cd "${S}"
	ANT_TASKS="ant-junit ant-antlr ant-trax" ANT_OPTS="-Duser.home=${T}" eant \
		-DruntimeLibDirectory="target/lib/compile" -DtestLibDirectory="target/lib/compile" -DskipFetch="true" test
}

src_install() {
	java-pkg_newjar "target/dist/${PN}.jar"
	use doc && java-pkg_dojavadoc "target/html/groovy-jdk/"

	# FIXME: install those two later
	#
	#use doc && java-pkg_dojavadoc "target/html/api/"
	#use doc && java-pkg_dojavadoc "target/html/gapi/"

	use source && java-pkg_dosrc "src/main/groovy" "src/main/org"
	java-pkg_dolauncher "groovyc" --main org.codehaus.groovy.tools.FileSystemCompiler
	java-pkg_dolauncher "groovy" --main groovy.ui.GroovyMain
	java-pkg_dolauncher "groovysh" --main groovy.ui.InteractiveShell
	java-pkg_dolauncher "groovyConsole" --main groovy.ui.Console
	java-pkg_dolauncher "grape" --main org.codehaus.groovy.tools.GrapeMain
}
