summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--eclass/java-pkg-simple.eclass57
1 files changed, 53 insertions, 4 deletions
diff --git a/eclass/java-pkg-simple.eclass b/eclass/java-pkg-simple.eclass
index 0c3e1af70364..408e1aac44f6 100644
--- a/eclass/java-pkg-simple.eclass
+++ b/eclass/java-pkg-simple.eclass
@@ -326,7 +326,7 @@ java-pkg-simple_prepend_resources() {
# If USE FLAG 'binary' exists and is set, it will just copy
# ${JAVA_BINJAR_FILENAME} to ${S} and skip the rest of src_compile.
java-pkg-simple_src_compile() {
- local sources=sources.lst classes=target/classes apidoc=target/api
+ local sources=sources.lst classes=target/classes apidoc=target/api moduleinfo
# auto generate classpath
java-pkg_gen-cp JAVA_GENTOO_CLASSPATH
@@ -344,7 +344,14 @@ java-pkg-simple_src_compile() {
fi
# gather sources
- find "${JAVA_SRC_DIR[@]}" -name \*.java > ${sources}
+ # if target < 9, we need to compile module-info.java separately
+ # as this feature is not supported before Java 9
+ if [[ java-pkg_get-target -lt 9 ]]; then
+ find "${JAVA_SRC_DIR[@]}" -name \*.java ! -name module-info.java > ${sources}
+ moduleinfo=$(find "${JAVA_SRC_DIR[@]}" -name module-info.java)
+ else
+ find "${JAVA_SRC_DIR[@]}" -name \*.java > ${sources}
+ fi
# create the target directory
mkdir -p ${classes} || die "Could not create target directory"
@@ -358,6 +365,23 @@ java-pkg-simple_src_compile() {
${classpath:+-classpath ${classpath}} ${JAVAC_ARGS}\
@${sources}
+ # handle module-info.java separately as it needs at least JDK 9
+ if [[ -n ${moduleinfo} ]]; then
+ if java-pkg_is-vm-version-ge "9" ; then
+ local tmp_source=${JAVA_PKG_WANT_SOURCE} tmp_target=${JAVA_PKG_WANT_TARGET}
+
+ JAVA_PKG_WANT_SOURCE="9"
+ JAVA_PKG_WANT_TARGET="9"
+ ejavac -d ${classes} -encoding ${JAVA_ENCODING} ${JAVAC_ARGS} "${moduleinfo}"
+
+ JAVA_PKG_WANT_SOURCE=${tmp_source}
+ JAVA_PKG_WANT_TARGET=${tmp_target}
+ else
+ ewarn "Need at least JDK 9 to compile module-info.java in src_compile,"
+ ewarn "see https://bugs.gentoo.org/796875"
+ fi
+ fi
+
# javadoc
if has doc ${JAVA_PKG_IUSE} && use doc; then
mkdir -p ${apidoc}
@@ -422,7 +446,7 @@ java-pkg-simple_src_install() {
# It will perform test with frameworks that are defined in
# ${JAVA_TESTING_FRAMEWORKS}.
java-pkg-simple_src_test() {
- local test_sources=test_sources.lst classes=target/test-classes
+ local test_sources=test_sources.lst classes=target/test-classes moduleinfo
local tests_to_run classpath
# do not continue if the USE FLAG 'test' is explicitly unset
@@ -444,13 +468,38 @@ java-pkg-simple_src_test() {
java-pkg-simple_prepend_resources ${classes} "${JAVA_TEST_RESOURCE_DIRS[@]}"
# gathering sources for testing
- find "${JAVA_TEST_SRC_DIR[@]}" -name \*.java > ${test_sources}
+ # if target < 9, we need to compile module-info.java separately
+ # as this feature is not supported before Java 9
+ if [[ java-pkg_get-target -lt 9 ]]; then
+ find "${JAVA_TEST_SRC_DIR[@]}" -name \*.java ! -name module-info.java > ${test_sources}
+ moduleinfo=$(find "${JAVA_TEST_SRC_DIR[@]}" -name module-info.java)
+ else
+ find "${JAVA_TEST_SRC_DIR[@]}" -name \*.java > ${test_sources}
+ fi
+
# compile
[[ -s ${test_sources} ]] && ejavac -d ${classes} ${JAVAC_ARGS} \
-encoding ${JAVA_ENCODING} ${classpath:+-classpath ${classpath}} \
@${test_sources}
+ # handle module-info.java separately as it needs at least JDK 9
+ if [[ -n ${moduleinfo} ]]; then
+ if java-pkg_is-vm-version-ge "9" ; then
+ local tmp_source=${JAVA_PKG_WANT_SOURCE} tmp_target=${JAVA_PKG_WANT_TARGET}
+
+ JAVA_PKG_WANT_SOURCE="9"
+ JAVA_PKG_WANT_TARGET="9"
+ ejavac -d ${classes} -encoding ${JAVA_ENCODING} ${JAVAC_ARGS} "${moduleinfo}"
+
+ JAVA_PKG_WANT_SOURCE=${tmp_source}
+ JAVA_PKG_WANT_TARGET=${tmp_target}
+ else
+ ewarn "Need at least JDK 9 to compile module-info.java in src_test,"
+ ewarn "see https://bugs.gentoo.org/796875"
+ fi
+ fi
+
# grab a set of tests that testing framework will run
tests_to_run=$(find "${classes}" -type f\
\( -name "*Test.class"\