1
0
mirror of https://github.com/opencv/opencv.git synced 2026-07-28 23:03:03 +04:00
Files
opencv/modules/java/jar/CMakeLists.txt
T
kirtijindal14 8756e68bff Merge pull request #29206 from kirtijindal14:doc_optimizations_v3
OpenCV New Documentation #29206

This PR introduces end to end working new Documentation in OpenCV.

Co-authored by: @abhishek-gola @omrope79 @Akansha-977 @Prasadayus @varun-jaiswal17 
### Pull Request Readiness Checklist

See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request

- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [x] The PR is proposed to the proper branch
- [x] There is a reference to the original bug report and related work
- [x] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
      Patch to opencv_extra has the same branch name.
- [x] The feature is well documented and sample code can be built with the project CMake
2026-06-01 21:39:16 +03:00

146 lines
6.2 KiB
CMake

project(${the_module}_jar)
set(OPENCV_JAVA_DIR "${CMAKE_CURRENT_BINARY_DIR}/opencv" CACHE INTERNAL "")
file(REMOVE_RECURSE "${OPENCV_JAVA_DIR}")
file(REMOVE "${OPENCV_DEPHELPER}/${the_module}_jar_source_copy")
set(java_src_dir "${OPENCV_JAVA_DIR}/java")
file(MAKE_DIRECTORY "${java_src_dir}")
set(JAR_NAME_WE opencv-${OPENCV_JAVA_LIB_NAME_SUFFIX})
set(JAR_NAME ${JAR_NAME_WE}.jar)
set(OPENCV_JAR_DIR "${OpenCV_BINARY_DIR}/bin/" CACHE INTERNAL "")
set(OPENCV_JAR_FILE "${OPENCV_JAR_DIR}${JAR_NAME}" CACHE INTERNAL "")
ocv_copyfiles_append_dir(JAVA_SRC_COPY "${OPENCV_JAVA_BINDINGS_DIR}/gen/java" "${java_src_dir}")
set(depends gen_opencv_java_source "${OPENCV_DEPHELPER}/gen_opencv_java_source")
ocv_copyfiles_add_target(${the_module}_jar_source_copy JAVA_SRC_COPY "Copy Java(JAR) source files" ${depends})
set(depends ${the_module}_jar_source_copy "${OPENCV_DEPHELPER}/${the_module}_jar_source_copy")
if(OPENCV_JAVA_SOURCE_VERSION)
set(OPENCV_ANT_JAVAC_EXTRA_ATTRS "${OPENCV_ANT_JAVAC_EXTRA_ATTRS} source=\"${OPENCV_JAVA_SOURCE_VERSION}\"")
endif()
if(OPENCV_JAVA_TARGET_VERSION)
set(OPENCV_ANT_JAVAC_EXTRA_ATTRS "${OPENCV_ANT_JAVAC_EXTRA_ATTRS} target=\"${OPENCV_JAVA_TARGET_VERSION}\"")
endif()
set(OPENCV_JAVADOC_DESTINATION "${OpenCV_BINARY_DIR}/doc/doxygen/html/javadoc" CACHE STRING "")
# Old Javadoc URL looks like this: https://docs.oracle.com/javase/6/docs/api/
# New Javadoc URL looks like this: https://docs.oracle.com/en/java/javase/11/docs/api/
set(OPENCV_JAVADOC_LINK_URL "" CACHE STRING "See details in modules/java/jar/CMakeLists.txt")
if(OPENCV_JAVADOC_LINK_URL)
set(CMAKE_CONFIG_OPENCV_JAVADOC_LINK "link=\"${OPENCV_JAVADOC_LINK_URL}\"")
endif()
if(OPENCV_JAVA_SDK_BUILD_TYPE STREQUAL "ANT")
file(MAKE_DIRECTORY "${OPENCV_JAVA_DIR}/build/classes")
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/build.xml.in" "${OPENCV_JAVA_DIR}/build.xml" @ONLY)
list(APPEND depends "${OPENCV_JAVA_DIR}/build.xml")
ocv_cmake_byproducts(__byproducts BYPRODUCTS "${OPENCV_JAR_FILE}")
add_custom_command(OUTPUT "${OPENCV_DEPHELPER}/${the_module}_jar"
${__byproducts} # required for add_custom_target() by ninja
COMMAND ${ANT_EXECUTABLE} -noinput -k jar
COMMAND ${CMAKE_COMMAND} -E touch "${OPENCV_DEPHELPER}/${the_module}_jar"
WORKING_DIRECTORY "${OPENCV_JAVA_DIR}"
DEPENDS ${depends}
COMMENT "Generating ${JAR_NAME}"
)
add_custom_target(${the_module}_jar DEPENDS "${OPENCV_DEPHELPER}/${the_module}_jar")
elseif(OPENCV_JAVA_SDK_BUILD_TYPE STREQUAL "JAVA")
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/MANIFEST.MF.in" "${OPENCV_JAVA_DIR}/MANIFEST.MF" @ONLY)
list(APPEND depends "${OPENCV_JAVA_DIR}/MANIFEST.MF")
ocv_cmake_byproducts(__byproducts BYPRODUCTS "${OPENCV_JAVA_DIR}/java_sources")
add_custom_command(OUTPUT "${OPENCV_DEPHELPER}/${the_module}_jar"
BYPRODUCTS ${__byproducts} # required for add_custom_target() by ninja
DEPENDS ${depends}
COMMAND ${CMAKE_COMMAND} -E touch "${OPENCV_DEPHELPER}/${the_module}_jar"
COMMAND ${CMAKE_COMMAND}
-D OPENCV_JAVA_DIR="${OPENCV_JAVA_DIR}/java"
-D OUTPUT="${OPENCV_JAVA_DIR}/java_sources"
-P "${CMAKE_CURRENT_SOURCE_DIR}/list_java_sources.cmake"
)
add_custom_target(${the_module}_jar_sources
DEPENDS "${OPENCV_DEPHELPER}/${the_module}_jar"
)
list(APPEND CMAKE_JAVA_COMPILE_FLAGS -encoding utf-8 ${OPENCV_EXTRA_JAVA_COMPILE_FLAGS})
add_jar(${the_module}_jar
SOURCES "@${OPENCV_JAVA_DIR}/java_sources"
MANIFEST "${OPENCV_JAVA_DIR}/MANIFEST.MF"
OUTPUT_NAME "${JAR_NAME_WE}"
OUTPUT_DIR "${OPENCV_JAR_DIR}")
add_dependencies(${the_module}_jar ${the_module}_jar_sources)
else()
ocv_assert(0)
endif()
install(FILES ${OPENCV_JAR_FILE} OPTIONAL DESTINATION ${OPENCV_JAR_INSTALL_PATH} COMPONENT java)
add_dependencies(${the_module} ${the_module}_jar)
# Javadoc generation can be disabled independently of BUILD_DOCS so the C++
# Doxygen / Sphinx docs still build when the Java bindings carry Doxygen-style
# tags (e.g. @retval, @remarks) that JDK doclint rejects as fatal errors.
# Default ON for parity with upstream; when OFF the `doxygen_javadoc` target is
# never created and doc/CMakeLists.txt's `if(TARGET doxygen_javadoc)` guard
# drops it from the doxygen_cpp dependency chain automatically.
option(BUILD_JAVADOC "Generate Javadoc as part of the documentation build" ON)
if(BUILD_DOCS AND BUILD_JAVADOC)
if(OPENCV_JAVA_SDK_BUILD_TYPE STREQUAL "ANT")
add_custom_command(OUTPUT "${OPENCV_DEPHELPER}/${the_module}doc"
COMMAND ${ANT_EXECUTABLE} -noinput -k javadoc
COMMAND ${CMAKE_COMMAND} -E touch "${OPENCV_DEPHELPER}/${the_module}doc"
WORKING_DIRECTORY "${OPENCV_JAVA_DIR}"
DEPENDS ${depends}
COMMENT "Generating Javadoc"
)
add_custom_target(${the_module}doc DEPENDS "${OPENCV_DEPHELPER}/${the_module}doc")
install(DIRECTORY ${OpenCV_BINARY_DIR}/doc/doxygen/html/javadoc
DESTINATION "${OPENCV_DOC_INSTALL_PATH}/html"
COMPONENT "docs" OPTIONAL
${compatible_MESSAGE_NEVER}
)
elseif(OPENCV_JAVA_SDK_BUILD_TYPE STREQUAL "JAVA")
set(Java_JAVADOC_EXECUTABLE ${Java_JAVADOC_EXECUTABLE} -encoding utf-8)
# create_javadoc produces target ${_target}_javadoc
create_javadoc(${the_module}
FILES "@${OPENCV_JAVA_DIR}/java_sources"
SOURCEPATH "${OPENCV_JAVA_DIR}/java"
INSTALLPATH "${OPENCV_JAVADOC_DESTINATION}"
WINDOWTITLE "OpenCV ${OPENCV_VERSION_PLAIN} Java documentation"
DOCTITLE "OpenCV Java documentation (${OPENCV_VERSION})"
VERSION TRUE
)
add_dependencies(${the_module}_javadoc ${the_module}_jar_sources)
add_custom_target(${the_module}doc DEPENDS ${the_module}_javadoc)
install(DIRECTORY ${OpenCV_BINARY_DIR}/doc/doxygen/html/javadoc/${the_module}/
DESTINATION "${OPENCV_DOC_INSTALL_PATH}/html/javadoc"
COMPONENT "docs" OPTIONAL
${compatible_MESSAGE_NEVER}
)
else()
ocv_assert(0)
endif()
set(CMAKE_DOXYGEN_JAVADOC_NODE
"<tab type=\"user\" url=\"./javadoc/index.html\" title=\"Java documentation\"/>"
CACHE INTERNAL "Link to the Java documentation") # set to the cache to make it global
add_custom_target(doxygen_javadoc DEPENDS ${the_module}doc)
add_dependencies(opencv_docs ${the_module}doc)
else()
unset(CMAKE_DOXYGEN_JAVADOC_NODE CACHE)
endif()