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