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