|
@@ -53,6 +53,7 @@ Creating And Installing JARs
|
|
|
[SOURCES] <source1> [<source2>...] [<resource1>...]
|
|
|
[RESOURCES NAMESPACE <ns1> <resource1>... [NAMESPACE <nsX> <resourceX>...]... ]
|
|
|
[INCLUDE_JARS <jar1> [<jar2>...]]
|
|
|
+ [INCLUDE_MODULES <jar1> [<jar2>...]]
|
|
|
[ENTRY_POINT <entry>]
|
|
|
[VERSION <version>]
|
|
|
[MANIFEST <manifest>]
|
|
@@ -109,6 +110,13 @@ Creating And Installing JARs
|
|
|
jar files listed as sources are ignored (as they have been since the first
|
|
|
version of this module).
|
|
|
|
|
|
+ ``INCLUDE_MODULES``
|
|
|
+ .. versionadded:: 4.3
|
|
|
+
|
|
|
+ The list of jars are added to the module path when building the java sources
|
|
|
+ and also to the dependencies of the target. ``INCLUDE_MODULES`` also
|
|
|
+ accepts other target names created by ``add_jar()``.
|
|
|
+
|
|
|
``ENTRY_POINT``
|
|
|
Defines an entry point in the jar file.
|
|
|
|
|
@@ -703,7 +711,7 @@ function(add_jar _TARGET_NAME)
|
|
|
|
|
|
set(options) # currently there are no zero value args (aka: options)
|
|
|
set(oneValueArgs "ENTRY_POINT;MANIFEST;OUTPUT_DIR;;OUTPUT_NAME;VERSION" )
|
|
|
- set(multiValueArgs "GENERATE_NATIVE_HEADERS;INCLUDE_JARS;RESOURCES;SOURCES" )
|
|
|
+ set(multiValueArgs "GENERATE_NATIVE_HEADERS;INCLUDE_JARS;INCLUDE_MODULES;RESOURCES;SOURCES" )
|
|
|
|
|
|
cmake_parse_arguments(PARSE_ARGV 1 _add_jar
|
|
|
"${options}"
|
|
@@ -837,6 +845,7 @@ function(add_jar _TARGET_NAME)
|
|
|
set(_JAVA_COMPILE_FILELISTS)
|
|
|
set(_JAVA_DEPENDS)
|
|
|
set(_JAVA_COMPILE_DEPENDS)
|
|
|
+ set(_JAVA_COMPILE_MODDEPENDS)
|
|
|
set(_JAVA_RESOURCE_FILES)
|
|
|
set(_JAVA_RESOURCE_FILES_RELATIVE)
|
|
|
foreach(_JAVA_SOURCE_FILE IN LISTS _JAVA_SOURCE_FILES)
|
|
@@ -897,6 +906,16 @@ function(add_jar _TARGET_NAME)
|
|
|
foreach (resolved_cp_item IN LISTS _JAVA_COMPILE_DEPENDS)
|
|
|
string(APPEND CMAKE_JAVA_INCLUDE_PATH_FINAL "${_UseJava_PATH_SEP}${resolved_cp_item}")
|
|
|
endforeach ()
|
|
|
+ # Build dependency lists and arguments for JARs in the modulepath
|
|
|
+ set(javac_mp_args)
|
|
|
+ if (_add_jar_INCLUDE_MODULES)
|
|
|
+ if (Java_VERSION VERSION_LESS 9)
|
|
|
+ message(SEND_ERROR "INCLUDE_MODULES requires Java 9+")
|
|
|
+ endif()
|
|
|
+ __java_build_deplists(_JAVA_DEPENDS _JAVA_COMPILE_MODDEPENDS _add_jar_INCLUDE_MODULES)
|
|
|
+ list(JOIN _JAVA_COMPILE_MODDEPENDS "${_UseJava_PATH_SEP}" javac_mp_args)
|
|
|
+ set(javac_mp_args "--module-path [[${javac_mp_args}]]")
|
|
|
+ endif()
|
|
|
|
|
|
if (_JAVA_COMPILE_FILES OR _JAVA_COMPILE_FILELISTS)
|
|
|
set (_JAVA_SOURCES_FILELISTS)
|
|
@@ -921,33 +940,41 @@ function(add_jar _TARGET_NAME)
|
|
|
|
|
|
cmake_language(GET_MESSAGE_LOG_LEVEL _LOG_LEVEL)
|
|
|
# Compile the java files and create a list of class files
|
|
|
- add_custom_command(
|
|
|
- # NOTE: this command generates an artificial dependency file
|
|
|
- OUTPUT ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_compiled_${_TARGET_NAME}
|
|
|
+ # NOTE: this command generates an artificial dependency file
|
|
|
+ set(stamp_file "${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_compiled_${_TARGET_NAME}")
|
|
|
+ add_custom_command(OUTPUT "${stamp_file}"
|
|
|
COMMAND ${CMAKE_COMMAND}
|
|
|
-DCMAKE_JAVA_CLASS_OUTPUT_PATH=${CMAKE_JAVA_CLASS_OUTPUT_PATH}
|
|
|
-DCMAKE_JAR_CLASSES_PREFIX=${CMAKE_JAR_CLASSES_PREFIX}
|
|
|
-P ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/UseJava/ClearClassFiles.cmake
|
|
|
--log-level ${_LOG_LEVEL}
|
|
|
- COMMAND ${Java_JAVAC_EXECUTABLE}
|
|
|
- ${CMAKE_JAVA_COMPILE_FLAGS}
|
|
|
- -classpath "${CMAKE_JAVA_INCLUDE_PATH_FINAL}"
|
|
|
- -d ${CMAKE_JAVA_CLASS_OUTPUT_PATH}
|
|
|
- ${_GENERATE_NATIVE_HEADERS}
|
|
|
- ${_JAVA_SOURCES_FILELISTS}
|
|
|
- COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_compiled_${_TARGET_NAME}
|
|
|
- DEPENDS ${_JAVA_COMPILE_FILES} ${_JAVA_COMPILE_FILELISTS} ${_JAVA_COMPILE_DEPENDS} ${_JAVA_SOURCES_FILE}
|
|
|
+ DEPENDS ${_JAVA_COMPILE_FILES} ${_JAVA_COMPILE_FILELISTS} ${_JAVA_COMPILE_DEPENDS} ${_JAVA_COMPILE_MODDEPENDS} ${_JAVA_SOURCES_FILE}
|
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
|
COMMENT "Building Java objects for ${_TARGET_NAME}.jar"
|
|
|
VERBATIM
|
|
|
)
|
|
|
+ cmake_language(EVAL CODE "
|
|
|
+ add_custom_command(OUTPUT [[${stamp_file}]]
|
|
|
+ APPEND COMMAND [[${Java_JAVAC_EXECUTABLE}]]
|
|
|
+ \${CMAKE_JAVA_COMPILE_FLAGS}
|
|
|
+ -classpath [[${CMAKE_JAVA_INCLUDE_PATH_FINAL}]]
|
|
|
+ ${javac_mp_args}
|
|
|
+ -d [[${CMAKE_JAVA_CLASS_OUTPUT_PATH}]]
|
|
|
+ \${_GENERATE_NATIVE_HEADERS}
|
|
|
+ \${_JAVA_SOURCES_FILELISTS}
|
|
|
+ )
|
|
|
+ ")
|
|
|
+ add_custom_command(OUTPUT "${stamp_file}"
|
|
|
+ APPEND COMMAND ${CMAKE_COMMAND} -E touch "${stamp_file}"
|
|
|
+ )
|
|
|
+
|
|
|
add_custom_command(
|
|
|
OUTPUT ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist
|
|
|
COMMAND ${CMAKE_COMMAND}
|
|
|
-DCMAKE_JAVA_CLASS_OUTPUT_PATH=${CMAKE_JAVA_CLASS_OUTPUT_PATH}
|
|
|
-DCMAKE_JAR_CLASSES_PREFIX=${CMAKE_JAR_CLASSES_PREFIX}
|
|
|
-P ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/UseJava/ClassFilelist.cmake
|
|
|
- DEPENDS ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_compiled_${_TARGET_NAME}
|
|
|
+ DEPENDS "${stamp_file}"
|
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
|
VERBATIM
|
|
|
)
|