Merge commit '0566ab4d3d' into merge-2.4
[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
9 include(cmake/OpenCVMinDepVersions.cmake)
10
11 if(CMAKE_GENERATOR MATCHES Xcode AND XCODE_VERSION VERSION_GREATER 4.3)
12   cmake_minimum_required(VERSION 2.8.8 FATAL_ERROR)
13 else()
14   cmake_minimum_required(VERSION "${MIN_VER_CMAKE}" FATAL_ERROR)
15 endif()
16
17 # Following block can broke build in case of cross-compilng
18 # but CMAKE_CROSSCOMPILING variable will be set only on project(OpenCV) command
19 # so we will try to detect crosscompiling by presense of CMAKE_TOOLCHAIN_FILE
20 if(NOT CMAKE_TOOLCHAIN_FILE)
21   # it _must_ go before project(OpenCV) in order to work
22   if(WIN32)
23     set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "Installation Directory")
24   else()
25     set(CMAKE_INSTALL_PREFIX "/usr/local" CACHE PATH "Installation Directory")
26   endif()
27 else(NOT CMAKE_TOOLCHAIN_FILE)
28   #Android: set output folder to ${CMAKE_BINARY_DIR}
29   set( LIBRARY_OUTPUT_PATH_ROOT ${CMAKE_BINARY_DIR} CACHE PATH "root for library output, set this to change where android libs are compiled to" )
30   # any crosscompiling
31   set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "Installation Directory")
32 endif(NOT CMAKE_TOOLCHAIN_FILE)
33
34
35 if(POLICY CMP0022)
36   cmake_policy(SET CMP0022 OLD)
37 endif()
38
39 # must go before the project command
40 set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Configs" FORCE)
41 if(DEFINED CMAKE_BUILD_TYPE)
42   set_property( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS ${CMAKE_CONFIGURATION_TYPES} )
43 endif()
44
45 project(OpenCV CXX C)
46
47 if(MSVC)
48   set(CMAKE_USE_RELATIVE_PATHS ON CACHE INTERNAL "" FORCE)
49 endif()
50
51 include(cmake/OpenCVUtils.cmake)
52
53 ocv_clear_vars(OpenCVModules_TARGETS)
54
55 # ----------------------------------------------------------------------------
56 # Break in case of popular CMake configuration mistakes
57 # ----------------------------------------------------------------------------
58 if(NOT CMAKE_SIZEOF_VOID_P GREATER 0)
59   message(FATAL_ERROR "CMake fails to deterimine the bitness of target platform.
60   Please check your CMake and compiler installation. If you are crosscompiling then ensure that your CMake toolchain file correctly sets the compiler details.")
61 endif()
62
63 # ----------------------------------------------------------------------------
64 # Detect compiler and target platform architecture
65 # ----------------------------------------------------------------------------
66 include(cmake/OpenCVDetectCXXCompiler.cmake)
67
68 # Add these standard paths to the search paths for FIND_LIBRARY
69 # to find libraries from these locations first
70 if(UNIX AND NOT ANDROID)
71   if(X86_64 OR CMAKE_SIZEOF_VOID_P EQUAL 8)
72     if(EXISTS /lib64)
73       list(APPEND CMAKE_LIBRARY_PATH /lib64)
74     else()
75       list(APPEND CMAKE_LIBRARY_PATH /lib)
76     endif()
77     if(EXISTS /usr/lib64)
78       list(APPEND CMAKE_LIBRARY_PATH /usr/lib64)
79     else()
80       list(APPEND CMAKE_LIBRARY_PATH /usr/lib)
81     endif()
82   elseif(X86 OR CMAKE_SIZEOF_VOID_P EQUAL 4)
83     if(EXISTS /lib32)
84       list(APPEND CMAKE_LIBRARY_PATH /lib32)
85     else()
86       list(APPEND CMAKE_LIBRARY_PATH /lib)
87     endif()
88     if(EXISTS /usr/lib32)
89       list(APPEND CMAKE_LIBRARY_PATH /usr/lib32)
90     else()
91       list(APPEND CMAKE_LIBRARY_PATH /usr/lib)
92     endif()
93   endif()
94 endif()
95
96 # Add these standard paths to the search paths for FIND_PATH
97 # to find include files from these locations first
98 if(MINGW)
99   if(EXISTS /mingw)
100       list(APPEND CMAKE_INCLUDE_PATH /mingw)
101   endif()
102   if(EXISTS /mingw32)
103       list(APPEND CMAKE_INCLUDE_PATH /mingw32)
104   endif()
105   if(EXISTS /mingw64)
106       list(APPEND CMAKE_INCLUDE_PATH /mingw64)
107   endif()
108 endif()
109
110 # ----------------------------------------------------------------------------
111 # OpenCV cmake options
112 # ----------------------------------------------------------------------------
113
114 # Optional 3rd party components
115 # ===================================================
116 OCV_OPTION(WITH_1394           "Include IEEE1394 support"                    ON   IF (NOT ANDROID AND NOT IOS) )
117 OCV_OPTION(WITH_AVFOUNDATION   "Use AVFoundation for Video I/O"              ON   IF IOS)
118 OCV_OPTION(WITH_CARBON         "Use Carbon for UI instead of Cocoa"          OFF  IF APPLE )
119 OCV_OPTION(WITH_VTK            "Include VTK library support (and build opencv_viz module eiher)"             OFF IF (NOT ANDROID AND NOT IOS) )
120 OCV_OPTION(WITH_CUDA           "Include NVidia Cuda Runtime support"                                         ON  IF (NOT IOS) )
121 OCV_OPTION(WITH_CUFFT          "Include NVidia Cuda Fast Fourier Transform (FFT) library support"            ON  IF (NOT IOS) )
122 OCV_OPTION(WITH_CUBLAS         "Include NVidia Cuda Basic Linear Algebra Subprograms (BLAS) library support" OFF IF (NOT IOS) )
123 OCV_OPTION(WITH_NVCUVID        "Include NVidia Video Decoding library support"                               OFF IF (NOT IOS AND NOT APPLE) )
124 OCV_OPTION(WITH_EIGEN          "Include Eigen2/Eigen3 support"               ON)
125 OCV_OPTION(WITH_VFW            "Include Video for Windows support"           ON   IF WIN32 )
126 OCV_OPTION(WITH_FFMPEG         "Include FFMPEG support"                      ON   IF (NOT ANDROID AND NOT IOS))
127 OCV_OPTION(WITH_GSTREAMER      "Include Gstreamer support"                   ON   IF (UNIX AND NOT APPLE AND NOT ANDROID) )
128 OCV_OPTION(WITH_GSTREAMER_0_10 "Enable Gstreamer 0.10 support (instead of 1.x)"                              OFF )
129 OCV_OPTION(WITH_GTK            "Include GTK support"                         ON   IF (UNIX AND NOT APPLE AND NOT ANDROID) )
130 OCV_OPTION(WITH_IPP            "Include Intel IPP support"                   OFF  IF (MSVC OR X86 OR X86_64) )
131 OCV_OPTION(WITH_JASPER         "Include JPEG2K support"                      ON   IF (NOT IOS) )
132 OCV_OPTION(WITH_JPEG           "Include JPEG support"                        ON)
133 OCV_OPTION(WITH_WEBP           "Include WebP support"                        ON   IF (NOT IOS) )
134 OCV_OPTION(WITH_OPENEXR        "Include ILM support via OpenEXR"             ON   IF (NOT IOS) )
135 OCV_OPTION(WITH_OPENGL         "Include OpenGL support"                      OFF  IF (NOT ANDROID AND NOT APPLE) )
136 OCV_OPTION(WITH_OPENNI         "Include OpenNI support"                      OFF  IF (NOT ANDROID AND NOT IOS) )
137 OCV_OPTION(WITH_PNG            "Include PNG support"                         ON)
138 OCV_OPTION(WITH_PVAPI          "Include Prosilica GigE support"              ON   IF (NOT ANDROID AND NOT IOS) )
139 OCV_OPTION(WITH_GIGEAPI        "Include Smartek GigE support"                ON   IF (NOT ANDROID AND NOT IOS) )
140 OCV_OPTION(WITH_QT             "Build with Qt Backend support"               OFF  IF (NOT ANDROID AND NOT IOS) )
141 OCV_OPTION(WITH_WIN32UI        "Build with Win32 UI Backend support"         ON   IF WIN32 )
142 OCV_OPTION(WITH_QUICKTIME      "Use QuickTime for Video I/O insted of QTKit" OFF  IF APPLE )
143 OCV_OPTION(WITH_TBB            "Include Intel TBB support"                   OFF  IF (NOT IOS) )
144 OCV_OPTION(WITH_OPENMP         "Include OpenMP support"                      OFF)
145 OCV_OPTION(WITH_CSTRIPES       "Include C= support"                          OFF  IF WIN32 )
146 OCV_OPTION(WITH_TIFF           "Include TIFF support"                        ON   IF (NOT IOS) )
147 OCV_OPTION(WITH_UNICAP         "Include Unicap support (GPL)"                OFF  IF (UNIX AND NOT APPLE AND NOT ANDROID) )
148 OCV_OPTION(WITH_V4L            "Include Video 4 Linux support"               ON   IF (UNIX AND NOT ANDROID) )
149 OCV_OPTION(WITH_LIBV4L         "Use libv4l for Video 4 Linux support"        ON   IF (UNIX AND NOT ANDROID) )
150 OCV_OPTION(WITH_DSHOW          "Build HighGUI with DirectShow support"       ON   IF (WIN32 AND NOT ARM) )
151 OCV_OPTION(WITH_MSMF           "Build HighGUI with Media Foundation support" OFF  IF WIN32 )
152 OCV_OPTION(WITH_XIMEA          "Include XIMEA cameras support"               OFF  IF (NOT ANDROID AND NOT APPLE) )
153 OCV_OPTION(WITH_XINE           "Include Xine support (GPL)"                  OFF  IF (UNIX AND NOT APPLE AND NOT ANDROID) )
154 OCV_OPTION(WITH_CLP            "Include Clp support (EPL)"                   OFF)
155 OCV_OPTION(WITH_OPENCL         "Include OpenCL Runtime support"              ON   IF (NOT IOS) )
156 OCV_OPTION(WITH_OPENCLAMDFFT   "Include AMD OpenCL FFT library support"      ON   IF (NOT ANDROID AND NOT IOS) )
157 OCV_OPTION(WITH_OPENCLAMDBLAS  "Include AMD OpenCL BLAS library support"     ON   IF (NOT ANDROID AND NOT IOS) )
158 OCV_OPTION(WITH_DIRECTX        "Include DirectX support"                     ON   IF WIN32 )
159 OCV_OPTION(WITH_INTELPERC      "Include Intel Perceptual Computing support"  OFF  IF WIN32 )
160
161
162 # OpenCV build components
163 # ===================================================
164 OCV_OPTION(BUILD_SHARED_LIBS        "Build shared libraries (.dll/.so) instead of static ones (.lib/.a)" NOT (ANDROID OR IOS) )
165 OCV_OPTION(BUILD_opencv_apps        "Build utility applications (used for example to train classifiers)" (NOT ANDROID) IF (NOT IOS) )
166 OCV_OPTION(BUILD_ANDROID_EXAMPLES   "Build examples for Android platform"         ON  IF ANDROID )
167 OCV_OPTION(BUILD_DOCS               "Create build rules for OpenCV Documentation" ON )
168 OCV_OPTION(BUILD_EXAMPLES           "Build all examples"                          OFF )
169 OCV_OPTION(BUILD_PACKAGE            "Enables 'make package_source' command"       ON )
170 OCV_OPTION(BUILD_PERF_TESTS         "Build performance tests"                     ON  IF (NOT IOS) )
171 OCV_OPTION(BUILD_TESTS              "Build accuracy & regression tests"           ON  IF (NOT IOS) )
172 OCV_OPTION(BUILD_WITH_DEBUG_INFO    "Include debug info into debug libs (not MSCV only)" ON )
173 OCV_OPTION(BUILD_WITH_STATIC_CRT    "Enables use of staticaly linked CRT for staticaly linked OpenCV" ON IF MSVC )
174 OCV_OPTION(BUILD_FAT_JAVA_LIB       "Create fat java wrapper containing the whole OpenCV library" ON IF NOT BUILD_SHARED_LIBS AND CMAKE_COMPILER_IS_GNUCXX )
175 OCV_OPTION(BUILD_ANDROID_SERVICE    "Build OpenCV Manager for Google Play" OFF IF ANDROID AND ANDROID_SOURCE_TREE )
176 OCV_OPTION(BUILD_ANDROID_PACKAGE    "Build platform-specific package for Google Play" OFF IF ANDROID )
177
178 # 3rd party libs
179 OCV_OPTION(BUILD_ZLIB               "Build zlib from source"             WIN32 OR APPLE )
180 OCV_OPTION(BUILD_TIFF               "Build libtiff from source"          WIN32 OR ANDROID OR APPLE )
181 OCV_OPTION(BUILD_JASPER             "Build libjasper from source"        WIN32 OR ANDROID OR APPLE )
182 OCV_OPTION(BUILD_JPEG               "Build libjpeg from source"          WIN32 OR ANDROID OR APPLE )
183 OCV_OPTION(BUILD_PNG                "Build libpng from source"           WIN32 OR ANDROID OR APPLE )
184 OCV_OPTION(BUILD_OPENEXR            "Build openexr from source"          WIN32 OR ANDROID OR APPLE )
185 OCV_OPTION(BUILD_TBB                "Download and build TBB from source" ANDROID )
186
187 # OpenCV installation options
188 # ===================================================
189 OCV_OPTION(INSTALL_CREATE_DISTRIB   "Change install rules to build the distribution package" OFF )
190 OCV_OPTION(INSTALL_C_EXAMPLES       "Install C examples"        OFF )
191 OCV_OPTION(INSTALL_PYTHON_EXAMPLES  "Install Python examples"   OFF )
192 OCV_OPTION(INSTALL_ANDROID_EXAMPLES "Install Android examples"  OFF IF ANDROID )
193 OCV_OPTION(INSTALL_TO_MANGLED_PATHS "Enables mangled install paths, that help with side by side installs." OFF IF (UNIX AND NOT ANDROID AND NOT IOS AND BUILD_SHARED_LIBS) )
194
195
196 # OpenCV build options
197 # ===================================================
198 OCV_OPTION(ENABLE_PRECOMPILED_HEADERS "Use precompiled headers"                                  ON   IF (NOT IOS) )
199 OCV_OPTION(ENABLE_SOLUTION_FOLDERS    "Solution folder in Visual Studio or in other IDEs"        (MSVC_IDE OR CMAKE_GENERATOR MATCHES Xcode) )
200 OCV_OPTION(ENABLE_PROFILING           "Enable profiling in the GCC compiler (Add flags: -g -pg)" OFF  IF CMAKE_COMPILER_IS_GNUCXX )
201 OCV_OPTION(ENABLE_OMIT_FRAME_POINTER  "Enable -fomit-frame-pointer for GCC"                      ON   IF CMAKE_COMPILER_IS_GNUCXX AND NOT (APPLE AND CMAKE_COMPILER_IS_CLANGCXX) )
202 OCV_OPTION(ENABLE_POWERPC             "Enable PowerPC for GCC"                                   ON   IF (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_SYSTEM_PROCESSOR MATCHES powerpc.*) )
203 OCV_OPTION(ENABLE_FAST_MATH           "Enable -ffast-math (not recommended for GCC 4.6.x)"       OFF  IF (CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
204 OCV_OPTION(ENABLE_SSE                 "Enable SSE instructions"                                  ON   IF ((MSVC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) )
205 OCV_OPTION(ENABLE_SSE2                "Enable SSE2 instructions"                                 ON   IF ((MSVC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) )
206 OCV_OPTION(ENABLE_SSE3                "Enable SSE3 instructions"                                 ON   IF ((CV_ICC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) )
207 OCV_OPTION(ENABLE_SSSE3               "Enable SSSE3 instructions"                                OFF  IF (CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
208 OCV_OPTION(ENABLE_SSE41               "Enable SSE4.1 instructions"                               OFF  IF ((CV_ICC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) )
209 OCV_OPTION(ENABLE_SSE42               "Enable SSE4.2 instructions"                               OFF  IF (CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
210 OCV_OPTION(ENABLE_AVX                 "Enable AVX instructions"                                  OFF  IF ((MSVC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) )
211 OCV_OPTION(ENABLE_NEON                "Enable NEON instructions"                                 OFF  IF CMAKE_COMPILER_IS_GNUCXX AND ARM )
212 OCV_OPTION(ENABLE_VFPV3               "Enable VFPv3-D32 instructions"                            OFF  IF CMAKE_COMPILER_IS_GNUCXX AND ARM )
213 OCV_OPTION(ENABLE_NOISY_WARNINGS      "Show all warnings even if they are too noisy"             OFF )
214 OCV_OPTION(OPENCV_WARNINGS_ARE_ERRORS "Treat warnings as errors"                                 OFF )
215 OCV_OPTION(ENABLE_WINRT_MODE          "Build with Windows Runtime support"                       OFF  IF WIN32 )
216 OCV_OPTION(ENABLE_WINRT_MODE_NATIVE   "Build with Windows Runtime native C++ support"            OFF  IF WIN32 )
217
218
219 # ----------------------------------------------------------------------------
220 #  Get actual OpenCV version number from sources
221 # ----------------------------------------------------------------------------
222 include(cmake/OpenCVVersion.cmake)
223
224
225 # ----------------------------------------------------------------------------
226 #  Build & install layouts
227 # ----------------------------------------------------------------------------
228
229 # Save libs and executables in the same place
230 set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/bin" CACHE PATH "Output directory for applications" )
231
232 if (ANDROID)
233   if (ANDROID_ABI MATCHES "NEON")
234     set(ENABLE_NEON ON)
235   endif()
236   if (ANDROID_ABI MATCHES "VFPV3")
237     set(ENABLE_VFPV3 ON)
238   endif()
239 endif()
240
241 if(ANDROID OR WIN32)
242   set(OPENCV_DOC_INSTALL_PATH doc)
243 elseif(INSTALL_TO_MANGLED_PATHS)
244   set(OPENCV_DOC_INSTALL_PATH share/OpenCV-${OPENCV_VERSION}/doc)
245 else()
246   set(OPENCV_DOC_INSTALL_PATH share/OpenCV/doc)
247 endif()
248
249 if(WIN32)
250   if(DEFINED OpenCV_RUNTIME AND DEFINED OpenCV_ARCH)
251     set(OpenCV_INSTALL_BINARIES_PREFIX "${OpenCV_ARCH}/${OpenCV_RUNTIME}/")
252   else()
253     message(STATUS "Can't detect runtime and/or arch")
254     set(OpenCV_INSTALL_BINARIES_PREFIX "")
255   endif()
256 else()
257   set(OpenCV_INSTALL_BINARIES_PREFIX "")
258 endif()
259
260 set(OPENCV_SAMPLES_BIN_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}samples")
261
262 set(OPENCV_BIN_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}bin")
263
264 if(ANDROID)
265   set(LIBRARY_OUTPUT_PATH         "${OpenCV_BINARY_DIR}/lib/${ANDROID_NDK_ABI_NAME}")
266   set(3P_LIBRARY_OUTPUT_PATH      "${OpenCV_BINARY_DIR}/3rdparty/lib/${ANDROID_NDK_ABI_NAME}")
267   set(OPENCV_LIB_INSTALL_PATH     sdk/native/libs/${ANDROID_NDK_ABI_NAME})
268   set(OPENCV_3P_LIB_INSTALL_PATH  sdk/native/3rdparty/libs/${ANDROID_NDK_ABI_NAME})
269   set(OPENCV_CONFIG_INSTALL_PATH  sdk/native/jni)
270   set(OPENCV_INCLUDE_INSTALL_PATH sdk/native/jni/include)
271 else()
272   set(LIBRARY_OUTPUT_PATH         "${OpenCV_BINARY_DIR}/lib")
273   set(3P_LIBRARY_OUTPUT_PATH      "${OpenCV_BINARY_DIR}/3rdparty/lib${LIB_SUFFIX}")
274   if(WIN32)
275     if(OpenCV_STATIC)
276       set(OPENCV_LIB_INSTALL_PATH   "${OpenCV_INSTALL_BINARIES_PREFIX}staticlib${LIB_SUFFIX}")
277     else()
278       set(OPENCV_LIB_INSTALL_PATH   "${OpenCV_INSTALL_BINARIES_PREFIX}lib${LIB_SUFFIX}")
279     endif()
280     set(OPENCV_3P_LIB_INSTALL_PATH  "${OpenCV_INSTALL_BINARIES_PREFIX}staticlib${LIB_SUFFIX}")
281   else()
282     set(OPENCV_LIB_INSTALL_PATH     lib${LIB_SUFFIX})
283     set(OPENCV_3P_LIB_INSTALL_PATH  share/OpenCV/3rdparty/${OPENCV_LIB_INSTALL_PATH})
284   endif()
285   set(OPENCV_INCLUDE_INSTALL_PATH "include")
286
287   math(EXPR SIZEOF_VOID_P_BITS "8 * ${CMAKE_SIZEOF_VOID_P}")
288   if(LIB_SUFFIX AND NOT SIZEOF_VOID_P_BITS EQUAL LIB_SUFFIX)
289     set(OPENCV_CONFIG_INSTALL_PATH lib${LIB_SUFFIX}/cmake/opencv)
290   else()
291     set(OPENCV_CONFIG_INSTALL_PATH share/OpenCV)
292   endif()
293 endif()
294
295 set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${OPENCV_LIB_INSTALL_PATH}")
296 set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
297
298 if(INSTALL_TO_MANGLED_PATHS)
299   set(OPENCV_INCLUDE_INSTALL_PATH ${OPENCV_INCLUDE_INSTALL_PATH}/opencv-${OPENCV_VERSION})
300 endif()
301
302 if(WIN32)
303   # Postfix of DLLs:
304   set(OPENCV_DLLVERSION "${OPENCV_VERSION_MAJOR}${OPENCV_VERSION_MINOR}${OPENCV_VERSION_PATCH}")
305   set(OPENCV_DEBUG_POSTFIX d)
306 else()
307   # Postfix of so's:
308   set(OPENCV_DLLVERSION "")
309   set(OPENCV_DEBUG_POSTFIX "")
310 endif()
311
312 if(DEFINED CMAKE_DEBUG_POSTFIX)
313   set(OPENCV_DEBUG_POSTFIX "${CMAKE_DEBUG_POSTFIX}")
314 endif()
315
316
317 # ----------------------------------------------------------------------------
318 #  Path for build/platform -specific headers
319 # ----------------------------------------------------------------------------
320 set(OPENCV_CONFIG_FILE_INCLUDE_DIR "${CMAKE_BINARY_DIR}/" CACHE PATH "Where to create the platform-dependant cvconfig.h")
321 ocv_include_directories(${OPENCV_CONFIG_FILE_INCLUDE_DIR})
322
323 # ----------------------------------------------------------------------------
324 #  Path for additional modules
325 # ----------------------------------------------------------------------------
326 set(OPENCV_EXTRA_MODULES_PATH "" CACHE PATH "Where to look for additional OpenCV modules")
327
328 # ----------------------------------------------------------------------------
329 #  Autodetect if we are in a GIT repository
330 # ----------------------------------------------------------------------------
331 find_host_package(Git QUIET)
332
333 if(GIT_FOUND)
334   execute_process(COMMAND "${GIT_EXECUTABLE}" describe --tags --always --dirty --match "2.[0-9].[0-9]*"
335     WORKING_DIRECTORY "${OpenCV_SOURCE_DIR}"
336     OUTPUT_VARIABLE OPENCV_VCSVERSION
337     RESULT_VARIABLE GIT_RESULT
338     ERROR_QUIET
339     OUTPUT_STRIP_TRAILING_WHITESPACE
340   )
341   if(NOT GIT_RESULT EQUAL 0)
342     set(OPENCV_VCSVERSION "unknown")
343   endif()
344 else()
345   # We don't have git:
346   set(OPENCV_VCSVERSION "unknown")
347 endif()
348
349
350 # ----------------------------------------------------------------------------
351 # OpenCV compiler and linker options
352 # ----------------------------------------------------------------------------
353 # In case of Makefiles if the user does not setup CMAKE_BUILD_TYPE, assume it's Release:
354 if(CMAKE_GENERATOR MATCHES "Makefiles|Ninja" AND "${CMAKE_BUILD_TYPE}" STREQUAL "")
355   set(CMAKE_BUILD_TYPE Release)
356 endif()
357
358 include(cmake/OpenCVCompilerOptions.cmake)
359
360
361 # ----------------------------------------------------------------------------
362 # Use statically or dynamically linked CRT?
363 # Default: dynamic
364 # ----------------------------------------------------------------------------
365 if(MSVC)
366   include(cmake/OpenCVCRTLinkage.cmake)
367 endif(MSVC)
368
369 if(WIN32 AND NOT MINGW)
370   add_definitions(-D_VARIADIC_MAX=10)
371 endif(WIN32 AND NOT MINGW)
372
373
374 # ----------------------------------------------------------------------------
375 #       CHECK FOR SYSTEM LIBRARIES, OPTIONS, ETC..
376 # ----------------------------------------------------------------------------
377 if(UNIX)
378   find_package(PkgConfig QUIET)
379   include(CheckFunctionExists)
380   include(CheckIncludeFile)
381
382   if(NOT APPLE)
383     CHECK_INCLUDE_FILE(pthread.h HAVE_LIBPTHREAD)
384     if(ANDROID)
385       set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} dl m log)
386     elseif(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD|NetBSD|DragonFly")
387       set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} m pthread)
388     else()
389       set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} dl m pthread rt)
390     endif()
391   else()
392     set(HAVE_LIBPTHREAD YES)
393   endif()
394 endif()
395
396 include(cmake/OpenCVPCHSupport.cmake)
397 include(cmake/OpenCVModule.cmake)
398
399 # ----------------------------------------------------------------------------
400 #  Detect 3rd-party libraries
401 # ----------------------------------------------------------------------------
402
403 include(cmake/OpenCVFindLibsGrfmt.cmake)
404 include(cmake/OpenCVFindLibsGUI.cmake)
405 include(cmake/OpenCVFindLibsVideo.cmake)
406 include(cmake/OpenCVFindLibsPerf.cmake)
407
408
409 # ----------------------------------------------------------------------------
410 #  Detect other 3rd-party libraries/tools
411 # ----------------------------------------------------------------------------
412
413 # --- LATEX for pdf documentation ---
414 if(BUILD_DOCS)
415   include(cmake/OpenCVFindLATEX.cmake)
416 endif(BUILD_DOCS)
417
418 # --- Python Support ---
419 include(cmake/OpenCVDetectPython.cmake)
420
421 # --- Java Support ---
422 include(cmake/OpenCVDetectApacheAnt.cmake)
423 if(ANDROID)
424   include(cmake/OpenCVDetectAndroidSDK.cmake)
425
426   if(NOT ANDROID_TOOLS_Pkg_Revision GREATER 13)
427     message(WARNING "OpenCV requires Android SDK tools revision 14 or newer. Otherwise tests and samples will no be compiled.")
428   endif()
429 else()
430   find_package(JNI)
431 endif()
432
433 if(ANDROID AND ANDROID_EXECUTABLE AND ANT_EXECUTABLE AND (ANT_VERSION VERSION_GREATER 1.7) AND (ANDROID_TOOLS_Pkg_Revision GREATER 13))
434   SET(CAN_BUILD_ANDROID_PROJECTS TRUE)
435 else()
436   SET(CAN_BUILD_ANDROID_PROJECTS FALSE)
437 endif()
438
439 # --- OpenCL ---
440 if(WITH_OPENCL)
441   include(cmake/OpenCVDetectOpenCL.cmake)
442 endif()
443
444 # --- DirectX ---
445 if(WITH_DIRECTX)
446   include(cmake/OpenCVDetectDirectX.cmake)
447 endif()
448
449 # --- Matlab/Octave ---
450 include(cmake/OpenCVFindMatlab.cmake)
451
452 include(cmake/OpenCVDetectVTK.cmake)
453
454 # ----------------------------------------------------------------------------
455 # Add CUDA libraries (needed for apps/tools, samples)
456 # ----------------------------------------------------------------------------
457 if(HAVE_CUDA)
458   set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${CUDA_LIBRARIES} ${CUDA_npp_LIBRARY})
459   if(HAVE_CUBLAS)
460     set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${CUDA_cublas_LIBRARY})
461   endif()
462   if(HAVE_CUFFT)
463     set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${CUDA_cufft_LIBRARY})
464   endif()
465 endif()
466 # ----------------------------------------------------------------------------
467 # Solution folders:
468 # ----------------------------------------------------------------------------
469 if(ENABLE_SOLUTION_FOLDERS)
470   set_property(GLOBAL PROPERTY USE_FOLDERS ON)
471   set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "CMakeTargets")
472 endif()
473
474 # Extra OpenCV targets: uninstall, package_source, perf, etc.
475 include(cmake/OpenCVExtraTargets.cmake)
476
477
478 # ----------------------------------------------------------------------------
479 # Process subdirectories
480 # ----------------------------------------------------------------------------
481
482 # opencv.hpp and legacy headers
483 add_subdirectory(include)
484
485 # OpenCV modules
486 add_subdirectory(modules)
487
488 # Generate targets for documentation
489 add_subdirectory(doc)
490
491 # various data that is used by cv libraries and/or demo applications.
492 add_subdirectory(data)
493
494 # extra applications
495 if(BUILD_opencv_apps)
496   add_subdirectory(apps)
497 endif()
498
499 # examples
500 if(BUILD_EXAMPLES OR BUILD_ANDROID_EXAMPLES OR INSTALL_PYTHON_EXAMPLES)
501   add_subdirectory(samples)
502 endif()
503
504 if(ANDROID)
505   add_subdirectory(platforms/android/service)
506 endif()
507
508 if(BUILD_ANDROID_PACKAGE)
509   add_subdirectory(platforms/android/package)
510 endif()
511
512 if (ANDROID)
513   add_subdirectory(platforms/android/libinfo)
514 endif()
515
516 # ----------------------------------------------------------------------------
517 # Finalization: generate configuration-based files
518 # ----------------------------------------------------------------------------
519 ocv_track_build_dependencies()
520
521 # Generate platform-dependent and configuration-dependent headers
522 include(cmake/OpenCVGenHeaders.cmake)
523
524 # Generate opencv.pc for pkg-config command
525 include(cmake/OpenCVGenPkgconfig.cmake)
526
527 # Generate OpenCV.mk for ndk-build (Android build tool)
528 include(cmake/OpenCVGenAndroidMK.cmake)
529
530 # Generate OpenCVСonfig.cmake and OpenCVConfig-version.cmake for cmake projects
531 include(cmake/OpenCVGenConfig.cmake)
532
533 # Generate Info.plist for the IOS framework
534 include(cmake/OpenCVGenInfoPlist.cmake)
535
536 # ----------------------------------------------------------------------------
537 # Summary:
538 # ----------------------------------------------------------------------------
539 status("")
540 status("General configuration for OpenCV ${OPENCV_VERSION} =====================================")
541 if(OPENCV_VCSVERSION)
542   status("  Version control:" ${OPENCV_VCSVERSION})
543 endif()
544
545 # ========================== build platform ==========================
546 status("")
547 status("  Platform:")
548 status("    Host:"             ${CMAKE_HOST_SYSTEM_NAME} ${CMAKE_HOST_SYSTEM_VERSION} ${CMAKE_HOST_SYSTEM_PROCESSOR})
549 if(CMAKE_CROSSCOMPILING)
550   status("    Target:"         ${CMAKE_SYSTEM_NAME} ${CMAKE_SYSTEM_VERSION} ${CMAKE_SYSTEM_PROCESSOR})
551 endif()
552 status("    CMake:"            ${CMAKE_VERSION})
553 status("    CMake generator:"  ${CMAKE_GENERATOR})
554 status("    CMake build tool:" ${CMAKE_BUILD_TOOL})
555 if(MSVC)
556   status("    MSVC:"           ${MSVC_VERSION})
557 endif()
558 if(CMAKE_GENERATOR MATCHES Xcode)
559   status("    Xcode:"          ${XCODE_VERSION})
560 endif()
561 if(NOT CMAKE_GENERATOR MATCHES "Xcode|Visual Studio")
562   status("    Configuration:"  ${CMAKE_BUILD_TYPE})
563 endif()
564
565 # ========================== C/C++ options ==========================
566 if(CMAKE_CXX_COMPILER_VERSION)
567   set(OPENCV_COMPILER_STR "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} (ver ${CMAKE_CXX_COMPILER_VERSION})")
568 elseif(CMAKE_COMPILER_IS_CLANGCXX)
569   set(OPENCV_COMPILER_STR "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} (ver ${CMAKE_CLANG_REGEX_VERSION})")
570 elseif(CMAKE_COMPILER_IS_GNUCXX)
571   set(OPENCV_COMPILER_STR "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} (ver ${CMAKE_GCC_REGEX_VERSION})")
572 else()
573   set(OPENCV_COMPILER_STR "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1}")
574 endif()
575 string(STRIP "${OPENCV_COMPILER_STR}" OPENCV_COMPILER_STR)
576
577 status("")
578 status("  C/C++:")
579 status("    Built as dynamic libs?:" BUILD_SHARED_LIBS THEN YES ELSE NO)
580 status("    C++ Compiler:"           ${OPENCV_COMPILER_STR})
581 status("    C++ flags (Release):"    ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE})
582 status("    C++ flags (Debug):"      ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG})
583 status("    C Compiler:"             ${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1})
584 status("    C flags (Release):"      ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_RELEASE})
585 status("    C flags (Debug):"        ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_DEBUG})
586 if(WIN32)
587   status("    Linker flags (Release):" ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_RELEASE})
588   status("    Linker flags (Debug):"   ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_DEBUG})
589 else()
590   status("    Linker flags (Release):" ${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS_RELEASE})
591   status("    Linker flags (Debug):"   ${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS_DEBUG})
592 endif()
593 status("    Precompiled headers:"     PCHSupport_FOUND AND ENABLE_PRECOMPILED_HEADERS THEN YES ELSE NO)
594
595 # ========================== OpenCV modules ==========================
596 status("")
597 status("  OpenCV modules:")
598 string(REPLACE "opencv_" "" OPENCV_MODULES_BUILD_ST          "${OPENCV_MODULES_BUILD}")
599 string(REPLACE "opencv_" "" OPENCV_MODULES_DISABLED_USER_ST  "${OPENCV_MODULES_DISABLED_USER}")
600 string(REPLACE "opencv_" "" OPENCV_MODULES_DISABLED_FORCE_ST "${OPENCV_MODULES_DISABLED_FORCE}")
601 set(OPENCV_MODULES_DISABLED_AUTO_ST "")
602 foreach(m ${OPENCV_MODULES_DISABLED_AUTO})
603   set(__mdeps "")
604   foreach(d ${OPENCV_MODULE_${m}_DEPS})
605     if(d MATCHES "^opencv_" AND NOT HAVE_${d})
606       list(APPEND __mdeps ${d})
607     endif()
608   endforeach()
609   if(__mdeps)
610     list(APPEND OPENCV_MODULES_DISABLED_AUTO_ST "${m}(deps: ${__mdeps})")
611   else()
612     list(APPEND OPENCV_MODULES_DISABLED_AUTO_ST "${m}")
613   endif()
614 endforeach()
615 string(REPLACE "opencv_" "" OPENCV_MODULES_DISABLED_AUTO_ST  "${OPENCV_MODULES_DISABLED_AUTO_ST}")
616
617 status("    To be built:"            OPENCV_MODULES_BUILD          THEN ${OPENCV_MODULES_BUILD_ST}          ELSE "-")
618 status("    Disabled:"               OPENCV_MODULES_DISABLED_USER  THEN ${OPENCV_MODULES_DISABLED_USER_ST}  ELSE "-")
619 status("    Disabled by dependency:" OPENCV_MODULES_DISABLED_AUTO  THEN ${OPENCV_MODULES_DISABLED_AUTO_ST}  ELSE "-")
620 status("    Unavailable:"            OPENCV_MODULES_DISABLED_FORCE THEN ${OPENCV_MODULES_DISABLED_FORCE_ST} ELSE "-")
621
622 # ========================== Android details ==========================
623 if(ANDROID)
624   status("")
625   status("  Android: ")
626   status("    Android ABI:" ${ANDROID_ABI})
627   status("    STL type:" ${ANDROID_STL})
628   status("    Native API level:" android-${ANDROID_NATIVE_API_LEVEL})
629   android_get_compatible_target(android_sdk_target_status ${ANDROID_NATIVE_API_LEVEL} ${ANDROID_SDK_TARGET} 11)
630   status("    SDK target:" "${android_sdk_target_status}")
631   if(BUILD_WITH_ANDROID_NDK)
632     status("    Android NDK:" "${ANDROID_NDK} (toolchain: ${ANDROID_TOOLCHAIN_NAME})")
633   elseif(BUILD_WITH_STANDALONE_TOOLCHAIN)
634     status("    Android toolchain:" "${ANDROID_STANDALONE_TOOLCHAIN}")
635   endif()
636   status("    android tool:"  ANDROID_EXECUTABLE  THEN "${ANDROID_EXECUTABLE} (${ANDROID_TOOLS_Pkg_Desc})" ELSE NO)
637   status("    Google Play package:" BUILD_ANDROID_PACKAGE                                         THEN YES ELSE NO)
638   status("    Android examples:"    BUILD_ANDROID_EXAMPLES AND CAN_BUILD_ANDROID_PROJECTS         THEN YES ELSE NO)
639 endif()
640
641 # ================== Windows RT features ==================
642 if(WIN32)
643 status("")
644     status("  Windows RT support:" HAVE_WINRT THEN YES ELSE NO)
645     if (ENABLE_WINRT_MODE OR ENABLE_WINRT_MODE_NATIVE)
646       status("    Windows SDK v8.0:" ${WINDOWS_SDK_PATH})
647       status("    Visual Studio 2012:" ${VISUAL_STUDIO_PATH})
648     endif()
649 endif(WIN32)
650
651 # ========================== GUI ==========================
652 status("")
653 status("  GUI: ")
654
655 if(HAVE_QT5)
656   status("    QT 5.x:"            HAVE_QT        THEN "YES (ver ${Qt5Core_VERSION_STRING})" ELSE NO)
657   status("    QT OpenGL support:" HAVE_QT_OPENGL THEN "YES (${Qt5OpenGL_LIBRARIES} ${Qt5OpenGL_VERSION_STRING})" ELSE NO)
658 elseif(HAVE_QT)
659   status("    QT 4.x:"            HAVE_QT        THEN "YES (ver ${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}.${QT_VERSION_PATCH} ${QT_EDITION})" ELSE NO)
660   status("    QT OpenGL support:" HAVE_QT_OPENGL THEN "YES (${QT_QTOPENGL_LIBRARY})" ELSE NO)
661 else()
662   if(DEFINED WITH_QT)
663     status("    QT:" NO)
664   endif()
665   if(DEFINED WITH_WIN32UI)
666     status("    Win32 UI:" HAVE_WIN32UI THEN YES ELSE NO)
667   else()
668     if(APPLE)
669       if(WITH_CARBON)
670         status("    Carbon:" YES)
671       else()
672         status("    Cocoa:"  YES)
673       endif()
674     else()
675       status("    GTK+ 2.x:" HAVE_GTK      THEN "YES (ver ${ALIASOF_gtk+-2.0_VERSION})"     ELSE NO)
676       status("    GThread :" HAVE_GTHREAD  THEN "YES (ver ${ALIASOF_gthread-2.0_VERSION})"  ELSE NO)
677       status("    GtkGlExt:" HAVE_GTKGLEXT THEN "YES (ver ${ALIASOF_gtkglext-1.0_VERSION})" ELSE NO)
678     endif()
679   endif()
680 endif()
681
682 status("    OpenGL support:" HAVE_OPENGL THEN "YES (${OPENGL_LIBRARIES})" ELSE NO)
683 status("    VTK support:" HAVE_VTK THEN "YES (ver ${VTK_VERSION})" ELSE NO)
684
685 # ========================== MEDIA IO ==========================
686 status("")
687 status("  Media I/O: ")
688 status("    ZLib:"         BUILD_ZLIB    THEN "build (ver ${ZLIB_VERSION_STRING})"               ELSE "${ZLIB_LIBRARIES} (ver ${ZLIB_VERSION_STRING})")
689
690 if(WITH_JPEG)
691   status("    JPEG:"       JPEG_FOUND    THEN "${JPEG_LIBRARY} (ver ${JPEG_LIB_VERSION})"        ELSE "build (ver ${JPEG_LIB_VERSION})")
692 else()
693   status("    JPEG:"       "NO")
694 endif()
695
696 if(WITH_WEBP)
697   status("    WEBP:"       WEBP_FOUND    THEN "${WEBP_LIBRARY} (ver ${WEBP_VERSION})"        ELSE "build (ver ${WEBP_VERSION})")
698 else()
699   status("    WEBP:"       "NO")
700 endif()
701
702 if(WITH_PNG)
703   status("    PNG:"        PNG_FOUND     THEN "${PNG_LIBRARY} (ver ${PNG_VERSION})"              ELSE "build (ver ${PNG_VERSION})")
704 else()
705   status("    PNG:"        "NO")
706 endif()
707 if(WITH_TIFF)
708   if(TIFF_VERSION_STRING AND TIFF_FOUND)
709     status("    TIFF:"     "${TIFF_LIBRARY} (ver ${TIFF_VERSION} - ${TIFF_VERSION_STRING})")
710   else()
711     status("    TIFF:"     TIFF_FOUND    THEN "${TIFF_LIBRARY} (ver ${TIFF_VERSION})"            ELSE "build (ver ${TIFF_VERSION} - ${TIFF_VERSION_STRING})")
712   endif()
713 else()
714   status("    TIFF:"       "NO")
715 endif()
716 if(WITH_JASPER)
717   status("    JPEG 2000:"  JASPER_FOUND  THEN "${JASPER_LIBRARY} (ver ${JASPER_VERSION_STRING})" ELSE "build (ver ${JASPER_VERSION_STRING})")
718 else()
719   status("    JPEG 2000:"  "NO")
720 endif()
721 if(WITH_OPENEXR)
722   status("    OpenEXR:"  OPENEXR_FOUND  THEN "${OPENEXR_LIBRARIES} (ver ${OPENEXR_VERSION})" ELSE "build (ver ${OPENEXR_VERSION})")
723 else()
724   status("    OpenEXR:"  "NO")
725 endif()
726
727 # ========================== VIDEO IO ==========================
728 status("")
729 status("  Video I/O:")
730
731 if (DEFINED WITH_VFW)
732   status("    Video for Windows:" HAVE_VFW         THEN YES                                        ELSE NO)
733 endif(DEFINED WITH_VFW)
734
735 if(DEFINED WITH_1394)
736   status("    DC1394 1.x:"     HAVE_DC1394         THEN "YES (ver ${ALIASOF_libdc1394_VERSION})"   ELSE NO)
737   status("    DC1394 2.x:"     HAVE_DC1394_2       THEN "YES (ver ${ALIASOF_libdc1394-2_VERSION})" ELSE NO)
738 endif(DEFINED WITH_1394)
739
740 if(ANDROID)
741   if(HAVE_opencv_androidcamera)
742     status("    AndroidNativeCamera:" BUILD_ANDROID_CAMERA_WRAPPER
743                                                    THEN "YES, build for Android${ANDROID_VERSION}" ELSE "YES, use prebuilt libraries")
744   else()
745     status("    AndroidNativeCamera:" "NO (native camera requires Android API level 8 or higher)")
746   endif()
747 endif()
748
749 if(DEFINED WITH_AVFOUNDATION)
750   status("    AVFoundation:"   WITH_AVFOUNDATION   THEN YES                                        ELSE NO)
751 endif(DEFINED WITH_AVFOUNDATION)
752
753 if(DEFINED WITH_FFMPEG)
754   if(WIN32)
755     status("    FFMPEG:"       WITH_FFMPEG         THEN "YES (prebuilt binaries)"                  ELSE NO)
756   else()
757     status("    FFMPEG:"       HAVE_FFMPEG         THEN YES ELSE NO)
758   endif()
759   status("      codec:"        HAVE_FFMPEG_CODEC   THEN "YES (ver ${ALIASOF_libavcodec_VERSION})"  ELSE NO)
760   status("      format:"       HAVE_FFMPEG_FORMAT  THEN "YES (ver ${ALIASOF_libavformat_VERSION})" ELSE NO)
761   status("      util:"         HAVE_FFMPEG_UTIL    THEN "YES (ver ${ALIASOF_libavutil_VERSION})"   ELSE NO)
762   status("      swscale:"      HAVE_FFMPEG_SWSCALE THEN "YES (ver ${ALIASOF_libswscale_VERSION})"  ELSE NO)
763   status("      gentoo-style:" HAVE_GENTOO_FFMPEG  THEN YES                                        ELSE NO)
764 endif(DEFINED WITH_FFMPEG)
765
766 if(DEFINED WITH_GSTREAMER)
767   status("    GStreamer:"      HAVE_GSTREAMER      THEN ""                                         ELSE NO)
768   if(HAVE_GSTREAMER)
769     status("      base:"       "YES (ver ${GSTREAMER_BASE_VERSION})")
770     status("      video:"      "YES (ver ${GSTREAMER_VIDEO_VERSION})")
771     status("      app:"        "YES (ver ${GSTREAMER_APP_VERSION})")
772     status("      riff:"       "YES (ver ${GSTREAMER_RIFF_VERSION})")
773     status("      pbutils:"    "YES (ver ${GSTREAMER_PBUTILS_VERSION})")
774   endif(HAVE_GSTREAMER)
775 endif(DEFINED WITH_GSTREAMER)
776
777 if(DEFINED WITH_OPENNI)
778   status("    OpenNI:"         HAVE_OPENNI         THEN "YES (ver ${OPENNI_VERSION_STRING}, build ${OPENNI_VERSION_BUILD})"
779                                                                                                    ELSE NO)
780   status("    OpenNI PrimeSensor Modules:" HAVE_OPENNI_PRIME_SENSOR_MODULE
781                                                    THEN "YES (${OPENNI_PRIME_SENSOR_MODULE})"      ELSE NO)
782 endif(DEFINED WITH_OPENNI)
783
784 if(DEFINED WITH_PVAPI)
785   status("    PvAPI:"          HAVE_PVAPI          THEN YES                                        ELSE NO)
786 endif(DEFINED WITH_PVAPI)
787
788 if(DEFINED WITH_GIGEAPI)
789   status("    GigEVisionSDK:"  HAVE_GIGE_API       THEN YES                                        ELSE NO)
790 endif(DEFINED WITH_GIGEAPI)
791
792 if(DEFINED WITH_QUICKTIME)
793   status("    QuickTime:"      HAVE_QUICKTIME      THEN YES                                        ELSE NO)
794   status("    QTKit:"          HAVE_QTKIT          THEN YES                                        ELSE NO)
795 endif(DEFINED WITH_QUICKTIME)
796
797 if(DEFINED WITH_UNICAP)
798   status("    UniCap:"         HAVE_UNICAP         THEN "YES (ver ${ALIASOF_libunicap_VERSION})"   ELSE NO)
799   status("    UniCap ucil:"    HAVE_UNICAP_UCIL    THEN "YES (ver ${ALIASOF_libucil_VERSION})"     ELSE NO)
800 endif(DEFINED WITH_UNICAP)
801
802 if(DEFINED WITH_V4L)
803   if(HAVE_CAMV4L)
804     set(HAVE_CAMV4L_STR "YES")
805   else()
806     set(HAVE_CAMV4L_STR "NO")
807   endif()
808   if(HAVE_CAMV4L2)
809     set(HAVE_CAMV4L2_STR "YES")
810   elseif(HAVE_VIDEOIO)
811     set(HAVE_CAMV4L2_STR "YES(videoio)")
812   else()
813     set(HAVE_CAMV4L2_STR "NO")
814   endif()
815   status("    V4L/V4L2:"       HAVE_LIBV4L         THEN "Using libv4l (ver ${ALIASOF_libv4l1_VERSION})"
816                                                    ELSE "${HAVE_CAMV4L_STR}/${HAVE_CAMV4L2_STR}")
817 endif(DEFINED WITH_V4L)
818
819 if(DEFINED WITH_DSHOW)
820   status("    DirectShow:"     HAVE_DSHOW     THEN YES                                        ELSE NO)
821 endif(DEFINED WITH_DSHOW)
822
823 if(DEFINED WITH_MSMF)
824   status("    Media Foundation:" HAVE_MSMF    THEN YES                                        ELSE NO)
825 endif(DEFINED WITH_MSMF)
826
827 if(DEFINED WITH_XIMEA)
828   status("    XIMEA:"          HAVE_XIMEA          THEN YES                                        ELSE NO)
829 endif(DEFINED WITH_XIMEA)
830
831 if(DEFINED WITH_XINE)
832   status("    Xine:"           HAVE_XINE           THEN "YES (ver ${ALIASOF_libxine_VERSION})"     ELSE NO)
833 endif(DEFINED WITH_XINE)
834
835 if(DEFINED WITH_INTELPERC)
836   status("    Intel PerC:"     HAVE_INTELPERC      THEN "YES"                                 ELSE NO)
837 endif(DEFINED WITH_INTELPERC)
838
839
840 # ========================== Other third-party libraries ==========================
841 status("")
842 status("  Other third-party libraries:")
843
844 if(WITH_IPP AND IPP_FOUND)
845   status("    Use IPP:" "${IPP_LATEST_VERSION_STR} [${IPP_LATEST_VERSION_MAJOR}.${IPP_LATEST_VERSION_MINOR}.${IPP_LATEST_VERSION_BUILD}]")
846   status("         at:" "${IPP_ROOT_DIR}")
847 else()
848   status("    Use IPP:"   WITH_IPP AND NOT IPP_FOUND THEN "IPP not found" ELSE NO)
849 endif()
850
851 status("    Use Eigen:"      HAVE_EIGEN       THEN "YES (ver ${EIGEN_WORLD_VERSION}.${EIGEN_MAJOR_VERSION}.${EIGEN_MINOR_VERSION})" ELSE NO)
852 status("    Use TBB:"        HAVE_TBB         THEN "YES (ver ${TBB_VERSION_MAJOR}.${TBB_VERSION_MINOR} interface ${TBB_INTERFACE_VERSION})" ELSE NO)
853 status("    Use OpenMP:"     HAVE_OPENMP      THEN YES ELSE NO)
854 status("    Use GCD"         HAVE_GCD         THEN YES ELSE NO)
855 status("    Use Concurrency" HAVE_CONCURRENCY THEN YES ELSE NO)
856 status("    Use C=:"         HAVE_CSTRIPES    THEN YES ELSE NO)
857 status("    Use Cuda:"       HAVE_CUDA        THEN "YES (ver ${CUDA_VERSION_STRING})" ELSE NO)
858 status("    Use OpenCL:"     HAVE_OPENCL      THEN YES ELSE NO)
859
860 if(HAVE_CUDA)
861   status("")
862   status("  NVIDIA CUDA")
863
864   status("    Use CUFFT:"            HAVE_CUFFT   THEN YES ELSE NO)
865   status("    Use CUBLAS:"           HAVE_CUBLAS  THEN YES ELSE NO)
866   status("    USE NVCUVID:"          HAVE_NVCUVID THEN YES ELSE NO)
867   status("    NVIDIA GPU arch:"      ${OPENCV_CUDA_ARCH_BIN})
868   status("    NVIDIA PTX archs:"     ${OPENCV_CUDA_ARCH_PTX})
869   status("    Use fast math:"        CUDA_FAST_MATH THEN YES ELSE NO)
870 endif()
871
872 if(HAVE_OPENCL)
873   status("")
874   status("  OpenCL:")
875   if(HAVE_OPENCL_STATIC)
876     set(__opencl_ver "static")
877   else()
878     set(__opencl_ver "dynamic")
879   endif()
880   status("    Version:"       ${__opencl_ver})
881   if(OPENCL_INCLUDE_DIR)
882     status("    Include path:"       ${OPENCL_INCLUDE_DIRS})
883   endif()
884   if(OPENCL_LIBRARIES)
885     set(__libs "")
886     foreach(l ${OPENCL_LIBRARIES})
887       if(TARGET ${l})
888         get_target_property(p ${l} LOCATION)
889         if(p MATCHES NOTFOUND)
890           list(APPEND __libs "${l}")
891         else()
892           list(APPEND __libs "${p}")
893         endif()
894       else()
895         list(APPEND __libs "${l}")
896       endif()
897     endforeach()
898     status("    libraries:"          ${__libs})
899   endif()
900   status("    Use AMDFFT:"           HAVE_CLAMDFFT  THEN YES ELSE NO)
901   status("    Use AMDBLAS:"          HAVE_CLAMDBLAS THEN YES ELSE NO)
902 endif()
903
904 # ========================== python ==========================
905 status("")
906 status("  Python:")
907 status("    Interpreter:"     PYTHONINTERP_FOUND  THEN "${PYTHON_EXECUTABLE} (ver ${PYTHON_VERSION_STRING})"       ELSE NO)
908 if(BUILD_opencv_python)
909   if(PYTHONLIBS_VERSION_STRING)
910     status("    Libraries:"   HAVE_opencv_python  THEN  "${PYTHON_LIBRARIES} (ver ${PYTHONLIBS_VERSION_STRING})"   ELSE NO)
911   else()
912     status("    Libraries:"   HAVE_opencv_python  THEN  "${PYTHON_LIBRARIES}"                                      ELSE NO)
913   endif()
914   status("    numpy:"         PYTHON_NUMPY_INCLUDE_DIRS THEN "${PYTHON_NUMPY_INCLUDE_DIRS} (ver ${PYTHON_NUMPY_VERSION})" ELSE "NO (Python wrappers can not be generated)")
915   status("    packages path:" PYTHON_EXECUTABLE         THEN "${PYTHON_PACKAGES_PATH}"                                    ELSE "-")
916 endif()
917
918 # ========================== java ==========================
919 status("")
920 status("  Java:")
921 status("    ant:"           ANT_EXECUTABLE      THEN "${ANT_EXECUTABLE} (ver ${ANT_VERSION})"                    ELSE NO)
922 if(NOT ANDROID)
923   status("    JNI:"         JNI_INCLUDE_DIRS    THEN "${JNI_INCLUDE_DIRS}"                                       ELSE NO)
924 endif()
925 status("    Java tests:"    BUILD_TESTS AND (CAN_BUILD_ANDROID_PROJECTS OR HAVE_opencv_java)            THEN YES ELSE NO)
926
927 # ========================= matlab =========================
928 status("")
929 status("  Matlab:")
930 status("    mex:"         MATLAB_MEX_SCRIPT  THEN  "${MATLAB_MEX_SCRIPT}"   ELSE NO)
931 if (MATLAB_FOUND)
932   status("    Compiler/generator:" MEX_WORKS    THEN  "Working"                ELSE "Not working (bindings will not be generated)")
933 endif()
934
935 # ========================== documentation ==========================
936 if(BUILD_DOCS)
937   status("")
938   status("  Documentation:")
939   if(HAVE_SPHINX)
940     status("    Build Documentation:" PDFLATEX_COMPILER      THEN YES ELSE "YES (only HTML and without math expressions)")
941   else()
942     status("    Build Documentation:" NO)
943   endif()
944   status("    Sphinx:"              HAVE_SPHINX              THEN "${SPHINX_BUILD} (ver ${SPHINX_VERSION})" ELSE NO)
945   status("    PdfLaTeX compiler:"   PDFLATEX_COMPILER        THEN "${PDFLATEX_COMPILER}" ELSE NO)
946   status("    PlantUML:"            PLANTUML                 THEN "${PLANTUML}" ELSE NO)
947 endif()
948
949 # ========================== samples and tests ==========================
950 status("")
951 status("  Tests and samples:")
952 status("    Tests:"             BUILD_TESTS AND HAVE_opencv_ts       THEN YES ELSE NO)
953 status("    Performance tests:" BUILD_PERF_TESTS AND HAVE_opencv_ts  THEN YES ELSE NO)
954 status("    C/C++ Examples:"    BUILD_EXAMPLES                       THEN YES ELSE NO)
955
956 # ========================== auxiliary ==========================
957 status("")
958 status("  Install path:" "${CMAKE_INSTALL_PREFIX}")
959 status("")
960 status("  cvconfig.h is in:" "${OPENCV_CONFIG_FILE_INCLUDE_DIR}")
961 status("-----------------------------------------------------------------")
962 status("")
963
964 ocv_finalize_status()
965
966 # ----------------------------------------------------------------------------
967 # Warn in the case of in-source build
968 # ----------------------------------------------------------------------------
969 if("${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}")
970   message(WARNING "The source directory is the same as binary directory. \"make clean\" may damage the source tree")
971 endif()