# - Try to find OpenCV library installation # See http://sourceforge.net/projects/opencvlibrary/ # # The following variables are optionally searched for defaults # OpenCV_ROOT_DIR: Base directory of OpenCv tree to use. # OpenCV_FIND_REQUIRED_COMPONENTS : FIND_PACKAGE(OpenCV COMPONENTS ..) # compatible interface. typically CV CXCORE CVAUX HIGHGUI CVCAM .. etc. # # The following are set after configuration is done: # OpenCV_FOUND # OpenCV_INCLUDE_DIR # OpenCV_LIBRARIES # OpenCV_LINK_DIRECTORIES # # deprecated: # OPENCV_* uppercase replaced by case sensitive OpenCV_* # OPENCV_EXE_LINKER_FLAGS # OPENCV_INCLUDE_DIR : replaced by plural *_DIRS # # 2004/05 Jan Woetzel, Friso, Daniel Grest # 2006/01 complete rewrite by Jan Woetzel # 1006/09 2nd rewrite introducing ROOT_DIR and PATH_SUFFIXES # to handle multiple installed versions gracefully by Jan Woetzel # # tested with: # -OpenCV 0.97 (beta5a): MSVS 7.1, gcc 3.3, gcc 4.1 # -OpenCV 0.99 (1.0rc1): MSVS 7.1 # # www.mip.informatik.uni-kiel.de/~jw # -------------------------------- MACRO(DBG_MSG _MSG) # MESSAGE(STATUS "${CMAKE_CURRENT_LIST_FILE}(${CMAKE_CURRENT_LIST_LINE}):\n${_MSG}") ENDMACRO(DBG_MSG) # required cv components with header and library if COMPONENTS unspecified IF (NOT OpenCV_FIND_COMPONENTS) # default SET(OpenCV_FIND_REQUIRED_COMPONENTS CV CXCORE CVAUX HIGHGUI ) IF (WIN32) LIST(APPEND OpenCV_FIND_REQUIRED_COMPONENTS CVCAM ) # WIN32 only actually ENDIF(WIN32) ENDIF (NOT OpenCV_FIND_COMPONENTS) # typical root dirs of installations, exactly one of them is used SET (OpenCV_POSSIBLE_ROOT_DIRS "${OpenCV_ROOT_DIR}" "$ENV{OpenCV_ROOT_DIR}" "$ENV{OPENCV_DIR}" # only for backward compatibility deprecated by ROOT_DIR "$ENV{OPENCV_HOME}" # only for backward compatibility "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Intel(R) Open Source Computer Vision Library_is1;Inno Setup: App Path]" "$ENV{ProgramFiles}/OpenCV" /usr/local /usr ) # MIP Uni Kiel /opt/net network installation # get correct prefix for current gcc compiler version for gcc 3.x 4.x IF (${CMAKE_COMPILER_IS_GNUCXX}) IF (NOT OpenCV_FIND_QUIETLY) MESSAGE(STATUS "Checking GNUCXX version 3/4 to determine OpenCV /opt/net/ path") ENDIF (NOT OpenCV_FIND_QUIETLY) EXEC_PROGRAM(${CMAKE_CXX_COMPILER} ARGS --version OUTPUT_VARIABLE CXX_COMPILER_VERSION) IF (CXX_COMPILER_VERSION MATCHES ".*3\\.[0-9].*") SET(IS_GNUCXX3 TRUE) LIST(APPEND OpenCV_POSSIBLE_ROOT_DIRS /opt/net/gcc33/OpenCV ) ENDIF(CXX_COMPILER_VERSION MATCHES ".*3\\.[0-9].*") IF (CXX_COMPILER_VERSION MATCHES ".*4\\.[0-9].*") SET(IS_GNUCXX4 TRUE) LIST(APPEND OpenCV_POSSIBLE_ROOT_DIRS /opt/net/gcc41/OpenCV ) ENDIF(CXX_COMPILER_VERSION MATCHES ".*4\\.[0-9].*") ENDIF (${CMAKE_COMPILER_IS_GNUCXX}) #DBG_MSG("DBG (OpenCV_POSSIBLE_ROOT_DIRS=${OpenCV_POSSIBLE_ROOT_DIRS}") # # select exactly ONE OpenCV base directory/tree # to avoid mixing different version headers and libs # FIND_PATH(OpenCV_ROOT_DIR NAMES cv/include/cv.h # windows include/opencv/cv.h # linux /opt/net include/cv/cv.h include/cv.h PATHS ${OpenCV_POSSIBLE_ROOT_DIRS}) DBG_MSG("OpenCV_ROOT_DIR=${OpenCV_ROOT_DIR}") # header include dir suffixes appended to OpenCV_ROOT_DIR SET(OpenCV_INCDIR_SUFFIXES include include/cv include/opencv cv/include cxcore/include cvaux/include otherlibs/cvcam/include otherlibs/highgui otherlibs/highgui/include otherlibs/_graphics/include ) # library linkdir suffixes appended to OpenCV_ROOT_DIR SET(OpenCV_LIBDIR_SUFFIXES lib OpenCV/lib otherlibs/_graphics/lib ) #DBG_MSG("OpenCV_LIBDIR_SUFFIXES=${OpenCV_LIBDIR_SUFFIXES}") # # find incdir for each lib # FIND_PATH(OpenCV_CV_INCLUDE_DIR NAMES cv.h PATHS ${OpenCV_ROOT_DIR} PATH_SUFFIXES ${OpenCV_INCDIR_SUFFIXES} ) FIND_PATH(OpenCV_CXCORE_INCLUDE_DIR NAMES cxcore.h PATHS ${OpenCV_ROOT_DIR} PATH_SUFFIXES ${OpenCV_INCDIR_SUFFIXES} ) FIND_PATH(OpenCV_CVAUX_INCLUDE_DIR NAMES cvaux.h PATHS ${OpenCV_ROOT_DIR} PATH_SUFFIXES ${OpenCV_INCDIR_SUFFIXES} ) FIND_PATH(OpenCV_HIGHGUI_INCLUDE_DIR NAMES highgui.h PATHS ${OpenCV_ROOT_DIR} PATH_SUFFIXES ${OpenCV_INCDIR_SUFFIXES} ) FIND_PATH(OpenCV_CVCAM_INCLUDE_DIR NAMES cvcam.h PATHS ${OpenCV_ROOT_DIR} PATH_SUFFIXES ${OpenCV_INCDIR_SUFFIXES} ) # # find sbsolute path to all libraries # some are optionally, some may not exist on Linux # FIND_LIBRARY(OpenCV_CV_LIBRARY NAMES cv opencv PATHS ${OpenCV_ROOT_DIR} PATH_SUFFIXES ${OpenCV_LIBDIR_SUFFIXES} ) FIND_LIBRARY(OpenCV_CVAUX_LIBRARY NAMES cvaux PATHS ${OpenCV_ROOT_DIR} PATH_SUFFIXES ${OpenCV_LIBDIR_SUFFIXES} ) FIND_LIBRARY(OpenCV_CVCAM_LIBRARY NAMES cvcam PATHS ${OpenCV_ROOT_DIR} PATH_SUFFIXES ${OpenCV_LIBDIR_SUFFIXES} ) FIND_LIBRARY(OpenCV_CVHAARTRAINING_LIBRARY NAMES cvhaartraining PATHS ${OpenCV_ROOT_DIR} PATH_SUFFIXES ${OpenCV_LIBDIR_SUFFIXES} ) FIND_LIBRARY(OpenCV_CXCORE_LIBRARY NAMES cxcore PATHS ${OpenCV_ROOT_DIR} PATH_SUFFIXES ${OpenCV_LIBDIR_SUFFIXES} ) FIND_LIBRARY(OpenCV_CXTS_LIBRARY NAMES cxts PATHS ${OpenCV_ROOT_DIR} PATH_SUFFIXES ${OpenCV_LIBDIR_SUFFIXES} ) FIND_LIBRARY(OpenCV_HIGHGUI_LIBRARY NAMES highgui PATHS ${OpenCV_ROOT_DIR} PATH_SUFFIXES ${OpenCV_LIBDIR_SUFFIXES} ) FIND_LIBRARY(OpenCV_ML_LIBRARY NAMES ml PATHS ${OpenCV_ROOT_DIR} PATH_SUFFIXES ${OpenCV_LIBDIR_SUFFIXES} ) FIND_LIBRARY(OpenCV_TRS_LIBRARY NAMES trs PATHS ${OpenCV_ROOT_DIR} PATH_SUFFIXES ${OpenCV_LIBDIR_SUFFIXES} ) # # Logic selecting required libs and headers # SET(OpenCV_FOUND ON) DBG_MSG("OpenCV_FIND_REQUIRED_COMPONENTS=${OpenCV_FIND_REQUIRED_COMPONENTS}") FOREACH(NAME ${OpenCV_FIND_REQUIRED_COMPONENTS} ) # only good if header and library both found IF (OpenCV_${NAME}_INCLUDE_DIR AND OpenCV_${NAME}_LIBRARY) LIST(APPEND OpenCV_INCLUDE_DIRS ${OpenCV_${NAME}_INCLUDE_DIR} ) LIST(APPEND OpenCV_LIBRARIES ${OpenCV_${NAME}_LIBRARY} ) #DBG_MSG("appending for NAME=${NAME} ${OpenCV_${NAME}_INCLUDE_DIR} and ${OpenCV_${NAME}_LIBRARY}" ) ELSE (OpenCV_${NAME}_INCLUDE_DIR AND OpenCV_${NAME}_LIBRARY) DBG_MSG("OpenCV component NAME=${NAME} not found! " "\nOpenCV_${NAME}_INCLUDE_DIR=${OpenCV_${NAME}_INCLUDE_DIR} " "\nOpenCV_${NAME}_LIBRARY=${OpenCV_${NAME}_LIBRARY} ") SET(OpenCV_FOUND OFF) ENDIF (OpenCV_${NAME}_INCLUDE_DIR AND OpenCV_${NAME}_LIBRARY) ENDFOREACH(NAME) DBG_MSG("OpenCV_INCLUDE_DIRS=${OpenCV_INCLUDE_DIRS}") DBG_MSG("OpenCV_LIBRARIES=${OpenCV_LIBRARIES}") # get the link directory for rpath to be used with LINK_DIRECTORIES: IF (OpenCV_CV_LIBRARY) GET_FILENAME_COMPONENT(OpenCV_LINK_DIRECTORIES ${OpenCV_CV_LIBRARY} PATH) ENDIF (OpenCV_CV_LIBRARY) MARK_AS_ADVANCED( OpenCV_ROOT_DIR OpenCV_INCLUDE_DIRS OpenCV_CV_INCLUDE_DIR OpenCV_CXCORE_INCLUDE_DIR OpenCV_CVAUX_INCLUDE_DIR OpenCV_CVCAM_INCLUDE_DIR OpenCV_HIGHGUI_INCLUDE_DIR OpenCV_LIBRARIES OpenCV_CV_LIBRARY OpenCV_CXCORE_LIBRARY OpenCV_CVAUX_LIBRARY OpenCV_CVCAM_LIBRARY OpenCV_CVHAARTRAINING_LIBRARY OpenCV_CXTS_LIBRARY OpenCV_HIGHGUI_LIBRARY OpenCV_ML_LIBRARY OpenCV_TRS_LIBRARY ) # be backward compatible: SET(OPENCV_LIBRARIES ${OpenCV_LIBRARIES} ) SET(OPENCV_INCLUDE_DIR ${OpenCV_INCLUDE_DIRS} ) SET(OPENCV_FOUND ${OpenCV_FOUND}) # display help message IF(NOT OpenCV_FOUND) # make FIND_PACKAGE friendly IF(NOT OpenCV_FIND_QUIETLY) IF(OpenCV_FIND_REQUIRED) MESSAGE(FATAL_ERROR "OpenCV required but some headers or libs not found. Please specify it's location with OpenCV_ROOT_DIR env. variable.") ELSE(OpenCV_FIND_REQUIRED) MESSAGE(STATUS "ERROR: OpenCV was not found.") ENDIF(OpenCV_FIND_REQUIRED) ENDIF(NOT OpenCV_FIND_QUIETLY) ENDIF(NOT OpenCV_FOUND)