UseJava: extract function to prepare the classpath arguments in add_jar

This commit is contained in:
Javier Martín
2025-10-14 18:10:54 +02:00
parent 3031e3015e
commit b3365e7c57
+43 -19
View File
@@ -568,6 +568,9 @@ Creating Java Documentation
generated docs. Same behavior as option ``-version`` of ``javadoc`` tool.
#]=======================================================================]
block(SCOPE_FOR POLICIES)
cmake_policy(SET CMP0140 NEW) # For return(PROPAGATE ...)
function (__java_copy_file src dest comment)
add_custom_command(
OUTPUT ${dest}
@@ -665,6 +668,37 @@ else ()
set(_UseJava_PATH_SEP ":")
endif()
function(__java_resolve_jar outvar_path path_or_tgt)
if (TARGET "${path_or_tgt}")
# Check if this is a target created by add_jar
get_target_property(jarpath "${path_or_tgt}" JAR_FILE)
set("${outvar_path}" "${jarpath}")
if (NOT jarpath) # Some other target that we do not know how to use as a JAR
message(SEND_ERROR "target ${path_or_tgt} is not a jar")
endif ()
else () # Interpreted as the path to an external JAR
set("${outvar_path}" "${path_or_tgt}")
endif ()
return(PROPAGATE "${outvar_path}")
endfunction()
# Helper that processes a list of add_jar-created targets or paths to external
# JAR files and:
# - appends each item (target name or JAR path) to the list in outvar_depsraw.
# - appends the resolved JAR path to the list in outvar_depsresolved.
# If any item cannot be resolved, because it is a target name that was not
# created by add_jar, a SEND_ERROR message is raised.
function(__java_build_deplists outvar_depsraw outvar_depsresolved jars_or_targets_lst)
foreach(item IN LISTS "${jars_or_targets_lst}")
__java_resolve_jar(res_path "${item}")
if (res_path) # We would get a falsy value in the error case
list(APPEND "${outvar_depsraw}" "${item}") # Keep the original name (possibly a target) here
list(APPEND "${outvar_depsresolved}" "${res_path}")
endif ()
endforeach()
return(PROPAGATE "${outvar_depsraw}" "${outvar_depsresolved}")
endfunction()
function(add_jar _TARGET_NAME)
set(options) # currently there are no zero value args (aka: options)
@@ -838,7 +872,8 @@ function(add_jar _TARGET_NAME)
# Ignored for backward compatibility
elseif (_JAVA_EXT STREQUAL "")
list(APPEND CMAKE_JAVA_INCLUDE_PATH ${JAVA_JAR_TARGET_${_JAVA_SOURCE_FILE}} ${JAVA_JAR_TARGET_${_JAVA_SOURCE_FILE}_CLASSPATH})
# XXX: this was not being used after setting!
# list(APPEND CMAKE_JAVA_INCLUDE_PATH ${JAVA_JAR_TARGET_${_JAVA_SOURCE_FILE}} ${JAVA_JAR_TARGET_${_JAVA_SOURCE_FILE}_CLASSPATH})
list(APPEND _JAVA_DEPENDS ${JAVA_JAR_TARGET_${_JAVA_SOURCE_FILE}})
else ()
@@ -857,24 +892,11 @@ function(add_jar _TARGET_NAME)
_JAVA_RESOURCE_FILES_RELATIVE)
endif()
foreach(_JAVA_INCLUDE_JAR IN LISTS _add_jar_INCLUDE_JARS)
if (TARGET ${_JAVA_INCLUDE_JAR})
get_target_property(_JAVA_JAR_PATH ${_JAVA_INCLUDE_JAR} JAR_FILE)
if (_JAVA_JAR_PATH)
string(APPEND CMAKE_JAVA_INCLUDE_PATH_FINAL "${_UseJava_PATH_SEP}${_JAVA_JAR_PATH}")
list(APPEND CMAKE_JAVA_INCLUDE_PATH ${_JAVA_JAR_PATH})
list(APPEND _JAVA_DEPENDS ${_JAVA_INCLUDE_JAR})
list(APPEND _JAVA_COMPILE_DEPENDS ${_JAVA_JAR_PATH})
else ()
message(SEND_ERROR "add_jar: INCLUDE_JARS target ${_JAVA_INCLUDE_JAR} is not a jar")
endif ()
else ()
string(APPEND CMAKE_JAVA_INCLUDE_PATH_FINAL "${_UseJava_PATH_SEP}${_JAVA_INCLUDE_JAR}")
list(APPEND CMAKE_JAVA_INCLUDE_PATH "${_JAVA_INCLUDE_JAR}")
list(APPEND _JAVA_DEPENDS "${_JAVA_INCLUDE_JAR}")
list(APPEND _JAVA_COMPILE_DEPENDS "${_JAVA_INCLUDE_JAR}")
endif ()
endforeach()
# Build dependency lists and arguments for JARs in the classpath
__java_build_deplists(_JAVA_DEPENDS _JAVA_COMPILE_DEPENDS _add_jar_INCLUDE_JARS)
foreach (resolved_cp_item IN LISTS _JAVA_COMPILE_DEPENDS)
string(APPEND CMAKE_JAVA_INCLUDE_PATH_FINAL "${_UseJava_PATH_SEP}${resolved_cp_item}")
endforeach ()
if (_JAVA_COMPILE_FILES OR _JAVA_COMPILE_FILELISTS)
set (_JAVA_SOURCES_FILELISTS)
@@ -1725,3 +1747,5 @@ function(install_jar_exports)
DESTINATION ${_install_jar_exports_DESTINATION}
${_COMPONENT})
endfunction()
endblock()