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