hi guys,
here is a patch that should provide initial support for module-info.java
in java packages. more info can be found here:
https://bugs.gentoo.org/796875
i'd mainly appreciate comments on the style of the patch whether it's ok
or what should be improved, though any questions or suggestions related
to the specific java issues are welcome too.
thanks.
fordfrog
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"\