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