From 5dc005d4545974ec65af7807f13823e9312aaf1a Mon Sep 17 00:00:00 2001 From: matlabbe Date: Tue, 23 Aug 2011 15:28:21 +0000 Subject: [PATCH] updated FindOpenCV.cmake git-svn-id: http://rtabmap.googlecode.com/svn/trunk/rtabmap@305 f169173b-cf89-36c8-b27e-44dbe73f0c83 --- cmake_modules/FindOpenCV.cmake | 257 ++++----------------------------- 1 file changed, 28 insertions(+), 229 deletions(-) diff --git a/cmake_modules/FindOpenCV.cmake b/cmake_modules/FindOpenCV.cmake index aee92443..d97f66df 100644 --- a/cmake_modules/FindOpenCV.cmake +++ b/cmake_modules/FindOpenCV.cmake @@ -47,244 +47,41 @@ # #---------------------------------------------------------- -# typical root dirs of installations, exactly one of them is used -SET (OpenCV_POSSIBLE_ROOT_DIRS - "$ENV{OpenCV_DIR}" - /usr/local - /usr/opt - /usr - ) - -# Add ROS OpenCV directory if ROS is installed -FIND_PROGRAM(ROSPACK_EXEC NAME rospack PATHS) -IF(ROSPACK_EXEC) - MESSAGE(STATUS "Found rospack executable : ${ROSPACK_EXEC}") - EXECUTE_PROCESS(COMMAND ${ROSPACK_EXEC} find opencv2 - OUTPUT_VARIABLE OPENCV_ROS_PATH - OUTPUT_STRIP_TRAILING_WHITESPACE - WORKING_DIRECTORY "./" - ) - IF(OPENCV_ROS_PATH) - MESSAGE(STATUS "Found OpenCV ROS pkg : ${OPENCV_ROS_PATH}") - SET(OpenCV_POSSIBLE_ROOT_DIRS - ${OPENCV_ROS_PATH}/opencv - ${OpenCV_POSSIBLE_ROOT_DIRS} - ) - ENDIF(OPENCV_ROS_PATH) -ENDIF(ROSPACK_EXEC) +SET(OpenCV_DIR "$ENV{OpenCV_DIR}") -find_path(OpenCV_DIR "OpenCVConfig.cmake" HINTS ${OpenCV_POSSIBLE_ROOT_DIRS} DOC "Root directory of OpenCV") -if(NOT EXISTS "${OpenCV_DIR}") - if(NOT WIN32) - find_path(OpenCV_DIR "share/opencv/OpenCVConfig.cmake" HINTS ${OpenCV_POSSIBLE_ROOT_DIRS} DOC "Root directory of OpenCV") - if(NOT OpenCV_DIR) - include(FindPkgConfig) - if(PKG_CONFIG_FOUND) - pkg_check_modules(OPENCV_PKGCONF opencv) - set(OpenCV_DIR ${OPENCV_PKGCONF_PREFIX}) - endif(PKG_CONFIG_FOUND) - endif(NOT OpenCV_DIR) - else() - set(OpenCV_DIR "$ENV{OpenCV_DIR}") - endif () -endif(NOT EXISTS "${OpenCV_DIR}") +if(NOT OpenCV_DIR) + # Add ROS OpenCV directory if ROS is installed + FIND_PROGRAM(ROSPACK_EXEC NAME rospack PATHS) + IF(ROSPACK_EXEC) + #MESSAGE(STATUS "Found rospack executable : ${ROSPACK_EXEC}") + EXECUTE_PROCESS(COMMAND ${ROSPACK_EXEC} find opencv2 + OUTPUT_VARIABLE OPENCV_ROS_PATH + OUTPUT_STRIP_TRAILING_WHITESPACE + WORKING_DIRECTORY "./" + ) + IF(OPENCV_ROS_PATH) + #MESSAGE(STATUS "Found OpenCV ROS pkg : ${OPENCV_ROS_PATH}") + SET(OpenCV_DIR ${OPENCV_ROS_PATH}/opencv/share/opencv) + ENDIF(OPENCV_ROS_PATH) + ENDIF(ROSPACK_EXEC) +endif(NOT OpenCV_DIR) ##==================================================== ## Find OpenCV libraries ##---------------------------------------------------- if(EXISTS "${OpenCV_DIR}") + ## Include the standard CMake script + include("${OpenCV_DIR}/OpenCVConfig.cmake") - set(OpenCV_configScript "${OpenCV_DIR}/OpenCVConfig.cmake") - if(NOT EXISTS "${OpenCV_configScript}") - set(OpenCV_configScript "${OpenCV_DIR}/share/opencv/OpenCVConfig.cmake") - endif(NOT EXISTS "${OpenCV_configScript}") - - - #When its possible to use the Config script use it. - if(EXISTS "${OpenCV_configScript}") - - MESSAGE(STATUS "OpenCV: using configuration file ${OpenCV_configScript}") - - ## Include the standard CMake script - include("${OpenCV_configScript}") - - ## Search for a specific version - if(WIN32 OR NOT PKG_CONFIG_FOUND) - set(CVLIB_SUFFIX "${OpenCV_VERSION_MAJOR}${OpenCV_VERSION_MINOR}${OpenCV_VERSION_PATCH}") - endif(WIN32 OR NOT PKG_CONFIG_FOUND) - - ##Boris:TODO: check for correct OpenCV version in pkg-config case !!! - - - #Otherwise it try to guess it. - else(EXISTS "${OpenCV_configScript}") - - - find_path(OpenCV_INCLUDE_DIR "cv.h" PATHS "${OpenCV_DIR}" PATH_SUFFIXES "include" "include/opencv" DOC "") - if(EXISTS ${OpenCV_INCLUDE_DIR}) - include_directories(${OpenCV_INCLUDE_DIR}) - endif(EXISTS ${OpenCV_INCLUDE_DIR}) - - if(NOT EXISTS ${VERSION_FILE_DIR}) #may alreay be in cache - - #Find OpenCV version by looking at cvver.h or core/version.hpp - find_path(VERSION_FILE_DIR "version.hpp" PATHS "${OpenCV_DIR}" PATH_SUFFIXES "include" "include/opencv" "include/opencv2" "include/opencv2/core" DOC "") - if(NOT EXISTS ${VERSION_FILE_DIR}) - find_path(VERSION_FILE_DIR "cvver.h" PATHS "${OpenCV_DIR}" PATH_SUFFIXES "include" "include/opencv" DOC "") - if(NOT EXISTS ${VERSION_FILE_DIR}) - message(FATAL_ERROR "OpenCV version file not found") - else(NOT EXISTS ${VERSION_FILE_DIR}) - set(VERSION_FILE ${VERSION_FILE_DIR}/cvver.h) - endif(NOT EXISTS ${VERSION_FILE_DIR}) - - else(NOT EXISTS ${VERSION_FILE_DIR}) - set(VERSION_FILE ${VERSION_FILE_DIR}/version.hpp) - - endif(NOT EXISTS ${VERSION_FILE_DIR}) - - #file(STRINGS ${OpenCV_INCLUDE_DIR}/cvver.h OpenCV_VERSIONS_TMP REGEX "^#define CV_[A-Z]+_VERSION[ \t]+[0-9]+$") - file(STRINGS ${VERSION_FILE} OpenCV_VERSIONS_TMP REGEX "^#define CV_[A-Z]+_VERSION[ \t]+[0-9]+$") - - string(REGEX REPLACE ".*#define CV_MAJOR_VERSION[ \t]+([0-9]+).*" "\\1" OpenCV_VERSION_MAJOR ${OpenCV_VERSIONS_TMP}) - string(REGEX REPLACE ".*#define CV_MINOR_VERSION[ \t]+([0-9]+).*" "\\1" OpenCV_VERSION_MINOR ${OpenCV_VERSIONS_TMP}) - string(REGEX REPLACE ".*#define CV_SUBMINOR_VERSION[ \t]+([0-9]+).*" "\\1" OpenCV_VERSION_PATCH ${OpenCV_VERSIONS_TMP}) - set(OpenCV_VERSION ${OpenCV_VERSION_MAJOR}.${OpenCV_VERSION_MINOR}.${OpenCV_VERSION_PATCH} CACHE STRING "" FORCE) - - if(WIN32 OR NOT PKG_CONFIG_FOUND) + ## Search for a specific version set(CVLIB_SUFFIX "${OpenCV_VERSION_MAJOR}${OpenCV_VERSION_MINOR}${OpenCV_VERSION_PATCH}") - endif(WIN32 OR NOT PKG_CONFIG_FOUND) - - ##Boris:TODO: check for correct OpenCV version in pklg-config case !!! - - - endif(NOT EXISTS ${VERSION_FILE_DIR}) - - if(${OpenCV_VERSION} VERSION_GREATER 2.1.0) - set(OPENCV_LIB_COMPONENTS calib3d contrib core features2d ffmpeg flann gpu highgui imgproc legacy ml objdetect ts video) - - #Add parent directory of ${OpenCV_INCLUDE_DIR} to ${OpenCV_INCLUDE_DIR} itself - #to be able to do both - #include and #include - get_filename_component(PARENT_DIR ${OpenCV_INCLUDE_DIR} PATH) - set(OpenCV_INCLUDE_DIR "${OpenCV_INCLUDE_DIR};${PARENT_DIR}") - - else(${OpenCV_VERSION} VERSION_GREATER 2.1.0) - set(OPENCV_LIB_COMPONENTS cxcore cv ml highgui cvaux) - endif(${OpenCV_VERSION} VERSION_GREATER 2.1.0) - - endif(EXISTS "${OpenCV_configScript}") - - - if(${OpenCV_VERSION} VERSION_GREATER 2.1.0) - - set(CVLIB_SUFFIX ".${OpenCV_VERSION}") - if(WIN32 OR NOT PKG_CONFIG_FOUND) - set(CVLIB_SUFFIX "${OpenCV_VERSION_MAJOR}${OpenCV_VERSION_MINOR}${OpenCV_VERSION_PATCH}") - endif(WIN32 OR NOT PKG_CONFIG_FOUND) - - ## Initiate the variable before the loop - set(OpenCV_LIBS "") - set(OpenCV_FOUND_TMP true) - - ## Loop over each components - foreach(__CVLIB ${OPENCV_LIB_COMPONENTS}) - - find_library(OpenCV_${__CVLIB}_LIBRARY_DEBUG NAMES "${__CVLIB}${CVLIB_SUFFIX}d" "lib${__CVLIB}${CVLIB_SUFFIX}d" PATHS "${OpenCV_DIR}/lib" NO_DEFAULT_PATH) - find_library(OpenCV_${__CVLIB}_LIBRARY_RELEASE NAMES "${__CVLIB}${CVLIB_SUFFIX}" "lib${__CVLIB}${CVLIB_SUFFIX}" "opencv_${__CVLIB}${CVLIB_SUFFIX}" "opencv_${__CVLIB}" "${__CVLIB}" PATHS "${OpenCV_DIR}/lib" NO_DEFAULT_PATH) - - #On MacOSX libraries are named: libopencv_${__CVLIB}${CVLIB_SUFFIX}.dylib - #On Linux libraries are named: libopencv_${__CVLIB}.so${CVLIB_SUFFIX} - # but with pkg-config ${OPENCV_LIB_COMPONENTS} are already prefixed with opencv_ ? - - #we add: "opencv_${__CVLIB}${CVLIB_SUFFIX}" for MacOSX - #we add: "${__CVLIB}" for linux (but version is not checked !) - - - #Remove the cache value - set(OpenCV_${__CVLIB}_LIBRARY "" CACHE STRING "" FORCE) - - #both debug/release - if(OpenCV_${__CVLIB}_LIBRARY_DEBUG AND OpenCV_${__CVLIB}_LIBRARY_RELEASE) - set(OpenCV_${__CVLIB}_LIBRARY debug ${OpenCV_${__CVLIB}_LIBRARY_DEBUG} optimized ${OpenCV_${__CVLIB}_LIBRARY_RELEASE} CACHE STRING "" FORCE) - - #only debug - elseif(OpenCV_${__CVLIB}_LIBRARY_DEBUG) - set(OpenCV_${__CVLIB}_LIBRARY ${OpenCV_${__CVLIB}_LIBRARY_DEBUG} CACHE STRING "" FORCE) - - #only release - elseif(OpenCV_${__CVLIB}_LIBRARY_RELEASE) - set(OpenCV_${__CVLIB}_LIBRARY ${OpenCV_${__CVLIB}_LIBRARY_RELEASE} CACHE STRING "" FORCE) - - #no library found - else() - set(OpenCV_FOUND_TMP false) - - endif() - - - #Add to the general list - if(OpenCV_${__CVLIB}_LIBRARY) - set(OpenCV_LIBS ${OpenCV_LIBS} ${OpenCV_${__CVLIB}_LIBRARY}) - endif(OpenCV_${__CVLIB}_LIBRARY) - - endforeach(__CVLIB) - - - set(OpenCV_FOUND ${OpenCV_FOUND_TMP} CACHE BOOL "" FORCE) - - - else(${OpenCV_VERSION} VERSION_GREATER 2.1.0) - - - ## Initiate the variable before the loop - set(OpenCV_LIBS "") - set(OpenCV_FOUND_TMP true) - - ## Loop over each components - foreach(__CVLIB ${OPENCV_LIB_COMPONENTS}) - - find_library(OpenCV_${__CVLIB}_LIBRARY_DEBUG NAMES "${__CVLIB}${CVLIB_SUFFIX}d" "lib${__CVLIB}${CVLIB_SUFFIX}d" PATHS "${OpenCV_DIR}/lib" NO_DEFAULT_PATH) - find_library(OpenCV_${__CVLIB}_LIBRARY_RELEASE NAMES "${__CVLIB}${CVLIB_SUFFIX}" "lib${__CVLIB}${CVLIB_SUFFIX}" PATHS "${OpenCV_DIR}/lib" NO_DEFAULT_PATH) - - - - #Remove the cache value - set(OpenCV_${__CVLIB}_LIBRARY "" CACHE STRING "" FORCE) - - #both debug/release - if(OpenCV_${__CVLIB}_LIBRARY_DEBUG AND OpenCV_${__CVLIB}_LIBRARY_RELEASE) - set(OpenCV_${__CVLIB}_LIBRARY debug ${OpenCV_${__CVLIB}_LIBRARY_DEBUG} optimized ${OpenCV_${__CVLIB}_LIBRARY_RELEASE} CACHE STRING "" FORCE) - - #only debug - elseif(OpenCV_${__CVLIB}_LIBRARY_DEBUG) - set(OpenCV_${__CVLIB}_LIBRARY ${OpenCV_${__CVLIB}_LIBRARY_DEBUG} CACHE STRING "" FORCE) - - #only release - elseif(OpenCV_${__CVLIB}_LIBRARY_RELEASE) - set(OpenCV_${__CVLIB}_LIBRARY ${OpenCV_${__CVLIB}_LIBRARY_RELEASE} CACHE STRING "" FORCE) - - #no library found - else() - set(OpenCV_FOUND_TMP false) - - endif() - - #Add to the general list - if(OpenCV_${__CVLIB}_LIBRARY) - set(OpenCV_LIBS ${OpenCV_LIBS} ${OpenCV_${__CVLIB}_LIBRARY}) - endif(OpenCV_${__CVLIB}_LIBRARY) - - - endforeach(__CVLIB) - - - set(OpenCV_FOUND ${OpenCV_FOUND_TMP} CACHE BOOL "" FORCE) - - endif(${OpenCV_VERSION} VERSION_GREATER 2.1.0) + if(OpenCV_INCLUDE_DIRS AND OpenCV_LIBS) + set(OpenCV_FOUND true) + endif(OpenCV_INCLUDE_DIRS AND OpenCV_LIBS) else(EXISTS "${OpenCV_DIR}") - set(ERR_MSG "Please specify OpenCV directory using OpenCV_DIR env. variable") + set(ERR_MSG "Please specify OpenCV directory using OpenCV_DIR env. variable (the folder containing OpenCVConfig.cmake)") endif(EXISTS "${OpenCV_DIR}") ##==================================================== @@ -302,17 +99,19 @@ if(NOT OpenCV_FOUND) endif(NOT OpenCV_FIND_QUIETLY) else() if(NOT OpenCV_FIND_QUIETLY) - message(STATUS "Found OpenCV ${OpenCV_VERSION}") + message(STATUS "Found OpenCV ${OpenCV_VERSION} : ${OpenCV_DIR}") endif(NOT OpenCV_FIND_QUIETLY) endif() ##==================================================== ##==================================================== -## Backward compatibility +## Backward compatibility ${OpenCV_POSSIBLE_ROOT_DIRS} + ##---------------------------------------------------- if(OpenCV_FOUND) set(OpenCV_INCLUDE_DIRS "${OpenCV_INCLUDE_DIR}") + set(OpenCV_LIBRARIES "${OpenCV_LIBS}") #option(OpenCV_BACKWARD_COMPA "Add some variable to make this script compatible with the other version of FindOpenCV.cmake" false) #if(OpenCV_BACKWARD_COMPA) # find_path(OpenCV_INCLUDE_DIRS "cv.h" PATHS "${OpenCV_DIR}" PATH_SUFFIXES "include" "include/opencv" DOC "Include directory")