1 # ----------------------------------------------------------------------------
2 # Root CMake file for OpenCV
4 # From the off-tree build directory, invoke:
5 # $ cmake <PATH_TO_OPENCV_ROOT>
8 # - OCT-2008: Initial version <joseluisblancoc@gmail.com>
10 # ----------------------------------------------------------------------------
12 set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true)
14 # Following block can broke build in case of cross-compilng
15 # but CMAKE_CROSSCOMPILING variable will be set only on project(OpenCV) command
16 # so we will try to detect crosscompiling by presense of CMAKE_TOOLCHAIN_FILE
17 if(NOT CMAKE_TOOLCHAIN_FILE)
18 # it _must_ go before project(OpenCV) in order to work
20 set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "Installation Directory")
22 set(CMAKE_INSTALL_PREFIX "/usr/local" CACHE PATH "Installation Directory")
24 else(NOT CMAKE_TOOLCHAIN_FILE)
25 #Android: set output folder to ${CMAKE_BINARY_DIR}
26 set( LIBRARY_OUTPUT_PATH_ROOT ${CMAKE_BINARY_DIR} CACHE PATH "root for library output, set this to change where android libs are compiled to" )
28 set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "Installation Directory")
29 endif(NOT CMAKE_TOOLCHAIN_FILE)
31 # --------------------------------------------------------------
32 # Top level OpenCV project
33 # --------------------------------------------------------------
34 if(CMAKE_GENERATOR MATCHES Xcode AND XCODE_VERSION VERSION_GREATER 4.3)
35 cmake_minimum_required(VERSION 2.8.8)
37 cmake_minimum_required(VERSION 2.8.0)
39 cmake_minimum_required(VERSION 2.6.3)
43 cmake_policy(SET CMP0017 NEW)
47 cmake_policy(SET CMP0022 OLD)
51 # silence cmake 3.0+ warnings about reading LOCATION attribute
52 cmake_policy(SET CMP0026 OLD)
55 # must go before the project command
56 set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Configs" FORCE)
57 if(DEFINED CMAKE_BUILD_TYPE AND CMAKE_VERSION VERSION_GREATER "2.8")
58 set_property( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS ${CMAKE_CONFIGURATION_TYPES} )
66 set(CMAKE_USE_RELATIVE_PATHS ON CACHE INTERNAL "" FORCE)
69 include(cmake/OpenCVUtils.cmake)
71 ocv_clear_vars(OpenCVModules_TARGETS)
73 # ----------------------------------------------------------------------------
74 # Break in case of popular CMake configuration mistakes
75 # ----------------------------------------------------------------------------
76 if(NOT CMAKE_SIZEOF_VOID_P GREATER 0)
77 message(FATAL_ERROR "CMake fails to deterimine the bitness of target platform.
78 Please check your CMake and compiler installation. If you are crosscompiling then ensure that your CMake toolchain file correctly sets the compiler details.")
81 # ----------------------------------------------------------------------------
82 # Detect compiler and target platform architecture
83 # ----------------------------------------------------------------------------
84 include(cmake/OpenCVDetectCXXCompiler.cmake)
86 # Add these standard paths to the search paths for FIND_LIBRARY
87 # to find libraries from these locations first
88 if(UNIX AND NOT ANDROID)
89 if(X86_64 OR CMAKE_SIZEOF_VOID_P EQUAL 8)
91 list(APPEND CMAKE_LIBRARY_PATH /lib64)
93 list(APPEND CMAKE_LIBRARY_PATH /lib)
96 list(APPEND CMAKE_LIBRARY_PATH /usr/lib64)
98 list(APPEND CMAKE_LIBRARY_PATH /usr/lib)
100 elseif(X86 OR CMAKE_SIZEOF_VOID_P EQUAL 4)
102 list(APPEND CMAKE_LIBRARY_PATH /lib32)
104 list(APPEND CMAKE_LIBRARY_PATH /lib)
106 if(EXISTS /usr/lib32)
107 list(APPEND CMAKE_LIBRARY_PATH /usr/lib32)
109 list(APPEND CMAKE_LIBRARY_PATH /usr/lib)
114 # Add these standard paths to the search paths for FIND_PATH
115 # to find include files from these locations first
118 list(APPEND CMAKE_INCLUDE_PATH /mingw)
121 list(APPEND CMAKE_INCLUDE_PATH /mingw32)
124 list(APPEND CMAKE_INCLUDE_PATH /mingw64)
128 # ----------------------------------------------------------------------------
129 # OpenCV cmake options
130 # ----------------------------------------------------------------------------
132 # Optional 3rd party components
133 # ===================================================
134 OCV_OPTION(WITH_1394 "Include IEEE1394 support" ON IF (NOT ANDROID AND NOT IOS) )
135 OCV_OPTION(WITH_AVFOUNDATION "Use AVFoundation for Video I/O" ON IF IOS)
136 OCV_OPTION(WITH_CARBON "Use Carbon for UI instead of Cocoa" OFF IF APPLE )
137 OCV_OPTION(WITH_CUDA "Include NVidia Cuda Runtime support" ON IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT IOS) )
138 OCV_OPTION(WITH_VTK "Include VTK library support (and build opencv_viz module eiher)" OFF IF (NOT ANDROID AND NOT IOS) )
139 OCV_OPTION(WITH_CUFFT "Include NVidia Cuda Fast Fourier Transform (FFT) library support" ON IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT IOS) )
140 OCV_OPTION(WITH_CUBLAS "Include NVidia Cuda Basic Linear Algebra Subprograms (BLAS) library support" OFF IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT IOS) )
141 OCV_OPTION(WITH_NVCUVID "Include NVidia Video Decoding library support" OFF IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT ANDROID AND NOT IOS AND NOT APPLE) )
142 OCV_OPTION(WITH_EIGEN "Include Eigen2/Eigen3 support" ON)
143 OCV_OPTION(WITH_VFW "Include Video for Windows support" ON IF WIN32 )
144 OCV_OPTION(WITH_FFMPEG "Include FFMPEG support" ON IF (NOT ANDROID AND NOT IOS))
145 OCV_OPTION(WITH_GSTREAMER "Include Gstreamer support" ON IF (UNIX AND NOT APPLE AND NOT ANDROID) )
146 OCV_OPTION(WITH_GSTREAMER_0_10 "Enable Gstreamer 0.10 support (instead of 1.x)" OFF )
147 OCV_OPTION(WITH_GTK "Include GTK support" ON IF (UNIX AND NOT APPLE AND NOT ANDROID) )
148 OCV_OPTION(WITH_IMAGEIO "ImageIO support for OS X" OFF IF APPLE )
149 OCV_OPTION(WITH_IPP "Include Intel IPP support" OFF IF (MSVC OR X86 OR X86_64) )
150 OCV_OPTION(WITH_JASPER "Include JPEG2K support" ON IF (NOT IOS) )
151 OCV_OPTION(WITH_JPEG "Include JPEG support" ON)
152 OCV_OPTION(WITH_OPENEXR "Include ILM support via OpenEXR" ON IF (NOT IOS) )
153 OCV_OPTION(WITH_OPENGL "Include OpenGL support" OFF IF (NOT ANDROID) )
154 OCV_OPTION(WITH_OPENNI "Include OpenNI support" OFF IF (NOT ANDROID AND NOT IOS) )
155 OCV_OPTION(WITH_PNG "Include PNG support" ON)
156 OCV_OPTION(WITH_PVAPI "Include Prosilica GigE support" ON IF (NOT ANDROID AND NOT IOS) )
157 OCV_OPTION(WITH_GIGEAPI "Include Smartek GigE support" ON IF (NOT ANDROID AND NOT IOS) )
158 OCV_OPTION(WITH_QT "Build with Qt Backend support" OFF IF (NOT ANDROID AND NOT IOS) )
159 OCV_OPTION(WITH_WIN32UI "Build with Win32 UI Backend support" ON IF WIN32 )
160 OCV_OPTION(WITH_QUICKTIME "Use QuickTime for Video I/O insted of QTKit" OFF IF APPLE )
161 OCV_OPTION(WITH_TBB "Include Intel TBB support" OFF IF (NOT IOS) )
162 OCV_OPTION(WITH_OPENMP "Include OpenMP support" OFF)
163 OCV_OPTION(WITH_CSTRIPES "Include C= support" OFF IF WIN32 )
164 OCV_OPTION(WITH_TIFF "Include TIFF support" ON IF (NOT IOS) )
165 OCV_OPTION(WITH_UNICAP "Include Unicap support (GPL)" OFF IF (UNIX AND NOT APPLE AND NOT ANDROID) )
166 OCV_OPTION(WITH_V4L "Include Video 4 Linux support" ON IF (UNIX AND NOT ANDROID) )
167 OCV_OPTION(WITH_LIBV4L "Use libv4l for Video 4 Linux support" ON IF (UNIX AND NOT ANDROID) )
168 OCV_OPTION(WITH_DSHOW "Build HighGUI with DirectShow support" ON IF (WIN32 AND NOT ARM) )
169 OCV_OPTION(WITH_MSMF "Build HighGUI with Media Foundation support" OFF IF WIN32 )
170 OCV_OPTION(WITH_XIMEA "Include XIMEA cameras support" OFF IF (NOT ANDROID) )
171 OCV_OPTION(WITH_XINE "Include Xine support (GPL)" OFF IF (UNIX AND NOT APPLE AND NOT ANDROID) )
172 OCV_OPTION(WITH_OPENCL "Include OpenCL Runtime support" ON IF (NOT IOS) )
173 OCV_OPTION(WITH_OPENCLAMDFFT "Include AMD OpenCL FFT library support" ON IF (NOT ANDROID AND NOT IOS) )
174 OCV_OPTION(WITH_OPENCLAMDBLAS "Include AMD OpenCL BLAS library support" ON IF (NOT ANDROID AND NOT IOS) )
175 OCV_OPTION(WITH_INTELPERC "Include Intel Perceptual Computing support" OFF IF WIN32 )
177 # OpenCV build components
178 # ===================================================
179 OCV_OPTION(BUILD_SHARED_LIBS "Build shared libraries (.dll/.so) instead of static ones (.lib/.a)" NOT (ANDROID OR IOS) )
180 OCV_OPTION(BUILD_opencv_apps "Build utility applications (used for example to train classifiers)" (NOT ANDROID) IF (NOT IOS) )
181 OCV_OPTION(BUILD_ANDROID_EXAMPLES "Build examples for Android platform" ON IF ANDROID )
182 OCV_OPTION(BUILD_DOCS "Create build rules for OpenCV Documentation" ON )
183 OCV_OPTION(BUILD_EXAMPLES "Build all examples" OFF )
184 OCV_OPTION(BUILD_PACKAGE "Enables 'make package_source' command" ON )
185 OCV_OPTION(BUILD_PERF_TESTS "Build performance tests" ON IF (NOT IOS) )
186 OCV_OPTION(BUILD_TESTS "Build accuracy & regression tests" ON IF (NOT IOS) )
187 OCV_OPTION(BUILD_WITH_DEBUG_INFO "Include debug info into debug libs (not MSCV only)" ON )
188 OCV_OPTION(BUILD_WITH_STATIC_CRT "Enables use of staticaly linked CRT for staticaly linked OpenCV" ON IF MSVC )
189 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 )
190 OCV_OPTION(BUILD_ANDROID_SERVICE "Build OpenCV Manager for Google Play" OFF IF ANDROID AND ANDROID_SOURCE_TREE )
191 OCV_OPTION(BUILD_ANDROID_PACKAGE "Build platform-specific package for Google Play" OFF IF ANDROID )
194 OCV_OPTION(BUILD_ZLIB "Build zlib from source" WIN32 OR APPLE )
195 OCV_OPTION(BUILD_TIFF "Build libtiff from source" WIN32 OR ANDROID OR APPLE )
196 OCV_OPTION(BUILD_JASPER "Build libjasper from source" WIN32 OR ANDROID OR APPLE )
197 OCV_OPTION(BUILD_JPEG "Build libjpeg from source" WIN32 OR ANDROID OR APPLE )
198 OCV_OPTION(BUILD_PNG "Build libpng from source" WIN32 OR ANDROID OR APPLE )
199 OCV_OPTION(BUILD_OPENEXR "Build openexr from source" WIN32 OR ANDROID OR APPLE )
200 OCV_OPTION(BUILD_TBB "Download and build TBB from source" ANDROID )
202 # OpenCV installation options
203 # ===================================================
204 OCV_OPTION(INSTALL_CREATE_DISTRIB "Change install rules to build the distribution package" OFF )
205 OCV_OPTION(INSTALL_C_EXAMPLES "Install C examples" OFF )
206 OCV_OPTION(INSTALL_PYTHON_EXAMPLES "Install Python examples" OFF )
207 OCV_OPTION(INSTALL_ANDROID_EXAMPLES "Install Android examples" OFF IF ANDROID )
208 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) )
209 OCV_OPTION(INSTALL_TESTS "Install accuracy and performance test binaries and test data" OFF)
211 # OpenCV build options
212 # ===================================================
213 OCV_OPTION(ENABLE_DYNAMIC_CUDA "Enabled dynamic CUDA linkage" ON IF ANDROID )
214 OCV_OPTION(ENABLE_PRECOMPILED_HEADERS "Use precompiled headers" ON IF (NOT IOS) )
215 OCV_OPTION(ENABLE_SOLUTION_FOLDERS "Solution folder in Visual Studio or in other IDEs" (MSVC_IDE OR CMAKE_GENERATOR MATCHES Xcode) IF (CMAKE_VERSION VERSION_GREATER "2.8.0") )
216 OCV_OPTION(ENABLE_PROFILING "Enable profiling in the GCC compiler (Add flags: -g -pg)" OFF IF CMAKE_COMPILER_IS_GNUCXX )
217 OCV_OPTION(ENABLE_COVERAGE "Enable coverage collection with GCov" OFF IF CMAKE_COMPILER_IS_GNUCXX )
218 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) )
219 OCV_OPTION(ENABLE_POWERPC "Enable PowerPC for GCC" ON IF (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_SYSTEM_PROCESSOR MATCHES powerpc.*) )
220 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)) )
221 OCV_OPTION(ENABLE_SSE "Enable SSE instructions" ON IF ((MSVC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) )
222 OCV_OPTION(ENABLE_SSE2 "Enable SSE2 instructions" ON IF ((MSVC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) )
223 OCV_OPTION(ENABLE_SSE3 "Enable SSE3 instructions" ON IF ((CV_ICC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) )
224 OCV_OPTION(ENABLE_SSSE3 "Enable SSSE3 instructions" OFF IF (CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
225 OCV_OPTION(ENABLE_SSE41 "Enable SSE4.1 instructions" OFF IF ((CV_ICC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) )
226 OCV_OPTION(ENABLE_SSE42 "Enable SSE4.2 instructions" OFF IF (CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
227 OCV_OPTION(ENABLE_AVX "Enable AVX instructions" OFF IF ((MSVC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) )
228 OCV_OPTION(ENABLE_AVX2 "Enable AVX2 instructions" OFF IF ((MSVC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) )
229 OCV_OPTION(ENABLE_NEON "Enable NEON instructions" OFF IF CMAKE_COMPILER_IS_GNUCXX AND ARM )
230 OCV_OPTION(ENABLE_VFPV3 "Enable VFPv3-D32 instructions" OFF IF CMAKE_COMPILER_IS_GNUCXX AND ARM )
231 OCV_OPTION(ENABLE_NOISY_WARNINGS "Show all warnings even if they are too noisy" OFF )
232 OCV_OPTION(OPENCV_WARNINGS_ARE_ERRORS "Treat warnings as errors" OFF )
233 OCV_OPTION(ENABLE_WINRT_MODE "Build with Windows Runtime support" OFF IF WIN32 )
234 OCV_OPTION(ENABLE_WINRT_MODE_NATIVE "Build with Windows Runtime native C++ support" OFF IF WIN32 )
235 OCV_OPTION(ENABLE_LIBVS2013 "Build VS2013 with Visual Studio 2013 libraries" OFF IF WIN32 AND (MSVC_VERSION EQUAL 1800) )
236 OCV_OPTION(ENABLE_WINSDK81 "Build VS2013 with Windows 8.1 SDK" OFF IF WIN32 AND (MSVC_VERSION EQUAL 1800) )
237 OCV_OPTION(ENABLE_WINPHONESDK80 "Build with Windows Phone 8.0 SDK" OFF IF WIN32 AND (MSVC_VERSION EQUAL 1700) )
238 OCV_OPTION(ENABLE_WINPHONESDK81 "Build VS2013 with Windows Phone 8.1 SDK" OFF IF WIN32 AND (MSVC_VERSION EQUAL 1800) )
240 # uncategorized options
241 # ===================================================
242 OCV_OPTION(CMAKE_VERBOSE "Verbose mode" OFF )
244 # backward compatibility
245 # ===================================================
246 include(cmake/OpenCVLegacyOptions.cmake OPTIONAL)
249 # ----------------------------------------------------------------------------
250 # Get actual OpenCV version number from sources
251 # ----------------------------------------------------------------------------
252 include(cmake/OpenCVVersion.cmake)
255 # ----------------------------------------------------------------------------
256 # Build & install layouts
257 # ----------------------------------------------------------------------------
259 # Save libs and executables in the same place
260 set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/bin" CACHE PATH "Output directory for applications" )
263 if (ANDROID_ABI MATCHES "NEON")
266 if (ANDROID_ABI MATCHES "VFPV3")
272 set(OPENCV_DOC_INSTALL_PATH doc)
273 elseif(INSTALL_TO_MANGLED_PATHS)
274 set(OPENCV_DOC_INSTALL_PATH share/OpenCV-${OPENCV_VERSION}/doc)
276 set(OPENCV_DOC_INSTALL_PATH share/OpenCV/doc)
280 if(DEFINED OpenCV_RUNTIME AND DEFINED OpenCV_ARCH)
281 set(OpenCV_INSTALL_BINARIES_PREFIX "${OpenCV_ARCH}/${OpenCV_RUNTIME}/")
283 message(STATUS "Can't detect runtime and/or arch")
284 set(OpenCV_INSTALL_BINARIES_PREFIX "")
287 set(OpenCV_INSTALL_BINARIES_PREFIX "sdk/native/")
289 set(OpenCV_INSTALL_BINARIES_PREFIX "")
293 set(OPENCV_SAMPLES_BIN_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}samples/${ANDROID_NDK_ABI_NAME}")
295 set(OPENCV_SAMPLES_BIN_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}samples")
299 set(OPENCV_BIN_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}bin/${ANDROID_NDK_ABI_NAME}")
301 set(OPENCV_BIN_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}bin")
304 if(NOT OPENCV_TEST_INSTALL_PATH)
305 set(OPENCV_TEST_INSTALL_PATH "${OPENCV_BIN_INSTALL_PATH}")
309 set(LIBRARY_OUTPUT_PATH "${OpenCV_BINARY_DIR}/lib/${ANDROID_NDK_ABI_NAME}")
310 set(3P_LIBRARY_OUTPUT_PATH "${OpenCV_BINARY_DIR}/3rdparty/lib/${ANDROID_NDK_ABI_NAME}")
311 set(OPENCV_LIB_INSTALL_PATH sdk/native/libs/${ANDROID_NDK_ABI_NAME})
312 set(OPENCV_3P_LIB_INSTALL_PATH sdk/native/3rdparty/libs/${ANDROID_NDK_ABI_NAME})
313 set(OPENCV_CONFIG_INSTALL_PATH sdk/native/jni)
314 set(OPENCV_INCLUDE_INSTALL_PATH sdk/native/jni/include)
315 set(OPENCV_SAMPLES_SRC_INSTALL_PATH samples/native)
317 set(LIBRARY_OUTPUT_PATH "${OpenCV_BINARY_DIR}/lib")
318 set(3P_LIBRARY_OUTPUT_PATH "${OpenCV_BINARY_DIR}/3rdparty/lib${LIB_SUFFIX}")
321 set(OPENCV_LIB_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}staticlib${LIB_SUFFIX}")
323 set(OPENCV_LIB_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}lib${LIB_SUFFIX}")
325 set(OPENCV_3P_LIB_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}staticlib${LIB_SUFFIX}")
326 set(OPENCV_SAMPLES_SRC_INSTALL_PATH samples/native)
328 set(OPENCV_LIB_INSTALL_PATH lib${LIB_SUFFIX})
329 set(OPENCV_3P_LIB_INSTALL_PATH share/OpenCV/3rdparty/${OPENCV_LIB_INSTALL_PATH})
330 set(OPENCV_SAMPLES_SRC_INSTALL_PATH share/OpenCV/samples)
332 set(OPENCV_INCLUDE_INSTALL_PATH "include")
334 math(EXPR SIZEOF_VOID_P_BITS "8 * ${CMAKE_SIZEOF_VOID_P}")
335 if(LIB_SUFFIX AND NOT SIZEOF_VOID_P_BITS EQUAL LIB_SUFFIX)
336 set(OPENCV_CONFIG_INSTALL_PATH lib${LIB_SUFFIX}/cmake/opencv)
338 set(OPENCV_CONFIG_INSTALL_PATH share/OpenCV)
342 set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${OPENCV_LIB_INSTALL_PATH}")
343 set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
345 if(INSTALL_TO_MANGLED_PATHS)
346 set(OPENCV_INCLUDE_INSTALL_PATH ${OPENCV_INCLUDE_INSTALL_PATH}/opencv-${OPENCV_VERSION})
351 set(OPENCV_DLLVERSION "${OPENCV_VERSION_MAJOR}${OPENCV_VERSION_MINOR}${OPENCV_VERSION_PATCH}")
352 set(OPENCV_DEBUG_POSTFIX d)
355 set(OPENCV_DLLVERSION "")
356 set(OPENCV_DEBUG_POSTFIX "")
359 if(DEFINED CMAKE_DEBUG_POSTFIX)
360 set(OPENCV_DEBUG_POSTFIX "${CMAKE_DEBUG_POSTFIX}")
364 set(CMAKE_VERBOSE_MAKEFILE 1)
368 # ----------------------------------------------------------------------------
369 # Path for build/platform -specific headers
370 # ----------------------------------------------------------------------------
371 set(OPENCV_CONFIG_FILE_INCLUDE_DIR "${CMAKE_BINARY_DIR}/" CACHE PATH "Where to create the platform-dependant cvconfig.h")
372 ocv_include_directories(${OPENCV_CONFIG_FILE_INCLUDE_DIR})
374 # ----------------------------------------------------------------------------
375 # Path for additional modules
376 # ----------------------------------------------------------------------------
377 set(OPENCV_EXTRA_MODULES_PATH "" CACHE PATH "Where to look for additional OpenCV modules")
379 # ----------------------------------------------------------------------------
380 # Autodetect if we are in a GIT repository
381 # ----------------------------------------------------------------------------
383 # don't use FindGit because it requires CMake 2.8.2
384 set(git_names git eg) # eg = easy git
385 # Prefer .cmd variants on Windows unless running in a Makefile in the MSYS shell
387 if(NOT CMAKE_GENERATOR MATCHES "MSYS")
388 set(git_names git.cmd git eg.cmd eg)
392 find_host_program(GIT_EXECUTABLE NAMES ${git_names} PATH_SUFFIXES Git/cmd Git/bin DOC "git command line client")
393 mark_as_advanced(GIT_EXECUTABLE)
396 execute_process(COMMAND ${GIT_EXECUTABLE} describe --tags --always --dirty --match "2.[0-9].[0-9]*"
397 WORKING_DIRECTORY "${OpenCV_SOURCE_DIR}"
398 OUTPUT_VARIABLE OPENCV_VCSVERSION
399 RESULT_VARIABLE GIT_RESULT
401 OUTPUT_STRIP_TRAILING_WHITESPACE
403 if(NOT GIT_RESULT EQUAL 0)
404 set(OPENCV_VCSVERSION "unknown")
408 set(OPENCV_VCSVERSION "unknown")
412 # ----------------------------------------------------------------------------
413 # OpenCV compiler and linker options
414 # ----------------------------------------------------------------------------
415 # In case of Makefiles if the user does not setup CMAKE_BUILD_TYPE, assume it's Release:
416 if(CMAKE_GENERATOR MATCHES "Makefiles|Ninja" AND "${CMAKE_BUILD_TYPE}" STREQUAL "")
417 set(CMAKE_BUILD_TYPE Release)
420 include(cmake/OpenCVCompilerOptions.cmake)
423 # ----------------------------------------------------------------------------
424 # Use statically or dynamically linked CRT?
426 # ----------------------------------------------------------------------------
428 include(cmake/OpenCVCRTLinkage.cmake)
431 if(WIN32 AND NOT MINGW)
432 add_definitions(-D_VARIADIC_MAX=10)
433 endif(WIN32 AND NOT MINGW)
436 # ----------------------------------------------------------------------------
437 # CHECK FOR SYSTEM LIBRARIES, OPTIONS, ETC..
438 # ----------------------------------------------------------------------------
440 include(cmake/OpenCVFindPkgConfig.cmake OPTIONAL)
441 include(CheckFunctionExists)
442 include(CheckIncludeFile)
445 CHECK_INCLUDE_FILE(pthread.h HAVE_LIBPTHREAD)
447 set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} dl m log)
448 elseif(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD|NetBSD|DragonFly")
449 set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} m pthread)
450 elseif(${CMAKE_SYSTEM_NAME} MATCHES "QNX")
451 set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} m)
453 set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} dl m pthread rt)
456 set(HAVE_LIBPTHREAD YES)
460 include(cmake/OpenCVPCHSupport.cmake)
461 include(cmake/OpenCVModule.cmake)
463 # ----------------------------------------------------------------------------
464 # Detect endianness of build platform
465 # ----------------------------------------------------------------------------
467 if(CMAKE_SYSTEM_NAME STREQUAL iOS)
468 # test_big_endian needs try_compile, which doesn't work for iOS
469 # http://public.kitware.com/Bug/view.php?id=12288
470 set(WORDS_BIGENDIAN 0)
472 include(TestBigEndian)
473 test_big_endian(WORDS_BIGENDIAN)
476 # ----------------------------------------------------------------------------
477 # Detect 3rd-party libraries
478 # ----------------------------------------------------------------------------
480 include(cmake/OpenCVFindLibsGrfmt.cmake)
481 include(cmake/OpenCVFindLibsGUI.cmake)
482 include(cmake/OpenCVFindLibsVideo.cmake)
483 include(cmake/OpenCVFindLibsPerf.cmake)
485 # ----------------------------------------------------------------------------
486 # Detect other 3rd-party libraries/tools
487 # ----------------------------------------------------------------------------
489 # --- LATEX for pdf documentation ---
490 unset(HAVE_DOXYGEN CACHE)
492 include(cmake/OpenCVFindLATEX.cmake)
493 find_host_program(DOXYGEN_BUILD doxygen)
496 endif (DOXYGEN_BUILD)
499 # --- Python Support ---
500 include(cmake/OpenCVDetectPython.cmake)
502 # --- Java Support ---
503 include(cmake/OpenCVDetectApacheAnt.cmake)
505 include(cmake/OpenCVDetectAndroidSDK.cmake)
507 if(NOT ANDROID_TOOLS_Pkg_Revision GREATER 13)
508 message(WARNING "OpenCV requires Android SDK tools revision 14 or newer. Otherwise tests and samples will no be compiled.")
514 if(ANDROID AND ANDROID_EXECUTABLE AND ANT_EXECUTABLE AND (ANT_VERSION VERSION_GREATER 1.7) AND (ANDROID_TOOLS_Pkg_Revision GREATER 13))
515 SET(CAN_BUILD_ANDROID_PROJECTS TRUE)
517 SET(CAN_BUILD_ANDROID_PROJECTS FALSE)
522 include(cmake/OpenCVDetectOpenCL.cmake)
525 # --- VTK support ---
526 include(cmake/OpenCVDetectVTK.cmake)
528 # ----------------------------------------------------------------------------
529 # Add CUDA libraries (needed for apps/tools, samples)
530 # ----------------------------------------------------------------------------
532 set(ENABLE_DYNAMIC_CUDA OFF)
535 if(HAVE_CUDA AND NOT ENABLE_DYNAMIC_CUDA)
536 set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${CUDA_LIBRARIES} ${CUDA_npp_LIBRARY})
538 set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${CUDA_cublas_LIBRARY})
541 set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${CUDA_cufft_LIBRARY})
545 # ----------------------------------------------------------------------------
547 # ----------------------------------------------------------------------------
548 if(ENABLE_SOLUTION_FOLDERS)
549 set_property(GLOBAL PROPERTY USE_FOLDERS ON)
550 set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "CMakeTargets")
553 # Extra OpenCV targets: uninstall, package_source, perf, etc.
554 include(cmake/OpenCVExtraTargets.cmake)
557 # ----------------------------------------------------------------------------
558 # Process subdirectories
559 # ----------------------------------------------------------------------------
561 # opencv.hpp and legacy headers
562 add_subdirectory(include)
565 add_subdirectory(modules)
567 # Generate targets for documentation
568 add_subdirectory(doc)
570 # various data that is used by cv libraries and/or demo applications.
571 add_subdirectory(data)
574 if(BUILD_opencv_apps)
575 add_subdirectory(apps)
579 if(BUILD_EXAMPLES OR BUILD_ANDROID_EXAMPLES OR INSTALL_PYTHON_EXAMPLES)
580 add_subdirectory(samples)
584 add_subdirectory(platforms/android/service)
587 if(BUILD_ANDROID_PACKAGE)
588 add_subdirectory(platforms/android/package)
592 add_subdirectory(platforms/android/libinfo)
595 # ----------------------------------------------------------------------------
596 # Finalization: generate configuration-based files
597 # ----------------------------------------------------------------------------
598 ocv_track_build_dependencies()
600 # Generate platform-dependent and configuration-dependent headers
601 include(cmake/OpenCVGenHeaders.cmake)
603 # Generate opencv.pc for pkg-config command
604 include(cmake/OpenCVGenPkgconfig.cmake)
606 # Generate OpenCV.mk for ndk-build (Android build tool)
607 include(cmake/OpenCVGenAndroidMK.cmake)
609 # Generate OpenCVСonfig.cmake and OpenCVConfig-version.cmake for cmake projects
610 include(cmake/OpenCVGenConfig.cmake)
612 # Generate Info.plist for the IOS framework
613 include(cmake/OpenCVGenInfoPlist.cmake)
615 # Generate environment setup file
616 if(INSTALL_TESTS AND OPENCV_TEST_DATA_PATH AND UNIX)
618 get_filename_component(TEST_PATH ${OPENCV_TEST_INSTALL_PATH} DIRECTORY)
619 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/opencv_run_all_tests_android.sh.in"
620 "${CMAKE_BINARY_DIR}/unix-install/opencv_run_all_tests.sh" @ONLY)
621 install(PROGRAMS "${CMAKE_BINARY_DIR}/unix-install/opencv_run_all_tests.sh"
622 DESTINATION ${CMAKE_INSTALL_PREFIX} COMPONENT tests)
624 set(OPENCV_PYTHON_TESTS_LIST "")
625 if(BUILD_opencv_python)
626 file(GLOB py_tests modules/python/test/*.py)
627 install(PROGRAMS ${py_tests} DESTINATION ${OPENCV_TEST_INSTALL_PATH} COMPONENT tests)
628 set(OPENCV_PYTHON_TESTS_LIST "test2.py")
630 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/opencv_testing.sh.in"
631 "${CMAKE_BINARY_DIR}/unix-install/opencv_testing.sh" @ONLY)
632 install(FILES "${CMAKE_BINARY_DIR}/unix-install/opencv_testing.sh"
633 DESTINATION /etc/profile.d/ COMPONENT tests)
634 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/opencv_run_all_tests_unix.sh.in"
635 "${CMAKE_BINARY_DIR}/unix-install/opencv_run_all_tests.sh" @ONLY)
636 install(PROGRAMS "${CMAKE_BINARY_DIR}/unix-install/opencv_run_all_tests.sh"
637 DESTINATION ${OPENCV_TEST_INSTALL_PATH} COMPONENT tests)
641 if(NOT OPENCV_README_FILE)
643 set(OPENCV_README_FILE ${CMAKE_CURRENT_SOURCE_DIR}/platforms/android/README.android)
647 if(NOT OPENCV_LICENSE_FILE)
648 set(OPENCV_LICENSE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE)
651 # for UNIX it does not make sense as LICENSE and readme will be part of the package automatically
652 if(ANDROID OR NOT UNIX)
653 install(FILES ${OPENCV_LICENSE_FILE}
654 PERMISSIONS OWNER_READ GROUP_READ WORLD_READ
655 DESTINATION ${CMAKE_INSTALL_PREFIX} COMPONENT libs)
656 if(OPENCV_README_FILE)
657 install(FILES ${OPENCV_README_FILE}
658 PERMISSIONS OWNER_READ GROUP_READ WORLD_READ
659 DESTINATION ${CMAKE_INSTALL_PREFIX} COMPONENT libs)
663 # ----------------------------------------------------------------------------
665 # ----------------------------------------------------------------------------
667 status("General configuration for OpenCV ${OPENCV_VERSION} =====================================")
668 if(OPENCV_VCSVERSION)
669 status(" Version control:" ${OPENCV_VCSVERSION})
672 # ========================== build platform ==========================
675 status(" Host:" ${CMAKE_HOST_SYSTEM_NAME} ${CMAKE_HOST_SYSTEM_VERSION} ${CMAKE_HOST_SYSTEM_PROCESSOR})
676 if(CMAKE_CROSSCOMPILING)
677 status(" Target:" ${CMAKE_SYSTEM_NAME} ${CMAKE_SYSTEM_VERSION} ${CMAKE_SYSTEM_PROCESSOR})
679 status(" CMake:" ${CMAKE_VERSION})
680 status(" CMake generator:" ${CMAKE_GENERATOR})
681 status(" CMake build tool:" ${CMAKE_BUILD_TOOL})
683 status(" MSVC:" ${MSVC_VERSION})
685 if(CMAKE_GENERATOR MATCHES Xcode)
686 status(" Xcode:" ${XCODE_VERSION})
688 if(NOT CMAKE_GENERATOR MATCHES "Xcode|Visual Studio")
689 status(" Configuration:" ${CMAKE_BUILD_TYPE})
692 # ========================== C/C++ options ==========================
693 if(CMAKE_CXX_COMPILER_VERSION)
694 set(OPENCV_COMPILER_STR "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} (ver ${CMAKE_CXX_COMPILER_VERSION})")
695 elseif(CMAKE_COMPILER_IS_CLANGCXX)
696 set(OPENCV_COMPILER_STR "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} (ver ${CMAKE_CLANG_REGEX_VERSION})")
697 elseif(CMAKE_COMPILER_IS_GNUCXX)
698 set(OPENCV_COMPILER_STR "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} (ver ${CMAKE_GCC_REGEX_VERSION})")
700 set(OPENCV_COMPILER_STR "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1}")
702 string(STRIP "${OPENCV_COMPILER_STR}" OPENCV_COMPILER_STR)
706 status(" Built as dynamic libs?:" BUILD_SHARED_LIBS THEN YES ELSE NO)
707 status(" C++ Compiler:" ${OPENCV_COMPILER_STR})
708 status(" C++ flags (Release):" ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE})
709 status(" C++ flags (Debug):" ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG})
710 status(" C Compiler:" ${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1})
711 status(" C flags (Release):" ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_RELEASE})
712 status(" C flags (Debug):" ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_DEBUG})
714 status(" Linker flags (Release):" ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_RELEASE})
715 status(" Linker flags (Debug):" ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_DEBUG})
717 status(" Linker flags (Release):" ${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS_RELEASE})
718 status(" Linker flags (Debug):" ${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS_DEBUG})
720 status(" Precompiled headers:" PCHSupport_FOUND AND ENABLE_PRECOMPILED_HEADERS THEN YES ELSE NO)
722 # ========================== OpenCV modules ==========================
724 status(" OpenCV modules:")
725 string(REPLACE "opencv_" "" OPENCV_MODULES_BUILD_ST "${OPENCV_MODULES_BUILD}")
726 string(REPLACE "opencv_" "" OPENCV_MODULES_DISABLED_USER_ST "${OPENCV_MODULES_DISABLED_USER}")
727 string(REPLACE "opencv_" "" OPENCV_MODULES_DISABLED_FORCE_ST "${OPENCV_MODULES_DISABLED_FORCE}")
728 set(OPENCV_MODULES_DISABLED_AUTO_ST "")
729 foreach(m ${OPENCV_MODULES_DISABLED_AUTO})
731 foreach(d ${OPENCV_MODULE_${m}_DEPS})
732 if(d MATCHES "^opencv_" AND NOT HAVE_${d})
733 list(APPEND __mdeps ${d})
737 list(APPEND OPENCV_MODULES_DISABLED_AUTO_ST "${m}(deps: ${__mdeps})")
739 list(APPEND OPENCV_MODULES_DISABLED_AUTO_ST "${m}")
742 string(REPLACE "opencv_" "" OPENCV_MODULES_DISABLED_AUTO_ST "${OPENCV_MODULES_DISABLED_AUTO_ST}")
744 status(" To be built:" OPENCV_MODULES_BUILD THEN ${OPENCV_MODULES_BUILD_ST} ELSE "-")
745 status(" Disabled:" OPENCV_MODULES_DISABLED_USER THEN ${OPENCV_MODULES_DISABLED_USER_ST} ELSE "-")
746 status(" Disabled by dependency:" OPENCV_MODULES_DISABLED_AUTO THEN ${OPENCV_MODULES_DISABLED_AUTO_ST} ELSE "-")
747 status(" Unavailable:" OPENCV_MODULES_DISABLED_FORCE THEN ${OPENCV_MODULES_DISABLED_FORCE_ST} ELSE "-")
749 # ========================== Android details ==========================
753 status(" Android ABI:" ${ANDROID_ABI})
754 status(" STL type:" ${ANDROID_STL})
755 status(" Native API level:" android-${ANDROID_NATIVE_API_LEVEL})
756 android_get_compatible_target(android_sdk_target_status ${ANDROID_NATIVE_API_LEVEL} ${ANDROID_SDK_TARGET} 11)
757 status(" SDK target:" "${android_sdk_target_status}")
758 if(BUILD_WITH_ANDROID_NDK)
759 status(" Android NDK:" "${ANDROID_NDK} (toolchain: ${ANDROID_TOOLCHAIN_NAME})")
760 elseif(BUILD_WITH_STANDALONE_TOOLCHAIN)
761 status(" Android toolchain:" "${ANDROID_STANDALONE_TOOLCHAIN}")
763 status(" android tool:" ANDROID_EXECUTABLE THEN "${ANDROID_EXECUTABLE} (${ANDROID_TOOLS_Pkg_Desc})" ELSE NO)
764 status(" Google Play package:" BUILD_ANDROID_PACKAGE THEN YES ELSE NO)
765 status(" Android examples:" BUILD_ANDROID_EXAMPLES AND CAN_BUILD_ANDROID_PROJECTS THEN YES ELSE NO)
768 # ================== Windows RT features ==================
771 status(" Windows RT support:" HAVE_WINRT THEN YES ELSE NO)
772 if (ENABLE_WINRT_MODE OR ENABLE_WINRT_MODE_NATIVE)
773 status(" Windows (Phone) SDK v8.0/v8.1:" ${WINDOWS_SDK_PATH})
774 status(" Visual Studio 2012/2013:" ${VISUAL_STUDIO_PATH})
778 # ========================== GUI ==========================
783 status(" QT 5.x:" HAVE_QT THEN "YES (ver ${Qt5Core_VERSION_STRING})" ELSE NO)
784 status(" QT OpenGL support:" HAVE_QT_OPENGL THEN "YES (${Qt5OpenGL_LIBRARIES} ${Qt5OpenGL_VERSION_STRING})" ELSE NO)
786 status(" QT 4.x:" HAVE_QT THEN "YES (ver ${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}.${QT_VERSION_PATCH} ${QT_EDITION})" ELSE NO)
787 status(" QT OpenGL support:" HAVE_QT_OPENGL THEN "YES (${QT_QTOPENGL_LIBRARY})" ELSE NO)
792 if(DEFINED WITH_WIN32UI)
793 status(" Win32 UI:" HAVE_WIN32UI THEN YES ELSE NO)
797 status(" Carbon:" YES)
799 status(" Cocoa:" YES)
802 status(" GTK+ 2.x:" HAVE_GTK THEN "YES (ver ${ALIASOF_gtk+-2.0_VERSION})" ELSE NO)
803 status(" GThread :" HAVE_GTHREAD THEN "YES (ver ${ALIASOF_gthread-2.0_VERSION})" ELSE NO)
804 status(" GtkGlExt:" HAVE_GTKGLEXT THEN "YES (ver ${ALIASOF_gtkglext-1.0_VERSION})" ELSE NO)
809 status(" OpenGL support:" HAVE_OPENGL THEN "YES (${OPENGL_LIBRARIES})" ELSE NO)
810 status(" VTK support:" HAVE_VTK THEN "YES (ver ${VTK_VERSION})" ELSE NO)
812 # ========================== MEDIA IO ==========================
814 status(" Media I/O: ")
815 status(" ZLib:" BUILD_ZLIB THEN "build (ver ${ZLIB_VERSION_STRING})" ELSE "${ZLIB_LIBRARY} (ver ${ZLIB_VERSION_STRING})")
818 status(" JPEG:" JPEG_FOUND THEN "${JPEG_LIBRARY} (ver ${JPEG_LIB_VERSION})" ELSE "build (ver ${JPEG_LIB_VERSION})")
820 status(" JPEG:" "NO")
823 status(" PNG:" PNG_FOUND THEN "${PNG_LIBRARY} (ver ${PNG_VERSION})" ELSE "build (ver ${PNG_VERSION})")
828 if(TIFF_VERSION_STRING AND TIFF_FOUND)
829 status(" TIFF:" "${TIFF_LIBRARY} (ver ${TIFF_VERSION} - ${TIFF_VERSION_STRING})")
831 status(" TIFF:" TIFF_FOUND THEN "${TIFF_LIBRARY} (ver ${TIFF_VERSION})" ELSE "build (ver ${TIFF_VERSION} - ${TIFF_VERSION_STRING})")
834 status(" TIFF:" "NO")
837 status(" JPEG 2000:" JASPER_FOUND THEN "${JASPER_LIBRARY} (ver ${JASPER_VERSION_STRING})" ELSE "build (ver ${JASPER_VERSION_STRING})")
839 status(" JPEG 2000:" "NO")
842 status(" OpenEXR:" OPENEXR_FOUND THEN "${OPENEXR_LIBRARIES} (ver ${OPENEXR_VERSION})" ELSE "build (ver ${OPENEXR_VERSION})")
844 status(" OpenEXR:" "NO")
847 # ========================== VIDEO IO ==========================
849 status(" Video I/O:")
851 if (DEFINED WITH_VFW)
852 status(" Video for Windows:" HAVE_VFW THEN YES ELSE NO)
853 endif(DEFINED WITH_VFW)
855 if(DEFINED WITH_1394)
856 status(" DC1394 1.x:" HAVE_DC1394 THEN "YES (ver ${ALIASOF_libdc1394_VERSION})" ELSE NO)
857 status(" DC1394 2.x:" HAVE_DC1394_2 THEN "YES (ver ${ALIASOF_libdc1394-2_VERSION})" ELSE NO)
858 endif(DEFINED WITH_1394)
861 if(HAVE_opencv_androidcamera)
862 status(" AndroidNativeCamera:" BUILD_ANDROID_CAMERA_WRAPPER
863 THEN "YES, build for Android${ANDROID_VERSION}" ELSE "YES, use prebuilt libraries")
865 status(" AndroidNativeCamera:" "NO (native camera requires Android API level 8 or higher)")
869 if(DEFINED WITH_AVFOUNDATION)
870 status(" AVFoundation:" WITH_AVFOUNDATION THEN YES ELSE NO)
871 endif(DEFINED WITH_AVFOUNDATION)
873 if(DEFINED WITH_FFMPEG)
875 status(" FFMPEG:" WITH_FFMPEG THEN "YES (prebuilt binaries)" ELSE NO)
877 status(" FFMPEG:" HAVE_FFMPEG THEN YES ELSE NO)
879 status(" codec:" HAVE_FFMPEG_CODEC THEN "YES (ver ${ALIASOF_libavcodec_VERSION})" ELSE NO)
880 status(" format:" HAVE_FFMPEG_FORMAT THEN "YES (ver ${ALIASOF_libavformat_VERSION})" ELSE NO)
881 status(" util:" HAVE_FFMPEG_UTIL THEN "YES (ver ${ALIASOF_libavutil_VERSION})" ELSE NO)
882 status(" swscale:" HAVE_FFMPEG_SWSCALE THEN "YES (ver ${ALIASOF_libswscale_VERSION})" ELSE NO)
883 status(" gentoo-style:" HAVE_GENTOO_FFMPEG THEN YES ELSE NO)
884 endif(DEFINED WITH_FFMPEG)
886 if(DEFINED WITH_GSTREAMER)
887 status(" GStreamer:" HAVE_GSTREAMER THEN "" ELSE NO)
889 status(" base:" "YES (ver ${GSTREAMER_BASE_VERSION})")
890 status(" video:" "YES (ver ${GSTREAMER_VIDEO_VERSION})")
891 status(" app:" "YES (ver ${GSTREAMER_APP_VERSION})")
892 status(" riff:" "YES (ver ${GSTREAMER_RIFF_VERSION})")
893 status(" pbutils:" "YES (ver ${GSTREAMER_PBUTILS_VERSION})")
894 endif(HAVE_GSTREAMER)
895 endif(DEFINED WITH_GSTREAMER)
897 if(DEFINED WITH_OPENNI)
898 status(" OpenNI:" HAVE_OPENNI THEN "YES (ver ${OPENNI_VERSION_STRING}, build ${OPENNI_VERSION_BUILD})"
900 status(" OpenNI PrimeSensor Modules:" HAVE_OPENNI_PRIME_SENSOR_MODULE
901 THEN "YES (${OPENNI_PRIME_SENSOR_MODULE})" ELSE NO)
902 endif(DEFINED WITH_OPENNI)
904 if(DEFINED WITH_PVAPI)
905 status(" PvAPI:" HAVE_PVAPI THEN YES ELSE NO)
906 endif(DEFINED WITH_PVAPI)
908 if(DEFINED WITH_GIGEAPI)
909 status(" GigEVisionSDK:" HAVE_GIGE_API THEN YES ELSE NO)
910 endif(DEFINED WITH_GIGEAPI)
912 if(DEFINED WITH_QUICKTIME)
913 status(" QuickTime:" HAVE_QUICKTIME THEN YES ELSE NO)
914 status(" QTKit:" HAVE_QTKIT THEN YES ELSE NO)
915 endif(DEFINED WITH_QUICKTIME)
917 if(DEFINED WITH_UNICAP)
918 status(" UniCap:" HAVE_UNICAP THEN "YES (ver ${ALIASOF_libunicap_VERSION})" ELSE NO)
919 status(" UniCap ucil:" HAVE_UNICAP_UCIL THEN "YES (ver ${ALIASOF_libucil_VERSION})" ELSE NO)
920 endif(DEFINED WITH_UNICAP)
924 set(HAVE_CAMV4L_STR "YES")
926 set(HAVE_CAMV4L_STR "NO")
929 set(HAVE_CAMV4L2_STR "YES")
931 set(HAVE_CAMV4L2_STR "YES(videoio)")
933 set(HAVE_CAMV4L2_STR "NO")
935 status(" V4L/V4L2:" HAVE_LIBV4L
936 THEN "Using libv4l1 (ver ${ALIASOF_libv4l1_VERSION}) / libv4l2 (ver ${ALIASOF_libv4l2_VERSION})"
937 ELSE "${HAVE_CAMV4L_STR}/${HAVE_CAMV4L2_STR}")
938 endif(DEFINED WITH_V4L)
940 if(DEFINED WITH_DSHOW)
941 status(" DirectShow:" HAVE_DSHOW THEN YES ELSE NO)
942 endif(DEFINED WITH_DSHOW)
944 if(DEFINED WITH_MSMF)
945 status(" Media Foundation:" HAVE_MSMF THEN YES ELSE NO)
946 endif(DEFINED WITH_MSMF)
948 if(DEFINED WITH_XIMEA)
949 status(" XIMEA:" HAVE_XIMEA THEN YES ELSE NO)
950 endif(DEFINED WITH_XIMEA)
952 if(DEFINED WITH_XINE)
953 status(" Xine:" HAVE_XINE THEN "YES (ver ${ALIASOF_libxine_VERSION})" ELSE NO)
954 endif(DEFINED WITH_XINE)
956 if(DEFINED WITH_INTELPERC)
957 status(" Intel PerC:" HAVE_INTELPERC THEN "YES" ELSE NO)
958 endif(DEFINED WITH_INTELPERC)
961 # ========================== Other third-party libraries ==========================
963 status(" Other third-party libraries:")
965 if(WITH_IPP AND IPP_FOUND)
966 status(" Use IPP:" "${IPP_LATEST_VERSION_STR} [${IPP_LATEST_VERSION_MAJOR}.${IPP_LATEST_VERSION_MINOR}.${IPP_LATEST_VERSION_BUILD}]")
967 status(" at:" "${IPP_ROOT_DIR}")
969 status(" Use IPP:" WITH_IPP AND NOT IPP_FOUND THEN "IPP not found" ELSE NO)
972 status(" Use Eigen:" HAVE_EIGEN THEN "YES (ver ${EIGEN_WORLD_VERSION}.${EIGEN_MAJOR_VERSION}.${EIGEN_MINOR_VERSION})" ELSE NO)
973 status(" Use TBB:" HAVE_TBB THEN "YES (ver ${TBB_VERSION_MAJOR}.${TBB_VERSION_MINOR} interface ${TBB_INTERFACE_VERSION})" ELSE NO)
974 status(" Use OpenMP:" HAVE_OPENMP THEN YES ELSE NO)
975 status(" Use GCD" HAVE_GCD THEN YES ELSE NO)
976 status(" Use Concurrency" HAVE_CONCURRENCY THEN YES ELSE NO)
977 status(" Use C=:" HAVE_CSTRIPES THEN YES ELSE NO)
978 status(" Use Cuda:" HAVE_CUDA THEN "YES (ver ${CUDA_VERSION_STRING})" ELSE NO)
979 status(" Use OpenCL:" HAVE_OPENCL THEN YES ELSE NO)
983 status(" NVIDIA CUDA")
985 status(" Use CUFFT:" HAVE_CUFFT THEN YES ELSE NO)
986 status(" Use CUBLAS:" HAVE_CUBLAS THEN YES ELSE NO)
987 status(" USE NVCUVID:" HAVE_NVCUVID THEN YES ELSE NO)
988 status(" NVIDIA GPU arch:" ${OPENCV_CUDA_ARCH_BIN})
989 status(" NVIDIA PTX archs:" ${OPENCV_CUDA_ARCH_PTX})
990 status(" Use fast math:" CUDA_FAST_MATH THEN YES ELSE NO)
996 if(HAVE_OPENCL_STATIC)
997 set(__opencl_ver "static")
999 set(__opencl_ver "dynamic")
1001 status(" Version:" ${__opencl_ver})
1002 if(OPENCL_INCLUDE_DIR)
1003 status(" Include path:" ${OPENCL_INCLUDE_DIRS})
1005 if(OPENCL_LIBRARIES)
1007 foreach(l ${OPENCL_LIBRARIES})
1009 get_target_property(p ${l} LOCATION)
1010 if(p MATCHES NOTFOUND)
1011 list(APPEND __libs "${l}")
1013 list(APPEND __libs "${p}")
1016 list(APPEND __libs "${l}")
1019 status(" libraries:" ${__libs})
1021 status(" Use AMD FFT:" HAVE_CLAMDFFT THEN YES ELSE NO)
1022 status(" Use AMD BLAS:" HAVE_CLAMDBLAS THEN YES ELSE NO)
1025 # ========================== python ==========================
1028 status(" Interpreter:" PYTHON_EXECUTABLE THEN "${PYTHON_EXECUTABLE} (ver ${PYTHON_VERSION_FULL})" ELSE NO)
1029 if(BUILD_opencv_python)
1030 if(PYTHONLIBS_VERSION_STRING)
1031 status(" Libraries:" HAVE_opencv_python THEN "${PYTHON_LIBRARIES} (ver ${PYTHONLIBS_VERSION_STRING})" ELSE NO)
1033 status(" Libraries:" HAVE_opencv_python THEN ${PYTHON_LIBRARIES} ELSE NO)
1035 status(" numpy:" PYTHON_USE_NUMPY THEN "${PYTHON_NUMPY_INCLUDE_DIR} (ver ${PYTHON_NUMPY_VERSION})" ELSE "NO (Python wrappers can not be generated)")
1036 status(" packages path:" PYTHON_EXECUTABLE THEN "${PYTHON_PACKAGES_PATH}" ELSE "-")
1039 # ========================== java ==========================
1042 status(" ant:" ANT_EXECUTABLE THEN "${ANT_EXECUTABLE} (ver ${ANT_VERSION})" ELSE NO)
1044 status(" JNI:" JNI_INCLUDE_DIRS THEN "${JNI_INCLUDE_DIRS}" ELSE NO)
1046 status(" Java tests:" BUILD_TESTS AND (CAN_BUILD_ANDROID_PROJECTS OR HAVE_opencv_java) THEN YES ELSE NO)
1048 # ========================== documentation ==========================
1051 status(" Documentation:")
1053 status(" Build Documentation:" PDFLATEX_COMPILER THEN YES ELSE "YES (only HTML and without math expressions)")
1055 status(" Build Documentation:" NO)
1057 status(" Sphinx:" HAVE_SPHINX THEN "${SPHINX_BUILD} (ver ${SPHINX_VERSION})" ELSE NO)
1058 status(" PdfLaTeX compiler:" PDFLATEX_COMPILER THEN "${PDFLATEX_COMPILER}" ELSE NO)
1059 status(" Doxygen:" HAVE_DOXYGEN THEN "YES (${DOXYGEN_BUILD})" ELSE NO)
1062 # ========================== samples and tests ==========================
1064 status(" Tests and samples:")
1065 status(" Tests:" BUILD_TESTS AND HAVE_opencv_ts THEN YES ELSE NO)
1066 status(" Performance tests:" BUILD_PERF_TESTS AND HAVE_opencv_ts THEN YES ELSE NO)
1067 status(" C/C++ Examples:" BUILD_EXAMPLES THEN YES ELSE NO)
1069 # ========================== auxiliary ==========================
1071 status(" Install path:" "${CMAKE_INSTALL_PREFIX}")
1073 status(" cvconfig.h is in:" "${OPENCV_CONFIG_FILE_INCLUDE_DIR}")
1074 status("-----------------------------------------------------------------")
1077 ocv_finalize_status()
1079 # ----------------------------------------------------------------------------
1080 # Warn in the case of in-source build
1081 # ----------------------------------------------------------------------------
1082 if("${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}")
1083 message(WARNING "The source directory is the same as binary directory. \"make clean\" may damage the source tree")
1086 # ----------------------------------------------------------------------------
1088 # ----------------------------------------------------------------------------
1090 include(cmake/OpenCVPackaging.cmake)