Started top-level CMakeLists.txt file reorganization: cmake scripts are moved to...
[profile/ivi/opencv.git] / CMakeLists.txt
1 # ----------------------------------------------------------------------------
2 #  Root CMake file for OpenCV
3 #
4 #    From the off-tree build directory, invoke:
5 #      $ cmake <PATH_TO_OPENCV_ROOT>
6 #
7 #
8 #   - OCT-2008: Initial version <joseluisblancoc@gmail.com>
9 #
10 # ----------------------------------------------------------------------------
11
12 set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true)
13
14 # --------------------------------------------------------------
15 # Indicate CMake 2.7 and above that we don't want to mix relative
16 #  and absolute paths in linker lib lists.
17 # Run "cmake --help-policy CMP0003" for more information.
18 # --------------------------------------------------------------
19 if(COMMAND cmake_policy)
20     cmake_policy(SET CMP0003 NEW)
21 endif()
22
23 # Following block can broke build in case of cross-compilng
24 # but CMAKE_CROSSCOMPILING variable will be set only on project(OpenCV) command
25 # so we will try to detect crosscompiling by presense of CMAKE_TOOLCHAIN_FILE
26 if(NOT CMAKE_TOOLCHAIN_FILE)
27     # Add these standard paths to the search paths for FIND_LIBRARY
28     # to find libraries from these locations first
29     if(UNIX)
30         set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} /lib /usr/lib)
31     endif()
32
33     # it _must_ go before PROJECT(OpenCV) in order to work
34     if(WIN32)
35         set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "Installation Directory")
36     else()
37         set(CMAKE_INSTALL_PREFIX "/usr/local" CACHE PATH "Installation Directory")
38     endif()
39
40     if(MSVC)
41         set(CMAKE_USE_RELATIVE_PATHS ON CACHE INTERNAL "" FORCE)
42     endif()
43 endif(NOT CMAKE_TOOLCHAIN_FILE)
44
45 # --------------------------------------------------------------
46 # Top level OpenCV project
47 # --------------------------------------------------------------
48 if(NOT IOS)
49     cmake_minimum_required(VERSION 2.6.3)
50 else()
51     cmake_minimum_required(VERSION 2.8)
52 endif()
53 project(OpenCV)
54
55 set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Configs" FORCE)
56 if(DEFINED CMAKE_BUILD_TYPE AND CMAKE_VERSION VERSION_GREATER "2.8")
57     set_property( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS ${CMAKE_CONFIGURATION_TYPES} )
58 endif()
59
60 set(CMAKE_C_FLAGS_MINSIZEREL "" CACHE INTERNAL "" FORCE)
61 set(CMAKE_C_FLAGS_RELWITHDEBINFO "" CACHE INTERNAL "" FORCE)
62 set(CMAKE_CXX_FLAGS_MINSIZEREL "" CACHE INTERNAL "" FORCE)
63 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "" CACHE INTERNAL "" FORCE)
64 set(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "" CACHE INTERNAL "" FORCE)
65 set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "" CACHE INTERNAL "" FORCE)
66 set(CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL "" CACHE INTERNAL "" FORCE)
67 set(CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO "" CACHE INTERNAL "" FORCE)
68 set(CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL "" CACHE INTERNAL "" FORCE)
69 set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "" CACHE INTERNAL "" FORCE)
70 set(CMAKE_VERBOSE OFF CACHE BOOL "Verbose mode")
71 if(CMAKE_VERBOSE)
72     set(CMAKE_VERBOSE_MAKEFILE 1)
73 endif()
74
75 include(cmake/OpenCVUtils.cmake REQUIRED)
76
77 # ----------------------------------------------------------------------------
78 # Detect Microsoft compiler:
79 # ----------------------------------------------------------------------------
80 if(CMAKE_CL_64)
81     set(MSVC64 1)
82 endif()
83
84 # ----------------------------------------------------------------------------
85 # Detect Intel ICC compiler -- for -fPIC in 3rdparty ( UNIX ONLY ):
86 #  see  include/opencv/cxtypes.h file for related   ICC & CV_ICC defines.
87 # NOTE: The system needs to determine if the '-fPIC' option needs to be added
88 #  for the 3rdparty static libs being compiled.  The CMakeLists.txt files
89 #  in 3rdparty use the CV_ICC definition being set here to determine if
90 #  the -fPIC flag should be used.
91 # ----------------------------------------------------------------------------
92 if(UNIX)
93     if  (__ICL)
94         set(CV_ICC   __ICL)
95     elseif(__ICC)
96         set(CV_ICC   __ICC)
97     elseif(__ECL)
98         set(CV_ICC   __ECL)
99     elseif(__ECC)
100         set(CV_ICC   __ECC)
101     elseif(__INTEL_COMPILER)
102         set(CV_ICC   __INTEL_COMPILER)
103     elseif(CMAKE_C_COMPILER MATCHES "icc")
104         set(CV_ICC   icc_matches_c_compiler)
105     endif()
106 endif()
107
108 if(MSVC AND CMAKE_C_COMPILER MATCHES "icc")
109     set(CV_ICC   __INTEL_COMPILER_FOR_WINDOWS)
110 endif()
111
112 # ----------------------------------------------------------------------------
113 # Detect GNU version:
114 # ----------------------------------------------------------------------------
115 if(CMAKE_COMPILER_IS_GNUCXX)
116     execute_process(COMMAND ${CMAKE_CXX_COMPILER} --version
117                   OUTPUT_VARIABLE CMAKE_OPENCV_GCC_VERSION_FULL
118                   OUTPUT_STRIP_TRAILING_WHITESPACE)
119
120     execute_process(COMMAND ${CMAKE_CXX_COMPILER} -v
121                   ERROR_VARIABLE CMAKE_OPENCV_GCC_INFO_FULL
122                   OUTPUT_STRIP_TRAILING_WHITESPACE)
123
124     # Typical output in CMAKE_OPENCV_GCC_VERSION_FULL: "c+//0 (whatever) 4.2.3 (...)"
125     # Look for the version number
126     string(REGEX MATCH "[0-9]+.[0-9]+.[0-9]+" CMAKE_GCC_REGEX_VERSION "${CMAKE_OPENCV_GCC_VERSION_FULL}")
127
128     # Split the three parts:
129     string(REGEX MATCHALL "[0-9]+" CMAKE_OPENCV_GCC_VERSIONS "${CMAKE_GCC_REGEX_VERSION}")
130
131     list(GET CMAKE_OPENCV_GCC_VERSIONS 0 CMAKE_OPENCV_GCC_VERSION_MAJOR)
132     list(GET CMAKE_OPENCV_GCC_VERSIONS 1 CMAKE_OPENCV_GCC_VERSION_MINOR)
133
134     set(CMAKE_OPENCV_GCC_VERSION ${CMAKE_OPENCV_GCC_VERSION_MAJOR}${CMAKE_OPENCV_GCC_VERSION_MINOR})
135     math(EXPR CMAKE_OPENCV_GCC_VERSION_NUM "${CMAKE_OPENCV_GCC_VERSION_MAJOR}*100 + ${CMAKE_OPENCV_GCC_VERSION_MINOR}")
136     message(STATUS "Detected version of GNU GCC: ${CMAKE_OPENCV_GCC_VERSION} (${CMAKE_OPENCV_GCC_VERSION_NUM})")
137
138     if(WIN32)
139         execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpmachine
140                   OUTPUT_VARIABLE CMAKE_OPENCV_GCC_TARGET_MACHINE
141                   OUTPUT_STRIP_TRAILING_WHITESPACE)
142         if(CMAKE_OPENCV_GCC_TARGET_MACHINE MATCHES "64")
143             set(MINGW64 1)
144         endif()
145     endif()
146 endif()
147
148 if(CMAKE_SYSTEM_PROCESSOR MATCHES amd64.*|x86_64.*)
149     set(X86_64 1)
150 elseif(CMAKE_SYSTEM_PROCESSOR MATCHES i686.*|i386.*|x86.*)
151     set(X86 1)
152 endif()
153
154 # Optional 3rd party components
155 # ===================================================
156 OCV_OPTION(WITH_1394           "Include IEEE1394 support"                    ON   IF (UNIX AND NOT ANDROID AND NOT IOS) )
157 OCV_OPTION(WITH_ANDROID_CAMERA "Build with native Android camera support"    ON   IF (ANDROID AND ANDROID_NATIVE_API_LEVEL GREATER 7) )
158 OCV_OPTION(WITH_AVFOUNDATION   "Use AVFoundation for Video I/O"              ON   IF IOS)
159 OCV_OPTION(WITH_CARBON         "Use Carbon for UI instead of Cocoa"          OFF  IF APPLE )
160 OCV_OPTION(WITH_CUBLAS         "Include NVidia Cuda Basic Linear Algebra Subprograms (BLAS) library support" OFF IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT ANDROID AND NOT IOS) )
161 OCV_OPTION(WITH_CUDA           "Include NVidia Cuda Runtime support"         ON   IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT ANDROID AND NOT IOS) )
162 OCV_OPTION(WITH_CUFFT          "Include NVidia Cuda Fast Fourier Transform (FFT) library support"            ON  IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT ANDROID AND NOT IOS) )
163 OCV_OPTION(WITH_EIGEN          "Include Eigen2/Eigen3 support"               ON)
164 OCV_OPTION(WITH_FFMPEG         "Include FFMPEG support"                      ON   IF (UNIX AND NOT ANDROID AND NOT IOS) )
165 OCV_OPTION(WITH_GSTREAMER      "Include Gstreamer support"                   ON   IF (UNIX AND NOT APPLE AND NOT ANDROID AND NOT IOS) )
166 OCV_OPTION(WITH_GTK            "Include GTK support"                         ON   IF (UNIX AND NOT APPLE AND NOT ANDROID AND NOT IOS) )
167 OCV_OPTION(WITH_IPP            "Include Intel IPP support"                   OFF  IF (MSVC OR X86 OR X86_64) )
168 OCV_OPTION(WITH_JASPER         "Include JPEG2K support"                      ON   IF (NOT IOS) )
169 OCV_OPTION(WITH_JPEG           "Include JPEG support"                        ON   IF (NOT IOS) )
170 OCV_OPTION(WITH_OPENEXR        "Include ILM support via OpenEXR"             ON   IF (NOT IOS) )
171 OCV_OPTION(WITH_OPENGL         "Include OpenGL support"                      OFF  IF (NOT ANDROID AND NOT IOS) )
172 OCV_OPTION(WITH_OPENNI         "Include OpenNI support"                      OFF  IF (NOT ANDROID AND NOT IOS) )
173 OCV_OPTION(WITH_PNG            "Include PNG support"                         ON   IF (NOT IOS) )
174 OCV_OPTION(WITH_PVAPI          "Include Prosilica GigE support"              ON   IF (UNIX AND NOT ANDROID AND NOT IOS) )
175 OCV_OPTION(WITH_QT             "Build with Qt Backend support"               OFF  IF (NOT ANDROID AND NOT IOS) )
176 OCV_OPTION(WITH_QUICKTIME      "Use QuickTime for Video I/O insted of QTKit" OFF  IF APPLE )
177 OCV_OPTION(WITH_TBB            "Include Intel TBB support"                   OFF  IF (NOT IOS) )
178 OCV_OPTION(WITH_TIFF           "Include TIFF support"                        ON   IF (NOT IOS) )
179 OCV_OPTION(WITH_UNICAP         "Include Unicap support (GPL)"                OFF  IF (UNIX AND NOT APPLE AND NOT ANDROID AND NOT IOS) )
180 OCV_OPTION(WITH_V4L            "Include Video 4 Linux support"               ON   IF (UNIX AND NOT APPLE AND NOT ANDROID AND NOT IOS) )
181 OCV_OPTION(WITH_VIDEOINPUT     "Build HighGUI with DirectShow support"       ON   IF WIN32 )
182 OCV_OPTION(WITH_XIMEA          "Include XIMEA cameras support"               OFF  IF WIN32 )
183 OCV_OPTION(WITH_XINE           "Include Xine support (GPL)"                  OFF  IF (UNIX AND NOT APPLE AND NOT ANDROID AND NOT IOS) )
184
185 # OpenCV build components
186 # ===================================================
187 if(ANDROID OR IOS)
188     OCV_OPTION(BUILD_SHARED_LIBS "Build shared libraries (.dll/.so) instead of static ones (.lib/.a)" OFF )
189 else()
190     OCV_OPTION(BUILD_SHARED_LIBS "Build shared libraries (.dll/.so) instead of static ones (.lib/.a)" ON )
191 endif()
192 OCV_OPTION(BUILD_ANDROID_EXAMPLES   "Build examples for Android platform"         ON  IF ANDROID )
193 OCV_OPTION(BUILD_DOCS               "Create build rules for OpenCV Documentation" ON )
194 OCV_OPTION(BUILD_JAVA_SUPPORT       "Build with Java support"                     ON  IF (ANDROID AND ANDROID_NATIVE_API_LEVEL GREATER 7) )
195 OCV_OPTION(BUILD_EXAMPLES           "Build all examples"                          OFF )
196 OCV_OPTION(BUILD_NEW_PYTHON_SUPPORT "Build with Python support"                   ON  IF (NOT ANDROID AND NOT IOS) )
197 OCV_OPTION(BUILD_PACKAGE            "Enables 'make package_source' command"       ON )
198 OCV_OPTION(BUILD_PERF_TESTS         "Build performance tests"                     ON  IF (NOT IOS) )
199 OCV_OPTION(BUILD_TESTS              "Build accuracy & regression tests"           ON  IF (NOT IOS) )
200 OCV_OPTION(BUILD_WITH_DEBUG_INFO    "Include debug info into debug libs"          ON )
201 OCV_OPTION(BUILD_WITH_STATIC_CRT    "Enables use of staticaly linked CRT for staticaly linked OpenCV" ON IF MSVC )
202
203 if(WIN32 OR ANDROID)
204     set(OPENCV_BUILD_3RDPARTY_LIBS TRUE  CACHE INTERNAL "Build 3rd party libraries")
205 else()
206     # Build 3rdparty libraries under unix
207     set(OPENCV_BUILD_3RDPARTY_LIBS FALSE CACHE BOOL "Build 3rd party libraries")
208 endif()
209
210 # OpenCV installation options
211 # ===================================================
212 OCV_OPTION(INSTALL_C_EXAMPLES       "Install C examples"        OFF )
213 OCV_OPTION(INSTALL_PYTHON_EXAMPLES  "Install Python examples"   OFF )
214 OCV_OPTION(INSTALL_ANDROID_EXAMPLES "Install Android examples"  OFF  IF ANDROID )
215 OCV_OPTION(INSTALL_TO_MANGLED_PATHS "Enables mangled install paths, that help with side by side installs." OFF IF (UNIX AND NOT ANDROID AND NOT IOS) )
216
217 # OpenCV build options
218 # ===================================================
219 OCV_OPTION(ENABLE_PRECOMPILED_HEADERS "Use precompiled headers"                                  ON   IF (NOT IOS) )
220 OCV_OPTION(ENABLE_SOLUTION_FOLDERS    "Solution folder in Visual Studio or in other IDEs"        OFF  IF (CMAKE_VERSION VERSION_GREATER "2.8.0") )
221 OCV_OPTION(ENABLE_PROFILING           "Enable profiling in the GCC compiler (Add flags: -g -pg)" OFF  IF CMAKE_COMPILER_IS_GNUCXX )
222 OCV_OPTION(ENABLE_OMIT_FRAME_POINTER  "Enable -fomit-frame-pointer for GCC"                      ON   IF CMAKE_COMPILER_IS_GNUCXX )
223 OCV_OPTION(ENABLE_POWERPC             "Enable PowerPC for GCC"                                   ON   IF (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_SYSTEM_PROCESSOR MATCHES powerpc.*) )
224 OCV_OPTION(ENABLE_FAST_MATH           "Enable -ffast-math (not recommended for GCC 4.6.x)"       OFF  IF (CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
225 OCV_OPTION(ENABLE_SSE                 "Enable SSE instructions"                                  ON   IF (MSVC OR CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
226 OCV_OPTION(ENABLE_SSE2                "Enable SSE2 instructions"                                 ON   IF (MSVC OR CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
227 OCV_OPTION(ENABLE_SSE3                "Enable SSE3 instructions"                                 OFF  IF (CV_ICC OR CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
228 OCV_OPTION(ENABLE_SSSE3               "Enable SSSE3 instructions"                                OFF  IF (CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
229 OCV_OPTION(ENABLE_SSE41               "Enable SSE4.1 instructions"                               OFF  IF (CV_ICC OR CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
230 OCV_OPTION(ENABLE_SSE42               "Enable SSE4.2 instructions"                               OFF  IF (CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
231
232 # ----------------------------------------------------------------------------
233 #  Get actual OpenCV version number from sources
234 # ----------------------------------------------------------------------------
235 SET(OPENCV_VERSION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/modules/core/include/opencv2/core/version.hpp")
236 FILE(STRINGS "${OPENCV_VERSION_FILE}" OPENCV_VERSION_PARTS REGEX "#define CV_.+OR_VERSION[ ]+[0-9]+" )
237 string(REGEX REPLACE ".+CV_MAJOR_VERSION[ ]+([0-9]+).*" "\\1" OPENCV_VERSION_MAJOR "${OPENCV_VERSION_PARTS}")
238 string(REGEX REPLACE ".+CV_MINOR_VERSION[ ]+([0-9]+).*" "\\1" OPENCV_VERSION_MINOR "${OPENCV_VERSION_PARTS}")
239 string(REGEX REPLACE ".+CV_SUBMINOR_VERSION[ ]+([0-9]+).*" "\\1" OPENCV_VERSION_PATCH "${OPENCV_VERSION_PARTS}")
240 set(OPENCV_VERSION "${OPENCV_VERSION_MAJOR}.${OPENCV_VERSION_MINOR}.${OPENCV_VERSION_PATCH}")
241
242 set(OPENCV_SOVERSION "${OPENCV_VERSION_MAJOR}.${OPENCV_VERSION_MINOR}")
243
244 # create a dependency on version file
245 # we never use output of the following command but cmake will rerun if version file changes
246 configure_file("${OPENCV_VERSION_FILE}" "${CMAKE_BINARY_DIR}/junk/version.junk" COPYONLY)
247
248 if(WIN32)
249     # Postfix of DLLs:
250     set(OPENCV_DLLVERSION "${OPENCV_VERSION_MAJOR}${OPENCV_VERSION_MINOR}${OPENCV_VERSION_PATCH}")
251     set(OPENCV_DEBUG_POSTFIX d)
252 else()
253     # Postfix of so's:
254     set(OPENCV_DLLVERSION "")
255     set(OPENCV_DEBUG_POSTFIX)
256 endif()
257
258 #name mangling
259 set(OPENCV_INCLUDE_PREFIX include)
260 if(INSTALL_TO_MANGLED_PATHS AND BUILD_SHARED_LIBS)
261     SET(OPENCV_MANGLED_INSTALL_PATHS ${INSTALL_TO_MANGLED_PATHS} )
262     if(OPENCV_MANGLED_INSTALL_PATHS)
263       set(OPENCV_INCLUDE_PREFIX include/opencv-${OPENCV_VERSION})
264     endif()
265 endif()
266
267 # SUBDIRECTORIES:
268 # Save libs and executables in the same place
269 set(LIBRARY_OUTPUT_PATH "${CMAKE_BINARY_DIR}/lib" CACHE PATH "Output directory for libraries" )
270 set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/bin" CACHE PATH "Output directory for applications" )
271
272 if(ANDROID OR WIN32)
273     set(OPENCV_DOC_INSTALL_PATH doc)
274 elseif(OPENCV_MANGLED_INSTALL_PATHS)
275     set(OPENCV_DOC_INSTALL_PATH share/OpenCV-${OPENCV_VERSION}/doc)
276 else()
277     set(OPENCV_DOC_INSTALL_PATH share/OpenCV/doc)
278 endif()
279
280 if(ANDROID)
281     set(OPENCV_LIB_INSTALL_PATH libs/${ANDROID_NDK_ABI_NAME})
282 else()
283     set(OPENCV_LIB_INSTALL_PATH lib${LIB_SUFFIX})
284 endif()
285
286 set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${OPENCV_LIB_INSTALL_PATH}")
287 set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
288
289 # ----------------------------------------------------------------------------
290 # Use statically or dynamically linked CRT?
291 # Default: dynamic
292 # ----------------------------------------------------------------------------
293 if(MSVC)
294     if(NOT BUILD_SHARED_LIBS AND BUILD_WITH_STATIC_CRT)
295         foreach(flag_var
296                 CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
297                 CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO
298                 CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
299                 CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
300            if(${flag_var} MATCHES "/MD")
301               string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
302            endif()
303            if(${flag_var} MATCHES "/MDd")
304               string(REGEX REPLACE "/MDd" "/MTd" ${flag_var} "${${flag_var}}")
305            endif()
306         endforeach(flag_var)
307
308         set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:atlthunk.lib /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:msvcrtd.lib")
309         set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /NODEFAULTLIB:libcmt.lib")
310         set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /NODEFAULTLIB:libcmtd.lib")
311     else()
312         foreach(flag_var
313                 CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
314                 CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO
315                 CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
316                 CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
317            if(${flag_var} MATCHES "/MT")
318               string(REGEX REPLACE "/MT" "/MD" ${flag_var} "${${flag_var}}")
319            endif()
320            if(${flag_var} MATCHES "/MTd")
321               string(REGEX REPLACE "/MTd" "/MDd" ${flag_var} "${${flag_var}}")
322            endif()
323         endforeach(flag_var)
324     endif()
325
326         if(NOT ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} LESS 2.8 AND NOT ${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION} LESS 8.6)
327                 include(ProcessorCount)
328                 ProcessorCount(N)
329                 if(NOT N EQUAL 0)
330                         SET(CMAKE_C_FLAGS   "${CMAKE_C_FLAGS}   /MP${N} ")
331                         SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP${N} ")
332                 endif()
333         endif()
334
335     if(NOT BUILD_WITH_DEBUG_INFO)
336         string(REPLACE "/debug" "" CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG}")
337         string(REPLACE "/DEBUG" "" CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG}")
338         string(REPLACE "/INCREMENTAL:YES" "/INCREMENTAL:NO" CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG}")
339         string(REPLACE "/INCREMENTAL " "/INCREMENTAL:NO " CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG}")
340
341         string(REPLACE "/debug" "" CMAKE_MODULE_LINKER_FLAGS_DEBUG "${CMAKE_MODULE_LINKER_FLAGS_DEBUG}")
342         string(REPLACE "/DEBUG" "" CMAKE_MODULE_LINKER_FLAGS_DEBUG "${CMAKE_MODULE_LINKER_FLAGS_DEBUG}")
343         string(REPLACE "/INCREMENTAL:YES" "/INCREMENTAL:NO" CMAKE_MODULE_LINKER_FLAGS_DEBUG "${CMAKE_MODULE_LINKER_FLAGS_DEBUG}")
344         string(REPLACE "/INCREMENTAL " "/INCREMENTAL:NO " CMAKE_MODULE_LINKER_FLAGS_DEBUG "${CMAKE_MODULE_LINKER_FLAGS_DEBUG}")
345
346         string(REPLACE "/debug" "" CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG}")
347         string(REPLACE "/DEBUG" "" CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG}")
348         string(REPLACE "/INCREMENTAL:YES" "/INCREMENTAL:NO" CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG}")
349         string(REPLACE "/INCREMENTAL " "/INCREMENTAL:NO " CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG}")
350
351         string(REPLACE "/Zi" "" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}")
352         string(REPLACE "/Zi" "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}")
353     endif()
354
355 endif(MSVC)
356
357 # ----------------------------------------------------------------------------
358 #  Variables for cvconfig.h.cmake
359 # ----------------------------------------------------------------------------
360 set(PACKAGE "opencv")
361 set(PACKAGE_BUGREPORT "opencvlibrary-devel@lists.sourceforge.net")
362 set(PACKAGE_NAME "opencv")
363 set(PACKAGE_STRING "${PACKAGE} ${OPENCV_VERSION}")
364 set(PACKAGE_TARNAME "${PACKAGE}")
365 set(PACKAGE_VERSION "${OPENCV_VERSION}")
366
367 # ----------------------------------------------------------------------------
368 #  Autodetect if we are in a SVN repository
369 # ----------------------------------------------------------------------------
370 find_host_program(SVNVERSION_PATH svnversion)
371 mark_as_advanced(force SVNVERSION_PATH)
372 if(SVNVERSION_PATH)
373     message(STATUS "Extracting svn version, please wait...")
374     execute_process(COMMAND ${SVNVERSION_PATH} -n ${OpenCV_SOURCE_DIR} OUTPUT_VARIABLE SVNVERSION_RESULT)
375
376     if(SVNVERSION_RESULT MATCHES "exported")
377         # This is NOT a svn repository:
378         set(OPENCV_SVNVERSION "")
379         message(STATUS "SVNVERSION: exported")
380     else()
381         set(OPENCV_SVNVERSION " svn:${SVNVERSION_RESULT}")
382         message(STATUS "SVNVERSION: ${OPENCV_SVNVERSION}")
383     endif()
384 else()
385     # We don't have svnversion:
386     set(OPENCV_SVNVERSION "")
387 endif()
388
389 # ----------------------------------------------------------------------------
390 #       CHECK FOR SYSTEM LIBRARIES, OPTIONS, ETC..
391 # ----------------------------------------------------------------------------
392
393 include(cmake/OpenCVPCHSupport.cmake REQUIRED)
394 include(cmake/OpenCVModule.cmake REQUIRED)
395
396 if(ANDROID)
397     include(cmake/OpenCVAndroidProject.cmake REQUIRED)
398 endif()
399
400 if(UNIX)
401     include(cmake/OpenCVFindPkgConfig.cmake OPTIONAL)
402     include(CheckFunctionExists)
403     include(CheckIncludeFile)
404 endif()
405
406 set(HAVE_OPENGL 0)
407
408 if(UNIX)
409     if(NOT APPLE)
410       if(WITH_GTK)
411         CHECK_MODULE(gtk+-2.0 HAVE_GTK)
412         CHECK_MODULE(gthread-2.0 HAVE_GTHREAD)
413         if(WITH_OPENGL)
414             CHECK_MODULE(gtkglext-1.0 HAVE_GTKGLEXT)
415             if(HAVE_GTKGLEXT)
416                 find_package(OpenGL QUIET)
417                 if(OPENGL_FOUND)
418                     set(HAVE_OPENGL 1)
419                     set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${OPENGL_LIBRARIES})
420                     include_directories(${OPENGL_INCLUDE_DIR})
421                 endif()
422             endif()
423         endif()
424       else()
425         set(HAVE_GTK FALSE)
426         set(HAVE_GTHREAD FALSE)
427       endif()
428       if(WITH_GSTREAMER)
429         CHECK_MODULE(gstreamer-base-0.10 HAVE_GSTREAMER)
430         CHECK_MODULE(gstreamer-app-0.10 HAVE_GSTREAMER)
431         CHECK_MODULE(gstreamer-video-0.10 HAVE_GSTREAMER)
432       else()
433         set(HAVE_GSTREAMER FALSE)
434       endif()
435     endif()
436
437     if(WITH_UNICAP)
438       CHECK_MODULE(libunicap HAVE_UNICAP_)
439       CHECK_MODULE(libucil HAVE_UNICAP_UCIL)
440       if(HAVE_UNICAP_ AND HAVE_UNICAP_UCIL)
441         set(HAVE_UNICAP 1)
442       endif()
443     else()
444       set(HAVE_UNICAP FALSE)
445     endif()
446
447     if(WITH_PVAPI)
448       find_path(PVAPI_INCLUDE_PATH "PvApi.h"
449                 PATHS "/usr/local/include" "/usr/include"
450                 DOC "The path to PvAPI header")
451       if(PVAPI_INCLUDE_PATH)
452         set(HAVE_PVAPI 1)
453       endif()
454     endif()
455
456     set(HAVE_FFMPEG 0)
457     if(WITH_FFMPEG)
458       CHECK_MODULE(libavcodec HAVE_FFMPEG_CODEC)
459       CHECK_MODULE(libavformat HAVE_FFMPEG_FORMAT)
460       CHECK_MODULE(libavutil HAVE_FFMPEG_UTIL)
461       CHECK_MODULE(libswscale HAVE_FFMPEG_SWSCALE)
462       CHECK_INCLUDE_FILE(libavformat/avformat.h HAVE_GENTOO_FFMPEG)
463       CHECK_INCLUDE_FILE(ffmpeg/avformat.h HAVE_FFMPEG_FFMPEG)
464       if(NOT HAVE_GENTOO_FFMPEG AND NOT HAVE_FFMPEG_FFMPEG)
465         if(EXISTS /usr/include/ffmpeg/libavformat/avformat.h OR HAVE_FFMPEG_SWSCALE)
466           set(HAVE_GENTOO_FFMPEG 1)
467         endif()
468       endif()
469       if(HAVE_FFMPEG_CODEC AND HAVE_FFMPEG_FORMAT AND HAVE_FFMPEG_UTIL)
470         if(HAVE_FFMPEG_SWSCALE OR NOT HAVE_GENTOO_FFMPEG)
471             set(HAVE_FFMPEG 1)
472         endif()
473       endif()
474       # Find the bzip2 library because it is required on some systems
475       FIND_LIBRARY(BZIP2_LIBRARIES NAMES bz2 bzip2)
476       if(NOT BZIP2_LIBRARIES)
477         # Do an other trial
478         FIND_FILE(BZIP2_LIBRARIES NAMES libbz2.so.1 PATHS /lib)
479       endif()
480     endif()
481
482     if(WITH_1394)
483       CHECK_MODULE(libdc1394-2 HAVE_DC1394_2)
484       if(NOT HAVE_DC1394_2)
485         CHECK_MODULE(libdc1394 HAVE_DC1394)
486       endif()
487     else()
488       set(HAVE_DC1394_2 FALSE)
489       set(HAVE_DC1394 FALSE)
490     endif()
491
492     if(NOT APPLE)
493         CHECK_INCLUDE_FILE(alloca.h HAVE_ALLOCA_H)
494         CHECK_FUNCTION_EXISTS(alloca HAVE_ALLOCA)
495         CHECK_INCLUDE_FILE(unistd.h HAVE_UNISTD_H)
496         CHECK_INCLUDE_FILE(pthread.h HAVE_LIBPTHREAD)
497
498         if(WITH_XINE)
499             CHECK_MODULE(libxine HAVE_XINE)
500         else()
501             set(HAVE_XINE FALSE)
502         endif()
503         if(WITH_V4L)
504             CHECK_MODULE(libv4l1 HAVE_LIBV4L)
505             CHECK_INCLUDE_FILE(linux/videodev.h HAVE_CAMV4L)
506             CHECK_INCLUDE_FILE(linux/videodev2.h HAVE_CAMV4L2)
507         else()
508             set(HAVE_LIBV4L FALSE)
509             set(HAVE_CAMV4L FALSE)
510             set(HAVE_CAMV4L2 FALSE)
511         endif()
512
513         if(ANDROID)
514             set(OPENCV_LINKER_LIBS dl m log)
515         elseif(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD" OR ${CMAKE_SYSTEM_NAME} MATCHES "NetBSD")
516             set(OPENCV_LINKER_LIBS m pthread)
517         else()
518             set(OPENCV_LINKER_LIBS dl m pthread rt)
519         endif()
520     else()
521         add_definitions(-DHAVE_ALLOCA -DHAVE_ALLOCA_H -DHAVE_LIBPTHREAD -DHAVE_UNISTD_H)
522     endif()
523 endif()
524 if (UNIX OR WIN32)
525     if(NOT OPENCV_BUILD_3RDPARTY_LIBS)
526         message(STATUS "NOT OPENCV_BUILD_3RDPARTY_LIBS **************************************************")
527         include(FindZLIB)
528         if(WITH_PNG)
529             include(FindPNG)
530             if(PNG_FOUND)
531                 CHECK_INCLUDE_FILE(${PNG_PNG_INCLUDE_DIR}/png.h HAVE_PNG_H)
532                 CHECK_INCLUDE_FILE(${PNG_PNG_INCLUDE_DIR}/libpng/png.h HAVE_LIBPNG_PNG_H)
533             endif()
534         else()
535             set(PNG_FOUND FALSE)
536         endif()
537         if(WITH_TIFF)
538             include(FindTIFF)
539         else()
540             set(TIFF_FOUND FALSE)
541         endif()
542         if(WITH_JASPER)
543             include(FindJasper)
544         else()
545             set(JASPER_FOUND FALSE)
546         endif()
547         if(WITH_JPEG)
548             include(FindJPEG)
549         else()
550             set(JPEG_FOUND FALSE)
551         endif()
552     endif()
553 endif()
554
555 if(WITH_PNG AND NOT PNG_FOUND)
556     set(PNG_LIBRARIES libpng)
557 endif()
558
559 if(WITH_JPEG AND NOT JPEG_FOUND)
560     set(JPEG_LIBRARIES libjpeg)
561 endif()
562
563 if(WITH_TIFF AND NOT TIFF_FOUND)
564     set(TIFF_LIBRARIES libtiff)
565 endif()
566
567 if(WITH_JASPER AND NOT JASPER_FOUND)
568     set(JASPER_LIBRARIES libjasper)
569 endif()
570
571 if(NOT ZLIB_FOUND)
572     set(ZLIB_LIBRARY zlib)
573 endif()
574
575 #message(STATUS "Graphic libraries: ${PNG_LIBRARIES} ${JPEG_LIBRARIES} ${TIFF_LIBRARIES} ${JASPER_LIBRARIES}")
576
577 if(WITH_OPENEXR)
578     include(cmake/OpenCVFindOpenEXR.cmake)
579 endif()
580
581 if(BUILD_DOCS)
582   include(cmake/OpenCVFindLATEX.cmake REQUIRED)
583 endif()
584
585 # Always try to find python
586 # ===================================================
587 find_host_package(PythonInterp)
588 find_host_package(PythonLibs)
589
590 # cmake 2.4 (at least on Ubuntu 8.04 (hardy)) don't define PYTHONLIBS_FOUND
591 if(NOT PYTHONLIBS_FOUND AND PYTHON_INCLUDE_PATH)
592     set(PYTHONLIBS_FOUND ON)
593 endif()
594
595 execute_process(COMMAND ${PYTHON_EXECUTABLE} --version
596       ERROR_VARIABLE PYTHON_VERSION_FULL
597       OUTPUT_STRIP_TRAILING_WHITESPACE)
598
599 string(REGEX MATCH "[0-9]+.[0-9]+" PYTHON_VERSION_MAJOR_MINOR "${PYTHON_VERSION_FULL}")
600 if(CMAKE_HOST_UNIX)
601     execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "from distutils.sysconfig import *; print get_python_lib()"
602                     RESULT_VARIABLE PYTHON_CVPY_PROCESS
603                     OUTPUT_VARIABLE PYTHON_STD_PACKAGES_PATH
604                     OUTPUT_STRIP_TRAILING_WHITESPACE)
605     if("${PYTHON_STD_PACKAGES_PATH}" MATCHES "site-packages")
606         set(PYTHON_PACKAGES_PATH lib/python${PYTHON_VERSION_MAJOR_MINOR}/site-packages CACHE PATH "Where to install the python packages.")
607     else() #debian based assumed, install to the dist-packages.
608         set(PYTHON_PACKAGES_PATH lib/python${PYTHON_VERSION_MAJOR_MINOR}/dist-packages CACHE PATH "Where to install the python packages.")
609     endif()
610 endif()
611 if(CMAKE_HOST_WIN32)
612     get_filename_component(PYTHON_PATH "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${PYTHON_VERSION_MAJOR_MINOR}\\InstallPath]" ABSOLUTE CACHE)
613     set(PYTHON_PACKAGES_PATH "${PYTHON_PATH}/Lib/site-packages")
614 endif()
615
616 IF ("${PYTHON_VERSION_MAJOR_MINOR}" VERSION_GREATER 2.4)
617     SET(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} -B)
618 ENDIF()
619
620 # Attempt to discover the NumPy include directory. If this succeeds, then build python API with NumPy
621 execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import os; os.environ['DISTUTILS_USE_SDK']='1'; import numpy.distutils; print numpy.distutils.misc_util.get_numpy_include_dirs()[0]"
622             RESULT_VARIABLE PYTHON_NUMPY_PROCESS
623             OUTPUT_VARIABLE PYTHON_NUMPY_INCLUDE_DIRS
624             OUTPUT_STRIP_TRAILING_WHITESPACE)
625
626 if(PYTHON_NUMPY_PROCESS EQUAL 0)
627     set(PYTHON_USE_NUMPY 1)
628     add_definitions(-D PYTHON_USE_NUMPY=1)
629     include_directories(AFTER ${PYTHON_NUMPY_INCLUDE_DIRS})
630     message(STATUS "    Use NumPy headers from: ${PYTHON_NUMPY_INCLUDE_DIRS}")
631 else()
632     set(PYTHON_USE_NUMPY 0)
633 endif()
634
635 execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import sphinx; print sphinx.__version__"
636             RESULT_VARIABLE SPHINX_PROCESS
637             OUTPUT_VARIABLE SPHINX_VERSION
638             OUTPUT_STRIP_TRAILING_WHITESPACE)
639
640 set(HAVE_SPHINX 0)
641 if(SPHINX_PROCESS EQUAL 0)
642     find_host_program(SPHINX_BUILD sphinx-build)
643     if(SPHINX_BUILD)
644         set(HAVE_SPHINX 1)
645         message(STATUS "    Found Sphinx ${SPHINX_VERSION}: ${SPHINX_BUILD}")
646     endif()
647 endif()
648
649 # Java support
650 # ===================================================
651 if (BUILD_JAVA_SUPPORT AND PYTHON_EXECUTABLE)
652     file(TO_CMAKE_PATH "$ENV{ANT_DIR}" ANT_DIR_ENV_PATH)
653     file(TO_CMAKE_PATH "$ENV{ProgramFiles}" ProgramFiles_ENV_PATH)
654
655     if(ANDROID)
656         file(TO_CMAKE_PATH "$ENV{ANDROID_SDK}" ANDROID_SDK_ENV_PATH)
657
658         #find android SDK
659         find_host_program(ANDROID_EXECUTABLE
660             NAMES android.bat android
661             PATHS "${ANDROID_SDK_ENV_PATH}/tools/"
662                   "${ProgramFiles_ENV_PATH}/Android/android-sdk/tools/"
663                   "/opt/android-sdk/tools/"
664                   "/opt/android-sdk-linux_x86/tools/"
665                   "/opt/android-sdk-mac_x86/tools/"
666                   "/opt/android-sdk-linux_86/tools/"
667                   "/opt/android-sdk-mac_86/tools/"
668             )
669         if(ANDROID_EXECUTABLE)
670             message(STATUS "    Found android tool: ${ANDROID_EXECUTABLE}")
671             get_filename_component(ANDROID_SDK_TOOLS_PATH "${ANDROID_EXECUTABLE}" PATH)
672             #read source.properties
673             if (EXISTS "${ANDROID_SDK_TOOLS_PATH}/source.properties")
674                 file(STRINGS "${ANDROID_SDK_TOOLS_PATH}/source.properties" ANDROID_SDK_TOOLS_SOURCE_PROPERTIES_LINES REGEX "^[ ]*[^#].*$")
675                 foreach(line ${ANDROID_SDK_TOOLS_SOURCE_PROPERTIES_LINES})
676                     string(REPLACE "\\:" ":" line ${line})
677                     string(REPLACE "=" ";" line ${line})
678                     list(GET line 0 line_name)
679                     list(GET line 1 line_value)
680                     string(REPLACE "." "_" line_name ${line_name})
681                     SET(ANDROID_TOOLS_${line_name} "${line_value}")
682                     MARK_AS_ADVANCED(ANDROID_TOOLS_${line_name})
683                 endforeach()
684             endif()
685             if (NOT ANDROID_TOOLS_Pkg_Revision)
686                 SET(ANDROID_TOOLS_Pkg_Revision "Unknown")
687                 MARK_AS_ADVANCED(ANDROID_TOOLS_Pkg_Revision)
688             endif()
689             if (NOT ANDROID_TOOLS_Pkg_Desc)
690                 SET(ANDROID_TOOLS_Pkg_Desc "Android SDK Tools, revision ${ANDROID_TOOLS_Pkg_Revision}.")
691                 if (NOT ANDROID_TOOLS_Pkg_Revision GREATER 11)
692                     SET(ANDROID_TOOLS_Pkg_Desc "${ANDROID_TOOLS_Pkg_Desc} It is recommended to update your SDK tools to revision 12 or newer.")
693                 endif()
694                 MARK_AS_ADVANCED(ANDROID_TOOLS_Pkg_Desc)
695             endif()
696
697             #get installed targets
698             execute_process(COMMAND ${ANDROID_EXECUTABLE} list target
699                 RESULT_VARIABLE ANDROID_PROCESS
700                 OUTPUT_VARIABLE ANDROID_SDK_TARGETS_FULL
701                 ERROR_VARIABLE ANDROID_PROCESS_ERRORS
702                 OUTPUT_STRIP_TRAILING_WHITESPACE)
703             string(REGEX MATCHALL "(^|\n)id: [0-9]+ or \"([^\n]+[0-9+])\"(\n|$)" ANDROID_SDK_TARGETS_FULL "${ANDROID_SDK_TARGETS_FULL}")
704
705             SET(ANDROID_SDK_TARGETS)
706             if (ANDROID_PROCESS EQUAL 0)
707                 foreach(line ${ANDROID_SDK_TARGETS_FULL})
708                     string(REGEX REPLACE "(^|\n)id: [0-9]+ or \"([^\n]+[0-9+])\"(\n|$)" "\\2" line "${line}")
709                     list(APPEND ANDROID_SDK_TARGETS "${line}")
710                 endforeach()
711             endif()
712
713             # detect ANDROID_SDK_TARGET if no target is provided by user
714             if (NOT ANDROID_SDK_TARGET)
715                 set(desired_android_target_level ${ANDROID_NATIVE_API_LEVEL})
716                 if (desired_android_target_level LESS 8)
717                     set(desired_android_target_level 8)
718                 endif()
719                 if (ANDROID_PROCESS EQUAL 0)
720                     math(EXPR desired_android_target_level_1 "${desired_android_target_level}-1")
721
722                     foreach(target ${ANDROID_SDK_TARGETS})
723                         string(REGEX MATCH "[0-9]+$" target_level "${target}")
724                         if (target_level GREATER desired_android_target_level_1)
725                            set(ANDROID_SDK_TARGET "${target}")
726                            break()
727                         endif()
728                     endforeach()
729                 else()
730                     set(ANDROID_SDK_TARGET android-${desired_android_target_level})
731                     message(WARNING "Could not retrieve list of installed Android targets. Will try to use \"${ANDROID_SDK_TARGET}\" target")
732                 endif()
733             endif()
734
735             SET(ANDROID_SDK_TARGET ${ANDROID_SDK_TARGET} CACHE STRING "SDK target for Android tests and samples")
736             if (ANDROID_PROCESS EQUAL 0 AND CMAKE_VERSION VERSION_GREATER "2.8")
737                 set_property( CACHE ANDROID_SDK_TARGET PROPERTY STRINGS ${ANDROID_SDK_TARGETS} )
738             endif()
739             string(REGEX MATCH "[0-9]+$" ANDROID_SDK_TARGET_LEVEL "${ANDROID_SDK_TARGET}")
740         endif()
741     endif()
742
743     #find apache ant
744     find_host_program(ANT_EXECUTABLE NAMES ant.bat ant
745         PATHS "${ANT_DIR_ENV_PATH}/bin"
746               "${ProgramFiles_ENV_PATH}/apache-ant/bin"
747         )
748     if(ANT_EXECUTABLE)
749         execute_process(COMMAND ${ANT_EXECUTABLE} -version
750             OUTPUT_VARIABLE ANT_VERSION_FULL
751             OUTPUT_STRIP_TRAILING_WHITESPACE)
752         string(REGEX MATCH "[0-9]+.[0-9]+.[0-9]+" ANT_VERSION "${ANT_VERSION_FULL}")
753
754         message(STATUS "    Found apache ant ${ANT_VERSION}: ${ANT_EXECUTABLE}")
755     endif()
756
757     if (ANDROID_EXECUTABLE AND ANT_EXECUTABLE AND (ANT_VERSION VERSION_GREATER 1.7) AND (ANDROID_SDK_TARGET_LEVEL GREATER 7))
758         SET(CAN_BUILD_ANDROID_PROJECTS TRUE)
759     else()
760         SET(CAN_BUILD_ANDROID_PROJECTS FALSE)
761     endif()
762 endif()
763
764 if(NOT CAN_BUILD_ANDROID_PROJECTS)
765     UNSET(BUILD_ANDROID_EXAMPLES CACHE)
766 endif()
767
768 #YV
769 ############################### QT ################################
770
771 set(HAVE_QT 0)
772 set(HAVE_QT_OPENGL 0)
773
774 if (WITH_QT)
775     find_package(Qt4)
776     if (QT4_FOUND)
777         set(HAVE_QT 1)
778         add_definitions(-DHAVE_QT) #We need to define te macro this way, using cvconfig.h.cmake does not work
779
780         if (WITH_OPENGL)
781             find_package (OpenGL QUIET)
782             if (QT_QTOPENGL_FOUND AND OPENGL_FOUND)
783                 set(HAVE_OPENGL 1)
784                 set(HAVE_QT_OPENGL 1)
785                 add_definitions(-DHAVE_QT_OPENGL)
786                 set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${OPENGL_LIBRARIES})
787             endif()
788         endif()
789     endif()
790 endif()
791
792 ############################### TBB ################################
793
794 if (WITH_TBB)
795     if (UNIX AND NOT APPLE AND NOT ANDROID)
796         PKG_CHECK_MODULES(TBB tbb)
797
798         if (TBB_FOUND)
799             set(HAVE_TBB 1)
800             if(NOT ${TBB_INCLUDE_DIRS} STREQUAL "")
801                 include_directories(${TBB_INCLUDE_DIRS})
802             endif()
803             link_directories(${TBB_LIBRARY_DIRS})
804             set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${TBB_LIBRARIES})
805         endif()
806     endif()
807
808     if (NOT HAVE_TBB)
809         set(TBB_DEFAULT_INCLUDE_DIRS "/opt/intel/tbb" "/usr/local/include" "/usr/include" "C:/Program Files/Intel/TBB" "C:/Program Files (x86)/Intel/TBB" "C:/Program Files (x86)/TBB" "${CMAKE_INSTALL_PREFIX}/include")
810
811         find_path(TBB_INCLUDE_DIR "tbb/tbb.h" PATHS ${TBB_DEFAULT_INCLUDE_DIRS} DOC "The path to TBB headers")
812         if (TBB_INCLUDE_DIR)
813             if (UNIX)
814                 set(TBB_LIB_DIR "${TBB_INCLUDE_DIR}/../lib" CACHE PATH "Full path of TBB library directory")
815                 link_directories("${TBB_LIB_DIR}")
816             endif()
817             if (APPLE)
818                 set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} libtbb.dylib)
819             elseif (ANDROID)
820                 set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS}  tbb)
821                 add_definitions(-DTBB_USE_GCC_BUILTINS)
822             elseif (UNIX)
823                 set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} tbb)
824             elseif (WIN32)
825                 if (CMAKE_COMPILER_IS_GNUCXX)
826                     set(TBB_LIB_DIR "${TBB_INCLUDE_DIR}/../lib" CACHE PATH "Full path of TBB library directory")
827                     link_directories("${TBB_LIB_DIR}")
828                     set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} tbb)
829                 else()
830                     get_filename_component(_TBB_LIB_PATH "${TBB_INCLUDE_DIR}/../lib" ABSOLUTE)
831
832                     if(${CMAKE_SYSTEM_PROCESSOR} MATCHES amd64*|x86_64* OR MSVC64)
833                         set(_TBB_LIB_PATH "${_TBB_LIB_PATH}/intel64")
834                     elseif(${CMAKE_SYSTEM_PROCESSOR} MATCHES x86*|i386*|i686*)
835                         set(_TBB_LIB_PATH "${_TBB_LIB_PATH}/ia32")
836                     endif()
837
838                     if (MSVC80)
839                        set(_TBB_LIB_PATH "${_TBB_LIB_PATH}/vc8")
840                     elseif(MSVC90)
841                        set(_TBB_LIB_PATH "${_TBB_LIB_PATH}/vc9")
842                     elseif(MSVC10)
843                         set(_TBB_LIB_PATH "${_TBB_LIB_PATH}/vc10")
844                     endif()
845                     set(TBB_LIB_DIR "${_TBB_LIB_PATH}" CACHE PATH "Full path of TBB library directory")
846                     link_directories("${TBB_LIB_DIR}")
847                 endif()
848             endif()
849
850             set(HAVE_TBB 1)
851             if(NOT "${TBB_INCLUDE_DIR}" STREQUAL "")
852                 include_directories("${TBB_INCLUDE_DIR}")
853             endif()
854         endif()
855     endif()
856 endif(WITH_TBB)
857
858 ############################ Intel IPP #############################
859 set(IPP_FOUND)
860
861 if(WITH_IPP)
862     include(cmake/OpenCVFindIPP.cmake)
863 endif()
864
865 if(IPP_FOUND)
866     add_definitions(-DHAVE_IPP)
867     include_directories(${IPP_INCLUDE_DIRS})
868     link_directories(${IPP_LIBRARY_DIRS})
869     set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${IPP_LIBRARIES})
870 endif()
871
872
873 ############################### CUDA ################################
874
875 if(WITH_CUDA)
876     find_package(CUDA 4.0)
877
878     if(CUDA_FOUND)
879         set(HAVE_CUDA 1)
880
881         if(WITH_CUFFT)
882             set(HAVE_CUFFT 1)
883         endif()
884
885         if(WITH_CUBLAS)
886             set(HAVE_CUBLAS 1)
887         endif()
888
889         message(STATUS "CUDA detected: " ${CUDA_VERSION})
890
891         set(CUDA_ARCH_BIN "1.1 1.2 1.3 2.0 2.1(2.0)" CACHE STRING "Specify 'real' GPU architectures to build binaries for, BIN(PTX) format is supported")
892         set(CUDA_ARCH_PTX "2.0" CACHE STRING "Specify 'virtual' PTX architectures to build PTX intermediate code for")
893
894         string(REGEX REPLACE "\\." "" ARCH_BIN_NO_POINTS "${CUDA_ARCH_BIN}")
895         string(REGEX REPLACE "\\." "" ARCH_PTX_NO_POINTS "${CUDA_ARCH_PTX}")
896
897         # Ckeck if user specified 1.0 compute capability: we don't support it
898         string(REGEX MATCH "1.0" HAS_ARCH_10 "${CUDA_ARCH_BIN} ${CUDA_ARCH_PTX}")
899         set(CUDA_ARCH_BIN_OR_PTX_10 0)
900         if(NOT ${HAS_ARCH_10} STREQUAL "")
901             set(CUDA_ARCH_BIN_OR_PTX_10 1)
902         endif()
903
904         # NVCC flags to be set
905         set(NVCC_FLAGS_EXTRA "")
906
907         # These vars will be passed into the templates
908         set(OPENCV_CUDA_ARCH_BIN "")
909         set(OPENCV_CUDA_ARCH_PTX "")
910         set(OPENCV_CUDA_ARCH_FEATURES "")
911
912         # Tell NVCC to add binaries for the specified GPUs
913         string(REGEX MATCHALL "[0-9()]+" ARCH_LIST "${ARCH_BIN_NO_POINTS}")
914         foreach(ARCH IN LISTS ARCH_LIST)
915             if (ARCH MATCHES "([0-9]+)\\(([0-9]+)\\)")
916                 # User explicitly specified PTX for the concrete BIN
917                 set(NVCC_FLAGS_EXTRA ${NVCC_FLAGS_EXTRA} -gencode arch=compute_${CMAKE_MATCH_2},code=sm_${CMAKE_MATCH_1})
918                 set(OPENCV_CUDA_ARCH_BIN "${OPENCV_CUDA_ARCH_BIN} ${CMAKE_MATCH_1}")
919                 set(OPENCV_CUDA_ARCH_FEATURES "${OPENCV_CUDA_ARCH_FEATURES} ${CMAKE_MATCH_2}")
920             else()
921                 # User didn't explicitly specify PTX for the concrete BIN, we assume PTX=BIN
922                 set(NVCC_FLAGS_EXTRA ${NVCC_FLAGS_EXTRA} -gencode arch=compute_${ARCH},code=sm_${ARCH})
923                 set(OPENCV_CUDA_ARCH_BIN "${OPENCV_CUDA_ARCH_BIN} ${ARCH}")
924                 set(OPENCV_CUDA_ARCH_FEATURES "${OPENCV_CUDA_ARCH_FEATURES} ${ARCH}")
925             endif()
926         endforeach()
927
928         # Tell NVCC to add PTX intermediate code for the specified architectures
929         string(REGEX MATCHALL "[0-9]+" ARCH_LIST "${ARCH_PTX_NO_POINTS}")
930         foreach(ARCH IN LISTS ARCH_LIST)
931             set(NVCC_FLAGS_EXTRA ${NVCC_FLAGS_EXTRA} -gencode arch=compute_${ARCH},code=compute_${ARCH})
932             set(OPENCV_CUDA_ARCH_PTX "${OPENCV_CUDA_ARCH_PTX} ${ARCH}")
933             set(OPENCV_CUDA_ARCH_FEATURES "${OPENCV_CUDA_ARCH_FEATURES} ${ARCH}")
934         endforeach()
935
936         # These vars will be processed in other scripts
937         set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} ${NVCC_FLAGS_EXTRA})
938         set(OpenCV_CUDA_CC "${NVCC_FLAGS_EXTRA}")
939
940         message(STATUS "CUDA NVCC target flags: ${CUDA_NVCC_FLAGS}")
941     else()
942         unset(CUDA_ARCH_BIN CACHE)
943         unset(CUDA_ARCH_PTX CACHE)
944     endif()
945 endif()
946
947
948 ############################### OpenNI ################################
949 set(HAVE_OPENNI FALSE)
950 set(HAVE_OPENNI_PRIME_SENSOR_MODULE FALSE)
951
952 if(WITH_OPENNI)
953     include(cmake/OpenCVFindOpenNI.cmake)
954 endif()
955
956 ############################### XIMEA ################################
957 set(HAVE_XIMEA FALSE)
958
959 if(WITH_XIMEA)
960     include(cmake/OpenCVFindXimea.cmake)
961 endif()
962
963 if(XIMEA_FOUND)
964     set(HAVE_XIMEA TRUE)
965 endif()
966
967 ############################## Eigen ##############################
968
969 if(WITH_EIGEN)
970     find_path(EIGEN_INCLUDE_PATH "Eigen/Core"
971             PATHS "/usr/local/include/eigen2" "/opt/include/eigen2" "/usr/include/eigen2"
972             "/usr/local/include/eigen3" "/opt/include/eigen3" "/usr/include/eigen3"
973             DOC "The path to Eigen2/Eigen3 headers")
974     if(EIGEN_INCLUDE_PATH)
975         include_directories(${EIGEN_INCLUDE_PATH})
976         set(HAVE_EIGEN 1)
977     endif()
978 endif()
979
980
981 ################## Extra HighGUI libs on Windows ###################
982
983 if(WIN32)
984     set(HIGHGUI_LIBRARIES ${HIGHGUI_LIBRARIES} comctl32 gdi32 ole32)
985
986     if(WITH_VIDEOINPUT)
987         set(HAVE_VIDEOINPUT 1)
988     endif()
989
990     if (MSVC)
991         set(HIGHGUI_LIBRARIES ${HIGHGUI_LIBRARIES} vfw32)
992     endif()
993
994     if(MINGW)
995         if(MINGW64)
996             set(HIGHGUI_LIBRARIES ${HIGHGUI_LIBRARIES} msvfw32 avifil32 avicap32 winmm)
997         else()
998             set(HIGHGUI_LIBRARIES ${HIGHGUI_LIBRARIES} vfw32 winmm)
999         endif()
1000     endif()
1001
1002     if(WITH_OPENGL AND NOT HAVE_QT_OPENGL)
1003         find_package(OpenGL QUIET)
1004
1005         if(OPENGL_FOUND)
1006             set(HAVE_OPENGL 1)
1007             set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${OPENGL_LIBRARIES})
1008             include_directories(${OPENGL_INCLUDE_DIR})
1009         endif()
1010     endif()
1011 endif()
1012
1013 ############## Android source tree for native camera ###############
1014 if(ANDROID AND ANDROID_NATIVE_API_LEVEL GREATER 7)
1015     SET (ANDROID_SOURCE_TREE "ANDROID_SOURCE_TREE-NOTFOUND" CACHE PATH
1016 "Path to Android source tree.
1017 Set this variable to path to your Android sources to compile
1018 libnative_camera_rx.x.x.so for your Android")
1019     SET(BUILD_ANDROID_CAMERA_WRAPPER OFF)
1020     if (ANDROID_SOURCE_TREE)
1021         FILE(STRINGS "${ANDROID_SOURCE_TREE}/development/sdk/platform_source.properties" ANDROID_VERSION REGEX "Platform\\.Version=[0-9]+\\.[0-9]+(\\.[0-9]+)?" )
1022         string(REGEX REPLACE "Platform\\.Version=([0-9]+\\.[0-9]+(\\.[0-9]+)?)" "\\1" ANDROID_VERSION "${ANDROID_VERSION}")
1023         if (ANDROID_VERSION MATCHES "^[0-9]+\\.[0-9]+$")
1024             SET(ANDROID_VERSION "${ANDROID_VERSION}.0")
1025         endif()
1026         if(NOT "${ANDROID_VERSION}" STREQUAL "")
1027             SET(BUILD_ANDROID_CAMERA_WRAPPER ON)
1028         endif()
1029     endif()
1030     MARK_AS_ADVANCED(ANDROID_SOURCE_TREE)
1031 endif()
1032
1033 # ----------------------------------------------------------------------------
1034 #                   UPDATE CONFIG FILES & SCRIPTS:
1035 #
1036 #  CONFIGURE_FILE(InputFile OutputFile [COPYONLY] [ESCAPE_QUOTES] [@ONLY])
1037 #  If @ONLY is specified, only variables of the form @VAR@ will be
1038 #  replaces and ${VAR} will be ignored.
1039 #
1040 #  A directory will be created for each platform so the "cvconfig.h" file is
1041 #  not overwritten if cmake generates code in the same path.
1042 # ----------------------------------------------------------------------------
1043 add_definitions(-DHAVE_CVCONFIG_H)
1044
1045 set(OPENCV_CONFIG_FILE_INCLUDE_DIR "${CMAKE_BINARY_DIR}/" CACHE PATH "Where to create the platform-dependant cvconfig.h")
1046
1047 message(STATUS "Parsing 'cvconfig.h.cmake'")
1048 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/cvconfig.h.cmake" "${OPENCV_CONFIG_FILE_INCLUDE_DIR}/cvconfig.h")
1049
1050 # ---------------------------------------------------------------------------
1051 # The C+//0 include & link directories:
1052 # ---------------------------------------------------------------------------
1053 include_directories("."
1054     "${OPENCV_CONFIG_FILE_INCLUDE_DIR}"
1055     "${CMAKE_CURRENT_SOURCE_DIR}/include"
1056     "${CMAKE_CURRENT_SOURCE_DIR}/include/opencv"
1057     )
1058
1059 # ----------------------------------------------------------------------------
1060 #           Set the maximum level of warnings:
1061 # ----------------------------------------------------------------------------
1062 # Should be set to true for development
1063 set(OPENCV_WARNINGS_ARE_ERRORS OFF CACHE BOOL "Treat warnings as errors")
1064 if (WIN32 AND ${CMAKE_GENERATOR} MATCHES "(MinGW)|(MSYS)")
1065     set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG" CACHE STRING "")
1066 endif()
1067
1068 set(EXTRA_C_FLAGS "")
1069 set(EXTRA_C_FLAGS_RELEASE "")
1070 set(EXTRA_C_FLAGS_DEBUG "")
1071 set(EXTRA_EXE_LINKER_FLAGS "")
1072 set(EXTRA_EXE_LINKER_FLAGS_RELEASE "")
1073 set(EXTRA_EXE_LINKER_FLAGS_DEBUG "")
1074
1075 if(MSVC)
1076     set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS")
1077     # 64-bit portability warnings, in MSVC8
1078     if(MSVC80)
1079         set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} /Wp64")
1080     endif()
1081     #if(MSVC90)
1082     #    set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} /D _BIND_TO_CURRENT_CRT_VERSION=1 /D _BIND_TO_CURRENT_VCLIBS_VERSION=1")
1083     #endif()
1084
1085     if(BUILD_WITH_DEBUG_INFO)
1086         set(EXTRA_EXE_LINKER_FLAGS_RELEASE "${EXTRA_EXE_LINKER_FLAGS_RELEASE} /debug")
1087     endif()
1088
1089     # Remove unreferenced functions: function level linking
1090     set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} /Gy")
1091     if(BUILD_WITH_DEBUG_INFO)
1092        set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} /Zi")
1093     endif()
1094 endif()
1095
1096 if(CMAKE_COMPILER_IS_GNUCXX)
1097     # High level of warnings.
1098     set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} -Wall")
1099
1100     # The -Wno-long-long is required in 64bit systems when including sytem headers.
1101     if(X86_64)
1102         set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} -Wno-long-long")
1103     endif()
1104
1105     # We need pthread's
1106     if(UNIX AND NOT ANDROID)
1107         set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} -pthread")
1108     endif()
1109
1110     if(OPENCV_WARNINGS_ARE_ERRORS)
1111         set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} -Werror")
1112     endif()
1113
1114     if(X86 AND NOT MINGW64 AND NOT X86_64 AND NOT APPLE)
1115         set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} -march=i686")
1116     endif()
1117
1118     # Other optimizations
1119     if(ENABLE_OMIT_FRAME_POINTER)
1120         set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -fomit-frame-pointer")
1121     else()
1122         set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -fno-omit-frame-pointer")
1123     endif()
1124     if(ENABLE_FAST_MATH)
1125         set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -ffast-math")
1126     endif()
1127     if(ENABLE_POWERPC)
1128         set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -mcpu=G3 -mtune=G5")
1129     endif()
1130     if(ENABLE_SSE)
1131         set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -msse")
1132     endif()
1133     if(ENABLE_SSE2)
1134         set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -msse2")
1135     endif()
1136     # SSE3 and further should be disabled under MingW because it generates compiler errors
1137     if(NOT MINGW)
1138         if(ENABLE_SSE3)
1139             set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -msse3")
1140         endif()
1141
1142         if(${CMAKE_OPENCV_GCC_VERSION_NUM} GREATER 402)
1143             set(HAVE_GCC43_OR_NEWER 1)
1144         endif()
1145         if(${CMAKE_OPENCV_GCC_VERSION_NUM} GREATER 401)
1146             set(HAVE_GCC42_OR_NEWER 1)
1147         endif()
1148
1149         if(HAVE_GCC42_OR_NEWER OR APPLE)
1150             if(ENABLE_SSSE3)
1151                 set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -mssse3")
1152             endif()
1153             if(HAVE_GCC43_OR_NEWER)
1154                 if(ENABLE_SSE41)
1155                     set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -msse4.1")
1156                 endif()
1157                 if(ENABLE_SSE42)
1158                     set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -msse4.2")
1159                 endif()
1160             endif()
1161         endif()
1162     endif()
1163
1164     if(X86 OR X86_64)
1165         if(NOT APPLE AND CMAKE_SIZEOF_VOID_P EQUAL 4)
1166             set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -mfpmath=387")
1167         endif()
1168     endif()
1169
1170     # Profiling?
1171     if(ENABLE_PROFILING)
1172         set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -pg -g")
1173     elseif(NOT APPLE)
1174         # Remove unreferenced functions: function level linking
1175         set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} -ffunction-sections")
1176     endif()
1177
1178     set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -DNDEBUG")
1179     set(EXTRA_C_FLAGS_DEBUG "${EXTRA_C_FLAGS_DEBUG} -O0 -DDEBUG -D_DEBUG")
1180     if(BUILD_WITH_DEBUG_INFO)
1181        set(EXTRA_C_FLAGS_DEBUG "${EXTRA_C_FLAGS_DEBUG} -ggdb3")
1182     endif()
1183 endif()
1184
1185 if(MSVC)
1186     # 64-bit MSVC compiler uses SSE/SSE2 by default
1187     if(NOT MSVC64)
1188        if(ENABLE_SSE)
1189           set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} /arch:SSE")
1190        endif()
1191        if(ENABLE_SSE2)
1192           set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} /arch:SSE2")
1193        endif()
1194     endif()
1195     if(ENABLE_SSE3)
1196        set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} /arch:SSE3")
1197     endif()
1198     if(ENABLE_SSE4_1)
1199        set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} /arch:SSE4.1")
1200     endif()
1201     if (ENABLE_SSE OR ENABLE_SSE2 OR ENABLE_SSE3 OR ENABLE_SSE4_1)
1202        set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} /Oi")
1203     endif()
1204 endif()
1205
1206 # Extra link libs if the user selects building static libs:
1207 if(NOT BUILD_SHARED_LIBS AND CMAKE_COMPILER_IS_GNUCXX AND NOT ANDROID)
1208     # Android does not need these settings because they are already set by toolchain file
1209     set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} stdc++)
1210     set(OPENCV_EXTRA_C_FLAGS "-fPIC ${OPENCV_EXTRA_C_FLAGS}")
1211 endif()
1212
1213 # Add user supplied extra options (optimization, etc...)
1214 # ==========================================================
1215 set(OPENCV_EXTRA_C_FLAGS "${OPENCV_EXTRA_C_FLAGS}" CACHE STRING "Extra compiler options")
1216 set(OPENCV_EXTRA_C_FLAGS_RELEASE "${OPENCV_EXTRA_C_FLAGS_RELEASE}" CACHE STRING "Extra compiler options for Release build")
1217 set(OPENCV_EXTRA_C_FLAGS_DEBUG "${OPENCV_EXTRA_C_FLAGS_DEBUG}" CACHE STRING "Extra compiler options for Debug build")
1218 set(OPENCV_EXTRA_EXE_LINKER_FLAGS "${OPENCV_EXTRA_EXE_LINKER_FLAGS}" CACHE STRING "Extra linker flags" FORCE)
1219 set(OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE "${OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE}" CACHE STRING "Extra linker flags for Release build" FORCE)
1220 set(OPENCV_EXTRA_EXE_LINKER_FLAGS_DEBUG "${OPENCV_EXTRA_EXE_LINKER_FLAGS_DEBUG}" CACHE STRING "Extra linker flags for Debug build" FORCE)
1221
1222 #combine all "extra" options
1223 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_C_FLAGS} ${OPENCV_EXTRA_C_FLAGS}")
1224 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_C_FLAGS} ${OPENCV_EXTRA_C_FLAGS}")
1225 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${EXTRA_C_FLAGS_RELEASE} ${OPENCV_EXTRA_C_FLAGS_RELEASE}")
1226 set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${EXTRA_C_FLAGS_RELEASE} ${OPENCV_EXTRA_C_FLAGS_RELEASE}")
1227 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${EXTRA_C_FLAGS_DEBUG} ${OPENCV_EXTRA_C_FLAGS_DEBUG}")
1228 set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${EXTRA_C_FLAGS_DEBUG} ${OPENCV_EXTRA_C_FLAGS_DEBUG}")
1229 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${EXTRA_EXE_LINKER_FLAGS} ${OPENCV_EXTRA_EXE_LINKER_FLAGS}")
1230 set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} ${EXTRA_EXE_LINKER_FLAGS_RELEASE} ${OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE}")
1231 set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} ${EXTRA_EXE_LINKER_FLAGS_DEBUG} ${OPENCV_EXTRA_EXE_LINKER_FLAGS_DEBUG}")
1232
1233 # In case of Makefiles if the user does not setup CMAKE_BUILD_TYPE, assume it's Release:
1234 if (CMAKE_GENERATOR MATCHES ".*Makefiles" AND "${CMAKE_BUILD_TYPE}" STREQUAL "")
1235     set(CMAKE_BUILD_TYPE Release)
1236 endif()
1237
1238 if (WIN32 AND MSVC)
1239     # avoid warnings from MSVC about overriding the /W* option
1240     # we replace /W3 with /W4 only for C++ files,
1241     # since all the 3rd-party libraries OpenCV uses are in C,
1242     # and we do not care about their warnings.
1243     string(REPLACE "/W3" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
1244     string(REPLACE "/W3" "/W4" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
1245     string(REPLACE "/W3" "/W4" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
1246
1247     # allow extern "C" functions throw exceptions
1248     string(REPLACE "/EHsc" "/EHsc-" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
1249     string(REPLACE "/EHsc" "/EHsc-" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
1250     string(REPLACE "/EHsc" "/EHsc-" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}")
1251     string(REPLACE "/EHsc" "/EHsc-" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
1252     string(REPLACE "/EHsc" "/EHsc-" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
1253     string(REPLACE "/EHsc" "/EHsc-" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
1254
1255     string(REPLACE "/Zm1000" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
1256     string(REPLACE "/Zm1000" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
1257 endif()
1258
1259 if("${CMAKE_CONFIGURE_LDFLAGS}")
1260     set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_CONFIGURE_LDFLAGS}")
1261 endif("${CMAKE_CONFIGURE_LDFLAGS}")
1262
1263 # --------------------------------------------------------------------------------------------
1264 #  Installation for CMake Module:  OpenCVConfig.cmake
1265 #  Part 1/3: ${BIN_DIR}/OpenCVConfig.cmake              -> For use *without* "make install"
1266 #  Part 2/3: ${BIN_DIR}/unix-install/OpenCVConfig.cmake -> For use with "make install"
1267 #  Part 3/3: ${BIN_DIR}/win-install/OpenCVConfig.cmake  -> For use within binary installers/packages
1268 # -------------------------------------------------------------------------------------------
1269
1270 # -------------------------------------------------------------------------------------------
1271 #  Part 1/3: ${BIN_DIR}/OpenCVConfig.cmake              -> For use *without* "make install"
1272 # -------------------------------------------------------------------------------------------
1273 set(CMAKE_INCLUDE_DIRS_CONFIGCMAKE "\"${OPENCV_CONFIG_FILE_INCLUDE_DIR}\" \"${CMAKE_CURRENT_SOURCE_DIR}/include\" \"${CMAKE_CURRENT_SOURCE_DIR}/include/opencv\"")
1274 set(CMAKE_OPENCV2_INCLUDE_DIRS_CONFIGCMAKE "${CMAKE_CURRENT_SOURCE_DIR}")
1275 set(CMAKE_LIB_DIRS_CONFIGCMAKE "${LIBRARY_OUTPUT_PATH}")
1276 set(CMAKE_3RDPARTY_LIB_DIRS_CONFIGCMAKE "\"${CMAKE_BINARY_DIR}/3rdparty/${OPENCV_LIB_INSTALL_PATH}\"")
1277
1278 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/OpenCVConfig.cmake.in" "${CMAKE_BINARY_DIR}/OpenCVConfig.cmake" IMMEDIATE @ONLY)
1279 #support for version checking when finding opencv. find_package(OpenCV 2.3.1 EXACT) should now work.
1280 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/OpenCVConfig-version.cmake.in" "${CMAKE_BINARY_DIR}/OpenCVConfig-version.cmake" IMMEDIATE @ONLY)
1281 # --------------------------------------------------------------------------------------------
1282 #  Part 2/3: ${BIN_DIR}/unix-install/OpenCVConfig.cmake -> For use *with* "make install"
1283 # -------------------------------------------------------------------------------------------
1284 set(CMAKE_INCLUDE_DIRS_CONFIGCMAKE "\"\${OpenCV_INSTALL_PATH}/${OPENCV_INCLUDE_PREFIX}/opencv" "\${OpenCV_INSTALL_PATH}/${OPENCV_INCLUDE_PREFIX}\"")
1285
1286 set(CMAKE_OPENCV2_INCLUDE_DIRS_CONFIGCMAKE "")
1287 if(ANDROID)
1288     set(CMAKE_LIB_DIRS_CONFIGCMAKE "\"\${OpenCV_INSTALL_PATH}/libs/\${ANDROID_NDK_ABI_NAME}\"")
1289     set(CMAKE_3RDPARTY_LIB_DIRS_CONFIGCMAKE "\"\${OpenCV_INSTALL_PATH}/share/OpenCV/3rdparty/libs/\${ANDROID_NDK_ABI_NAME}\"")
1290 else()
1291     set(CMAKE_LIB_DIRS_CONFIGCMAKE "\"\${OpenCV_INSTALL_PATH}/${OPENCV_LIB_INSTALL_PATH}\"")
1292     set(CMAKE_3RDPARTY_LIB_DIRS_CONFIGCMAKE "\"\${OpenCV_INSTALL_PATH}/share/OpenCV/3rdparty/${OPENCV_LIB_INSTALL_PATH}\"")
1293     if(OPENCV_MANGLED_INSTALL_PATHS)
1294       set(CMAKE_3RDPARTY_LIB_DIRS_CONFIGCMAKE "\"\${OpenCV_INSTALL_PATH}/share/OpenCV-${OPENCV_VERSION}/3rdparty/${OPENCV_LIB_INSTALL_PATH}\"")
1295     endif()
1296 endif()
1297
1298 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/OpenCVConfig.cmake.in" "${CMAKE_BINARY_DIR}/unix-install/OpenCVConfig.cmake" IMMEDIATE @ONLY)
1299 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/OpenCVConfig-version.cmake.in" "${CMAKE_BINARY_DIR}/unix-install/OpenCVConfig-version.cmake" IMMEDIATE @ONLY)
1300
1301 if(UNIX)
1302   #http://www.vtk.org/Wiki/CMake/Tutorials/Packaging reference
1303   # For a command "find_package(<name> [major[.minor]] [EXACT] [REQUIRED|QUIET])"
1304   # cmake will look in the following dir on unix:
1305   #                <prefix>/(share|lib)/cmake/<name>*/                     (U)
1306   #                <prefix>/(share|lib)/<name>*/                           (U)
1307   #                <prefix>/(share|lib)/<name>*/(cmake|CMake)/             (U)
1308   if(OPENCV_MANGLED_INSTALL_PATHS)
1309     install(FILES ${CMAKE_BINARY_DIR}/unix-install/OpenCVConfig.cmake DESTINATION share/OpenCV-${OPENCV_VERSION}/)
1310     install(FILES ${CMAKE_BINARY_DIR}/unix-install/OpenCVConfig-version.cmake DESTINATION share/OpenCV-${OPENCV_VERSION}/)
1311   else()
1312     install(FILES "${CMAKE_BINARY_DIR}/unix-install/OpenCVConfig.cmake" DESTINATION share/OpenCV/)
1313     install(FILES ${CMAKE_BINARY_DIR}/unix-install/OpenCVConfig-version.cmake DESTINATION share/OpenCV/)
1314   endif()
1315 endif()
1316
1317 if(ANDROID)
1318     install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/android/android.toolchain.cmake" DESTINATION share/OpenCV)
1319 endif()
1320
1321 # --------------------------------------------------------------------------------------------
1322 #  Part 3/3: ${BIN_DIR}/win-install/OpenCVConfig.cmake  -> For use within binary installers/packages
1323 # -------------------------------------------------------------------------------------------
1324 if(WIN32)
1325     set(CMAKE_INCLUDE_DIRS_CONFIGCMAKE "\"\${OpenCV_CONFIG_PATH}/include\" \"\${OpenCV_CONFIG_PATH}/include/opencv\"")
1326     set(CMAKE_OPENCV2_INCLUDE_DIRS_CONFIGCMAKE "")
1327     set(CMAKE_LIB_DIRS_CONFIGCMAKE "\"\${OpenCV_CONFIG_PATH}/${OPENCV_LIB_INSTALL_PATH}\"")
1328     set(CMAKE_3RDPARTY_LIB_DIRS_CONFIGCMAKE "\"\${OpenCV_CONFIG_PATH}/share/OpenCV/3rdparty/${OPENCV_LIB_INSTALL_PATH}\"")
1329
1330     exec_program(mkdir ARGS "-p \"${CMAKE_BINARY_DIR}/win-install/\"" OUTPUT_VARIABLE RET_VAL)
1331     configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/OpenCVConfig.cmake.in" "${CMAKE_BINARY_DIR}/win-install/OpenCVConfig.cmake" IMMEDIATE @ONLY)
1332
1333     # Install the OpenCVConfig.cmake file which has the right paths pointing to the install directory
1334     install(FILES "${CMAKE_BINARY_DIR}/win-install/OpenCVConfig.cmake" DESTINATION "${CMAKE_INSTALL_PREFIX}/")
1335 endif()
1336
1337 # --------------------------------------------------------------------------------------------
1338 #  Installation for Android ndk-build makefile:  OpenCV.mk
1339 #  Part 1/2: ${BIN_DIR}/OpenCV.mk              -> For use *without* "make install"
1340 #  Part 2/2: ${BIN_DIR}/unix-install/OpenCV.mk -> For use with "make install"
1341 # -------------------------------------------------------------------------------------------
1342 if(ANDROID)
1343     if(BUILD_SHARED_LIBS)
1344         SET(OPENCV_LIBTYPE_CONFIGMAKE "SHARED")
1345     else()
1346         SET(OPENCV_LIBTYPE_CONFIGMAKE "STATIC")
1347     endif()
1348     if(BUILD_ANDROID_CAMERA_WRAPPER)
1349         set(CMAKE_CAMERA_LIBS_CONFIGCMAKE "native_camera_r${ANDROID_VERSION}")
1350     elseif(WITH_ANDROID_CAMERA)
1351         SET(CMAKE_CAMERA_LIBS_CONFIGCMAKE "")
1352         file(GLOB CMAKE_CAMERA_LIBS "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/lib/${ANDROID_NDK_ABI_NAME}/libnative_camera_r*.so")
1353         foreach(cam_lib ${CMAKE_CAMERA_LIBS})
1354             get_filename_component(cam_lib "${cam_lib}" NAME)
1355             string(REGEX REPLACE "lib(native_camera_r[0-9]+\\.[0-9]+\\.[0-9]+)\\.so" "\\1" cam_lib "${cam_lib}")
1356             SET(CMAKE_CAMERA_LIBS_CONFIGCMAKE "${CMAKE_CAMERA_LIBS_CONFIGCMAKE} ${cam_lib}")
1357         endforeach()
1358     endif()
1359 endif(ANDROID)
1360
1361 # -------------------------------------------------------------------------------------------
1362 #  Part 1/2: ${BIN_DIR}/OpenCV.mk              -> For use *without* "make install"
1363 # -------------------------------------------------------------------------------------------
1364 if(ANDROID)
1365     set(CMAKE_INCLUDE_DIRS_CONFIGCMAKE "\"${OPENCV_CONFIG_FILE_INCLUDE_DIR}\" \"${CMAKE_CURRENT_SOURCE_DIR}/include\" \"${CMAKE_CURRENT_SOURCE_DIR}/include/opencv\"")
1366     set(CMAKE_BASE_INCLUDE_DIR_CONFIGCMAKE "\"${CMAKE_CURRENT_SOURCE_DIR}\"")
1367     set(CMAKE_LIBS_DIR_CONFIGCMAKE "\$(OPENCV_THIS_DIR)")
1368
1369     configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/OpenCV.mk.in" "${CMAKE_BINARY_DIR}/OpenCV.mk" IMMEDIATE @ONLY)
1370 endif(ANDROID)
1371
1372 # -------------------------------------------------------------------------------------------
1373 #  Part 2/2: ${BIN_DIR}/unix-install/OpenCV.mk -> For use with "make install"
1374 # -------------------------------------------------------------------------------------------
1375 if(ANDROID)
1376     set(CMAKE_INCLUDE_DIRS_CONFIGCMAKE "\"\$(LOCAL_PATH)/\$(OPENCV_THIS_DIR)/../../include/opencv\" \"\$(LOCAL_PATH)/\$(OPENCV_THIS_DIR)/../../include\"")
1377     set(CMAKE_BASE_INCLUDE_DIR_CONFIGCMAKE "")
1378     set(CMAKE_LIBS_DIR_CONFIGCMAKE "\$(OPENCV_THIS_DIR)/../..")
1379
1380     configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/OpenCV.mk.in" "${CMAKE_BINARY_DIR}/unix-install/OpenCV.mk" IMMEDIATE @ONLY)
1381     install(FILES ${CMAKE_BINARY_DIR}/unix-install/OpenCV.mk DESTINATION share/OpenCV/)
1382 endif(ANDROID)
1383
1384 # --------------------------------------------------------------------------------------------
1385 #according to man pkg-config
1386 #  The package name specified on the pkg-config command line is defined to
1387 #      be the name of the metadata file, minus the .pc extension. If a library
1388 #      can install multiple versions simultaneously, it must give each version
1389 #      its own name (for example, GTK 1.2 might have the package  name  "gtk+"
1390 #      while GTK 2.0 has "gtk+-2.0").
1391 #  Part 2/2: ${BIN_DIR}/unix-install/opencv.pc -> For use *with* "make install"
1392 # prefix=/usr
1393 # exec_prefix=${prefix}
1394 # libdir=${exec_prefix}/lib
1395 # includedir=${prefix}/include/opencv
1396 # -------------------------------------------------------------------------------------------
1397 set(prefix      ${CMAKE_INSTALL_PREFIX})
1398 set(exec_prefix "\${prefix}")
1399 set(libdir      "\${exec_prefix}/lib${LIB_SUFFIX}")
1400 set(includedir  "\${prefix}/${OPENCV_INCLUDE_PREFIX}")
1401 set(VERSION     ${OPENCV_VERSION})
1402
1403 set(OPENCV_PC_FILE_NAME opencv.pc)
1404 #need to be explicit with naming the pc file and version number for side by side installs to work.
1405 if(OPENCV_MANGLED_INSTALL_PATHS)
1406   SET(OpenCV_LIB_COMPONENTS opencv_contrib opencv_legacy opencv_objdetect opencv_calib3d opencv_features2d opencv_video opencv_highgui opencv_ml opencv_imgproc opencv_flann opencv_core )
1407   #be explicit about the library names.
1408   set(OpenCV_LIB_COMPONENTS_ )
1409   foreach( CVLib ${OpenCV_LIB_COMPONENTS})
1410     set(OpenCV_LIB_COMPONENTS_ "${OpenCV_LIB_COMPONENTS_} ${libdir}/lib${CVLib}.so.${OPENCV_VERSION}" )
1411   endforeach()
1412   set(OpenCV_LIB_COMPONENTS ${OpenCV_LIB_COMPONENTS_})
1413   set(OPENCV_PC_FILE_NAME "opencv-${OPENCV_VERSION}.pc")
1414   configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/opencv-XXX.pc.cmake.in" "${CMAKE_BINARY_DIR}/unix-install/${OPENCV_PC_FILE_NAME}" @ONLY IMMEDIATE)
1415 else()
1416   configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/opencv.pc.cmake.in" "${CMAKE_BINARY_DIR}/unix-install/${OPENCV_PC_FILE_NAME}" @ONLY IMMEDIATE)
1417 endif()
1418
1419 if(UNIX AND NOT ANDROID)
1420   install(FILES ${CMAKE_BINARY_DIR}/unix-install/${OPENCV_PC_FILE_NAME} DESTINATION ${OPENCV_LIB_INSTALL_PATH}/pkgconfig)
1421 endif()
1422
1423 # ----------------------------------------------------------------------------
1424 #   Uninstall target, for "make uninstall"
1425 # ----------------------------------------------------------------------------
1426 CONFIGURE_FILE(
1427   "${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/cmake_uninstall.cmake.in"
1428   "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
1429   IMMEDIATE @ONLY)
1430
1431 ADD_CUSTOM_TARGET(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
1432
1433 #-----------------------------------
1434 # Source package:
1435 #-----------------------------------
1436 if(BUILD_PACKAGE)
1437     set(TARBALL_NAME "${CMAKE_PROJECT_NAME}-${OPENCV_VERSION_MAJOR}.${OPENCV_VERSION_MINOR}.${OPENCV_VERSION_PATCH}")
1438     if (NOT WIN32)
1439         if(APPLE)
1440             set(TAR_CMD gnutar)
1441         else()
1442             set(TAR_CMD tar)
1443         endif()
1444         set(TAR_TRANSFORM "\"s,^,${TARBALL_NAME}/,\"")
1445         add_custom_target(package_source
1446         #TODO: maybe we should not remove dll's
1447         COMMAND ${TAR_CMD} --transform ${TAR_TRANSFORM} -cjpf ${CMAKE_CURRENT_BINARY_DIR}/${TARBALL_NAME}.tar.bz2 --exclude=".svn" --exclude="*.pyc" --exclude="*.vcproj" --exclude="*/lib/*" --exclude="*.dll" ./
1448         WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
1449     else()
1450         add_custom_target(package_source
1451         COMMAND zip -9 -r ${CMAKE_CURRENT_BINARY_DIR}/${TARBALL_NAME}.zip . -x '*/.svn/*' '*.vcproj' '*.pyc'
1452         WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
1453     endif()
1454 endif()
1455
1456
1457 #-----------------------------------
1458 # Solution folders:
1459 #-----------------------------------
1460 if(ENABLE_SOLUTION_FOLDERS)
1461     set_property(GLOBAL PROPERTY USE_FOLDERS ON)
1462     set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "CMakeTargets")
1463 endif()
1464
1465 #-----------------------------------
1466 # performance tests
1467 #-----------------------------------
1468 if(BUILD_PERF_TESTS AND PYTHON_EXECUTABLE)
1469     if(CMAKE_VERSION VERSION_GREATER "2.8.2")
1470         add_custom_target(perf
1471             ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/modules/ts/misc/run.py" --configuration $<CONFIGURATION> "${CMAKE_BINARY_DIR}"
1472             WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
1473             DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/modules/ts/misc/run.py"
1474         )
1475     else()
1476         add_custom_target(perf
1477             ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/modules/ts/misc/run.py" "${CMAKE_BINARY_DIR}"
1478             WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
1479             DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/modules/ts/misc/run.py"
1480         )
1481     endif()
1482 endif()
1483
1484 #-----------------------------------
1485 # Subdirectories:
1486 #-----------------------------------
1487 add_subdirectory(include)
1488 add_subdirectory(modules)
1489 add_subdirectory(doc)
1490 add_subdirectory(data)
1491 add_subdirectory(3rdparty)
1492
1493 if(BUILD_EXAMPLES OR BUILD_ANDROID_EXAMPLES OR INSTALL_PYTHON_EXAMPLES)
1494     add_subdirectory(samples)
1495 endif()
1496
1497 # ----------------------------------------------------------------------------
1498 #   Summary:
1499 # ----------------------------------------------------------------------------
1500 status("")
1501 status("General configuration for opencv ${OPENCV_VERSION} =====================================")
1502 status("")
1503 status("    Built as dynamic libs?:" BUILD_SHARED_LIBS THEN YES ELSE NO)
1504 status("    C++ Compiler:"           CMAKE_COMPILER    THEN "${CMAKE_COMPILER}" ELSE "${CMAKE_CXX_COMPILER}")
1505 status("    C++ flags (Release):"    ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE})
1506 status("    C++ flags (Debug):"      ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG})
1507 if(WIN32)
1508     status("    Linker flags (Release):" ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_RELEASE})
1509     status("    Linker flags (Debug):"   ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_DEBUG})
1510 else()
1511     status("    Linker flags (Release):" ${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS_RELEASE})
1512     status("    Linker flags (Debug):"   ${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS_DEBUG})
1513 endif()
1514
1515 if(ANDROID)
1516     status("")
1517     status("  Android: ")
1518     status("    Android ABI:" ${ANDROID_ABI})
1519     status("    Native API level:" android-${ANDROID_NATIVE_API_LEVEL})
1520     status("    SDK target:" "${ANDROID_SDK_TARGET}")
1521     if(BUILD_WITH_ANDROID_NDK)
1522         status("    Android NDK:" "${ANDROID_NDK} (toolchain: ${ANDROID_TOOLCHAIN_NAME})")
1523     elseif(BUILD_WITH_STANDALONE_TOOLCHAIN)
1524         status("    Android toolchain:" "${ANDROID_STANDALONE_TOOLCHAIN}")
1525     endif()
1526     status("    android tool:"  ANDROID_EXECUTABLE  THEN "${ANDROID_EXECUTABLE} (${ANDROID_TOOLS_Pkg_Desc})" ELSE NO)
1527     status("    ant:"           ANT_EXECUTABLE      THEN "${ANT_EXECUTABLE} (ver ${ANT_VERSION})"            ELSE NO)
1528 endif()
1529
1530 #YV
1531 status("")
1532 status("  GUI: ")
1533
1534 if (HAVE_QT)
1535     status("    QT 4.x:"            HAVE_QT        THEN YES ELSE NO)
1536     status("    QT OpenGL support:" HAVE_QT_OPENGL THEN YES ELSE NO)
1537 else()
1538     if(WIN32)
1539         status("    Win32 UI:" YES)
1540     else()
1541         if(APPLE)
1542             if(WITH_CARBON)
1543                 status("    Carbon:" YES)
1544             else()
1545                 status("    Cocoa:"  YES)
1546             endif()
1547         else()
1548             status("    GTK+ 2.x:" HAVE_GTK      THEN YES ELSE NO)
1549             status("    GThread :" HAVE_GTHREAD  THEN YES ELSE NO)
1550             status("    GtkGlExt:" HAVE_GTKGLEXT THEN YES ELSE NO)
1551         endif()
1552     endif()
1553 endif()
1554
1555 status("    OpenGL support:" HAVE_OPENGL THEN YES ELSE NO)
1556
1557 # media
1558 status("")
1559 status("  Media I/O: ")
1560 status("    ZLib:"      ZLIB_FOUND                         THEN ${ZLIB_FOUND}   ELSE build)
1561 status("    JPEG:"      NOT WITH_JPEG OR JPEG_FOUND        THEN ${JPEG_FOUND}   ELSE build)
1562 status("    PNG:"       NOT WITH_PNG OR PNG_FOUND          THEN ${PNG_FOUND}    ELSE build)
1563 status("    TIFF:"      NOT WITH_TIFF OR TIFF_FOUND        THEN ${TIFF_FOUND}   ELSE build)
1564 status("    JPEG 2000:" NOT WITH_JASPER OR JASPER_FOUND    THEN ${JASPER_FOUND} ELSE build)
1565 status("    OpenEXR:"   WITH_OPENEXR AND OPENEXR_FOUND     THEN YES             ELSE NO)
1566
1567 status("    OpenNI:"    HAVE_OPENNI                        THEN YES             ELSE NO)
1568 status("    OpenNI PrimeSensor Modules:"
1569                         HAVE_OPENNI_PRIME_SENSOR_MODULE    THEN YES             ELSE NO)
1570 if(WIN32)
1571     status("    XIMEA:"     HAVE_XIMEA  THEN YES ELSE NO)
1572 endif()
1573
1574 # video
1575 status("")
1576 if(UNIX AND NOT APPLE)
1577     status("  Video I/O:")
1578     status("    DC1394 1.x:"     HAVE_DC1394         THEN YES ELSE NO)
1579     status("    DC1394 2.x:"     HAVE_DC1394_2       THEN YES ELSE NO)
1580     status("    FFMPEG:"         HAVE_FFMPEG         THEN YES ELSE NO)
1581     status("      codec:"        HAVE_FFMPEG_CODEC   THEN YES ELSE NO)
1582     status("      format:"       HAVE_FFMPEG_FORMAT  THEN YES ELSE NO)
1583     status("      util:"         HAVE_FFMPEG_UTIL    THEN YES ELSE NO)
1584     status("      swscale:"      HAVE_FFMPEG_SWSCALE THEN YES ELSE NO)
1585     status("      gentoo-style:" HAVE_GENTOO_FFMPEG  THEN YES ELSE NO)
1586     status("    GStreamer:"      HAVE_GSTREAMER      THEN YES ELSE NO)
1587     status("    UniCap:"         HAVE_UNICAP         THEN YES ELSE NO)
1588     status("    PvAPI:"          HAVE_PVAPI          THEN YES ELSE NO)
1589     status("    V4L/V4L2:"       HAVE_LIBV4L         THEN "Using libv4l" ELSE ${HAVE_CAMV4L}/${HAVE_CAMV4L2})
1590     status("    Xine:"           HAVE_XINE           THEN YES ELSE NO)
1591
1592     if(ANDROID)
1593         if(WITH_ANDROID_CAMERA)
1594             status("    AndroidNativeCamera:" BUILD_ANDROID_CAMERA_WRAPPER THEN "YES, build for Android ${ANDROID_VERSION}" ELSE "YES, use prebuilt libraries")
1595         else()
1596             status("    AndroidNativeCamera:" "NO (native camera requires Android API level 8 or higher)")
1597         endif()
1598     endif()
1599 elseif(APPLE)
1600     if(NOT IOS)
1601         status("  Video I/O:"    WITH_QUICKTIME      THEN QuickTime ELSE QTKit)
1602     else()
1603         status("  Video I/O: AVFoundation")
1604     endif()
1605 elseif(WIN32)
1606     status("  Video I/O:"        HAVE_VIDEOINPUT     THEN DirectShow ELSE NO)
1607 endif()
1608
1609 # Other third-party libraries
1610 status("")
1611 status("  Other third-party libraries:")
1612
1613 if(WITH_IPP AND IPP_FOUND)
1614     status("    Use IPP:" "${IPP_LATEST_VERSION_STR} [${IPP_LATEST_VERSION_MAJOR}.${IPP_LATEST_VERSION_MINOR}.${IPP_LATEST_VERSION_BUILD}]")
1615     status("         at:" "${IPP_ROOT_DIR}")
1616 else()
1617     status("    Use IPP:"   WITH_IPP AND NOT IPP_FOUND THEN "IPP not found" ELSE NO)
1618 endif()
1619
1620 status("    Use TBB:"   HAVE_TBB   THEN YES ELSE NO)
1621 status("    Use Cuda:"  HAVE_CUDA  THEN YES ELSE NO)
1622 status("    Use Eigen:" HAVE_EIGEN THEN YES ELSE NO)
1623
1624 status("")
1625 status("  Python interpreter:"  PYTHON_EXECUTABLE        THEN "${PYTHON_EXECUTABLE} (ver ${PYTHON_VERSION_MAJOR_MINOR})" ELSE NO)
1626 # interfaces to other languages
1627 status("")
1628 status("  Interfaces:")
1629 status("    Python:"              BUILD_NEW_PYTHON_SUPPORT AND PYTHON_EXECUTABLE THEN YES ELSE NO)
1630 status("    Python numpy:"        PYTHON_USE_NUMPY AND BUILD_NEW_PYTHON_SUPPORT  THEN YES ELSE "NO (Python wrappers will not be generated)")
1631 if(ANDROID)
1632     status("    Java:" BUILD_JAVA_SUPPORT AND PYTHON_EXECUTABLE THEN YES ELSE NO)
1633 endif()
1634
1635 # documentation
1636 status("")
1637 status("  Documentation:")
1638 status("    Sphinx:"              HAVE_SPHINX              THEN "${SPHINX_BUILD} (ver ${SPHINX_VERSION})" ELSE NO)
1639 status("    PdfLaTeX compiler:"   PDFLATEX_COMPILER        THEN "${PDFLATEX_COMPILER}" ELSE NO)
1640 if(BUILD_DOCS AND HAVE_SPHINX)
1641     status("    Build Documentation:" PDFLATEX_COMPILER    THEN YES ELSE "YES (only HTML without math expressions)")
1642 else()
1643     status("    Build Documentation:" NO)
1644 endif()
1645
1646 # samples and tests
1647 status("")
1648 status("  Tests and samples:")
1649 status("    Tests:"             BUILD_TESTS       THEN YES ELSE NO)
1650 status("    Performance tests:" BUILD_PERF_TESTS  THEN YES ELSE NO)
1651 status("    Examples:"          BUILD_EXAMPLES    THEN YES ELSE NO)
1652
1653 if(ANDROID)
1654    status("    Android tests:"    BUILD_TESTS AND CAN_BUILD_ANDROID_PROJECTS THEN YES ELSE NO)
1655    status("    Android examples:" BUILD_ANDROID_EXAMPLES                     THEN YES ELSE NO)
1656 endif()
1657
1658 #auxiliary
1659 status("")
1660 status("  Install path:" "${CMAKE_INSTALL_PREFIX}")
1661 status("")
1662 status("  cvconfig.h is in:" "${OPENCV_CONFIG_FILE_INCLUDE_DIR}")
1663 status("-----------------------------------------------------------------")
1664 status("")
1665
1666 # warn in the case of in-source build
1667 if("${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}")
1668     message(WARNING "The source directory is the same as binary directory. \"make clean\" may damage the source tree")
1669 endif()