2 @defgroup module-wrapping-java Module Java CMake APIs
 
    6 @file vtkModuleWrapJava.cmake
 
    7 @brief APIs 
for wrapping modules 
for Java
 
   12 @brief Generate sources 
for using a module
's classes from Java 
   14 This function generates the wrapped sources for a module. It places the list of 
   15 generated source files and Java source files in variables named in the second 
   16 and third arguments, respectively. 
   19 _vtk_module_wrap_java_sources(<module> <sources> <classes>) 
   22 function (_vtk_module_wrap_java_sources module sources java_sources) 
   23   _vtk_module_get_module_property("${module}" 
   24     PROPERTY  "exclude_wrap" 
   25     VARIABLE  _vtk_java_exclude_wrap) 
   26   if (_vtk_java_exclude_wrap) 
   30   file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${_vtk_java_library_name}Java") 
   32   set(_vtk_java_args_file "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${_vtk_java_library_name}Java/${_vtk_java_library_name}-java.$<CONFIGURATION>.args") 
   33   set(_vtk_java_init_data_file "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${_vtk_java_library_name}Java/${_vtk_java_library_name}-java-init.data") 
   35   set(_vtk_java_hierarchy_depends "${module}") 
   36   _vtk_module_get_module_property("${module}" 
   37     PROPERTY  "private_depends" 
   38     VARIABLE  _vtk_java_private_depends) 
   39   list(APPEND _vtk_java_hierarchy_depends ${_vtk_java_private_depends}) 
   41   set(_vtk_java_command_depends) 
   42   foreach (_vtk_java_hierarchy_depend IN LISTS _vtk_java_hierarchy_depends) 
   43     _vtk_module_get_module_property("${_vtk_java_hierarchy_depend}" 
   45       VARIABLE  _vtk_java_hierarchy_file) 
   46     if (_vtk_java_hierarchy_file) 
   47       list(APPEND _vtk_java_hierarchy_files "${_vtk_java_hierarchy_file}") 
   48       get_property(_vtk_java_is_imported 
   49         TARGET    "${_vtk_java_hierarchy_depend}" 
   51       if (_vtk_java_is_imported OR CMAKE_GENERATOR MATCHES "Ninja") 
   52         list(APPEND _vtk_java_command_depends "${_vtk_java_hierarchy_file}") 
   54         _vtk_module_get_module_property("${_vtk_java_hierarchy_depend}" 
   55           PROPERTY  "library_name" 
   56           VARIABLE  _vtk_java_hierarchy_library_name) 
   57         if (TARGET "${_vtk_java_hierarchy_library_name}-hierarchy") 
   58           list(APPEND _vtk_java_command_depends "${_vtk_java_hierarchy_library_name}-hierarchy") 
   61             "The ${_vtk_java_hierarchy_depend} hierarchy file is attached to a non-imported target " 
   62             "and a hierarchy target (${_vtk_java_hierarchy_library_name}-hierarchy) is " 
   69   set(_vtk_java_genex_compile_definitions 
   70     "$<TARGET_PROPERTY:${_vtk_java_target_name},COMPILE_DEFINITIONS>") 
   71   set(_vtk_java_genex_include_directories 
   72     "$<TARGET_PROPERTY:${_vtk_java_target_name},INCLUDE_DIRECTORIES>") 
   74     OUTPUT  "${_vtk_java_args_file}" 
   75     CONTENT "$<$<BOOL:${_vtk_java_genex_compile_definitions}>:\n-D\'$<JOIN:${_vtk_java_genex_compile_definitions},\'\n-D\'>\'>\n 
   76 $<$<BOOL:${_vtk_java_genex_include_directories}>:\n-I\'$<JOIN:${_vtk_java_genex_include_directories},\'\n-I\'>\'>\n 
   77 $<$<BOOL:${_vtk_java_hierarchy_files}>:\n--types \'$<JOIN:${_vtk_java_hierarchy_files},\'\n--types \'>\'>\n") 
   79   set(_vtk_java_sources) 
   80   set(_vtk_java_java_sources) 
   82   _vtk_module_get_module_property("${module}" 
   84     VARIABLE  _vtk_java_headers) 
   85   set(_vtk_java_classes) 
   86   foreach (_vtk_java_header IN LISTS _vtk_java_headers) 
   87     get_filename_component(_vtk_java_basename "${_vtk_java_header}" NAME_WE) 
   88     list(APPEND _vtk_java_classes 
   89       "${_vtk_java_basename}") 
   91     # The vtkWrapJava tool has special logic for the `vtkRenderWindow` class. 
   92     # This extra logic requires its wrappers to be compiled as ObjC++ code 
   94     set(_vtk_java_ext "cxx") 
   95     if (APPLE AND _vtk_java_basename STREQUAL "vtkRenderWindow") 
   96       set(_vtk_java_ext "mm") 
   99     set(_vtk_java_source_output 
  100       "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${_vtk_java_library_name}Java/${_vtk_java_basename}Java.${_vtk_java_ext}") 
  101     list(APPEND _vtk_java_sources 
  102       "${_vtk_java_source_output}") 
  104     set(_vtk_java_wrap_target "VTK::WrapJava") 
  105     set(_vtk_java_macros_args) 
  106     if (TARGET VTKCompileTools::WrapJava) 
  107       set(_vtk_java_wrap_target "VTKCompileTools::WrapJava") 
  108       if (TARGET VTKCompileTools_macros) 
  109         list(APPEND _vtk_java_command_depends 
  110           "VTKCompileTools_macros") 
  111         list(APPEND _vtk_java_macros_args 
  113           -imacros "${_VTKCompileTools_macros_file}") 
  117     set(_vtk_java_parse_target "VTK::ParseJava") 
  118     if (TARGET VTKCompileTools::ParseJava) 
  119       set(_vtk_java_parse_target "VTKCompileTools::ParseJava") 
  123       OUTPUT  "${_vtk_java_source_output}" 
  124       COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} 
  125               "$<TARGET_FILE:${_vtk_java_wrap_target}>" 
  126               "@${_vtk_java_args_file}" 
  127               -o "${_vtk_java_source_output}" 
  128               "${_vtk_java_header}" 
  129               ${_vtk_java_macros_args} 
  131               CXX "${_vtk_java_header}" 
  132       COMMENT "Generating Java wrapper sources for ${_vtk_java_basename}" 
  134         "${_vtk_java_header}" 
  135         "${_vtk_java_args_file}" 
  136         "$<TARGET_FILE:${_vtk_java_wrap_target}>" 
  137         ${_vtk_java_command_depends}) 
  139     set(_vtk_java_java_source_output 
  140       "${_vtk_java_JAVA_OUTPUT}/${_vtk_java_basename}.java") 
  141     list(APPEND _vtk_java_java_sources 
  142       "${_vtk_java_java_source_output}") 
  145       OUTPUT  "${_vtk_java_java_source_output}" 
  146       COMMAND "${_vtk_java_parse_target}" 
  147               "@${_vtk_java_args_file}" 
  148               -o "${_vtk_java_java_source_output}" 
  149               "${_vtk_java_header}" 
  150               ${_vtk_java_macros_args} 
  152               CXX "${_vtk_java_header}" 
  153       COMMENT "Generating Java sources for ${_vtk_java_basename}" 
  155         "${_vtk_java_header}" 
  156         "${_vtk_java_args_file}" 
  157         "$<TARGET_FILE:${_vtk_java_parse_target}>" 
  158         ${_vtk_java_command_depends}) 
  162     "${_vtk_java_sources}" 
  165   set("${java_sources}" 
  166     "${_vtk_java_java_sources}" 
  172 @brief Generate a JNI library for a set of modules 
  174 A single JNI library may consist of the Java wrappings of multiple modules. 
  175 This is useful for kit-based builds where the modules part of the same kit 
  176 belong to the same JNI library as well. 
  179 _vtk_module_wrap_java_library(<name> <module>...) 
  182 The first argument is the name of the JNI library. The remaining arguments are 
  183 modules to include in the JNI library. 
  185 The remaining information it uses is assumed to be provided by the 
  186 @ref vtk_module_wrap_java function. 
  188 function (_vtk_module_wrap_java_library name) 
  189   set(_vtk_java_library_sources) 
  190   set(_vtk_java_library_java_sources) 
  191   set(_vtk_java_library_link_depends) 
  192   foreach (_vtk_java_module IN LISTS ARGN) 
  193     _vtk_module_get_module_property("${_vtk_java_module}" 
  194       PROPERTY  "exclude_wrap" 
  195       VARIABLE  _vtk_java_exclude_wrap) 
  196     if (_vtk_java_exclude_wrap) 
  199     _vtk_module_real_target(_vtk_java_target_name "${_vtk_java_module}") 
  200     _vtk_module_get_module_property("${_vtk_java_module}" 
  201       PROPERTY  "library_name" 
  202       VARIABLE  _vtk_java_library_name) 
  203     _vtk_module_wrap_java_sources("${_vtk_java_module}" _vtk_java_sources _vtk_java_java_sources) 
  204     list(APPEND _vtk_java_library_sources 
  205       ${_vtk_java_sources}) 
  206     list(APPEND _vtk_java_library_java_sources 
  207       ${_vtk_java_java_sources}) 
  209     _vtk_module_get_module_property("${_vtk_java_module}" 
  211       VARIABLE  _vtk_java_module_depends) 
  212     foreach (_vtk_java_module_depend IN LISTS _vtk_java_module_depends) 
  213       _vtk_module_get_module_property("${_vtk_java_module_depend}" 
  214         PROPERTY  "exclude_wrap" 
  215         VARIABLE  _vtk_java_module_depend_exclude_wrap) 
  216       if (_vtk_java_module_depend_exclude_wrap) 
  220       _vtk_module_get_module_property("${_vtk_java_module_depend}" 
  221         PROPERTY  "library_name" 
  222         VARIABLE  _vtk_java_depend_library_name) 
  224       # XXX(kits): This doesn't work 
for kits.
 
  225       list(APPEND _vtk_java_library_link_depends
 
  226         "${_vtk_java_depend_library_name}Java")
 
  230   if (NOT _vtk_java_library_sources)
 
  234   if (_vtk_java_library_link_depends)
 
  235     list(REMOVE_DUPLICATES _vtk_java_library_link_depends)
 
  238   set(_vtk_java_target "${
name}Java
") 
  240   # XXX(java): Should this be a `MODULE`? If not, we should probably export 
  241   # these targets, but then we'll need logic akin to the `vtkModuleWrapPython` 
  242   # logic for loading wrapped modules from other packages. 
  243   add_library("${_vtk_java_target}
" SHARED 
  244     ${_vtk_java_library_sources}) 
  245   add_custom_target("${_vtk_java_target}-java-sources
" 
  247       ${_vtk_java_library_java_sources}) 
  248   add_dependencies("${_vtk_java_target}
" 
  249     "${_vtk_java_target}-java-sources
") 
  251     set_property(TARGET "${_vtk_java_target}
" 
  256     set_property(TARGET "${_vtk_java_target}
" 
  260   set_property(TARGET "${_vtk_java_target}
" 
  262       "_vtk_module_java_files
" "${_vtk_java_library_java_sources}
") 
  264   if (_vtk_java_JNILIB_DESTINATION) 
  266       TARGETS "${_vtk_java_target}
" 
  269         DESTINATION "${_vtk_java_JNILIB_DESTINATION}
" 
  270         COMPONENT   "${_vtk_java_JNILIB_COMPONENT}
" 
  273         DESTINATION "${_vtk_java_JNILIB_DESTINATION}
" 
  274         COMPONENT   "${_vtk_java_JNILIB_COMPONENT}
") 
  279     TARGETS "${_vtk_java_target}
") 
  281   target_link_libraries("${_vtk_java_target}
" 
  284       # XXX(java): If we use modules, remove this. 
  285       ${_vtk_java_library_link_depends} 
  290 @ingroup module-wrapping-java 
  291 @brief Wrap a set of modules for use in Java 
  294 vtk_module_wrap_java( 
  296   [WRAPPED_MODULES <varname>] 
  298   [JAVA_OUTPUT <destination>]) 
  301   * `MODULES`: (Required) The list of modules to wrap. 
  302   * `WRAPPED_MODULES`: (Recommended) Not all modules are wrappable. This 
  303     variable will be set to contain the list of modules which were wrapped. 
  304   * `JAVA_OUTPUT`: Defaults to 
  305     `${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/vtkJava`. Java source files are 
  306     written to this directory. After generation, the files may be compiled as 
  308   * `LIBRARY_DESTINATION` (Recommended): If provided, dynamic loader 
  309     information will be added to modules for loading dependent libraries. 
  310   * `JNILIB_DESTINATION`: Where to install JNI libraries. 
  311   * `JNILIB_COMPONENT`: Defaults to `jni`. The install component to use for JNI 
  314 For each wrapped module, a `<module>Java` target will be created. These targets 
  315 will have a `_vtk_module_java_files` property which is the list of generated 
  316 Java source files for that target. 
  318 For dependency purposes, the `<module>Java-java-sources` target may also be 
  321 function (vtk_module_wrap_java) 
  322   cmake_parse_arguments(_vtk_java 
  324     "JAVA_OUTPUT;WRAPPED_MODULES;LIBRARY_DESTINATION;JNILIB_DESTINATION;JNILIB_COMPONENT
" 
  328   if (_vtk_java_UNPARSED_ARGUMENTS) 
  331       "${_vtk_java_UNPARSED_ARGUMENTS}
") 
  334   if (NOT _vtk_java_JAVA_OUTPUT) 
  335     set(_vtk_java_JAVA_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/vtkJava
") 
  338   if (NOT _vtk_java_JNILIB_COMPONENT) 
  339     set(_vtk_java_JNILIB_COMPONENT "jni
") 
  343   set(CMAKE_BUILD_RPATH_USE_ORIGIN 1) 
  346       set(_vtk_java_origin_rpath_prefix 
  349       set(_vtk_java_origin_rpath_prefix 
  353     list(APPEND CMAKE_INSTALL_RPATH 
  354       # For sibling wrapped modules. 
  355       "${_vtk_java_origin_rpath_prefix}
") 
  357     if (DEFINED _vtk_java_LIBRARY_DESTINATION AND DEFINED _vtk_java_JNILIB_DESTINATION) 
  358       file(RELATIVE_PATH _vtk_java_relpath 
  359         "/prefix/${_vtk_java_JNILIB_DESTINATION}
" 
  360         "/prefix/${_vtk_java_LIBRARY_DESTINATION}
") 
  362       list(APPEND CMAKE_INSTALL_RPATH 
  364         "${_vtk_java_origin_rpath_prefix}/${_vtk_java_relpath}
") 
  368   if (DEFINED _vtk_java_JNILIB_DESTINATION) 
  369     set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${_vtk_java_JNILIB_DESTINATION}
") 
  370     set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${_vtk_java_JNILIB_DESTINATION}
") 
  373   if (NOT _vtk_java_MODULES) 
  375       "No modules were requested 
for java wrapping.
") 
  379   set(_vtk_java_all_wrapped_modules) 
  380   foreach (_vtk_java_module IN LISTS _vtk_java_MODULES) 
  381     _vtk_module_get_module_property("${_vtk_java_module}
" 
  382       PROPERTY  "library_name
" 
  383       VARIABLE  _vtk_java_exclude_wrap) 
  384     _vtk_module_get_module_property("${_vtk_java_module}
" 
  385       PROPERTY  "library_name
" 
  386       VARIABLE  _vtk_java_library_name) 
  387     _vtk_module_wrap_java_library("${_vtk_java_library_name}
" "${_vtk_java_module}
") 
  389     if (TARGET "${_vtk_java_library_name}Java
") 
  390       list(APPEND _vtk_java_all_wrapped_modules 
  391         "${_vtk_java_module}
") 
  395   if (NOT _vtk_java_all_wrapped_modules) 
  397       "No modules given could be wrapped.
") 
  400   if (DEFINED _vtk_java_WRAPPED_MODULES) 
  401     set("${_vtk_java_WRAPPED_MODULES}
" 
  402       "${_vtk_java_all_wrapped_modules}
"