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