Home | History | Annotate | Download | only in 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(NOT OpenCV_CUDA_CC)
     15   set(OpenCV_CUDA_CC_CONFIGCMAKE "\"\"")
     16   set(OpenCV_CUDA_VERSION "")
     17 else()
     18   set(OpenCV_CUDA_CC_CONFIGCMAKE "${OpenCV_CUDA_CC}")
     19   set(OpenCV_CUDA_VERSION ${CUDA_VERSION_STRING})
     20 endif()
     21 
     22 if(NOT ANDROID_NATIVE_API_LEVEL)
     23   set(OpenCV_ANDROID_NATIVE_API_LEVEL_CONFIGCMAKE 0)
     24 else()
     25   set(OpenCV_ANDROID_NATIVE_API_LEVEL_CONFIGCMAKE "${ANDROID_NATIVE_API_LEVEL}")
     26 endif()
     27 
     28 if(CMAKE_GENERATOR MATCHES "Visual" OR CMAKE_GENERATOR MATCHES "Xcode")
     29   set(OpenCV_ADD_DEBUG_RELEASE_CONFIGCMAKE TRUE)
     30 else()
     31   set(OpenCV_ADD_DEBUG_RELEASE_CONFIGCMAKE FALSE)
     32 endif()
     33 
     34 
     35 
     36 if(WIN32)
     37   if(MINGW)
     38     set(OPENCV_LINK_LIBRARY_SUFFIX ".dll.a")
     39   else()
     40     set(OPENCV_LINK_LIBRARY_SUFFIX ".lib")
     41   endif()
     42 endif()
     43 
     44 #build list of modules available for the OpenCV user
     45 set(OpenCV_LIB_COMPONENTS "")
     46 foreach(m ${OPENCV_MODULES_PUBLIC})
     47   list(INSERT OpenCV_LIB_COMPONENTS 0 ${${m}_MODULE_DEPS_OPT} ${m})
     48 endforeach()
     49 ocv_list_unique(OpenCV_LIB_COMPONENTS)
     50 set(OPENCV_MODULES_CONFIGCMAKE ${OpenCV_LIB_COMPONENTS})
     51 ocv_list_filterout(OpenCV_LIB_COMPONENTS "^opencv_")
     52 if(OpenCV_LIB_COMPONENTS)
     53   list(REMOVE_ITEM OPENCV_MODULES_CONFIGCMAKE ${OpenCV_LIB_COMPONENTS})
     54 endif()
     55 
     56 if(BUILD_FAT_JAVA_LIB AND HAVE_opencv_java)
     57   list(APPEND OPENCV_MODULES_CONFIGCMAKE opencv_java)
     58 endif()
     59 
     60 # -------------------------------------------------------------------------------------------
     61 #  Part 1/3: ${BIN_DIR}/OpenCVConfig.cmake              -> For use *without* "make install"
     62 # -------------------------------------------------------------------------------------------
     63 set(OpenCV_INCLUDE_DIRS_CONFIGCMAKE "\"${OPENCV_CONFIG_FILE_INCLUDE_DIR}\" \"${OpenCV_SOURCE_DIR}/include\" \"${OpenCV_SOURCE_DIR}/include/opencv\"")
     64 
     65 set(OpenCV2_INCLUDE_DIRS_CONFIGCMAKE "")
     66 foreach(m ${OPENCV_MODULES_BUILD})
     67   if(EXISTS "${OPENCV_MODULE_${m}_LOCATION}/include")
     68     list(APPEND OpenCV2_INCLUDE_DIRS_CONFIGCMAKE "${OPENCV_MODULE_${m}_LOCATION}/include")
     69   endif()
     70 endforeach()
     71 
     72 if(ANDROID AND NOT BUILD_SHARED_LIBS AND HAVE_TBB)
     73   #export TBB headers location because static linkage of TBB might be troublesome if application wants to use TBB itself
     74   list(APPEND OpenCV2_INCLUDE_DIRS_CONFIGCMAKE ${TBB_INCLUDE_DIRS})
     75 endif()
     76 
     77 set(modules_file_suffix "")
     78 if(ANDROID)
     79   # the REPLACE here is needed, because OpenCVModules_armeabi.cmake includes
     80   # OpenCVModules_armeabi-*.cmake, which would match OpenCVModules_armeabi-v7a*.cmake.
     81   string(REPLACE - _ modules_file_suffix "_${ANDROID_NDK_ABI_NAME}")
     82 endif()
     83 
     84 export(TARGETS ${OpenCVModules_TARGETS} FILE "${CMAKE_BINARY_DIR}/OpenCVModules${modules_file_suffix}.cmake")
     85 
     86 if(TARGET ippicv)
     87   set(USE_IPPICV TRUE)
     88   file(RELATIVE_PATH INSTALL_PATH_RELATIVE_IPPICV ${CMAKE_BINARY_DIR} ${IPPICV_LOCATION_PATH})
     89 else()
     90   set(USE_IPPICV FALSE)
     91   set(INSTALL_PATH_RELATIVE_IPPICV "non-existed-path")
     92 endif()
     93 
     94 configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/OpenCVConfig.cmake.in" "${CMAKE_BINARY_DIR}/OpenCVConfig.cmake" @ONLY)
     95 #support for version checking when finding opencv. find_package(OpenCV 2.3.1 EXACT) should now work.
     96 configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/OpenCVConfig-version.cmake.in" "${CMAKE_BINARY_DIR}/OpenCVConfig-version.cmake" @ONLY)
     97 
     98 # --------------------------------------------------------------------------------------------
     99 #  Part 2/3: ${BIN_DIR}/unix-install/OpenCVConfig.cmake -> For use *with* "make install"
    100 # -------------------------------------------------------------------------------------------
    101 set(OpenCV_INCLUDE_DIRS_CONFIGCMAKE "\"\${OpenCV_INSTALL_PATH}/${OPENCV_INCLUDE_INSTALL_PATH}/opencv" "\${OpenCV_INSTALL_PATH}/${OPENCV_INCLUDE_INSTALL_PATH}\"")
    102 
    103 set(OpenCV2_INCLUDE_DIRS_CONFIGCMAKE "\"\"")
    104 set(OpenCV_3RDPARTY_LIB_DIRS_CONFIGCMAKE "\"\${OpenCV_INSTALL_PATH}/${OPENCV_3P_LIB_INSTALL_PATH}\"")
    105 
    106 if(UNIX) # ANDROID configuration is created here also
    107   #http://www.vtk.org/Wiki/CMake/Tutorials/Packaging reference
    108   # For a command "find_package(<name> [major[.minor]] [EXACT] [REQUIRED|QUIET])"
    109   # cmake will look in the following dir on unix:
    110   #                <prefix>/(share|lib)/cmake/<name>*/                     (U)
    111   #                <prefix>/(share|lib)/<name>*/                           (U)
    112   #                <prefix>/(share|lib)/<name>*/(cmake|CMake)/             (U)
    113   if(USE_IPPICV)
    114     file(RELATIVE_PATH INSTALL_PATH_RELATIVE_IPPICV "${CMAKE_INSTALL_PREFIX}/${OPENCV_CONFIG_INSTALL_PATH}/" ${IPPICV_INSTALL_PATH})
    115   endif()
    116   configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/OpenCVConfig.cmake.in" "${CMAKE_BINARY_DIR}/unix-install/OpenCVConfig.cmake" @ONLY)
    117   configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/OpenCVConfig-version.cmake.in" "${CMAKE_BINARY_DIR}/unix-install/OpenCVConfig-version.cmake" @ONLY)
    118   install(FILES "${CMAKE_BINARY_DIR}/unix-install/OpenCVConfig.cmake" DESTINATION ${OPENCV_CONFIG_INSTALL_PATH}/ COMPONENT dev)
    119   install(FILES ${CMAKE_BINARY_DIR}/unix-install/OpenCVConfig-version.cmake DESTINATION ${OPENCV_CONFIG_INSTALL_PATH}/ COMPONENT dev)
    120   install(EXPORT OpenCVModules DESTINATION ${OPENCV_CONFIG_INSTALL_PATH}/ FILE OpenCVModules${modules_file_suffix}.cmake COMPONENT dev)
    121 endif()
    122 
    123 if(ANDROID)
    124   install(FILES "${OpenCV_SOURCE_DIR}/platforms/android/android.toolchain.cmake" DESTINATION ${OPENCV_CONFIG_INSTALL_PATH}/ COMPONENT dev)
    125 endif()
    126 
    127 # --------------------------------------------------------------------------------------------
    128 #  Part 3/3: ${BIN_DIR}/win-install/OpenCVConfig.cmake  -> For use within binary installers/packages
    129 # --------------------------------------------------------------------------------------------
    130 if(WIN32)
    131   set(OpenCV_INCLUDE_DIRS_CONFIGCMAKE "\"\${OpenCV_CONFIG_PATH}/include\" \"\${OpenCV_CONFIG_PATH}/include/opencv\"")
    132   set(OpenCV2_INCLUDE_DIRS_CONFIGCMAKE "\"\"")
    133 
    134   exec_program(mkdir ARGS "-p \"${CMAKE_BINARY_DIR}/win-install/\"" OUTPUT_VARIABLE RET_VAL)
    135   if(USE_IPPICV)
    136     if(BUILD_SHARED_LIBS)
    137       file(RELATIVE_PATH INSTALL_PATH_RELATIVE_IPPICV "${CMAKE_INSTALL_PREFIX}/${OpenCV_INSTALL_BINARIES_PREFIX}lib" ${IPPICV_INSTALL_PATH})
    138     else()
    139       file(RELATIVE_PATH INSTALL_PATH_RELATIVE_IPPICV "${CMAKE_INSTALL_PREFIX}/${OpenCV_INSTALL_BINARIES_PREFIX}staticlib" ${IPPICV_INSTALL_PATH})
    140     endif()
    141   endif()
    142   configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/OpenCVConfig.cmake.in" "${CMAKE_BINARY_DIR}/win-install/OpenCVConfig.cmake" @ONLY)
    143   configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/OpenCVConfig-version.cmake.in" "${CMAKE_BINARY_DIR}/win-install/OpenCVConfig-version.cmake" @ONLY)
    144   if (CMAKE_HOST_SYSTEM_NAME MATCHES Windows)
    145     if(BUILD_SHARED_LIBS)
    146       install(FILES "${CMAKE_BINARY_DIR}/win-install/OpenCVConfig.cmake" DESTINATION "${OpenCV_INSTALL_BINARIES_PREFIX}lib" COMPONENT dev)
    147       install(EXPORT OpenCVModules DESTINATION "${OpenCV_INSTALL_BINARIES_PREFIX}lib" FILE OpenCVModules${modules_file_suffix}.cmake COMPONENT dev)
    148     else()
    149       install(FILES "${CMAKE_BINARY_DIR}/win-install/OpenCVConfig.cmake" DESTINATION "${OpenCV_INSTALL_BINARIES_PREFIX}staticlib" COMPONENT dev)
    150       install(EXPORT OpenCVModules DESTINATION "${OpenCV_INSTALL_BINARIES_PREFIX}staticlib" FILE OpenCVModules${modules_file_suffix}.cmake COMPONENT dev)
    151     endif()
    152     install(FILES "${CMAKE_BINARY_DIR}/win-install/OpenCVConfig-version.cmake" DESTINATION "${CMAKE_INSTALL_PREFIX}" COMPONENT dev)
    153     install(FILES "${OpenCV_SOURCE_DIR}/cmake/OpenCVConfig.cmake" DESTINATION "${CMAKE_INSTALL_PREFIX}/" COMPONENT dev)
    154   else ()
    155     install(FILES "${CMAKE_BINARY_DIR}/win-install/OpenCVConfig.cmake" DESTINATION "${OpenCV_INSTALL_BINARIES_PREFIX}lib/cmake/opencv-${OPENCV_VERSION}" COMPONENT dev)
    156     install(EXPORT OpenCVModules DESTINATION "${OpenCV_INSTALL_BINARIES_PREFIX}lib/cmake/opencv-${OPENCV_VERSION}" FILE OpenCVModules${modules_file_suffix}.cmake COMPONENT dev)
    157     install(FILES "${CMAKE_BINARY_DIR}/win-install/OpenCVConfig-version.cmake" DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/cmake/opencv-${OPENCV_VERSION}" COMPONENT dev)
    158   endif ()
    159 endif()
    160