From b18b7841d53149aba55d0c7e2db334fc865310b0 Mon Sep 17 00:00:00 2001 From: Ben Boeckel <ben.boeckel@kitware.com> Date: Wed, 25 Mar 2020 08:21:37 -0400 Subject: [PATCH] Wrapping/Java: use CMake Java support --- CMakeLists.txt | 2 + Wrapping/Java/CMakeLists.txt | 145 +++++++++++----------- Wrapping/Java/Testing/CMakeLists.txt | 4 +- Wrapping/Java/Testing/Java/CMakeLists.txt | 47 +++---- 4 files changed, 90 insertions(+), 108 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b4fc5d25088..511c1072f40 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -376,6 +376,8 @@ if (VTK_WRAP_PYTHON) endif () if (VTK_WRAP_JAVA) + enable_language(Java) + add_subdirectory(Wrapping/Java) endif () diff --git a/Wrapping/Java/CMakeLists.txt b/Wrapping/Java/CMakeLists.txt index 4d117a7db59..8554c0099bb 100644 --- a/Wrapping/Java/CMakeLists.txt +++ b/Wrapping/Java/CMakeLists.txt @@ -1,6 +1,6 @@ include(vtkModuleWrapJava) vtk_module_wrap_java( - JAVA_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/src/vtk" + JAVA_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/vtk" MODULES ${vtk_modules} WRAPPED_MODULES vtk_java_wrapped_modules LIBRARY_DESTINATION "${CMAKE_INSTALL_LIBDIR}" @@ -95,14 +95,10 @@ if (TARGET VTK::FiltersModeling AND TARGET VTK::IOImage) vtk/sample/ImagePlaneWidget) endif () -set(vtk_java_class_output - "${CMAKE_CURRENT_BINARY_DIR}/class") -file(MAKE_DIRECTORY "${vtk_java_class_output}") - set(java_input_files) set(java_class_files) foreach (java_file IN LISTS java_sources) - set(output_file "${CMAKE_CURRENT_BINARY_DIR}/src/${java_file}.java") + set(output_file "${CMAKE_CURRENT_BINARY_DIR}/${java_file}.java") add_custom_command( OUTPUT "${output_file}" DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${java_file}.java" @@ -113,8 +109,6 @@ foreach (java_file IN LISTS java_sources) list(APPEND java_input_files "${output_file}") - list(APPEND java_class_files - "${vtk_java_class_output}/${java_file}.class") endforeach () set(vtk_java_native_libraries) @@ -129,8 +123,6 @@ foreach (_vtk_java_module IN LISTS vtk_java_wrapped_modules) PROPERTY "_vtk_module_java_files") list(APPEND java_input_files ${_vtk_module_java_files}) - #list(APPEND java_class_files - # "${vtk_java_class_output}/${java_file}.class") string(APPEND vtk_java_native_libraries " ${_vtk_java_library_name}(\"${_vtk_java_library_name}Java\"),\n") @@ -144,88 +136,91 @@ set(java_configure_sources vtk/vtkSettings) foreach (java_file IN LISTS java_configure_sources) - set(output_file "${CMAKE_CURRENT_BINARY_DIR}/src/${java_file}.java") + set(output_file "${CMAKE_CURRENT_BINARY_DIR}/${java_file}.java") configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/${java_file}.java.in" - "${CMAKE_CURRENT_BINARY_DIR}/src/${java_file}.java" + "${CMAKE_CURRENT_BINARY_DIR}/${java_file}.java" @ONLY) list(APPEND java_input_files "${output_file}") - list(APPEND java_class_files - "${vtk_java_class_output}/${java_file}.class") endforeach () -set(vtk_java_rsp_file - "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/java_files.rsp") - -file(GENERATE - OUTPUT "${vtk_java_rsp_file}" - CONTENT "\'$<JOIN:${java_input_files},\'\n\'>\'\n") - # Set the javac source version -set(VTK_JAVA_SOURCE_VERSION "1.6" CACHE STRING "javac source version") +set(VTK_JAVA_SOURCE_VERSION "<DEFAULT>" CACHE STRING "javac source version") mark_as_advanced(VTK_JAVA_SOURCE_VERSION) -set(VTK_JAVA_TARGET_VERSION "1.6" CACHE STRING "javac target version") +set(VTK_JAVA_TARGET_VERSION "<DEFAULT>" CACHE STRING "javac target version") mark_as_advanced(VTK_JAVA_TARGET_VERSION) -set(vtk_compile_classpath) -if (VTK_JAVA_SWT_COMPONENT) - list(APPEND vtk_compile_classpath - ${ECLIPSE_SWT_LIBRARIES}) +if (VTK_JAVA_SOURCE_VERSION STREQUAL "<DEFAULT>") + set(VTK_JAVA_SOURCE_VERSION "1.6") endif () -if (VTK_JAVA_JOGL_COMPONENT) - list(APPEND vtk_compile_classpath - ${JOGL_LIB} - ${JOGL_GLUE}) +if (VTK_JAVA_TARGET_VERSION STREQUAL "<DEFAULT>") + set(VTK_JAVA_TARGET_VERSION "1.6") endif () -set(vtk_java_classpath_arguments) -if (vtk_compile_classpath) - set(classpath_separator ":") - if (WIN32) - set(classpath_separator "\\;") - endif () +set(CMAKE_INSTALL_JARDIR "<LIBDIR>/java" + CACHE STRING "Java jar files (LIBDIR/java)") +string(REPLACE "<LIBDIR>" "${CMAKE_INSTALL_LIBDIR}" CMAKE_INSTALL_JARDIR "${CMAKE_INSTALL_JARDIR}") +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_JARDIR}") +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_JARDIR}") - string(REPLACE ";" "${classpath_separator}" vtk_compile_classpath "${vtk_compile_classpath}") - set(vtk_java_classpath_arguments - -classpath "${vtk_compile_classpath}") +set(classpath_separator ":") +if (WIN32) + set(classpath_separator "\\;") endif () - -add_custom_command( - OUTPUT ${java_class_files} - DEPENDS ${java_input_files} - COMMAND "${Java_JAVAC_EXECUTABLE}" - ${vtk_java_classpath_arguments} - -source "${VTK_JAVA_SOURCE_VERSION}" - -target "${VTK_JAVA_TARGET_VERSION}" - -d "${vtk_java_class_output}" - "@${vtk_java_rsp_file}" - COMMENT "Compiling Java Classes") - -set(vtk_jar_file - "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/vtk.jar") - -add_custom_command( - OUTPUT "${vtk_jar_file}" - DEPENDS ${java_class_files} - COMMAND "${Java_JAR_EXECUTABLE}" - -cvf "${vtk_jar_file}" - -C "${vtk_java_class_output}" - vtk - COMMENT "Creating vtk.jar") - -add_custom_target(vtkjava ALL - DEPENDS - "${vtk_jar_file}") - -set_directory_properties(PROPERTIES - ADDITIONAL_MAKE_CLEAN_FILES - "${java_class_files};${vtk_jar_file}") -#install( -# FILES "${vtk_jar_file}" -# DESTINATION "${VTK_INSTALL_JAVA_DIR}" -# COMPONENT "runtime") +set(java_classpath + "${CMAKE_CURRENT_BINARY_DIR}") +if (VTK_JAVA_JOGL_COMPONENT) + list(APPEND java_classpath + "$<TARGET_PROPERTY:JOGL::glue,LOCATION>" + "$<TARGET_PROPERTY:JOGL::JOGL,LOCATION>") +endif () +if (VTK_JAVA_SWT_COMPONENT) + list(APPEND java_classpath + ${SWT_ECLIPSE_LIBRARIES}) +endif () +string(REPLACE ";" "${classpath_separator}" java_classpath "${java_classpath}") + +add_library(vtkjava STATIC + ${java_input_files}) +add_library(VTK::vtkjava ALIAS vtkjava) +set_property(TARGET vtkjava + PROPERTY + LINKER_LANGUAGE Java) +set_property(TARGET vtkjava + PROPERTY + OUTPUT_NAME "vtk") +target_include_directories(vtkjava + PRIVATE + "${CMAKE_CURRENT_BINARY_DIR}") +target_compile_options(vtkjava + PRIVATE + # TODO(java): Why does adding this to the include directories not work? + "SHELL:-classpath ${java_classpath}" + "SHELL:-source ${VTK_JAVA_SOURCE_VERSION}" + "SHELL:-target ${VTK_JAVA_TARGET_VERSION}") +target_link_libraries(vtkjava + PRIVATE + $<$<BOOL:${VTK_JAVA_SWT_COMPONENT}>:${ECLIPSE_SWT_LIBRARIES}> + "$<$<BOOL:${VTK_JAVA_JOGL_COMPONENT}>:JOGL::JOGL>") + +install( + TARGETS vtkjava + EXPORT VTKJava + COMPONENT "jar" + ARCHIVE DESTINATION "${CMAKE_INSTALL_JARDIR}" + LIBRARY DESTINATION "${CMAKE_INSTALL_JARDIR}") +export( + EXPORT VTKJava + NAMESPACE VTK:: + FILE "${CMAKE_BINARY_DIR}/${vtk_cmake_destination}/VTKJava-targets.cmake") +install( + EXPORT VTKJava + NAMESPACE VTK:: + FILE "VTKJava-targets.cmake" + DESTINATION "${vtk_cmake_destination}" + COMPONENT "development") if (BUILD_TESTING AND TARGET VTK::TestingRendering) add_subdirectory(Testing) diff --git a/Wrapping/Java/Testing/CMakeLists.txt b/Wrapping/Java/Testing/CMakeLists.txt index 3d97919837e..54a903d0259 100644 --- a/Wrapping/Java/Testing/CMakeLists.txt +++ b/Wrapping/Java/Testing/CMakeLists.txt @@ -1,3 +1 @@ -if (VTK_WRAP_JAVA) - add_subdirectory(Java) -endif () +add_subdirectory(Java) diff --git a/Wrapping/Java/Testing/Java/CMakeLists.txt b/Wrapping/Java/Testing/Java/CMakeLists.txt index ac5625758a7..36d1fb31d21 100644 --- a/Wrapping/Java/Testing/Java/CMakeLists.txt +++ b/Wrapping/Java/Testing/Java/CMakeLists.txt @@ -10,48 +10,35 @@ set(java_test_names Regression ${java_simple_test_names}) -set(vtk_java_class_output - "${CMAKE_CURRENT_BINARY_DIR}/class") -file(MAKE_DIRECTORY "${vtk_java_class_output}") - set(java_test_files) -set(java_test_classes) foreach (java_test IN LISTS java_test_names) list(APPEND java_test_files "${CMAKE_CURRENT_SOURCE_DIR}/vtk/test/${java_test}.java") - list(APPEND java_test_classes - "${vtk_java_class_output}/vtk/test/${java_test}.class") endforeach () -if (CMAKE_GENERATOR MATCHES "Ninja") - set(vtk_jar_depends "${vtk_jar_file}") -else () - set(vtk_jar_depends "vtkjava") -endif () - -# Compile Java Tests -add_custom_command( - OUTPUT ${java_test_classes} - COMMAND ${Java_JAVAC_EXECUTABLE} - -classpath "${vtk_jar_file}" - -source "${VTK_JAVA_SOURCE_VERSION}" - -target "${VTK_JAVA_TARGET_VERSION}" - -d "${vtk_java_class_output}" - ${java_test_files} - DEPENDS "${vtk_jar_depends}" - ${java_test_files} - COMMENT "Compiling Java Tests") -add_custom_target(vtkJavaTests ALL - DEPENDS - ${java_test_classes}) - set(classpath_separator ":") if (WIN32) set(classpath_separator "\\;") endif () +set(vtk_test_classpath + "$<TARGET_FILE:VTK::vtkjava>") +string(REPLACE ";" "${classpath_separator}" vtk_test_classpath "${vtk_test_classpath}") + +add_library(vtkjava_tests STATIC + ${java_test_files}) +target_compile_options(vtkjava_tests + PRIVATE + "SHELL:-classpath ${vtk_test_classpath}" + "SHELL:-source ${VTK_JAVA_SOURCE_VERSION}" + "SHELL:-target ${VTK_JAVA_TARGET_VERSION}") +target_link_libraries(vtkjava_tests + PRIVATE + VTK::vtkjava) set(vtk_test_classpath - "${vtk_jar_file}${classpath_separator}${vtk_java_class_output}") + "$<TARGET_FILE:vtkjava_tests>" + "$<TARGET_FILE:VTK::vtkjava>") +string(REPLACE ";" "${classpath_separator}" vtk_test_classpath "${vtk_test_classpath}") if (TARGET VTK::RenderingOpenGL2) ExternalData_add_test(VTKData -- GitLab