|
From: Tapio V. <aa...@us...> - 2010-05-16 16:30:59
|
Module: performous Branch: instrumentgraph Commit: 2d8f567cf8546e28b14b287b79bc14e5d863fd97 Author: Tapio Vierros <tap...@gm...> Date: Sun May 9 20:24:40 2010 +0300 Better FindOpenCV.cmake --- cmake/Modules/FindOpenCV.cmake | 255 +++++++++++++++++++++++++++++++++++++--- 1 files changed, 237 insertions(+), 18 deletions(-) diff --git a/cmake/Modules/FindOpenCV.cmake b/cmake/Modules/FindOpenCV.cmake index 5f71597..70db510 100644 --- a/cmake/Modules/FindOpenCV.cmake +++ b/cmake/Modules/FindOpenCV.cmake @@ -1,28 +1,247 @@ -# - Try to find OpenCV -# Once done, this will define +# - Try to find OpenCV library installation +# See http://sourceforge.net/projects/opencvlibrary/ # -# OpenCV_FOUND - system has OpenCV -# OpenCV_INCLUDE_DIRS - the OpenCV include directories -# OpenCV_LIBRARIES - link these to use OpenCV +# The follwoing 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. # -# See documentation on how to write CMake scripts at -# http://www.cmake.org/Wiki/CMake:How_To_Find_Libraries +# 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) + -include(LibFindMacros) +# 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}") -find_path(OpenCV_INCLUDE_DIR - NAMES cv.h cv.hpp - PATHS ${OpenCV_INCLUDE_DIRS} - PATH_SUFFIXES opencv +# 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 ) -find_library(OpenCV_LIBRARY - NAMES cv highgui highgui4 libcv.a OpenCV opencv CV - PATHS ${OpenCV_PKGCONF_LIBRARY_DIRS} +# 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}) + -set(OpenCV_PROCESS_INCLUDES OpenCV_INCLUDE_DIR) -set(OpenCV_PROCESS_LIBS OpenCV_LIBRARY) -libfind_process(OpenCV) +# 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) |