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