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 # --------------------------------------------------------------
15 # Indicate CMake 2.7 and above that we don't want to mix relative
16 # and absolute paths in linker lib lists.
17 # Run "cmake --help-policy CMP0003" for more information.
18 # --------------------------------------------------------------
19 if(COMMAND cmake_policy)
20 cmake_policy(SET CMP0003 NEW)
23 # Following block can broke build in case of cross-compilng
24 # but CMAKE_CROSSCOMPILING variable will be set only on project(OpenCV) command
25 # so we will try to detect crosscompiling by presense of CMAKE_TOOLCHAIN_FILE
26 if(NOT CMAKE_TOOLCHAIN_FILE)
27 # it _must_ go before project(OpenCV) in order to work
29 set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "Installation Directory")
31 set(CMAKE_INSTALL_PREFIX "/usr/local" CACHE PATH "Installation Directory")
35 set(CMAKE_USE_RELATIVE_PATHS ON CACHE INTERNAL "" FORCE)
37 else(NOT CMAKE_TOOLCHAIN_FILE)
38 #Android: set output folder to ${CMAKE_BINARY_DIR}
39 set( LIBRARY_OUTPUT_PATH_ROOT ${CMAKE_BINARY_DIR} CACHE PATH "root for library output, set this to change where android libs are compiled to" )
40 endif(NOT CMAKE_TOOLCHAIN_FILE)
42 # --------------------------------------------------------------
43 # Top level OpenCV project
44 # --------------------------------------------------------------
45 if(CMAKE_GENERATOR MATCHES Xcode AND XCODE_VERSION VERSION_GREATER 4.3)
46 cmake_minimum_required(VERSION 2.8.8)
48 cmake_minimum_required(VERSION 2.8.0)
50 cmake_minimum_required(VERSION 2.6.3)
53 # must go before the project command
54 set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Configs" FORCE)
55 if(DEFINED CMAKE_BUILD_TYPE AND CMAKE_VERSION VERSION_GREATER "2.8")
56 set_property( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS ${CMAKE_CONFIGURATION_TYPES} )
61 include(cmake/OpenCVUtils.cmake REQUIRED)
63 # ----------------------------------------------------------------------------
64 # Break in case of popular CMake configuration mistakes
65 # ----------------------------------------------------------------------------
66 if(NOT CMAKE_SIZEOF_VOID_P GREATER 0)
67 message(FATAL_ERROR "CMake fails to deterimine the bitness of target platform.
68 Please check your CMake and compiler installation. If you are crosscompiling then ensure that your CMake toolchain file correctly sets the compiler details.")
71 # ----------------------------------------------------------------------------
72 # Detect compiler and target platform architecture
73 # ----------------------------------------------------------------------------
74 include(cmake/OpenCVDetectCXXCompiler.cmake REQUIRED)
76 # Add these standard paths to the search paths for FIND_LIBRARY
77 # to find libraries from these locations first
78 if(UNIX AND NOT ANDROID)
79 if(X86_64 OR CMAKE_SIZEOF_VOID_P EQUAL 8)
81 list(APPEND CMAKE_LIBRARY_PATH /lib64)
83 list(APPEND CMAKE_LIBRARY_PATH /lib)
86 list(APPEND CMAKE_LIBRARY_PATH /usr/lib64)
88 list(APPEND CMAKE_LIBRARY_PATH /usr/lib)
90 elseif(X86 OR CMAKE_SIZEOF_VOID_P EQUAL 4)
92 list(APPEND CMAKE_LIBRARY_PATH /lib32)
94 list(APPEND CMAKE_LIBRARY_PATH /lib)
97 list(APPEND CMAKE_LIBRARY_PATH /usr/lib32)
99 list(APPEND CMAKE_LIBRARY_PATH /usr/lib)
105 # ----------------------------------------------------------------------------
106 # OpenCV cmake options
107 # ----------------------------------------------------------------------------
109 # Optional 3rd party components
110 # ===================================================
111 OCV_OPTION(WITH_1394 "Include IEEE1394 support" ON IF (UNIX AND NOT ANDROID AND NOT IOS) )
112 OCV_OPTION(WITH_AVFOUNDATION "Use AVFoundation for Video I/O" ON IF IOS)
113 OCV_OPTION(WITH_CARBON "Use Carbon for UI instead of Cocoa" OFF IF APPLE )
114 OCV_OPTION(WITH_CUBLAS "Include NVidia Cuda Basic Linear Algebra Subprograms (BLAS) library support" OFF IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT ANDROID AND NOT IOS) )
115 OCV_OPTION(WITH_CUDA "Include NVidia Cuda Runtime support" ON IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT ANDROID AND NOT IOS) )
116 OCV_OPTION(WITH_CUFFT "Include NVidia Cuda Fast Fourier Transform (FFT) library support" ON IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT ANDROID AND NOT IOS) )
117 OCV_OPTION(WITH_EIGEN "Include Eigen2/Eigen3 support" ON)
118 OCV_OPTION(WITH_FFMPEG "Include FFMPEG support" ON IF (NOT ANDROID AND NOT IOS) )
119 OCV_OPTION(WITH_GSTREAMER "Include Gstreamer support" ON IF (UNIX AND NOT APPLE AND NOT ANDROID AND NOT IOS) )
120 OCV_OPTION(WITH_GTK "Include GTK support" ON IF (UNIX AND NOT APPLE AND NOT ANDROID AND NOT IOS) )
121 OCV_OPTION(WITH_IMAGEIO "ImageIO support for OS X" OFF IF APPLE)
122 OCV_OPTION(WITH_IPP "Include Intel IPP support" OFF IF (MSVC OR X86 OR X86_64) )
123 OCV_OPTION(WITH_JASPER "Include JPEG2K support" ON IF (NOT IOS) )
124 OCV_OPTION(WITH_JPEG "Include JPEG support" ON IF (NOT IOS) )
125 OCV_OPTION(WITH_OPENEXR "Include ILM support via OpenEXR" ON IF (NOT IOS) )
126 OCV_OPTION(WITH_OPENGL "Include OpenGL support" OFF IF (NOT ANDROID AND NOT IOS AND NOT APPLE) )
127 OCV_OPTION(WITH_OPENNI "Include OpenNI support" OFF IF (NOT ANDROID AND NOT IOS) )
128 OCV_OPTION(WITH_PNG "Include PNG support" ON IF (NOT IOS) )
129 OCV_OPTION(WITH_PVAPI "Include Prosilica GigE support" ON IF (NOT ANDROID AND NOT IOS) )
130 OCV_OPTION(WITH_QT "Build with Qt Backend support" OFF IF (NOT ANDROID AND NOT IOS) )
131 OCV_OPTION(WITH_QUICKTIME "Use QuickTime for Video I/O insted of QTKit" OFF IF APPLE )
132 OCV_OPTION(WITH_TBB "Include Intel TBB support" OFF IF (NOT IOS) )
133 OCV_OPTION(WITH_TIFF "Include TIFF support" ON IF (NOT IOS) )
134 OCV_OPTION(WITH_UNICAP "Include Unicap support (GPL)" OFF IF (UNIX AND NOT APPLE AND NOT ANDROID AND NOT IOS) )
135 OCV_OPTION(WITH_V4L "Include Video 4 Linux support" ON IF (UNIX AND NOT APPLE AND NOT ANDROID AND NOT IOS) )
136 OCV_OPTION(WITH_VIDEOINPUT "Build HighGUI with DirectShow support" ON IF WIN32 )
137 OCV_OPTION(WITH_XIMEA "Include XIMEA cameras support" OFF IF WIN32 )
138 OCV_OPTION(WITH_XINE "Include Xine support (GPL)" OFF IF (UNIX AND NOT APPLE AND NOT ANDROID AND NOT IOS) )
139 OCV_OPTION(WITH_CLP "Include Clp support (EPL)" OFF)
141 # OpenCV build components
142 # ===================================================
143 OCV_OPTION(BUILD_SHARED_LIBS "Build shared libraries (.dll/.so) instead of static ones (.lib/.a)" NOT (ANDROID OR IOS) )
144 OCV_OPTION(BUILD_ANDROID_EXAMPLES "Build examples for Android platform" ON IF ANDROID )
145 OCV_OPTION(BUILD_DOCS "Create build rules for OpenCV Documentation" ON )
146 OCV_OPTION(BUILD_EXAMPLES "Build all examples" OFF )
147 OCV_OPTION(BUILD_PACKAGE "Enables 'make package_source' command" ON )
148 OCV_OPTION(BUILD_PERF_TESTS "Build performance tests" ON IF (NOT IOS) )
149 OCV_OPTION(BUILD_TESTS "Build accuracy & regression tests" ON IF (NOT IOS) )
150 OCV_OPTION(BUILD_WITH_DEBUG_INFO "Include debug info into debug libs (not MSCV only)" ON )
151 OCV_OPTION(BUILD_WITH_STATIC_CRT "Enables use of staticaly linked CRT for staticaly linked OpenCV" ON IF MSVC )
152 OCV_OPTION(BUILD_FAT_JAVA_LIB "Create fat java wrapper containing the whole OpenCV library" ON IF ANDROID AND NOT BUILD_SHARED_LIBS AND CMAKE_COMPILER_IS_GNUCXX )
155 OCV_OPTION(BUILD_ZLIB "Build zlib from source" WIN32 OR IOS OR APPLE )
156 OCV_OPTION(BUILD_TIFF "Build libtiff from source" WIN32 OR IOS OR ANDROID OR APPLE )
157 OCV_OPTION(BUILD_JASPER "Build libjasper from source" WIN32 OR IOS OR ANDROID OR APPLE )
158 OCV_OPTION(BUILD_JPEG "Build libjpeg from source" WIN32 OR IOS OR ANDROID OR APPLE )
159 OCV_OPTION(BUILD_PNG "Build libpng from source" WIN32 OR IOS OR ANDROID OR APPLE )
161 # OpenCV installation options
162 # ===================================================
163 OCV_OPTION(INSTALL_C_EXAMPLES "Install C examples" OFF )
164 OCV_OPTION(INSTALL_PYTHON_EXAMPLES "Install Python examples" OFF )
165 OCV_OPTION(INSTALL_ANDROID_EXAMPLES "Install Android examples" OFF IF ANDROID )
166 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) )
169 if(MSVC_IDE OR CMAKE_GENERATOR MATCHES Xcode)
170 set(ENABLE_SOLUTION_FOLDERS0 ON)
172 set(ENABLE_SOLUTION_FOLDERS0 OFF)
175 # OpenCV build options
176 # ===================================================
177 OCV_OPTION(ENABLE_PRECOMPILED_HEADERS "Use precompiled headers" ON IF (NOT IOS) )
178 OCV_OPTION(ENABLE_SOLUTION_FOLDERS "Solution folder in Visual Studio or in other IDEs" ${ENABLE_SOLUTION_FOLDERS0} IF (CMAKE_VERSION VERSION_GREATER "2.8.0") )
179 OCV_OPTION(ENABLE_PROFILING "Enable profiling in the GCC compiler (Add flags: -g -pg)" OFF IF CMAKE_COMPILER_IS_GNUCXX )
180 OCV_OPTION(ENABLE_OMIT_FRAME_POINTER "Enable -fomit-frame-pointer for GCC" ON IF CMAKE_COMPILER_IS_GNUCXX )
181 OCV_OPTION(ENABLE_POWERPC "Enable PowerPC for GCC" ON IF (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_SYSTEM_PROCESSOR MATCHES powerpc.*) )
182 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)) )
183 OCV_OPTION(ENABLE_SSE "Enable SSE instructions" ON IF (MSVC OR CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
184 OCV_OPTION(ENABLE_SSE2 "Enable SSE2 instructions" ON IF (MSVC OR CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
185 OCV_OPTION(ENABLE_SSE3 "Enable SSE3 instructions" OFF IF (CV_ICC OR CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
186 OCV_OPTION(ENABLE_SSSE3 "Enable SSSE3 instructions" OFF IF (CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
187 OCV_OPTION(ENABLE_SSE41 "Enable SSE4.1 instructions" OFF IF (CV_ICC OR CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
188 OCV_OPTION(ENABLE_SSE42 "Enable SSE4.2 instructions" OFF IF (CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
189 OCV_OPTION(ENABLE_NOISY_WARNINGS "Show all warnings even if they are too noisy" OFF )
190 OCV_OPTION(OPENCV_WARNINGS_ARE_ERRORS "Treat warnings as errors" OFF )
192 # uncategorized options
193 # ===================================================
194 OCV_OPTION(CMAKE_VERBOSE "Verbose mode" OFF )
196 # backward compatibility
197 # ===================================================
198 include(cmake/OpenCVLegacyOptions.cmake OPTIONAL)
201 # ----------------------------------------------------------------------------
202 # Get actual OpenCV version number from sources
203 # ----------------------------------------------------------------------------
204 include(cmake/OpenCVVersion.cmake REQUIRED)
207 # ----------------------------------------------------------------------------
208 # Build & install layouts
209 # ----------------------------------------------------------------------------
211 # Save libs and executables in the same place
212 set(LIBRARY_OUTPUT_PATH "${CMAKE_BINARY_DIR}/lib" CACHE PATH "Output directory for libraries" )
213 set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/bin" CACHE PATH "Output directory for applications" )
216 set(OPENCV_DOC_INSTALL_PATH doc)
217 elseif(INSTALL_TO_MANGLED_PATHS)
218 set(OPENCV_DOC_INSTALL_PATH share/OpenCV-${OPENCV_VERSION}/doc)
220 set(OPENCV_DOC_INSTALL_PATH share/OpenCV/doc)
224 set(OPENCV_LIB_INSTALL_PATH libs/${ANDROID_NDK_ABI_NAME})
226 set(OPENCV_LIB_INSTALL_PATH lib${LIB_SUFFIX})
229 set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${OPENCV_LIB_INSTALL_PATH}")
230 set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
232 set(OPENCV_INCLUDE_PREFIX include)
233 if(INSTALL_TO_MANGLED_PATHS)
234 set(OPENCV_INCLUDE_PREFIX include/opencv-${OPENCV_VERSION})
239 set(OPENCV_DLLVERSION "${OPENCV_VERSION_MAJOR}${OPENCV_VERSION_MINOR}${OPENCV_VERSION_PATCH}")
240 set(OPENCV_DEBUG_POSTFIX d)
243 set(OPENCV_DLLVERSION "")
244 set(OPENCV_DEBUG_POSTFIX "")
247 if(DEFINED CMAKE_DEBUG_POSTFIX)
248 set(OPENCV_DEBUG_POSTFIX "${CMAKE_DEBUG_POSTFIX}")
252 set(CMAKE_VERBOSE_MAKEFILE 1)
256 # ----------------------------------------------------------------------------
257 # Path for build/platform -specific headers
258 # ----------------------------------------------------------------------------
259 set(OPENCV_CONFIG_FILE_INCLUDE_DIR "${CMAKE_BINARY_DIR}/" CACHE PATH "Where to create the platform-dependant cvconfig.h")
260 add_definitions(-DHAVE_CVCONFIG_H)
261 ocv_include_directories(${OPENCV_CONFIG_FILE_INCLUDE_DIR})
264 # ----------------------------------------------------------------------------
265 # Autodetect if we are in a SVN repository
266 # ----------------------------------------------------------------------------
267 find_host_program(SVNVERSION_PATH svnversion)
268 mark_as_advanced(force SVNVERSION_PATH)
270 message(STATUS "Extracting svn version, please wait...")
271 execute_process(COMMAND ${SVNVERSION_PATH} -n ${OpenCV_SOURCE_DIR} OUTPUT_VARIABLE SVNVERSION_RESULT)
273 if(SVNVERSION_RESULT MATCHES "exported")
274 # This is NOT a svn repository:
275 set(OPENCV_SVNVERSION "")
276 message(STATUS "SVNVERSION: exported")
278 set(OPENCV_SVNVERSION " svn:${SVNVERSION_RESULT}")
279 message(STATUS "SVNVERSION: ${OPENCV_SVNVERSION}")
282 # We don't have svnversion:
283 set(OPENCV_SVNVERSION "")
287 # ----------------------------------------------------------------------------
288 # OpenCV compiler and linker options
289 # ----------------------------------------------------------------------------
290 include(cmake/OpenCVCompilerOptions.cmake REQUIRED)
292 # In case of Makefiles if the user does not setup CMAKE_BUILD_TYPE, assume it's Release:
293 if(CMAKE_GENERATOR MATCHES "Makefiles|Ninja" AND "${CMAKE_BUILD_TYPE}" STREQUAL "")
294 set(CMAKE_BUILD_TYPE Release)
298 # ----------------------------------------------------------------------------
299 # Use statically or dynamically linked CRT?
301 # ----------------------------------------------------------------------------
303 include(cmake/OpenCVCRTLinkage.cmake REQUIRED)
307 # ----------------------------------------------------------------------------
308 # CHECK FOR SYSTEM LIBRARIES, OPTIONS, ETC..
309 # ----------------------------------------------------------------------------
311 include(cmake/OpenCVFindPkgConfig.cmake OPTIONAL)
312 include(CheckFunctionExists)
313 include(CheckIncludeFile)
316 CHECK_INCLUDE_FILE(alloca.h HAVE_ALLOCA_H)
317 CHECK_FUNCTION_EXISTS(alloca HAVE_ALLOCA)
318 CHECK_INCLUDE_FILE(unistd.h HAVE_UNISTD_H)
319 CHECK_INCLUDE_FILE(pthread.h HAVE_LIBPTHREAD)
321 set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} dl m log)
322 elseif(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD|NetBSD|DragonFly")
323 set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} m pthread)
325 set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} dl m pthread rt)
328 add_definitions(-DHAVE_ALLOCA -DHAVE_ALLOCA_H -DHAVE_LIBPTHREAD -DHAVE_UNISTD_H)
333 # Check to see if we have large file support (needed by zlib)
335 include(CheckTypeSize)
336 check_type_size(off64_t OFF64_T)
338 add_definitions(-D_LARGEFILE64_SOURCE=1)
341 include(cmake/OpenCVPCHSupport.cmake REQUIRED)
342 include(cmake/OpenCVModule.cmake REQUIRED)
344 # ----------------------------------------------------------------------------
345 # Detect 3rd-party libraries
346 # ----------------------------------------------------------------------------
348 include(cmake/OpenCVFindLibsGrfmt.cmake REQUIRED)
349 include(cmake/OpenCVFindLibsGUI.cmake REQUIRED)
350 include(cmake/OpenCVFindLibsVideo.cmake REQUIRED)
351 include(cmake/OpenCVFindLibsPerf.cmake REQUIRED)
354 # ----------------------------------------------------------------------------
355 # Detect other 3rd-party libraries/tools
356 # ----------------------------------------------------------------------------
358 # --- LATEX for pdf documentation ---
360 include(cmake/OpenCVFindLATEX.cmake REQUIRED)
363 # --- Python Support ---
364 include(cmake/OpenCVDetectPython.cmake REQUIRED)
366 # --- Java Support ---
368 include(cmake/OpenCVDetectApacheAnt.cmake REQUIRED)
369 include(cmake/OpenCVDetectAndroidSDK.cmake REQUIRED)
371 if(NOT ANDROID_TOOLS_Pkg_Revision GREATER 13)
372 message(WARNING "OpenCV requires Android SDK tools revision 14 or newer. Otherwise tests and samples will no be compiled.")
376 if(ANDROID AND ANDROID_EXECUTABLE AND ANT_EXECUTABLE AND (ANT_VERSION VERSION_GREATER 1.7) AND (ANDROID_TOOLS_Pkg_Revision GREATER 13))
377 SET(CAN_BUILD_ANDROID_PROJECTS TRUE)
379 SET(CAN_BUILD_ANDROID_PROJECTS FALSE)
383 # ----------------------------------------------------------------------------
385 # ----------------------------------------------------------------------------
386 if(ENABLE_SOLUTION_FOLDERS)
387 set_property(GLOBAL PROPERTY USE_FOLDERS ON)
388 set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "CMakeTargets")
391 # Extra OpenCV targets: uninstall, package_source, perf, etc.
392 include(cmake/OpenCVExtraTargets.cmake REQUIRED)
395 # ----------------------------------------------------------------------------
396 # Process subdirectories
397 # ----------------------------------------------------------------------------
399 # opencv.hpp and legacy headers
400 add_subdirectory(include)
403 add_subdirectory(modules)
405 # Generate targets for documentation
406 add_subdirectory(doc)
408 # various data that is used by cv libraries and/or demo applications.
409 add_subdirectory(data)
412 add_subdirectory(apps)
415 if(BUILD_EXAMPLES OR BUILD_ANDROID_EXAMPLES OR INSTALL_PYTHON_EXAMPLES)
416 add_subdirectory(samples)
420 # ----------------------------------------------------------------------------
421 # Finalization: generate configuration-based files
422 # ----------------------------------------------------------------------------
423 ocv_track_build_dependencies()
425 # Generate platform-dependent and configuration-dependent headers
426 include(cmake/OpenCVGenHeaders.cmake REQUIRED)
428 # Generate opencv.pc for pkg-config command
429 include(cmake/OpenCVGenPkgconfig.cmake REQUIRED)
431 # Generate OpenCV.mk for ndk-build (Android build tool)
432 include(cmake/OpenCVGenAndroidMK.cmake REQUIRED)
434 # Generate OpenCVСonfig.cmake and OpenCVConfig-version.cmake for cmake projects
435 include(cmake/OpenCVGenConfig.cmake REQUIRED)
438 # ----------------------------------------------------------------------------
440 # ----------------------------------------------------------------------------
442 status("General configuration for OpenCV ${OPENCV_VERSION} =====================================")
443 if(OPENCV_SVNVERSION)
444 status("Version control:" ${OPENCV_SVNVERSION})
447 # ========================== build platform ==========================
450 status(" Host:" ${CMAKE_HOST_SYSTEM_NAME} ${CMAKE_HOST_SYSTEM_VERSION} ${CMAKE_HOST_SYSTEM_PROCESSOR})
451 if(CMAKE_CROSSCOMPILING)
452 status(" Target:" ${CMAKE_SYSTEM_NAME} ${CMAKE_SYSTEM_VERSION} ${CMAKE_SYSTEM_PROCESSOR})
454 status(" CMake:" ${CMAKE_VERSION})
455 status(" CMake generator:" ${CMAKE_GENERATOR})
456 status(" CMake build tool:" ${CMAKE_BUILD_TOOL})
458 status(" MSVC:" ${MSVC_VERSION})
460 if(CMAKE_GENERATOR MATCHES Xcode)
461 status(" Xcode:" ${XCODE_VERSION})
463 if(NOT CMAKE_GENERATOR MATCHES "Xcode|Visual Studio")
464 status(" Configuration:" ${CMAKE_BUILD_TYPE})
467 # ========================== C/C++ options ==========================
470 status(" Built as dynamic libs?:" BUILD_SHARED_LIBS THEN YES ELSE NO)
471 status(" C++ Compiler:" CMAKE_COMPILER_IS_GNUCXX THEN "${CMAKE_CXX_COMPILER} (ver ${CMAKE_GCC_REGEX_VERSION})" ELSE "${CMAKE_CXX_COMPILER}" )
472 status(" C++ flags (Release):" ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE})
473 status(" C++ flags (Debug):" ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG})
474 status(" C Compiler:" ${CMAKE_C_COMPILER})
475 status(" C flags (Release):" ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_RELEASE})
476 status(" C flags (Debug):" ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_DEBUG})
478 status(" Linker flags (Release):" ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_RELEASE})
479 status(" Linker flags (Debug):" ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_DEBUG})
481 status(" Linker flags (Release):" ${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS_RELEASE})
482 status(" Linker flags (Debug):" ${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS_DEBUG})
485 # ========================== OpenCV modules ==========================
487 status(" OpenCV modules:")
488 string(REPLACE "opencv_" "" OPENCV_MODULES_BUILD_ST "${OPENCV_MODULES_BUILD}")
489 string(REPLACE "opencv_" "" OPENCV_MODULES_DISABLED_USER_ST "${OPENCV_MODULES_DISABLED_USER}")
490 string(REPLACE "opencv_" "" OPENCV_MODULES_DISABLED_FORCE_ST "${OPENCV_MODULES_DISABLED_FORCE}")
491 set(OPENCV_MODULES_DISABLED_AUTO_ST "")
492 foreach(m ${OPENCV_MODULES_DISABLED_AUTO})
494 foreach(d ${OPENCV_MODULE_${m}_DEPS})
495 if(d MATCHES "^opencv_" AND NOT HAVE_${d})
496 list(APPEND __mdeps ${d})
499 list(APPEND OPENCV_MODULES_DISABLED_AUTO_ST "${m}(deps: ${__mdeps})")
501 string(REPLACE "opencv_" "" OPENCV_MODULES_DISABLED_AUTO_ST "${OPENCV_MODULES_DISABLED_AUTO_ST}")
503 status(" To be built:" OPENCV_MODULES_BUILD THEN ${OPENCV_MODULES_BUILD_ST} ELSE "-")
504 status(" Disabled:" OPENCV_MODULES_DISABLED_USER THEN ${OPENCV_MODULES_DISABLED_USER_ST} ELSE "-")
505 status(" Disabled by dependency:" OPENCV_MODULES_DISABLED_AUTO THEN ${OPENCV_MODULES_DISABLED_AUTO_ST} ELSE "-")
506 status(" Unavailable:" OPENCV_MODULES_DISABLED_FORCE THEN ${OPENCV_MODULES_DISABLED_FORCE_ST} ELSE "-")
508 # ========================== Android details ==========================
512 status(" Android ABI:" ${ANDROID_ABI})
513 status(" Native API level:" android-${ANDROID_NATIVE_API_LEVEL})
514 status(" SDK target:" "${ANDROID_SDK_TARGET}")
515 if(BUILD_WITH_ANDROID_NDK)
516 status(" Android NDK:" "${ANDROID_NDK} (toolchain: ${ANDROID_TOOLCHAIN_NAME})")
517 elseif(BUILD_WITH_STANDALONE_TOOLCHAIN)
518 status(" Android toolchain:" "${ANDROID_STANDALONE_TOOLCHAIN}")
520 status(" android tool:" ANDROID_EXECUTABLE THEN "${ANDROID_EXECUTABLE} (${ANDROID_TOOLS_Pkg_Desc})" ELSE NO)
521 status(" ant:" ANT_EXECUTABLE THEN "${ANT_EXECUTABLE} (ver ${ANT_VERSION})" ELSE NO)
524 # ========================== GUI ==========================
529 status(" QT 4.x:" HAVE_QT THEN "YES (ver ${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}.${QT_VERSION_PATCH} ${QT_EDITION})" ELSE NO)
530 status(" QT OpenGL support:" HAVE_QT_OPENGL THEN "YES (${QT_QTOPENGL_LIBRARY})" ELSE NO)
533 status(" QT 4.x:" NO)
536 status(" Win32 UI:" YES)
540 status(" Carbon:" YES)
542 status(" Cocoa:" YES)
545 status(" GTK+ 2.x:" HAVE_GTK THEN "YES (ver ${ALIASOF_gtk+-2.0_VERSION})" ELSE NO)
546 status(" GThread :" HAVE_GTHREAD THEN "YES (ver ${ALIASOF_gthread-2.0_VERSION})" ELSE NO)
547 status(" GtkGlExt:" HAVE_GTKGLEXT THEN "YES (ver ${ALIASOF_gtkglext-1.0_VERSION})" ELSE NO)
552 status(" OpenGL support:" HAVE_OPENGL THEN "YES (${OPENGL_LIBRARIES})" ELSE NO)
554 # ========================== MEDIA IO ==========================
556 status(" Media I/O: ")
557 status(" ZLib:" BUILD_ZLIB THEN "build (ver ${ZLIB_VERSION_STRING})" ELSE "${ZLIB_LIBRARY} (ver ${ZLIB_VERSION_STRING})")
560 status(" JPEG:" JPEG_FOUND THEN "${JPEG_LIBRARY} (ver ${JPEG_LIB_VERSION})" ELSE "build (ver ${JPEG_LIB_VERSION})")
562 status(" JPEG:" "NO")
565 status(" PNG:" PNG_FOUND THEN "${PNG_LIBRARY} (ver ${PNG_VERSION})" ELSE "build (ver ${PNG_VERSION})")
570 if(TIFF_VERSION_STRING AND TIFF_FOUND)
571 status(" TIFF:" "${TIFF_LIBRARY} (ver ${TIFF_VERSION} - ${TIFF_VERSION_STRING})")
573 status(" TIFF:" TIFF_FOUND THEN "${TIFF_LIBRARY} (ver ${TIFF_VERSION})" ELSE "build (ver ${TIFF_VERSION})")
576 status(" TIFF:" "NO")
579 status(" JPEG 2000:" JASPER_FOUND THEN "${JASPER_LIBRARY} (ver ${JASPER_VERSION_STRING})" ELSE "build (ver ${JASPER_VERSION_STRING})")
581 status(" JPEG 2000:" "NO")
584 status(" OpenEXR:" WITH_OPENEXR AND OPENEXR_FOUND THEN "${OPENEXR_LIBRARIES} (ver ${OPENEXR_VERSION})" ELSE NO)
586 # ========================== VIDEO IO ==========================
588 status(" Video I/O:")
590 if(DEFINED WITH_1394)
591 status(" DC1394 1.x:" HAVE_DC1394 THEN "YES (ver ${ALIASOF_libdc1394_VERSION})" ELSE NO)
592 status(" DC1394 2.x:" HAVE_DC1394_2 THEN "YES (ver ${ALIASOF_libdc1394-2_VERSION})" ELSE NO)
593 endif(DEFINED WITH_1394)
596 if(HAVE_opencv_androidcamera)
597 status(" AndroidNativeCamera:" BUILD_ANDROID_CAMERA_WRAPPER
598 THEN "YES, build for Android${ANDROID_VERSION}" ELSE "YES, use prebuilt libraries")
600 status(" AndroidNativeCamera:" "NO (native camera requires Android API level 8 or higher)")
604 if(DEFINED WITH_AVFOUNDATION)
605 status(" AVFoundation:" WITH_AVFOUNDATION THEN YES ELSE NO)
606 endif(DEFINED WITH_AVFOUNDATION)
608 if(DEFINED WITH_FFMPEG)
610 status(" FFMPEG:" WITH_FFMPEG THEN "YES (prebuilt binaries)" ELSE NO)
612 status(" FFMPEG:" HAVE_FFMPEG THEN YES ELSE NO)
614 status(" codec:" HAVE_FFMPEG_CODEC THEN "YES (ver ${ALIASOF_libavcodec_VERSION})" ELSE NO)
615 status(" format:" HAVE_FFMPEG_FORMAT THEN "YES (ver ${ALIASOF_libavformat_VERSION})" ELSE NO)
616 status(" util:" HAVE_FFMPEG_UTIL THEN "YES (ver ${ALIASOF_libavutil_VERSION})" ELSE NO)
617 status(" swscale:" HAVE_FFMPEG_SWSCALE THEN "YES (ver ${ALIASOF_libswscale_VERSION})" ELSE NO)
618 status(" gentoo-style:" HAVE_GENTOO_FFMPEG THEN YES ELSE NO)
619 endif(DEFINED WITH_FFMPEG)
621 if(DEFINED WITH_GSTREAMER)
622 status(" GStreamer:" HAVE_GSTREAMER THEN "" ELSE NO)
624 status(" base:" "YES (ver ${ALIASOF_gstreamer-base-0.10_VERSION})")
625 status(" app:" "YES (ver ${ALIASOF_gstreamer-app-0.10_VERSION})")
626 status(" video:" "YES (ver ${ALIASOF_gstreamer-video-0.10_VERSION})")
628 endif(DEFINED WITH_GSTREAMER)
630 if(DEFINED WITH_OPENNI)
631 status(" OpenNI:" HAVE_OPENNI THEN "YES (ver ${OPENNI_VERSION_STRING}, build ${OPENNI_VERSION_BUILD})"
633 status(" OpenNI PrimeSensor Modules:" HAVE_OPENNI_PRIME_SENSOR_MODULE
634 THEN "YES (${OPENNI_PRIME_SENSOR_MODULE})" ELSE NO)
635 endif(DEFINED WITH_OPENNI)
637 if(DEFINED WITH_PVAPI)
638 status(" PvAPI:" HAVE_PVAPI THEN YES ELSE NO)
639 endif(DEFINED WITH_PVAPI)
641 if(DEFINED WITH_QUICKTIME)
642 status(" QuickTime:" WITH_QUICKTIME THEN YES ELSE NO)
643 status(" QTKit:" WITH_QUICKTIME THEN NO ELSE YES)
644 endif(DEFINED WITH_QUICKTIME)
646 if(DEFINED WITH_UNICAP)
647 status(" UniCap:" HAVE_UNICAP THEN "YES (ver ${ALIASOF_libunicap_VERSION})" ELSE NO)
648 status(" UniCap ucil:" HAVE_UNICAP_UCIL THEN "YES (ver ${ALIASOF_libucil_VERSION})" ELSE NO)
649 endif(DEFINED WITH_UNICAP)
653 set(HAVE_CAMV4L_STR "YES")
655 set(HAVE_CAMV4L_STR "NO")
658 set(HAVE_CAMV4L2_STR "YES")
660 set(HAVE_CAMV4L2_STR "NO")
662 status(" V4L/V4L2:" HAVE_LIBV4L THEN "Using libv4l (ver ${ALIASOF_libv4l1_VERSION})"
663 ELSE "${HAVE_CAMV4L_STR}/${HAVE_CAMV4L2_STR}")
664 endif(DEFINED WITH_V4L)
666 if(DEFINED WITH_VIDEOINPUT)
667 status(" DirectShow:" HAVE_VIDEOINPUT THEN YES ELSE NO)
668 endif(DEFINED WITH_VIDEOINPUT)
670 if(DEFINED WITH_XIMEA)
671 status(" XIMEA:" HAVE_XIMEA THEN YES ELSE NO)
672 endif(DEFINED WITH_XIMEA)
674 if(DEFINED WITH_XINE)
675 status(" Xine:" HAVE_XINE THEN "YES (ver ${ALIASOF_libxine_VERSION})" ELSE NO)
676 endif(DEFINED WITH_XINE)
678 # ========================== Other third-party libraries ==========================
680 status(" Other third-party libraries:")
683 if(WITH_IPP AND IPP_FOUND)
684 status(" Use IPP:" "${IPP_LATEST_VERSION_STR} [${IPP_LATEST_VERSION_MAJOR}.${IPP_LATEST_VERSION_MINOR}.${IPP_LATEST_VERSION_BUILD}]")
685 status(" at:" "${IPP_ROOT_DIR}")
687 status(" Use IPP:" WITH_IPP AND NOT IPP_FOUND THEN "IPP not found" ELSE NO)
689 endif(DEFINED WITH_IPP)
692 status(" Use TBB:" HAVE_TBB THEN "YES (ver ${TBB_VERSION_MAJOR}.${TBB_VERSION_MINOR} interface ${TBB_INTERFACE_VERSION})" ELSE NO)
693 endif(DEFINED WITH_TBB)
695 if(DEFINED WITH_CUDA)
696 status(" Use Cuda:" HAVE_CUDA THEN "YES (ver ${CUDA_VERSION_STRING})" ELSE NO)
697 endif(DEFINED WITH_CUDA)
699 status(" Use Eigen:" HAVE_EIGEN THEN "YES (ver ${EIGEN_WORLD_VERSION}.${EIGEN_MAJOR_VERSION}.${EIGEN_MINOR_VERSION})" ELSE NO)
700 status(" Use Clp:" HAVE_CLP THEN YES ELSE NO)
704 status(" NVIDIA CUDA:" "(ver ${CUDA_VERSION_STRING})")
706 status(" Use CUFFT:" HAVE_CUFFT THEN YES ELSE NO)
707 status(" Use CUBLAS:" HAVE_CUBLAS THEN YES ELSE NO)
708 status(" NVIDIA GPU arch:" ${OPENCV_CUDA_ARCH_BIN})
709 status(" NVIDIA PTX archs:" ${OPENCV_CUDA_ARCH_BIN})
710 status(" NVIDIA GPU features:" ${OPENCV_CUDA_ARCH_FEATURES})
713 # ========================== python ==========================
716 status(" Interpreter:" PYTHON_EXECUTABLE THEN "${PYTHON_EXECUTABLE} (ver ${PYTHON_VERSION_FULL})" ELSE NO)
717 if(BUILD_opencv_python)
718 if(PYTHONLIBS_VERSION_STRING)
719 status(" Libraries:" HAVE_opencv_python THEN "${PYTHON_LIBRARIES} (ver ${PYTHONLIBS_VERSION_STRING})" ELSE NO)
721 status(" Libraries:" HAVE_opencv_python THEN ${PYTHON_LIBRARIES} ELSE NO)
723 status(" numpy:" PYTHON_USE_NUMPY THEN "${PYTHON_NUMPY_INCLUDE_DIR} (ver ${PYTHON_NUMPY_VERSION})" ELSE "NO (Python wrappers can not be generated)")
724 status(" packages path:" PYTHON_EXECUTABLE THEN "${PYTHON_PACKAGES_PATH}" ELSE "-")
727 # ========================== documentation ==========================
730 status(" Documentation:")
732 status(" Build Documentation:" PDFLATEX_COMPILER THEN YES ELSE "YES (only HTML and without math expressions)")
734 status(" Build Documentation:" NO)
736 status(" Sphinx:" HAVE_SPHINX THEN "${SPHINX_BUILD} (ver ${SPHINX_VERSION})" ELSE NO)
737 status(" PdfLaTeX compiler:" PDFLATEX_COMPILER THEN "${PDFLATEX_COMPILER}" ELSE NO)
740 # ========================== samples and tests ==========================
742 status(" Tests and samples:")
743 status(" Tests:" BUILD_TESTS AND HAVE_opencv_ts THEN YES ELSE NO)
744 status(" Performance tests:" BUILD_PERF_TESTS AND HAVE_opencv_ts THEN YES ELSE NO)
745 status(" Examples:" BUILD_EXAMPLES THEN YES ELSE NO)
748 status(" Android tests:" BUILD_TESTS AND CAN_BUILD_ANDROID_PROJECTS THEN YES ELSE NO)
749 status(" Android examples:" BUILD_ANDROID_EXAMPLES AND CAN_BUILD_ANDROID_PROJECTS THEN YES ELSE NO)
752 # ========================== auxiliary ==========================
754 status(" Install path:" "${CMAKE_INSTALL_PREFIX}")
756 status(" cvconfig.h is in:" "${OPENCV_CONFIG_FILE_INCLUDE_DIR}")
757 status("-----------------------------------------------------------------")
760 ocv_finalize_status()
762 # ----------------------------------------------------------------------------
763 # Warn in the case of in-source build
764 # ----------------------------------------------------------------------------
765 if("${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}")
766 message(WARNING "The source directory is the same as binary directory. \"make clean\" may damage the source tree")