123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- set(MODULE_NAME "python_bindings_generator")
- set(OPENCV_MODULE_IS_PART_OF_WORLD FALSE)
- ocv_add_module(${MODULE_NAME} INTERNAL)
- set(OPENCV_PYTHON_SIGNATURES_FILE "${CMAKE_CURRENT_BINARY_DIR}/pyopencv_signatures.json" CACHE INTERNAL "")
- set(OPENCV_PYTHON_BINDINGS_DIR "${CMAKE_CURRENT_BINARY_DIR}" CACHE INTERNAL "")
- # This file is included from a subdirectory
- set(PYTHON_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../")
- if(NOT OPENCV_SKIP_PYTHON_LOADER)
- include("${PYTHON_SOURCE_DIR}/python_loader.cmake")
- endif()
- # get list of modules to wrap
- set(OPENCV_PYTHON_MODULES)
- foreach(m ${OPENCV_MODULES_BUILD})
- if (";${OPENCV_MODULE_${m}_WRAPPERS};" MATCHES ";python;" AND HAVE_${m})
- list(APPEND OPENCV_PYTHON_MODULES ${m})
- #message(STATUS "\t${m}")
- endif()
- endforeach()
- set(opencv_hdrs "")
- set(opencv_userdef_hdrs "")
- foreach(m ${OPENCV_PYTHON_MODULES})
- foreach (hdr ${OPENCV_MODULE_${m}_HEADERS})
- ocv_is_subdir(is_sub "${OPENCV_MODULE_${m}_LOCATION}/include" "${hdr}")
- if(is_sub)
- list(APPEND opencv_hdrs "${hdr}")
- endif()
- endforeach()
- # both wrapping and C++ implementation
- file(GLOB hdr2 ${OPENCV_MODULE_${m}_LOCATION}/misc/python/python_*.hpp)
- list(SORT hdr2)
- list(APPEND opencv_hdrs ${hdr2})
- list(APPEND opencv_userdef_hdrs ${hdr2})
- file(GLOB hdr ${OPENCV_MODULE_${m}_LOCATION}/misc/python/shadow*.hpp)
- list(SORT hdr)
- list(APPEND opencv_hdrs ${hdr})
- file(GLOB userdef_hdrs ${OPENCV_MODULE_${m}_LOCATION}/misc/python/pyopencv*.hpp)
- list(SORT userdef_hdrs)
- list(APPEND opencv_userdef_hdrs ${userdef_hdrs})
- endforeach(m)
- # header blacklist
- ocv_list_filterout(opencv_hdrs "modules/.*\\\\.h$")
- ocv_list_filterout(opencv_hdrs "modules/core/.*/cuda/")
- ocv_list_filterout(opencv_hdrs "modules/core/.*/hal/")
- ocv_list_filterout(opencv_hdrs "modules/core/.*/opencl/")
- ocv_list_filterout(opencv_hdrs "modules/.+/utils/.*")
- ocv_list_filterout(opencv_hdrs "modules/.*\\\\.inl\\\\.h*")
- ocv_list_filterout(opencv_hdrs "modules/.*_inl\\\\.h*")
- ocv_list_filterout(opencv_hdrs "modules/.*\\\\.details\\\\.h*")
- ocv_list_filterout(opencv_hdrs "modules/.*\\\\.private\\\\.h*")
- ocv_list_filterout(opencv_hdrs "modules/.*/private\\\\.h*")
- ocv_list_filterout(opencv_hdrs "modules/.*/legacy/.*")
- ocv_list_filterout(opencv_hdrs "modules/.*/detection_based_tracker\\\\.hpp") # Conditional compilation
- if(NOT HAVE_CUDA)
- ocv_list_filterout(opencv_hdrs "modules/cuda.*")
- ocv_list_filterout(opencv_hdrs "modules/cudev")
- endif()
- set(cv2_generated_files
- "${CMAKE_CURRENT_BINARY_DIR}/pyopencv_generated_enums.h"
- "${CMAKE_CURRENT_BINARY_DIR}/pyopencv_generated_funcs.h"
- "${CMAKE_CURRENT_BINARY_DIR}/pyopencv_generated_include.h"
- "${CMAKE_CURRENT_BINARY_DIR}/pyopencv_generated_modules.h"
- "${CMAKE_CURRENT_BINARY_DIR}/pyopencv_generated_modules_content.h"
- "${CMAKE_CURRENT_BINARY_DIR}/pyopencv_generated_types.h"
- "${CMAKE_CURRENT_BINARY_DIR}/pyopencv_generated_types_content.h"
- "${OPENCV_PYTHON_SIGNATURES_FILE}"
- )
- string(REPLACE ";" "\n" opencv_hdrs_ "${opencv_hdrs}")
- file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/headers.txt" "${opencv_hdrs_}")
- file(GLOB_RECURSE typing_stubs_generation_files "${PYTHON_SOURCE_DIR}/src2/typing_stubs_generation/*.py")
- add_custom_command(
- OUTPUT ${cv2_generated_files}
- COMMAND "${PYTHON_DEFAULT_EXECUTABLE}" "${PYTHON_SOURCE_DIR}/src2/gen2.py" "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/headers.txt"
- DEPENDS "${PYTHON_SOURCE_DIR}/src2/gen2.py"
- "${PYTHON_SOURCE_DIR}/src2/hdr_parser.py"
- "${typing_stubs_generation_files}"
- "${PYTHON_SOURCE_DIR}/src2/typing_stubs_generator.py"
- # not a real build dependency (file(WRITE) result): ${CMAKE_CURRENT_BINARY_DIR}/headers.txt
- ${opencv_hdrs}
- COMMENT "Generate files for Python bindings and documentation"
- )
- add_custom_target(gen_opencv_python_source DEPENDS ${cv2_generated_files})
- if(TARGET copy_opencv_typing_stubs)
- add_dependencies(copy_opencv_typing_stubs gen_opencv_python_source)
- endif()
- set(cv2_custom_hdr "${CMAKE_CURRENT_BINARY_DIR}/pyopencv_custom_headers.h")
- set(cv2_custom_hdr_str "//user-defined headers\n")
- foreach(uh ${opencv_userdef_hdrs})
- set(cv2_custom_hdr_str "${cv2_custom_hdr_str}#include \"${uh}\"\n")
- endforeach(uh)
- if(EXISTS "${cv2_custom_hdr}")
- file(READ "${cv2_custom_hdr}" __content)
- else()
- set(__content "")
- endif()
- if("${__content}" STREQUAL "${cv2_custom_hdr_str}")
- # Up-to-date
- else()
- file(WRITE "${cv2_custom_hdr}" "${cv2_custom_hdr_str}")
- endif()
- unset(__content)
- #
- # Configuration for standalone build of Python bindings
- #
- set(PYTHON_CONFIG_SCRIPT "")
- ocv_cmake_script_append_var(PYTHON_CONFIG_SCRIPT
- CMAKE_BUILD_TYPE
- BUILD_SHARED_LIBS
- CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
- CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
- CV_GCC CV_CLANG ENABLE_NOISY_WARNINGS
- CMAKE_MODULE_LINKER_FLAGS
- CMAKE_INSTALL_PREFIX
- OPENCV_PYTHON_INSTALL_PATH
- OpenCV_SOURCE_DIR
- OPENCV_FORCE_PYTHON_LIBS
- OPENCV_PYTHON_SKIP_LINKER_EXCLUDE_LIBS
- OPENCV_PYTHON_BINDINGS_DIR
- cv2_custom_hdr
- cv2_generated_files
- )
- set(CMAKE_HELPER_SCRIPT "${CMAKE_BINARY_DIR}/opencv_python_config.cmake")
- file(GENERATE OUTPUT "${CMAKE_HELPER_SCRIPT}" CONTENT "${PYTHON_CONFIG_SCRIPT}")
|