Files
hdf5/java/jtest/CMakeLists.txt
T
Allen Byrne b754dcb8f2 Move Java wrappers to FFM using jextract and java 25 (#5957)
FFM build requires Java 25, Jextract 25.
Generates FFM bindings during configure.
JNI is default when the requirements are not met or can be forced.
Presets added for maven and FFM - JNI is default selection.
Enhanced Maven options will work with either JNI or FFM
New Workflows for testing and maven uploads.
Extensive documentation changes for java.
2025-11-04 14:03:06 -06:00

178 lines
8.1 KiB
CMake

#-----------------------------------------------------------------------------
# CMake configuration for HDF5 Java test suite
# This file sets up the build, and test execution rules for the HDF5 Java test suite.
# It handles Java test source grouping, JAR creation, test data management, test execution (including VOL tests),
# and integration with the HDF5 Java FFM and core libraries.
#-----------------------------------------------------------------------------
cmake_minimum_required (VERSION 3.26)
project (HDF5_JAVA_JTEST Java)
set (CMAKE_VERBOSE_MAKEFILE 1)
set_directory_properties(PROPERTIES INCLUDE_DIRECTORIES "${HDF5_JAVA_JSRC_SOURCE_DIR};${HDF5_JAVA_JSRC_BINARY_DIR};${HDF5_JAVA_LIB_DIR}")
#-----------------------------------------------------------------------------
# Build FFM-only tests (no hdf.hdf5lib dependencies)
# Build FfmTestSupport first, then test files that depend on it
#-----------------------------------------------------------------------------
# Set classpath for FfmTestSupport compilation (needs FFM bindings)
set (CMAKE_JAVA_INCLUDE_PATH "${HDF5_JAVAHDF5_JARS}")
# Build FfmTestSupport utility class first
file (WRITE ${PROJECT_BINARY_DIR}/FfmTestSupportManifest.txt
"Main-Class: jtest.FfmTestSupport
Enable-Native-Access: ALL-UNNAMED
"
)
add_jar (${HDF5_JAVA_JTEST_LIB_TARGET}_FfmTestSupport
MANIFEST ${PROJECT_BINARY_DIR}/FfmTestSupportManifest.txt
FfmTestSupport.java
)
get_target_property (${HDF5_JAVA_JTEST_LIB_TARGET}_FfmTestSupport_JAR_FILE
${HDF5_JAVA_JTEST_LIB_TARGET}_FfmTestSupport JAR_FILE)
add_dependencies (${HDF5_JAVA_JTEST_LIB_TARGET}_FfmTestSupport ${HDF5_JAVA_JSRC_LIB_TARGET})
set_target_properties (${HDF5_JAVA_JTEST_LIB_TARGET}_FfmTestSupport PROPERTIES FOLDER test/java/ffm)
if (HDF5_ENABLE_FORMATTERS)
clang_format (HDF5_JAVA_JTEST_FfmTestSupport_SRC_FORMAT FfmTestSupport.java)
endif ()
# Build FFM test files (they depend on FfmTestSupport)
set (HDF5_JAVA_JTEST_FFM_TEST_SOURCES
TestH5Fffm
TestH5Dffm
TestH5Sffm
TestH5Tffm
TestH5Affm
TestH5Pffm
TestH5Effm
TestH5Gffm
TestH5Iffm
TestH5Lffm
TestH5Rffm
TestH5Offm
TestH5VLffm
TestH5PLffm
TestH5Zffm
TestH5FDffm
)
# Update classpath to include FfmTestSupport JAR for test compilation
set (CMAKE_JAVA_INCLUDE_PATH "${HDF5_JAVAHDF5_JARS};${${HDF5_JAVA_JTEST_LIB_TARGET}_FfmTestSupport_JAR_FILE};${HDF5_JAVA_LIB_DIR}/org.junit.jar;${HDF5_JAVA_LIB_DIR}/org.hamcrest.jar;${HDF5_JAVA_LOGGING_JAR};${HDF5_JAVA_LOGGING_SIMPLE_JAR}")
foreach (ffm_test_file ${HDF5_JAVA_JTEST_FFM_TEST_SOURCES})
file (WRITE ${PROJECT_BINARY_DIR}/${ffm_test_file}FfmManifest.txt
"Main-Class: jtest.${ffm_test_file}
Enable-Native-Access: ALL-UNNAMED
"
)
add_jar (${HDF5_JAVA_JTEST_LIB_TARGET}_${ffm_test_file}
MANIFEST ${PROJECT_BINARY_DIR}/${ffm_test_file}FfmManifest.txt
${ffm_test_file}.java
)
get_target_property (${HDF5_JAVA_JTEST_LIB_TARGET}_${ffm_test_file}_JAR_FILE
${HDF5_JAVA_JTEST_LIB_TARGET}_${ffm_test_file} JAR_FILE)
# FFM tests depend on both javahdf5 JAR and FfmTestSupport JAR
add_dependencies (${HDF5_JAVA_JTEST_LIB_TARGET}_${ffm_test_file} ${HDF5_JAVA_JSRC_LIB_TARGET} ${HDF5_JAVA_JTEST_LIB_TARGET}_FfmTestSupport)
set_target_properties (${HDF5_JAVA_JTEST_LIB_TARGET}_${ffm_test_file} PROPERTIES FOLDER test/java/ffm)
if (HDF5_ENABLE_FORMATTERS)
clang_format (HDF5_JAVA_JTEST_${ffm_test_file}_FFM_SRC_FORMAT ${ffm_test_file}.java)
endif ()
endforeach ()
# Restore classpath for other tests
set (CMAKE_JAVA_INCLUDE_PATH "${HDF5_JAVAHDF5_JARS};${HDF5_JAVA_LIB_DIR}/org.junit.jar;${HDF5_JAVA_LIB_DIR}/org.hamcrest.jar;${HDF5_JAVA_LOGGING_JAR};${HDF5_JAVA_LOGGING_SIMPLE_JAR}")
HDFTEST_COPY_FILE("${PROJECT_SOURCE_DIR}/h5ex_g_iterate.orig" "${PROJECT_BINARY_DIR}/h5ex_g_iterate.hdf" "${HDF5_JAVA_JTEST_LIB_TARGET}_files")
HDFTEST_COPY_FILE("${PROJECT_SOURCE_DIR}/h5ex_g_iterate.orig" "${PROJECT_BINARY_DIR}/h5ex_g_iterateL1.hdf" "${HDF5_JAVA_JTEST_LIB_TARGET}_files")
HDFTEST_COPY_FILE("${PROJECT_SOURCE_DIR}/h5ex_g_iterate.orig" "${PROJECT_BINARY_DIR}/h5ex_g_iterateL2.hdf" "${HDF5_JAVA_JTEST_LIB_TARGET}_files")
HDFTEST_COPY_FILE("${PROJECT_SOURCE_DIR}/h5ex_g_iterate.orig" "${PROJECT_BINARY_DIR}/h5ex_g_iterateO1.hdf" "${HDF5_JAVA_JTEST_LIB_TARGET}_files")
HDFTEST_COPY_FILE("${PROJECT_SOURCE_DIR}/h5ex_g_iterate.orig" "${PROJECT_BINARY_DIR}/h5ex_g_iterateO2.hdf" "${HDF5_JAVA_JTEST_LIB_TARGET}_files")
HDFTEST_COPY_FILE("${HDF5_TOOLS_TST_DIR}/testfiles/trefer_reg.h5" "${PROJECT_BINARY_DIR}/trefer_reg.h5" "${HDF5_JAVA_JTEST_LIB_TARGET}_files")
HDFTEST_COPY_FILE("${HDF5_TOOLS_TST_DIR}/testfiles/trefer_attr.h5" "${PROJECT_BINARY_DIR}/trefer_attr.h5" "${HDF5_JAVA_JTEST_LIB_TARGET}_files")
HDFTEST_COPY_FILE("${HDF5_TOOLS_TST_DIR}/testfiles/tdatareg.h5" "${PROJECT_BINARY_DIR}/tdatareg.h5" "${HDF5_JAVA_JTEST_LIB_TARGET}_files")
HDFTEST_COPY_FILE("${HDF5_TOOLS_TST_DIR}/testfiles/tattrreg.h5" "${PROJECT_BINARY_DIR}/tattrreg.h5" "${HDF5_JAVA_JTEST_LIB_TARGET}_files")
HDFTEST_COPY_FILE("${HDF5_TOOLS_TST_DIR}/testfiles/tintsattrs.h5" "${PROJECT_BINARY_DIR}/tintsattrs.h5" "${HDF5_JAVA_JTEST_LIB_TARGET}_files")
HDFTEST_COPY_FILE("${HDF5_TOOLS_TST_DIR}/testfiles/tfloatsattrs.h5" "${PROJECT_BINARY_DIR}/tfloatsattrs.h5" "${HDF5_JAVA_JTEST_LIB_TARGET}_files")
add_custom_target(${HDF5_JAVA_JTEST_LIB_TARGET}_files ALL COMMENT "Copying files needed by ${HDF5_JAVA_JTEST_LIB_TARGET} tests" DEPENDS ${${HDF5_JAVA_JTEST_LIB_TARGET}_files_list})
if (WIN32)
set (CMAKE_JAVA_INCLUDE_FLAG_SEP ";")
else ()
set (CMAKE_JAVA_INCLUDE_FLAG_SEP ":")
endif ()
get_property (target_name TARGET ${HDF5_JAVA_JSRC_LIB_TARGET} PROPERTY OUTPUT_NAME)
set (CMAKE_JAVA_CLASSPATH ".")
foreach (CMAKE_INCLUDE_PATH ${CMAKE_JAVA_INCLUDE_PATH})
set (CMAKE_JAVA_CLASSPATH "${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${CMAKE_INCLUDE_PATH}")
endforeach ()
if (HDF5_TEST_JAVA AND HDF5_TEST_SERIAL)
add_test (
NAME JUnitExt-clear-objects
COMMAND ${CMAKE_COMMAND} -E remove
test.h5
testF2.h5
testPf00000.h5
testPf00001.h5
WORKING_DIRECTORY ${HDF5_BINARY_DIR}/java/jtest
)
set_tests_properties (JUnitExt-clear-objects PROPERTIES FIXTURES_SETUP clear_JUnitExt)
add_test (
NAME JUnitExt-clean-objects
COMMAND ${CMAKE_COMMAND} -E remove
test.h5
testF2.h5
testPf00000.h5
testPf00001.h5
WORKING_DIRECTORY ${HDF5_BINARY_DIR}/java/jtest
)
set_tests_properties (JUnitExt-clean-objects PROPERTIES FIXTURES_CLEANUP clear_JUnitExt)
#-----------------------------------------------------------------------------
# Add FFM-only test execution (Test* files, skip FfmTestSupport utility)
#-----------------------------------------------------------------------------
foreach (ffm_test_file ${HDF5_JAVA_JTEST_FFM_TEST_SOURCES})
set (TEST_FFM_JAVA_CLASSPATH "${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${${HDF5_JAVA_JTEST_LIB_TARGET}_${ffm_test_file}_JAR_FILE}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${${HDF5_JAVA_JTEST_LIB_TARGET}_FfmTestSupport_JAR_FILE}")
add_test (
NAME JUnitFFM-${ffm_test_file}
COMMAND "${CMAKE_COMMAND}"
-D "TEST_JAVA=${CMAKE_Java_RUNTIME};${CMAKE_Java_RUNTIME_FLAGS}"
-D "TEST_CLASSPATH:STRING=${TEST_FFM_JAVA_CLASSPATH}"
-D "TEST_ARGS:STRING=${CMD_ARGS}-ea;org.junit.runner.JUnitCore"
-D "TEST_PROGRAM=jtest.${ffm_test_file}"
-D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_OUTPUT_DIRECTORY}"
-D "TEST_FOLDER=${HDF5_BINARY_DIR}/java/jtest"
-D "TEST_OUTPUT=JUnitFFM-${ffm_test_file}.out"
-D "TEST_EXPECT=0"
-D "TEST_MASK_ERROR=TRUE"
-D "TEST_SKIP_COMPARE=TRUE"
-P "${HDF_RESOURCES_DIR}/runTest.cmake"
)
set_tests_properties (JUnitFFM-${ffm_test_file} PROPERTIES
ENVIRONMENT "HDF5_PLUGIN_PATH=${CMAKE_BINARY_DIR}/testdir2"
FIXTURES_REQUIRED clear_JUnitExt
WORKING_DIRECTORY ${HDF5_BINARY_DIR}/java/jtest
)
if ("JUnitFFM-${ffm_test_file}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
set_tests_properties (JUnitFFM-${ffm_test_file} PROPERTIES DISABLED true)
endif ()
endforeach ()
endif ()
set (CMAKE_JAVA_INCLUDE_PATH "")