Salome HOME
CMake porting
[modules/geom.git] / adm_local / cmake_files / FindOpenCV.cmake
1 ###########################################################
2 #                  Find OpenCV Library
3 # See http://sourceforge.net/projects/opencvlibrary/
4 #----------------------------------------------------------
5 #
6 ## 1: Setup:
7 # The following variables are optionally searched for defaults
8 #  OpenCV_DIR:            Base directory of OpenCv tree to use.
9 #
10 ## 2: Variable
11 # The following are set after configuration is done: 
12 #  
13 #  OpenCV_FOUND
14 #  OpenCV_LIBS
15 #  OpenCV_INCLUDE_DIR
16 #  OpenCV_VERSION (OpenCV_VERSION_MAJOR, OpenCV_VERSION_MINOR, OpenCV_VERSION_PATCH)
17 #
18 #
19 # Deprecated variable are used to maintain backward compatibility with
20 # the script of Jan Woetzel (2006/09): www.mip.informatik.uni-kiel.de/~jw
21 #  OpenCV_INCLUDE_DIRS
22 #  OpenCV_LIBRARIES
23 #  OpenCV_LINK_DIRECTORIES
24
25 ## 3: Version
26 #
27 # 2010/04/07 Benoit Rat, Correct a bug when OpenCVConfig.cmake is not found.
28 # 2010/03/24 Benoit Rat, Add compatibility for when OpenCVConfig.cmake is not found.
29 # 2010/03/22 Benoit Rat, Creation of the script.
30 #
31 #
32 # tested with:
33 # - OpenCV 2.1:  MinGW, MSVC2008
34 # - OpenCV 2.0:  MinGW, MSVC2008, GCC4
35 #
36 #
37 ## 4: Licence:
38 #
39 # LGPL 2.1 : GNU Lesser General Public License Usage
40 # Alternatively, this file may be used under the terms of the GNU Lesser
41
42 # General Public License version 2.1 as published by the Free Software
43 # Foundation and appearing in the file LICENSE.LGPL included in the
44 # packaging of this file.  Please review the following information to
45 # ensure the GNU Lesser General Public License version 2.1 requirements
46 # will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
47
48 #----------------------------------------------------------
49
50
51 find_path(OpenCV_DIR "OpenCVConfig.cmake" DOC "Root directory of OpenCV")
52
53 ##====================================================
54 ## Find OpenCV libraries
55 ##----------------------------------------------------
56 if(EXISTS "${OpenCV_DIR}")
57
58         #When its possible to use the Config script use it.
59         if(EXISTS "${OpenCV_DIR}/OpenCVConfig.cmake")
60
61                 ## Include the standard CMake script
62                 include("${OpenCV_DIR}/OpenCVConfig.cmake")
63
64                 ## Search for a specific version
65                 set(CVLIB_SUFFIX "${OpenCV_VERSION_MAJOR}${OpenCV_VERSION_MINOR}${OpenCV_VERSION_PATCH}")
66
67         #Otherwise it try to guess it.
68         else(EXISTS "${OpenCV_DIR}/OpenCVConfig.cmake")
69
70                 set(OPENCV_LIB_COMPONENTS cxcore cv ml highgui cvaux)
71                 find_path(OpenCV_INCLUDE_DIR "cv.h" PATHS "${OpenCV_DIR}" PATH_SUFFIXES "include" "include/opencv" DOC "")
72                 if(EXISTS  ${OpenCV_INCLUDE_DIR})
73                         include_directories(${OpenCV_INCLUDE_DIR})
74                 endif(EXISTS  ${OpenCV_INCLUDE_DIR})
75
76                 #Find OpenCV version by looking at cvver.h
77                 file(STRINGS ${OpenCV_INCLUDE_DIR}/cvver.h OpenCV_VERSIONS_TMP REGEX "^#define CV_[A-Z]+_VERSION[ \t]+[0-9]+$")
78                 string(REGEX REPLACE ".*#define CV_MAJOR_VERSION[ \t]+([0-9]+).*" "\\1" OpenCV_VERSION_MAJOR ${OpenCV_VERSIONS_TMP})
79                 string(REGEX REPLACE ".*#define CV_MINOR_VERSION[ \t]+([0-9]+).*" "\\1" OpenCV_VERSION_MINOR ${OpenCV_VERSIONS_TMP})
80                 string(REGEX REPLACE ".*#define CV_SUBMINOR_VERSION[ \t]+([0-9]+).*" "\\1" OpenCV_VERSION_PATCH ${OpenCV_VERSIONS_TMP})
81                 set(OpenCV_VERSION ${OpenCV_VERSION_MAJOR}.${OpenCV_VERSION_MINOR}.${OpenCV_VERSION_PATCH} CACHE STRING "" FORCE)
82                 set(CVLIB_SUFFIX "${OpenCV_VERSION_MAJOR}${OpenCV_VERSION_MINOR}${OpenCV_VERSION_PATCH}")
83
84         endif(EXISTS "${OpenCV_DIR}/OpenCVConfig.cmake")
85
86
87
88
89         ## Initiate the variable before the loop
90         set(GLOBAL OpenCV_LIBS "")
91         set(OpenCV_FOUND_TMP true)
92
93         ## Loop over each components
94         foreach(__CVLIB ${OPENCV_LIB_COMPONENTS})
95                 
96                 find_library(OpenCV_${__CVLIB}_LIBRARY_DEBUG NAMES "${__CVLIB}${CVLIB_SUFFIX}d" "lib${__CVLIB}${CVLIB_SUFFIX}d" PATHS "${OpenCV_DIR}/lib" NO_DEFAULT_PATH)
97                 find_library(OpenCV_${__CVLIB}_LIBRARY_RELEASE NAMES "${__CVLIB}${CVLIB_SUFFIX}" "lib${__CVLIB}${CVLIB_SUFFIX}" PATHS "${OpenCV_DIR}/lib" NO_DEFAULT_PATH)
98                 
99                 #Remove the cache value
100                 set(OpenCV_${__CVLIB}_LIBRARY "" CACHE STRING "" FORCE)
101                 
102                 #both debug/release
103                 if(OpenCV_${__CVLIB}_LIBRARY_DEBUG AND OpenCV_${__CVLIB}_LIBRARY_RELEASE)
104                         set(OpenCV_${__CVLIB}_LIBRARY debug ${OpenCV_${__CVLIB}_LIBRARY_DEBUG} optimized ${OpenCV_${__CVLIB}_LIBRARY_RELEASE}  CACHE STRING "" FORCE)
105                 #only debug
106                 elseif(OpenCV_${__CVLIB}_LIBRARY_DEBUG)
107                         set(OpenCV_${__CVLIB}_LIBRARY ${OpenCV_${__CVLIB}_LIBRARY_DEBUG}  CACHE STRING "" FORCE)
108                 #only release
109                 elseif(OpenCV_${__CVLIB}_LIBRARY_RELEASE)
110                         set(OpenCV_${__CVLIB}_LIBRARY ${OpenCV_${__CVLIB}_LIBRARY_RELEASE}  CACHE STRING "" FORCE)
111                 #no library found
112                 else()
113                         set(OpenCV_FOUND_TMP false)
114                 endif()
115                 
116                 #Add to the general list
117                 if(OpenCV_${__CVLIB}_LIBRARY)
118                         set(OpenCV_LIBS ${OpenCV_LIBS} ${OpenCV_${__CVLIB}_LIBRARY})
119                 endif(OpenCV_${__CVLIB}_LIBRARY)
120                 
121         endforeach(__CVLIB)
122
123
124         set(OpenCV_FOUND ${OpenCV_FOUND_TMP} CACHE BOOL "" FORCE)
125
126
127 else(EXISTS "${OpenCV_DIR}")
128         set(ERR_MSG "Please specify OpenCV directory using OpenCV_DIR env. variable")
129 endif(EXISTS "${OpenCV_DIR}")
130 ##====================================================
131
132
133 ##====================================================
134 ## Print message
135 ##----------------------------------------------------
136 if(NOT OpenCV_FOUND)
137         # make FIND_PACKAGE friendly
138         if(NOT OpenCV_FIND_QUIETLY)
139                 if(OpenCV_FIND_REQUIRED)
140                         message(FATAL_ERROR "OpenCV required but some headers or libs not found. ${ERR_MSG}")
141                 else(OpenCV_FIND_REQUIRED)
142                         message(STATUS "WARNING: OpenCV was not found. ${ERR_MSG}")
143                 endif(OpenCV_FIND_REQUIRED)
144         endif(NOT OpenCV_FIND_QUIETLY)
145 endif(NOT OpenCV_FOUND)
146 ##====================================================
147
148
149 ##====================================================
150 ## Backward compatibility
151 ##----------------------------------------------------
152 if(OpenCV_FOUND)
153         option(OpenCV_BACKWARD_COMPA "Add some variable to make this script compatible with the other version of FindOpenCV.cmake" false)
154         if(OpenCV_BACKWARD_COMPA)
155                 find_path(OpenCV_INCLUDE_DIRS "cv.h" PATHS "${OpenCV_DIR}" PATH_SUFFIXES "include" "include/opencv" DOC "Include directory") 
156                 find_path(OpenCV_INCLUDE_DIR "cv.h" PATHS "${OpenCV_DIR}" PATH_SUFFIXES "include" "include/opencv" DOC "Include directory")
157                 set(OpenCV_LIBRARIES "${OpenCV_LIBS}" CACHE STRING "" FORCE)
158         endif(OpenCV_BACKWARD_COMPA)
159 endif(OpenCV_FOUND)
160 ##====================================================