CMakeLists.txt 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. set(MODULE_NAME "java_bindings_generator")
  2. set(OPENCV_MODULE_IS_PART_OF_WORLD FALSE)
  3. ocv_add_module(${MODULE_NAME} INTERNAL)
  4. set(OPENCV_JAVA_SIGNATURES_FILE "${CMAKE_CURRENT_BINARY_DIR}/opencv_java_signatures.json" CACHE INTERNAL "")
  5. set(OPENCV_JAVA_BINDINGS_DIR "${CMAKE_CURRENT_BINARY_DIR}" CACHE INTERNAL "")
  6. file(REMOVE_RECURSE "${OPENCV_JAVA_BINDINGS_DIR}/gen")
  7. file(REMOVE "${OPENCV_DEPHELPER}/gen_opencv_java_source") # force re-run after CMake
  8. # This file is included from a subdirectory
  9. set(JAVA_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/..")
  10. include(${JAVA_SOURCE_DIR}/common.cmake)
  11. set(__remap_config "") # list of remapped ".in" files (configure_file)
  12. set(__remap_targets "")
  13. macro(ocv_remap_files files_list_var)
  14. set(target_dir "${OpenCV_BINARY_DIR}/configured")
  15. foreach(f ${${files_list_var}})
  16. if(NOT "${f}" MATCHES "^(.*)\\.in$")
  17. #continue() # since CMake 3.2+
  18. else()
  19. set(f_ "${CMAKE_MATCH_1}")
  20. file(RELATIVE_PATH rel_path0 "${OpenCV_SOURCE_DIR}" "${f}")
  21. file(RELATIVE_PATH rel_path1 "${OpenCV_SOURCE_DIR}" "${f_}")
  22. set(__target_file "${target_dir}/${rel_path1}")
  23. configure_file("${f}" "${__target_file}" @ONLY)
  24. if(__remap_config)
  25. set(__remap_config "${__remap_config},\n")
  26. endif()
  27. set(__remap_config "${__remap_config} { \"src\": \"${rel_path0}\", \"target\": \"${__target_file}\" }")
  28. list(APPEND __remap_targets "${__target_file}")
  29. endif()
  30. endforeach()
  31. endmacro()
  32. # common files
  33. file(GLOB_RECURSE deps "${CMAKE_CURRENT_SOURCE_DIR}/src/*" "${CMAKE_CURRENT_SOURCE_DIR}/android*/*" "${CMAKE_CURRENT_SOURCE_DIR}/templates/*")
  34. ocv_remap_files(deps)
  35. set(__modules_config "") # list of OpenCV modules
  36. foreach(m ${OPENCV_JAVA_MODULES})
  37. set(module_java_dir "${OPENCV_MODULE_${m}_LOCATION}/misc/java")
  38. list(APPEND deps ${OPENCV_MODULE_${m}_HEADERS})
  39. file(GLOB_RECURSE misc_files "${module_java_dir}/*")
  40. list(APPEND deps ${misc_files})
  41. string(REGEX REPLACE "^opencv_" "" m_ "${m}")
  42. if(__modules_config)
  43. set(__modules_config "${__modules_config},\n")
  44. endif()
  45. file(RELATIVE_PATH rel_path "${OpenCV_SOURCE_DIR}" "${OPENCV_MODULE_${m}_LOCATION}")
  46. set(__modules_config "${__modules_config} { \"name\": \"${m_}\", \"location\": \"${rel_path}\" }")
  47. ocv_remap_files(misc_files)
  48. endforeach(m)
  49. include("${OpenCV_SOURCE_DIR}/cmake/OpenCVBindingsPreprocessorDefinitions.cmake")
  50. ocv_bindings_generator_populate_preprocessor_definitions(
  51. OPENCV_MODULES_BUILD
  52. opencv_preprocessor_defs
  53. )
  54. if(OPENCV_JAVA_CLEANING_API)
  55. if(OPENCV_JAVA_CLEANING_API STREQUAL "finalize")
  56. set(opencv_supported_cleaners "false")
  57. elseif(OPENCV_JAVA_CLEANING_API STREQUAL "cleaner")
  58. set(opencv_supported_cleaners "true")
  59. else()
  60. message(FATAL_ERROR "OPENCV_JAVA_CLEANING_API should be one of \"finalize\" or \"cleaner\"")
  61. endif()
  62. else()
  63. if(ANDROID OR (Java_VERSION VERSION_LESS 9))
  64. message(STATUS "Set Cleaners to False")
  65. set(opencv_supported_cleaners "false")
  66. else()
  67. message(STATUS "Set Cleaners to True")
  68. set(opencv_supported_cleaners "true")
  69. endif()
  70. endif(OPENCV_JAVA_CLEANING_API)
  71. set(CONFIG_FILE "${CMAKE_CURRENT_BINARY_DIR}/gen_java.json")
  72. set(__config_str
  73. "{
  74. \"rootdir\": \"${OpenCV_SOURCE_DIR}\",
  75. \"modules\": [
  76. ${__modules_config}
  77. ],
  78. \"preprocessor_definitions\": {
  79. ${opencv_preprocessor_defs}
  80. },
  81. \"files_remap\": [
  82. ${__remap_config}
  83. ],
  84. \"support_cleaners\": ${opencv_supported_cleaners}
  85. }
  86. ")
  87. if(EXISTS "${CONFIG_FILE}")
  88. file(READ "${CONFIG_FILE}" __content)
  89. else()
  90. set(__content "")
  91. endif()
  92. if(NOT "${__content}" STREQUAL "${__config_str}")
  93. file(WRITE "${CONFIG_FILE}" "${__config_str}")
  94. file(REMOVE "${OPENCV_DEPHELPER}/gen_opencv_java_source")
  95. endif()
  96. unset(__config_str)
  97. set(java_generated_files
  98. # "${OPENCV_JAVA_SIGNATURES_FILE}"
  99. "${OPENCV_DEPHELPER}/gen_opencv_java_source"
  100. )
  101. add_custom_command(
  102. OUTPUT ${java_generated_files}
  103. COMMAND ${PYTHON_DEFAULT_EXECUTABLE} "${JAVA_SOURCE_DIR}/generator/gen_java.py" -p "${JAVA_SOURCE_DIR}/../python/src2/gen2.py" -c "${CONFIG_FILE}"
  104. COMMAND ${CMAKE_COMMAND} -E touch "${OPENCV_DEPHELPER}/gen_opencv_java_source"
  105. WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
  106. DEPENDS "${JAVA_SOURCE_DIR}/generator/gen_java.py"
  107. "${JAVA_SOURCE_DIR}/../python/src2/gen2.py"
  108. "${JAVA_SOURCE_DIR}/../python/src2/hdr_parser.py"
  109. # don't, result of file(WRITE): "${CMAKE_CURRENT_BINARY_DIR}/gen_java.json"
  110. ${deps} ${__remap_targets}
  111. # not allowed (file(WRITE) result): "${CONFIG_FILE}"
  112. COMMENT "Generate files for Java bindings"
  113. )
  114. add_custom_target(gen_opencv_java_source DEPENDS ${java_generated_files}
  115. SOURCES "${JAVA_SOURCE_DIR}/generator/gen_java.py"
  116. "${CMAKE_CURRENT_BINARY_DIR}/gen_java.json"
  117. )