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