CMakeLists.txt 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. project(${the_module}_jar)
  2. set(OPENCV_JAVA_DIR "${CMAKE_CURRENT_BINARY_DIR}/opencv" CACHE INTERNAL "")
  3. file(REMOVE_RECURSE "${OPENCV_JAVA_DIR}")
  4. file(REMOVE "${OPENCV_DEPHELPER}/${the_module}_jar_source_copy")
  5. set(java_src_dir "${OPENCV_JAVA_DIR}/java")
  6. file(MAKE_DIRECTORY "${java_src_dir}")
  7. set(JAR_NAME_WE opencv-${OPENCV_JAVA_LIB_NAME_SUFFIX})
  8. set(JAR_NAME ${JAR_NAME_WE}.jar)
  9. set(OPENCV_JAR_DIR "${OpenCV_BINARY_DIR}/bin/" CACHE INTERNAL "")
  10. set(OPENCV_JAR_FILE "${OPENCV_JAR_DIR}${JAR_NAME}" CACHE INTERNAL "")
  11. ocv_copyfiles_append_dir(JAVA_SRC_COPY "${OPENCV_JAVA_BINDINGS_DIR}/gen/java" "${java_src_dir}")
  12. set(depends gen_opencv_java_source "${OPENCV_DEPHELPER}/gen_opencv_java_source")
  13. ocv_copyfiles_add_target(${the_module}_jar_source_copy JAVA_SRC_COPY "Copy Java(JAR) source files" ${depends})
  14. set(depends ${the_module}_jar_source_copy "${OPENCV_DEPHELPER}/${the_module}_jar_source_copy")
  15. if(OPENCV_JAVA_SOURCE_VERSION)
  16. set(OPENCV_ANT_JAVAC_EXTRA_ATTRS "${OPENCV_ANT_JAVAC_EXTRA_ATTRS} source=\"${OPENCV_JAVA_SOURCE_VERSION}\"")
  17. endif()
  18. if(OPENCV_JAVA_TARGET_VERSION)
  19. set(OPENCV_ANT_JAVAC_EXTRA_ATTRS "${OPENCV_ANT_JAVAC_EXTRA_ATTRS} target=\"${OPENCV_JAVA_TARGET_VERSION}\"")
  20. endif()
  21. set(OPENCV_JAVADOC_DESTINATION "${OpenCV_BINARY_DIR}/doc/doxygen/html/javadoc" CACHE STRING "")
  22. # Old Javadoc URL looks like this: https://docs.oracle.com/javase/6/docs/api/
  23. # New Javadoc URL looks like this: https://docs.oracle.com/en/java/javase/11/docs/api/
  24. set(OPENCV_JAVADOC_LINK_URL "" CACHE STRING "See details in modules/java/jar/CMakeLists.txt")
  25. if(OPENCV_JAVADOC_LINK_URL)
  26. set(CMAKE_CONFIG_OPENCV_JAVADOC_LINK "link=\"${OPENCV_JAVADOC_LINK_URL}\"")
  27. endif()
  28. if(OPENCV_JAVA_SDK_BUILD_TYPE STREQUAL "ANT")
  29. file(MAKE_DIRECTORY "${OPENCV_JAVA_DIR}/build/classes")
  30. configure_file("${CMAKE_CURRENT_SOURCE_DIR}/build.xml.in" "${OPENCV_JAVA_DIR}/build.xml" @ONLY)
  31. list(APPEND depends "${OPENCV_JAVA_DIR}/build.xml")
  32. ocv_cmake_byproducts(__byproducts BYPRODUCTS "${OPENCV_JAR_FILE}")
  33. add_custom_command(OUTPUT "${OPENCV_DEPHELPER}/${the_module}_jar"
  34. ${__byproducts} # required for add_custom_target() by ninja
  35. COMMAND ${ANT_EXECUTABLE} -noinput -k jar
  36. COMMAND ${CMAKE_COMMAND} -E touch "${OPENCV_DEPHELPER}/${the_module}_jar"
  37. WORKING_DIRECTORY "${OPENCV_JAVA_DIR}"
  38. DEPENDS ${depends}
  39. COMMENT "Generating ${JAR_NAME}"
  40. )
  41. add_custom_target(${the_module}_jar DEPENDS "${OPENCV_DEPHELPER}/${the_module}_jar")
  42. elseif(OPENCV_JAVA_SDK_BUILD_TYPE STREQUAL "JAVA")
  43. configure_file("${CMAKE_CURRENT_SOURCE_DIR}/MANIFEST.MF.in" "${OPENCV_JAVA_DIR}/MANIFEST.MF" @ONLY)
  44. list(APPEND depends "${OPENCV_JAVA_DIR}/MANIFEST.MF")
  45. ocv_cmake_byproducts(__byproducts BYPRODUCTS "${OPENCV_JAVA_DIR}/java_sources")
  46. add_custom_command(OUTPUT "${OPENCV_DEPHELPER}/${the_module}_jar"
  47. BYPRODUCTS ${__byproducts} # required for add_custom_target() by ninja
  48. DEPENDS ${depends}
  49. COMMAND ${CMAKE_COMMAND} -E touch "${OPENCV_DEPHELPER}/${the_module}_jar"
  50. COMMAND ${CMAKE_COMMAND}
  51. -D OPENCV_JAVA_DIR="${OPENCV_JAVA_DIR}/java"
  52. -D OUTPUT="${OPENCV_JAVA_DIR}/java_sources"
  53. -P "${CMAKE_CURRENT_SOURCE_DIR}/list_java_sources.cmake"
  54. )
  55. add_custom_target(${the_module}_jar_sources
  56. DEPENDS "${OPENCV_DEPHELPER}/${the_module}_jar"
  57. )
  58. list(APPEND CMAKE_JAVA_COMPILE_FLAGS -encoding utf-8 ${OPENCV_EXTRA_JAVA_COMPILE_FLAGS})
  59. add_jar(${the_module}_jar
  60. SOURCES "@${OPENCV_JAVA_DIR}/java_sources"
  61. MANIFEST "${OPENCV_JAVA_DIR}/MANIFEST.MF"
  62. OUTPUT_NAME "${JAR_NAME_WE}"
  63. OUTPUT_DIR "${OPENCV_JAR_DIR}")
  64. add_dependencies(${the_module}_jar ${the_module}_jar_sources)
  65. else()
  66. ocv_assert(0)
  67. endif()
  68. install(FILES ${OPENCV_JAR_FILE} OPTIONAL DESTINATION ${OPENCV_JAR_INSTALL_PATH} COMPONENT java)
  69. add_dependencies(${the_module} ${the_module}_jar)
  70. if(BUILD_DOCS)
  71. if(OPENCV_JAVA_SDK_BUILD_TYPE STREQUAL "ANT")
  72. add_custom_command(OUTPUT "${OPENCV_DEPHELPER}/${the_module}doc"
  73. COMMAND ${ANT_EXECUTABLE} -noinput -k javadoc
  74. COMMAND ${CMAKE_COMMAND} -E touch "${OPENCV_DEPHELPER}/${the_module}doc"
  75. WORKING_DIRECTORY "${OPENCV_JAVA_DIR}"
  76. DEPENDS ${depends}
  77. COMMENT "Generating Javadoc"
  78. )
  79. add_custom_target(${the_module}doc DEPENDS "${OPENCV_DEPHELPER}/${the_module}doc")
  80. install(DIRECTORY ${OpenCV_BINARY_DIR}/doc/doxygen/html/javadoc
  81. DESTINATION "${OPENCV_DOC_INSTALL_PATH}/html"
  82. COMPONENT "docs" OPTIONAL
  83. ${compatible_MESSAGE_NEVER}
  84. )
  85. elseif(OPENCV_JAVA_SDK_BUILD_TYPE STREQUAL "JAVA")
  86. set(Java_JAVADOC_EXECUTABLE ${Java_JAVADOC_EXECUTABLE} -encoding utf-8)
  87. # create_javadoc produces target ${_target}_javadoc
  88. create_javadoc(${the_module}
  89. FILES "@${OPENCV_JAVA_DIR}/java_sources"
  90. SOURCEPATH "${OPENCV_JAVA_DIR}/java"
  91. INSTALLPATH "${OPENCV_JAVADOC_DESTINATION}"
  92. WINDOWTITLE "OpenCV ${OPENCV_VERSION_PLAIN} Java documentation"
  93. DOCTITLE "OpenCV Java documentation (${OPENCV_VERSION})"
  94. VERSION TRUE
  95. )
  96. add_dependencies(${the_module}_javadoc ${the_module}_jar_sources)
  97. add_custom_target(${the_module}doc DEPENDS ${the_module}_javadoc)
  98. install(DIRECTORY ${OpenCV_BINARY_DIR}/doc/doxygen/html/javadoc/${the_module}/
  99. DESTINATION "${OPENCV_DOC_INSTALL_PATH}/html/javadoc"
  100. COMPONENT "docs" OPTIONAL
  101. ${compatible_MESSAGE_NEVER}
  102. )
  103. else()
  104. ocv_assert(0)
  105. endif()
  106. set(CMAKE_DOXYGEN_JAVADOC_NODE
  107. "<tab type=\"user\" url=\"./javadoc/index.html\" title=\"Java documentation\"/>"
  108. CACHE INTERNAL "Link to the Java documentation") # set to the cache to make it global
  109. add_custom_target(doxygen_javadoc DEPENDS ${the_module}doc)
  110. add_dependencies(opencv_docs ${the_module}doc)
  111. else()
  112. unset(CMAKE_DOXYGEN_JAVADOC_NODE CACHE)
  113. endif()