Merge pull request #11882 from alalek:videoio_vfw_lower_priority
[platform/upstream/opencv.git] / cmake / OpenCVGenABI.cmake
1 if (NOT GENERATE_ABI_DESCRIPTOR)
2   return()
3 endif()
4
5 set(filename "opencv_abi.xml")
6 set(path1 "${CMAKE_BINARY_DIR}/${filename}")
7
8 set(modules "${OPENCV_MODULES_PUBLIC}")
9 ocv_list_filterout(modules "opencv_ts")
10
11 message(STATUS "Generating ABI compliance checker configuration: ${filename}")
12
13 if (OPENCV_VCSVERSION AND NOT OPENCV_VCSVERSION STREQUAL "unknown")
14   set(OPENCV_ABI_VERSION "${OPENCV_VCSVERSION}")
15 else()
16   set(OPENCV_ABI_VERSION "${OPENCV_VERSION}")
17 endif()
18
19 # Headers
20 set(OPENCV_ABI_HEADERS "{RELPATH}/${OPENCV_INCLUDE_INSTALL_PATH}")
21
22 # Libraries
23 set(OPENCV_ABI_LIBRARIES "{RELPATH}/${OPENCV_LIB_INSTALL_PATH}")
24
25 set(OPENCV_ABI_SKIP_HEADERS "")
26 set(OPENCV_ABI_SKIP_LIBRARIES "")
27 foreach(mod ${OPENCV_MODULES_BUILD})
28   string(REGEX REPLACE "^opencv_" "" mod "${mod}")
29   if(NOT OPENCV_MODULE_opencv_${mod}_CLASS STREQUAL "PUBLIC"
30       OR NOT "${OPENCV_MODULE_opencv_${mod}_LOCATION}" STREQUAL "${OpenCV_SOURCE_DIR}/modules/${mod}" # opencv_contrib
31   )
32     # headers
33     foreach(h ${OPENCV_MODULE_opencv_${mod}_HEADERS})
34       file(RELATIVE_PATH h "${OPENCV_MODULE_opencv_${mod}_LOCATION}/include" "${h}")
35       list(APPEND OPENCV_ABI_SKIP_HEADERS "${h}")
36     endforeach()
37     # libraries
38     if(TARGET opencv_${mod}) # opencv_world
39       list(APPEND OPENCV_ABI_SKIP_LIBRARIES "\$<TARGET_FILE_NAME:opencv_${mod}>")
40     endif()
41   endif()
42 endforeach()
43 string(REPLACE ";" "\n    " OPENCV_ABI_SKIP_HEADERS "${OPENCV_ABI_SKIP_HEADERS}")
44 string(REPLACE ";" "\n    " OPENCV_ABI_SKIP_LIBRARIES "${OPENCV_ABI_SKIP_LIBRARIES}")
45
46 # Options
47 set(OPENCV_ABI_GCC_OPTIONS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE} -DOPENCV_ABI_CHECK=1")
48 string(REGEX REPLACE "([^ ]) +([^ ])" "\\1\\n    \\2" OPENCV_ABI_GCC_OPTIONS "${OPENCV_ABI_GCC_OPTIONS}")
49
50 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/opencv_abi.xml.in" "${path1}.base")
51 file(GENERATE OUTPUT "${path1}" INPUT "${path1}.base")