OpenCVGenConfig.cmake 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  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. if(INSTALL_TO_MANGLED_PATHS)
  8. set(OpenCV_USE_MANGLED_PATHS_CONFIGCMAKE TRUE)
  9. else()
  10. set(OpenCV_USE_MANGLED_PATHS_CONFIGCMAKE FALSE)
  11. endif()
  12. if(HAVE_CUDA)
  13. if(ENABLE_CUDA_FIRST_CLASS_LANGUAGE)
  14. ocv_cmake_configure("${CMAKE_CURRENT_LIST_DIR}/templates/OpenCVConfig-CUDALanguage.cmake.in" CUDA_CONFIGCMAKE @ONLY)
  15. else()
  16. ocv_cmake_configure("${CMAKE_CURRENT_LIST_DIR}/templates/OpenCVConfig-CUDA.cmake.in" CUDA_CONFIGCMAKE @ONLY)
  17. endif()
  18. endif()
  19. if(ANDROID)
  20. if(NOT ANDROID_NATIVE_API_LEVEL)
  21. set(OpenCV_ANDROID_NATIVE_API_LEVEL_CONFIGCMAKE 0)
  22. else()
  23. set(OpenCV_ANDROID_NATIVE_API_LEVEL_CONFIGCMAKE "${ANDROID_NATIVE_API_LEVEL}")
  24. endif()
  25. ocv_cmake_configure("${CMAKE_CURRENT_LIST_DIR}/templates/OpenCVConfig-ANDROID.cmake.in" ANDROID_CONFIGCMAKE @ONLY)
  26. endif()
  27. set(OPENCV_MODULES_CONFIGCMAKE ${OPENCV_MODULES_PUBLIC})
  28. if(BUILD_FAT_JAVA_LIB AND HAVE_opencv_java)
  29. list(APPEND OPENCV_MODULES_CONFIGCMAKE opencv_java)
  30. endif()
  31. if(BUILD_OBJC AND HAVE_opencv_objc)
  32. list(APPEND OPENCV_MODULES_CONFIGCMAKE opencv_objc)
  33. endif()
  34. # -------------------------------------------------------------------------------------------
  35. # Part 1/3: ${BIN_DIR}/OpenCVConfig.cmake -> For use *without* "make install"
  36. # -------------------------------------------------------------------------------------------
  37. set(OpenCV_INCLUDE_DIRS_CONFIGCMAKE "\"${OPENCV_CONFIG_FILE_INCLUDE_DIR}\" \"${OpenCV_SOURCE_DIR}/include\"")
  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. export(EXPORT OpenCVModules FILE "${CMAKE_BINARY_DIR}/OpenCVModules.cmake")
  44. if(TARGET ippicv AND NOT BUILD_SHARED_LIBS)
  45. set(USE_IPPICV TRUE)
  46. file(RELATIVE_PATH IPPICV_INSTALL_PATH_RELATIVE_CONFIGCMAKE "${CMAKE_BINARY_DIR}" "${IPPICV_LOCATION_PATH}")
  47. ocv_cmake_configure("${CMAKE_CURRENT_LIST_DIR}/templates/OpenCVConfig-IPPICV.cmake.in" IPPICV_CONFIGCMAKE @ONLY)
  48. else()
  49. set(USE_IPPICV FALSE)
  50. endif()
  51. if(TARGET ippiw AND NOT BUILD_SHARED_LIBS AND IPPIW_INSTALL_PATH)
  52. set(USE_IPPIW TRUE)
  53. file(RELATIVE_PATH IPPIW_INSTALL_PATH_RELATIVE_CONFIGCMAKE "${CMAKE_BINARY_DIR}" "${IPPIW_LOCATION_PATH}")
  54. ocv_cmake_configure("${CMAKE_CURRENT_LIST_DIR}/templates/OpenCVConfig-IPPIW.cmake.in" IPPIW_CONFIGCMAKE @ONLY)
  55. else()
  56. set(USE_IPPIW FALSE)
  57. endif()
  58. if(TARGET fastcv AND NOT BUILD_SHARED_LIBS)
  59. file(RELATIVE_PATH FASTCV_INSTALL_PATH_RELATIVE_CONFIGCMAKE "${CMAKE_BINARY_DIR}" "${FASTCV_LOCATION_PATH}")
  60. ocv_cmake_configure("${CMAKE_CURRENT_LIST_DIR}/templates/OpenCVConfig-FastCV.cmake.in" FASTCV_CONFIGCMAKE @ONLY)
  61. set(USE_FASTCV TRUE)
  62. else()
  63. set(USE_FASTCV FALSE)
  64. endif()
  65. ocv_cmake_hook(PRE_CMAKE_CONFIG_BUILD)
  66. configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/OpenCVConfig.cmake.in" "${CMAKE_BINARY_DIR}/OpenCVConfig.cmake" @ONLY)
  67. #support for version checking when finding opencv. find_package(OpenCV 2.3.1 EXACT) should now work.
  68. configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/OpenCVConfig-version.cmake.in" "${CMAKE_BINARY_DIR}/OpenCVConfig-version.cmake" @ONLY)
  69. # --------------------------------------------------------------------------------------------
  70. # Part 2/3: ${BIN_DIR}/unix-install/OpenCVConfig.cmake -> For use *with* "make install"
  71. # -------------------------------------------------------------------------------------------
  72. file(RELATIVE_PATH OpenCV_INSTALL_PATH_RELATIVE_CONFIGCMAKE "${CMAKE_INSTALL_PREFIX}/${OPENCV_CONFIG_INSTALL_PATH}/" ${CMAKE_INSTALL_PREFIX})
  73. if (IS_ABSOLUTE ${OPENCV_INCLUDE_INSTALL_PATH})
  74. set(OpenCV_INCLUDE_DIRS_CONFIGCMAKE "\"${OPENCV_INCLUDE_INSTALL_PATH}\"")
  75. else()
  76. set(OpenCV_INCLUDE_DIRS_CONFIGCMAKE "\"\${OpenCV_INSTALL_PATH}/${OPENCV_INCLUDE_INSTALL_PATH}\"")
  77. endif()
  78. if(USE_IPPICV)
  79. file(RELATIVE_PATH IPPICV_INSTALL_PATH_RELATIVE_CONFIGCMAKE "${CMAKE_INSTALL_PREFIX}" "${IPPICV_INSTALL_PATH}")
  80. ocv_cmake_configure("${CMAKE_CURRENT_LIST_DIR}/templates/OpenCVConfig-IPPICV.cmake.in" IPPICV_CONFIGCMAKE @ONLY)
  81. endif()
  82. if(USE_IPPIW)
  83. file(RELATIVE_PATH IPPIW_INSTALL_PATH_RELATIVE_CONFIGCMAKE "${CMAKE_INSTALL_PREFIX}" "${IPPIW_INSTALL_PATH}")
  84. ocv_cmake_configure("${CMAKE_CURRENT_LIST_DIR}/templates/OpenCVConfig-IPPIW.cmake.in" IPPIW_CONFIGCMAKE @ONLY)
  85. endif()
  86. if(USE_FASTCV)
  87. file(RELATIVE_PATH FASTCV_INSTALL_PATH_RELATIVE_CONFIGCMAKE "${CMAKE_INSTALL_PREFIX}" "${FASTCV_INSTALL_PATH}")
  88. ocv_cmake_configure("${CMAKE_CURRENT_LIST_DIR}/templates/OpenCVConfig-FastCV.cmake.in" FASTCV_CONFIGCMAKE @ONLY)
  89. endif()
  90. function(ocv_gen_config TMP_DIR NESTED_PATH ROOT_NAME)
  91. ocv_path_join(__install_nested "${OPENCV_CONFIG_INSTALL_PATH}" "${NESTED_PATH}")
  92. ocv_path_join(__tmp_nested "${TMP_DIR}" "${NESTED_PATH}")
  93. file(RELATIVE_PATH OpenCV_INSTALL_PATH_RELATIVE_CONFIGCMAKE "${CMAKE_INSTALL_PREFIX}/${__install_nested}" "${CMAKE_INSTALL_PREFIX}/")
  94. ocv_cmake_hook(PRE_CMAKE_CONFIG_INSTALL)
  95. configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/OpenCVConfig-version.cmake.in" "${TMP_DIR}/OpenCVConfig-version.cmake" @ONLY)
  96. configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/OpenCVConfig.cmake.in" "${__tmp_nested}/OpenCVConfig.cmake" @ONLY)
  97. install(EXPORT OpenCVModules DESTINATION "${__install_nested}" FILE OpenCVModules.cmake COMPONENT dev)
  98. install(FILES
  99. "${TMP_DIR}/OpenCVConfig-version.cmake"
  100. "${__tmp_nested}/OpenCVConfig.cmake"
  101. DESTINATION "${__install_nested}" COMPONENT dev)
  102. if(ROOT_NAME)
  103. # Root config file
  104. configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/${ROOT_NAME}" "${TMP_DIR}/OpenCVConfig.cmake" @ONLY)
  105. install(FILES
  106. "${TMP_DIR}/OpenCVConfig-version.cmake"
  107. "${TMP_DIR}/OpenCVConfig.cmake"
  108. DESTINATION "${OPENCV_CONFIG_INSTALL_PATH}" COMPONENT dev)
  109. endif()
  110. endfunction()
  111. if((CMAKE_HOST_SYSTEM_NAME MATCHES "Linux" OR UNIX) AND NOT ANDROID)
  112. ocv_gen_config("${CMAKE_BINARY_DIR}/unix-install" "" "")
  113. endif()
  114. if(ANDROID)
  115. ocv_gen_config("${CMAKE_BINARY_DIR}/unix-install" "abi-${ANDROID_NDK_ABI_NAME}" "OpenCVConfig.root-ANDROID.cmake.in")
  116. endif()
  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 AND NOT OPENCV_SKIP_CMAKE_ROOT_CONFIG)
  122. ocv_gen_config("${CMAKE_BINARY_DIR}/win-install"
  123. "${OPENCV_INSTALL_BINARIES_PREFIX}${OPENCV_INSTALL_BINARIES_SUFFIX}"
  124. "OpenCVConfig.root-WIN32.cmake.in")
  125. else()
  126. ocv_gen_config("${CMAKE_BINARY_DIR}/win-install" "" "")
  127. endif()
  128. endif()