Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Tetragramm
GitHub Repository: Tetragramm/opencv
Path: blob/master/modules/python/bindings/CMakeLists.txt
16337 views
1
set(MODULE_NAME "python_bindings_generator")
2
set(OPENCV_MODULE_IS_PART_OF_WORLD FALSE)
3
ocv_add_module(${MODULE_NAME} INTERNAL)
4
5
set(OPENCV_PYTHON_SIGNATURES_FILE "${CMAKE_CURRENT_BINARY_DIR}/pyopencv_signatures.json" CACHE INTERNAL "")
6
set(OPENCV_PYTHON_BINDINGS_DIR "${CMAKE_CURRENT_BINARY_DIR}" CACHE INTERNAL "")
7
8
# This file is included from a subdirectory
9
set(PYTHON_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../")
10
11
# get list of modules to wrap
12
set(OPENCV_PYTHON_MODULES)
13
foreach(m ${OPENCV_MODULES_BUILD})
14
if (";${OPENCV_MODULE_${m}_WRAPPERS};" MATCHES ";${MODULE_NAME};" AND HAVE_${m})
15
list(APPEND OPENCV_PYTHON_MODULES ${m})
16
#message(STATUS "\t${m}")
17
endif()
18
endforeach()
19
20
set(opencv_hdrs "")
21
set(opencv_userdef_hdrs "")
22
foreach(m ${OPENCV_PYTHON_MODULES})
23
foreach (hdr ${OPENCV_MODULE_${m}_HEADERS})
24
ocv_is_subdir(is_sub "${OPENCV_MODULE_${m}_LOCATION}/include" "${hdr}")
25
if(is_sub)
26
list(APPEND opencv_hdrs "${hdr}")
27
endif()
28
endforeach()
29
file(GLOB hdr ${OPENCV_MODULE_${m}_LOCATION}/misc/python/shadow*.hpp)
30
list(APPEND opencv_hdrs ${hdr})
31
file(GLOB userdef_hdrs ${OPENCV_MODULE_${m}_LOCATION}/misc/python/pyopencv*.hpp)
32
list(APPEND opencv_userdef_hdrs ${userdef_hdrs})
33
endforeach(m)
34
35
# header blacklist
36
ocv_list_filterout(opencv_hdrs "modules/.*\\\\.h$")
37
ocv_list_filterout(opencv_hdrs "modules/core/.*/cuda/")
38
ocv_list_filterout(opencv_hdrs "modules/core/.*/hal/")
39
ocv_list_filterout(opencv_hdrs "modules/core/.*/opencl/")
40
ocv_list_filterout(opencv_hdrs "modules/.+/utils/.*")
41
ocv_list_filterout(opencv_hdrs "modules/.*\\\\.inl\\\\.h*")
42
ocv_list_filterout(opencv_hdrs "modules/.*_inl\\\\.h*")
43
ocv_list_filterout(opencv_hdrs "modules/.*\\\\.details\\\\.h*")
44
ocv_list_filterout(opencv_hdrs "modules/.*\\\\.private\\\\.h*")
45
ocv_list_filterout(opencv_hdrs "modules/.*/detection_based_tracker\\\\.hpp") # Conditional compilation
46
if(NOT HAVE_CUDA)
47
ocv_list_filterout(opencv_hdrs "modules/cuda.*")
48
ocv_list_filterout(opencv_hdrs "modules/cudev")
49
endif()
50
51
set(cv2_generated_files
52
"${CMAKE_CURRENT_BINARY_DIR}/pyopencv_generated_include.h"
53
"${CMAKE_CURRENT_BINARY_DIR}/pyopencv_generated_funcs.h"
54
"${CMAKE_CURRENT_BINARY_DIR}/pyopencv_generated_types.h"
55
"${CMAKE_CURRENT_BINARY_DIR}/pyopencv_generated_type_reg.h"
56
"${CMAKE_CURRENT_BINARY_DIR}/pyopencv_generated_ns_reg.h"
57
"${OPENCV_PYTHON_SIGNATURES_FILE}"
58
)
59
60
string(REPLACE ";" "\n" opencv_hdrs_ "${opencv_hdrs}")
61
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/headers.txt" "${opencv_hdrs_}")
62
add_custom_command(
63
OUTPUT ${cv2_generated_files}
64
COMMAND "${PYTHON_DEFAULT_EXECUTABLE}" "${PYTHON_SOURCE_DIR}/src2/gen2.py" "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/headers.txt"
65
DEPENDS "${PYTHON_SOURCE_DIR}/src2/gen2.py"
66
"${PYTHON_SOURCE_DIR}/src2/hdr_parser.py"
67
# not a real build dependency (file(WRITE) result): ${CMAKE_CURRENT_BINARY_DIR}/headers.txt
68
${opencv_hdrs}
69
COMMENT "Generate files for Python bindings and documentation"
70
)
71
72
add_custom_target(gen_opencv_python_source DEPENDS ${cv2_generated_files})
73
74
set(cv2_custom_hdr "${CMAKE_CURRENT_BINARY_DIR}/pyopencv_custom_headers.h")
75
set(cv2_custom_hdr_str "//user-defined headers\n")
76
foreach(uh ${opencv_userdef_hdrs})
77
set(cv2_custom_hdr_str "${cv2_custom_hdr_str}#include \"${uh}\"\n")
78
endforeach(uh)
79
if(EXISTS "${cv2_custom_hdr}")
80
file(READ "${cv2_custom_hdr}" __content)
81
else()
82
set(__content "")
83
endif()
84
if("${__content}" STREQUAL "${cv2_custom_hdr_str}")
85
# Up-to-date
86
else()
87
file(WRITE "${cv2_custom_hdr}" "${cv2_custom_hdr_str}")
88
endif()
89
unset(__content)
90
91
92
#
93
# Configuration for standalone build of Python bindings
94
#
95
set(PYTHON_CONFIG_SCRIPT "")
96
ocv_cmake_script_append_var(PYTHON_CONFIG_SCRIPT
97
CMAKE_BUILD_TYPE
98
BUILD_SHARED_LIBS
99
100
CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
101
CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
102
103
CV_GCC CV_CLANG ENABLE_NOISY_WARNINGS
104
105
CMAKE_MODULE_LINKER_FLAGS
106
CMAKE_INSTALL_PREFIX
107
108
OpenCV_SOURCE_DIR
109
110
OPENCV_FORCE_PYTHON_LIBS
111
OPENCV_PYTHON_SKIP_LINKER_EXCLUDE_LIBS
112
113
OPENCV_PYTHON_BINDINGS_DIR
114
cv2_custom_hdr
115
cv2_generated_files
116
)
117
set(CMAKE_HELPER_SCRIPT "${CMAKE_BINARY_DIR}/opencv_python_config.cmake")
118
file(GENERATE OUTPUT "${CMAKE_HELPER_SCRIPT}" CONTENT "${PYTHON_CONFIG_SCRIPT}")
119
120