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