Merge pull request #11882 from alalek:videoio_vfw_lower_priority
[platform/upstream/opencv.git] / cmake / OpenCVGenConfig.cmake
1 # --------------------------------------------------------------------------------------------
2 #  Installation for CMake Module:  OpenCVConfig.cmake
3 #  Part 1/3: ${BIN_DIR}/OpenCVConfig.cmake              -> For use *without* "make install"
4 #  Part 2/3: ${BIN_DIR}/unix-install/OpenCVConfig.cmake -> For use with "make install"
5 #  Part 3/3: ${BIN_DIR}/win-install/OpenCVConfig.cmake  -> For use within binary installers/packages
6 # -------------------------------------------------------------------------------------------
7
8 if(INSTALL_TO_MANGLED_PATHS)
9   set(OpenCV_USE_MANGLED_PATHS_CONFIGCMAKE TRUE)
10 else()
11   set(OpenCV_USE_MANGLED_PATHS_CONFIGCMAKE FALSE)
12 endif()
13
14 if(HAVE_CUDA)
15   ocv_cmake_configure("${CMAKE_CURRENT_LIST_DIR}/templates/OpenCVConfig-CUDA.cmake.in" CUDA_CONFIGCMAKE @ONLY)
16 endif()
17
18 if(ANDROID)
19   if(NOT ANDROID_NATIVE_API_LEVEL)
20     set(OpenCV_ANDROID_NATIVE_API_LEVEL_CONFIGCMAKE 0)
21   else()
22     set(OpenCV_ANDROID_NATIVE_API_LEVEL_CONFIGCMAKE "${ANDROID_NATIVE_API_LEVEL}")
23   endif()
24   ocv_cmake_configure("${CMAKE_CURRENT_LIST_DIR}/templates/OpenCVConfig-ANDROID.cmake.in" ANDROID_CONFIGCMAKE @ONLY)
25 endif()
26
27 set(OPENCV_MODULES_CONFIGCMAKE ${OPENCV_MODULES_PUBLIC})
28
29 if(BUILD_FAT_JAVA_LIB AND HAVE_opencv_java)
30   list(APPEND OPENCV_MODULES_CONFIGCMAKE opencv_java)
31 endif()
32
33 # -------------------------------------------------------------------------------------------
34 #  Part 1/3: ${BIN_DIR}/OpenCVConfig.cmake              -> For use *without* "make install"
35 # -------------------------------------------------------------------------------------------
36 set(OpenCV_INCLUDE_DIRS_CONFIGCMAKE "\"${OPENCV_CONFIG_FILE_INCLUDE_DIR}\" \"${OpenCV_SOURCE_DIR}/include\" \"${OpenCV_SOURCE_DIR}/include/opencv\"")
37
38 foreach(m ${OPENCV_MODULES_BUILD})
39   if(EXISTS "${OPENCV_MODULE_${m}_LOCATION}/include")
40     set(OpenCV_INCLUDE_DIRS_CONFIGCMAKE "${OpenCV_INCLUDE_DIRS_CONFIGCMAKE} \"${OPENCV_MODULE_${m}_LOCATION}/include\"")
41   endif()
42 endforeach()
43
44 export(TARGETS ${OpenCVModules_TARGETS} FILE "${CMAKE_BINARY_DIR}/OpenCVModules.cmake")
45
46 if(TARGET ippicv AND NOT BUILD_SHARED_LIBS)
47   set(USE_IPPICV TRUE)
48   file(RELATIVE_PATH IPPICV_INSTALL_PATH_RELATIVE_CONFIGCMAKE "${CMAKE_BINARY_DIR}" "${IPPICV_LOCATION_PATH}")
49   ocv_cmake_configure("${CMAKE_CURRENT_LIST_DIR}/templates/OpenCVConfig-IPPICV.cmake.in" IPPICV_CONFIGCMAKE @ONLY)
50 else()
51   set(USE_IPPICV FALSE)
52 endif()
53
54 if(TARGET ippiw AND NOT BUILD_SHARED_LIBS AND IPPIW_INSTALL_PATH)
55   set(USE_IPPIW TRUE)
56   file(RELATIVE_PATH IPPIW_INSTALL_PATH_RELATIVE_CONFIGCMAKE "${CMAKE_BINARY_DIR}" "${IPPIW_LOCATION_PATH}")
57   ocv_cmake_configure("${CMAKE_CURRENT_LIST_DIR}/templates/OpenCVConfig-IPPIW.cmake.in" IPPIW_CONFIGCMAKE @ONLY)
58 else()
59   set(USE_IPPIW FALSE)
60 endif()
61
62 ocv_cmake_hook(PRE_CMAKE_CONFIG_BUILD)
63 configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/OpenCVConfig.cmake.in" "${CMAKE_BINARY_DIR}/OpenCVConfig.cmake" @ONLY)
64 #support for version checking when finding opencv. find_package(OpenCV 2.3.1 EXACT) should now work.
65 configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/OpenCVConfig-version.cmake.in" "${CMAKE_BINARY_DIR}/OpenCVConfig-version.cmake" @ONLY)
66
67 # --------------------------------------------------------------------------------------------
68 #  Part 2/3: ${BIN_DIR}/unix-install/OpenCVConfig.cmake -> For use *with* "make install"
69 # -------------------------------------------------------------------------------------------
70 file(RELATIVE_PATH OpenCV_INSTALL_PATH_RELATIVE_CONFIGCMAKE "${CMAKE_INSTALL_PREFIX}/${OPENCV_CONFIG_INSTALL_PATH}/" ${CMAKE_INSTALL_PREFIX})
71 set(OpenCV_INCLUDE_DIRS_CONFIGCMAKE "\"\${OpenCV_INSTALL_PATH}/${OPENCV_INCLUDE_INSTALL_PATH}\" \"\${OpenCV_INSTALL_PATH}/${OPENCV_INCLUDE_INSTALL_PATH}/opencv\"")
72
73 if(USE_IPPICV)
74   file(RELATIVE_PATH IPPICV_INSTALL_PATH_RELATIVE_CONFIGCMAKE "${CMAKE_INSTALL_PREFIX}" "${IPPICV_INSTALL_PATH}")
75   ocv_cmake_configure("${CMAKE_CURRENT_LIST_DIR}/templates/OpenCVConfig-IPPICV.cmake.in" IPPICV_CONFIGCMAKE @ONLY)
76 endif()
77 if(USE_IPPIW)
78   file(RELATIVE_PATH IPPIW_INSTALL_PATH_RELATIVE_CONFIGCMAKE "${CMAKE_INSTALL_PREFIX}" "${IPPIW_INSTALL_PATH}")
79   ocv_cmake_configure("${CMAKE_CURRENT_LIST_DIR}/templates/OpenCVConfig-IPPIW.cmake.in" IPPIW_CONFIGCMAKE @ONLY)
80 endif()
81
82 function(ocv_gen_config TMP_DIR NESTED_PATH ROOT_NAME)
83   ocv_path_join(__install_nested "${OPENCV_CONFIG_INSTALL_PATH}" "${NESTED_PATH}")
84   ocv_path_join(__tmp_nested "${TMP_DIR}" "${NESTED_PATH}")
85
86   file(RELATIVE_PATH OpenCV_INSTALL_PATH_RELATIVE_CONFIGCMAKE "${CMAKE_INSTALL_PREFIX}/${__install_nested}" "${CMAKE_INSTALL_PREFIX}/")
87
88   ocv_cmake_hook(PRE_CMAKE_CONFIG_INSTALL)
89   configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/OpenCVConfig-version.cmake.in" "${TMP_DIR}/OpenCVConfig-version.cmake" @ONLY)
90
91   configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/OpenCVConfig.cmake.in" "${__tmp_nested}/OpenCVConfig.cmake" @ONLY)
92   install(EXPORT OpenCVModules DESTINATION "${__install_nested}" FILE OpenCVModules.cmake COMPONENT dev)
93   install(FILES
94       "${TMP_DIR}/OpenCVConfig-version.cmake"
95       "${__tmp_nested}/OpenCVConfig.cmake"
96       DESTINATION "${__install_nested}" COMPONENT dev)
97
98   if(ROOT_NAME)
99     # Root config file
100     configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/${ROOT_NAME}" "${TMP_DIR}/OpenCVConfig.cmake" @ONLY)
101     install(FILES
102         "${TMP_DIR}/OpenCVConfig-version.cmake"
103         "${TMP_DIR}/OpenCVConfig.cmake"
104         DESTINATION "${OPENCV_CONFIG_INSTALL_PATH}" COMPONENT dev)
105   endif()
106 endfunction()
107
108 if((CMAKE_HOST_SYSTEM_NAME MATCHES "Linux" OR UNIX) AND NOT ANDROID)
109   ocv_gen_config("${CMAKE_BINARY_DIR}/unix-install" "" "")
110 endif()
111
112 if(ANDROID)
113   ocv_gen_config("${CMAKE_BINARY_DIR}/unix-install" "abi-${ANDROID_NDK_ABI_NAME}" "OpenCVConfig.root-ANDROID.cmake.in")
114   install(FILES "${OpenCV_SOURCE_DIR}/platforms/android/android.toolchain.cmake" DESTINATION "${OPENCV_CONFIG_INSTALL_PATH}" COMPONENT dev)
115 endif()
116
117 # --------------------------------------------------------------------------------------------
118 #  Part 3/3: ${BIN_DIR}/win-install/OpenCVConfig.cmake  -> For use within binary installers/packages
119 # --------------------------------------------------------------------------------------------
120 if(WIN32)
121   if(CMAKE_HOST_SYSTEM_NAME MATCHES Windows)
122     if(BUILD_SHARED_LIBS)
123       set(_lib_suffix "lib")
124     else()
125       set(_lib_suffix "staticlib")
126     endif()
127     ocv_gen_config("${CMAKE_BINARY_DIR}/win-install" "${OpenCV_INSTALL_BINARIES_PREFIX}${_lib_suffix}" "OpenCVConfig.root-WIN32.cmake.in")
128   else()
129     ocv_gen_config("${CMAKE_BINARY_DIR}/win-install" "" "")
130   endif()
131 endif()