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