Blame view

3rdparty/opencv-4.5.4/modules/python/bindings/CMakeLists.txt 4.76 KB
f4334277   Hu Chunming   提交3rdparty
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
  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}/../")
  
  # 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_}")
  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"
              # 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})
  
  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}")