CMakeLists.txt 36.8 KB
Newer Older
A
Alexander Shishkov 已提交
1 2 3 4 5 6 7 8 9 10 11 12
# ----------------------------------------------------------------------------
#  Root CMake file for OpenCV
#
#    From the off-tree build directory, invoke:
#      $ cmake <PATH_TO_OPENCV_ROOT>
#
#
#   - OCT-2008: Initial version <joseluisblancoc@gmail.com>
#
# ----------------------------------------------------------------------------

set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true)
A
Andrey Kamaev 已提交
13

14 15 16 17 18 19
# --------------------------------------------------------------
# Indicate CMake 2.7 and above that we don't want to mix relative
#  and absolute paths in linker lib lists.
# Run "cmake --help-policy CMP0003" for more information.
# --------------------------------------------------------------
if(COMMAND cmake_policy)
A
Andrey Kamaev 已提交
20
  cmake_policy(SET CMP0003 NEW)
21 22
endif()

23 24 25 26
# Following block can broke build in case of cross-compilng
# but CMAKE_CROSSCOMPILING variable will be set only on project(OpenCV) command
# so we will try to detect crosscompiling by presense of CMAKE_TOOLCHAIN_FILE
if(NOT CMAKE_TOOLCHAIN_FILE)
A
Andrey Kamaev 已提交
27 28 29 30 31 32
  # it _must_ go before project(OpenCV) in order to work
  if(WIN32)
    set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "Installation Directory")
  else()
    set(CMAKE_INSTALL_PREFIX "/usr/local" CACHE PATH "Installation Directory")
  endif()
33

A
Andrey Kamaev 已提交
34 35 36
  if(MSVC)
    set(CMAKE_USE_RELATIVE_PATHS ON CACHE INTERNAL "" FORCE)
  endif()
37 38 39
else(NOT CMAKE_TOOLCHAIN_FILE)
  #Android: set output folder to ${CMAKE_BINARY_DIR}
  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
  # any crosscompiling
41
  set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "Installation Directory")
42 43 44 45 46
endif(NOT CMAKE_TOOLCHAIN_FILE)

# --------------------------------------------------------------
# Top level OpenCV project
# --------------------------------------------------------------
V
Vadim Pisarevsky 已提交
47 48 49 50
if(CMAKE_GENERATOR MATCHES Xcode AND XCODE_VERSION VERSION_GREATER 4.3)
  cmake_minimum_required(VERSION 2.8.8)
elseif(IOS)
  cmake_minimum_required(VERSION 2.8.0)
51
else()
V
Vadim Pisarevsky 已提交
52
  cmake_minimum_required(VERSION 2.6.3)
53
endif()
A
Andrey Kamaev 已提交
54

55
# must go before the project command
A
Alexander Shishkov 已提交
56
set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Configs" FORCE)
57
if(DEFINED CMAKE_BUILD_TYPE AND CMAKE_VERSION VERSION_GREATER "2.8")
A
Andrey Kamaev 已提交
58
  set_property( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS ${CMAKE_CONFIGURATION_TYPES} )
A
Andrey Kamaev 已提交
59
endif()
60

V
Vadim Pisarevsky 已提交
61
project(OpenCV CXX C)
A
Andrey Kamaev 已提交
62

63 64
include(cmake/OpenCVUtils.cmake REQUIRED)

65 66 67 68 69 70 71 72
# ----------------------------------------------------------------------------
# Break in case of popular CMake configuration mistakes
# ----------------------------------------------------------------------------
if(NOT CMAKE_SIZEOF_VOID_P GREATER 0)
  message(FATAL_ERROR "CMake fails to deterimine the bitness of target platform.
  Please check your CMake and compiler installation. If you are crosscompiling then ensure that your CMake toolchain file correctly sets the compiler details.")
endif()

73
# ----------------------------------------------------------------------------
A
Andrey Kamaev 已提交
74
# Detect compiler and target platform architecture
A
Andrey Kamaev 已提交
75
# ----------------------------------------------------------------------------
A
Andrey Kamaev 已提交
76
include(cmake/OpenCVDetectCXXCompiler.cmake REQUIRED)
77

78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
# Add these standard paths to the search paths for FIND_LIBRARY
# to find libraries from these locations first
if(UNIX AND NOT ANDROID)
  if(X86_64 OR CMAKE_SIZEOF_VOID_P EQUAL 8)
    if(EXISTS /lib64)
      list(APPEND CMAKE_LIBRARY_PATH /lib64)
    else()
      list(APPEND CMAKE_LIBRARY_PATH /lib)
    endif()
    if(EXISTS /usr/lib64)
      list(APPEND CMAKE_LIBRARY_PATH /usr/lib64)
    else()
      list(APPEND CMAKE_LIBRARY_PATH /usr/lib)
    endif()
  elseif(X86 OR CMAKE_SIZEOF_VOID_P EQUAL 4)
    if(EXISTS /lib32)
      list(APPEND CMAKE_LIBRARY_PATH /lib32)
    else()
      list(APPEND CMAKE_LIBRARY_PATH /lib)
    endif()
    if(EXISTS /usr/lib32)
      list(APPEND CMAKE_LIBRARY_PATH /usr/lib32)
    else()
      list(APPEND CMAKE_LIBRARY_PATH /usr/lib)
    endif()
  endif()
endif()

106

107
# ----------------------------------------------------------------------------
A
Andrey Kamaev 已提交
108
# OpenCV cmake options
109
# ----------------------------------------------------------------------------
110 111 112 113 114 115 116 117 118 119

# Optional 3rd party components
# ===================================================
OCV_OPTION(WITH_1394           "Include IEEE1394 support"                    ON   IF (UNIX AND NOT ANDROID AND NOT IOS) )
OCV_OPTION(WITH_AVFOUNDATION   "Use AVFoundation for Video I/O"              ON   IF IOS)
OCV_OPTION(WITH_CARBON         "Use Carbon for UI instead of Cocoa"          OFF  IF APPLE )
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) )
OCV_OPTION(WITH_CUDA           "Include NVidia Cuda Runtime support"         ON   IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT ANDROID AND NOT IOS) )
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) )
OCV_OPTION(WITH_EIGEN          "Include Eigen2/Eigen3 support"               ON)
120
OCV_OPTION(WITH_FFMPEG         "Include FFMPEG support"                      ON   IF (NOT ANDROID AND NOT IOS) )
121 122
OCV_OPTION(WITH_GSTREAMER      "Include Gstreamer support"                   ON   IF (UNIX AND NOT APPLE AND NOT ANDROID) )
OCV_OPTION(WITH_GTK            "Include GTK support"                         ON   IF (UNIX AND NOT APPLE AND NOT ANDROID) )
123
OCV_OPTION(WITH_IMAGEIO        "ImageIO support for OS X"                    OFF  IF APPLE)
124 125 126 127
OCV_OPTION(WITH_IPP            "Include Intel IPP support"                   OFF  IF (MSVC OR X86 OR X86_64) )
OCV_OPTION(WITH_JASPER         "Include JPEG2K support"                      ON   IF (NOT IOS) )
OCV_OPTION(WITH_JPEG           "Include JPEG support"                        ON   IF (NOT IOS) )
OCV_OPTION(WITH_OPENEXR        "Include ILM support via OpenEXR"             ON   IF (NOT IOS) )
128
OCV_OPTION(WITH_OPENGL         "Include OpenGL support"                      OFF  IF (NOT ANDROID AND NOT APPLE) )
129 130
OCV_OPTION(WITH_OPENNI         "Include OpenNI support"                      OFF  IF (NOT ANDROID AND NOT IOS) )
OCV_OPTION(WITH_PNG            "Include PNG support"                         ON   IF (NOT IOS) )
131
OCV_OPTION(WITH_PVAPI          "Include Prosilica GigE support"              ON   IF (NOT ANDROID AND NOT IOS) )
132 133 134 135
OCV_OPTION(WITH_QT             "Build with Qt Backend support"               OFF  IF (NOT ANDROID AND NOT IOS) )
OCV_OPTION(WITH_QUICKTIME      "Use QuickTime for Video I/O insted of QTKit" OFF  IF APPLE )
OCV_OPTION(WITH_TBB            "Include Intel TBB support"                   OFF  IF (NOT IOS) )
OCV_OPTION(WITH_TIFF           "Include TIFF support"                        ON   IF (NOT IOS) )
136 137
OCV_OPTION(WITH_UNICAP         "Include Unicap support (GPL)"                OFF  IF (UNIX AND NOT APPLE AND NOT ANDROID) )
OCV_OPTION(WITH_V4L            "Include Video 4 Linux support"               ON   IF (UNIX AND NOT APPLE AND NOT ANDROID) )
138
OCV_OPTION(WITH_VIDEOINPUT     "Build HighGUI with DirectShow support"       ON   IF WIN32 )
139 140
OCV_OPTION(WITH_XIMEA          "Include XIMEA cameras support"               OFF  IF (NOT ANDROID AND NOT APPLE) )
OCV_OPTION(WITH_XINE           "Include Xine support (GPL)"                  OFF  IF (UNIX AND NOT APPLE AND NOT ANDROID) )
141
OCV_OPTION(WITH_CLP            "Include Clp support (EPL)"                   OFF)
142
OCV_OPTION(WITH_OPENCL         "Include OpenCL Runtime support"              OFF  IF (NOT ANDROID AND NOT IOS) )
143 144 145
OCV_OPTION(WITH_OPENCLAMDFFT   "Include AMD OpenCL FFT library support"      OFF  IF (NOT ANDROID AND NOT IOS) )
OCV_OPTION(WITH_OPENCLAMDBLAS  "Include AMD OpenCL BLAS library support"     OFF  IF (NOT ANDROID AND NOT IOS) )

146 147 148

# OpenCV build components
# ===================================================
149
OCV_OPTION(BUILD_SHARED_LIBS        "Build shared libraries (.dll/.so) instead of static ones (.lib/.a)" NOT (ANDROID OR IOS) )
150 151 152 153 154 155
OCV_OPTION(BUILD_ANDROID_EXAMPLES   "Build examples for Android platform"         ON  IF ANDROID )
OCV_OPTION(BUILD_DOCS               "Create build rules for OpenCV Documentation" ON )
OCV_OPTION(BUILD_EXAMPLES           "Build all examples"                          OFF )
OCV_OPTION(BUILD_PACKAGE            "Enables 'make package_source' command"       ON )
OCV_OPTION(BUILD_PERF_TESTS         "Build performance tests"                     ON  IF (NOT IOS) )
OCV_OPTION(BUILD_TESTS              "Build accuracy & regression tests"           ON  IF (NOT IOS) )
156
OCV_OPTION(BUILD_WITH_DEBUG_INFO    "Include debug info into debug libs (not MSCV only)" ON )
157
OCV_OPTION(BUILD_WITH_STATIC_CRT    "Enables use of staticaly linked CRT for staticaly linked OpenCV" ON IF MSVC )
158
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 )
159 160
OCV_OPTION(BUILD_ANDROID_SERVICE    "Build OpenCV Manager for Google Play" OFF IF ANDROID AND ANDROID_USE_STLPORT AND ANDROID_SOURCE_TREE )
OCV_OPTION(BUILD_ANDROID_PACKAGE    "Build platform-specific package for Google Play" OFF IF ANDROID )
A
Andrey Kamaev 已提交
161

162

163
# 3rd party libs
V
Vadim Pisarevsky 已提交
164 165 166 167 168
OCV_OPTION(BUILD_ZLIB               "Build zlib from source"         WIN32 OR IOS OR APPLE )
OCV_OPTION(BUILD_TIFF               "Build libtiff from source"      WIN32 OR IOS OR ANDROID OR APPLE )
OCV_OPTION(BUILD_JASPER             "Build libjasper from source"    WIN32 OR IOS OR ANDROID OR APPLE )
OCV_OPTION(BUILD_JPEG               "Build libjpeg from source"      WIN32 OR IOS OR ANDROID OR APPLE )
OCV_OPTION(BUILD_PNG                "Build libpng from source"       WIN32 OR IOS OR ANDROID OR APPLE )
169 170 171 172 173 174

# OpenCV installation options
# ===================================================
OCV_OPTION(INSTALL_C_EXAMPLES       "Install C examples"        OFF )
OCV_OPTION(INSTALL_PYTHON_EXAMPLES  "Install Python examples"   OFF )
OCV_OPTION(INSTALL_ANDROID_EXAMPLES "Install Android examples"  OFF  IF ANDROID )
A
Andrey Kamaev 已提交
175
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) )
176

177

178 179
if(MSVC_IDE OR CMAKE_GENERATOR MATCHES Xcode)
  set(ENABLE_SOLUTION_FOLDERS0 ON)
180
else()
181
  set(ENABLE_SOLUTION_FOLDERS0 OFF)
182
endif()
183

184 185 186
# OpenCV build options
# ===================================================
OCV_OPTION(ENABLE_PRECOMPILED_HEADERS "Use precompiled headers"                                  ON   IF (NOT IOS) )
187
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") )
188 189 190 191
OCV_OPTION(ENABLE_PROFILING           "Enable profiling in the GCC compiler (Add flags: -g -pg)" OFF  IF CMAKE_COMPILER_IS_GNUCXX )
OCV_OPTION(ENABLE_OMIT_FRAME_POINTER  "Enable -fomit-frame-pointer for GCC"                      ON   IF CMAKE_COMPILER_IS_GNUCXX )
OCV_OPTION(ENABLE_POWERPC             "Enable PowerPC for GCC"                                   ON   IF (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_SYSTEM_PROCESSOR MATCHES powerpc.*) )
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)) )
A
Andrey Kamaev 已提交
192 193 194
OCV_OPTION(ENABLE_SSE                 "Enable SSE instructions"                                  ON   IF ((MSVC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) )
OCV_OPTION(ENABLE_SSE2                "Enable SSE2 instructions"                                 ON   IF ((MSVC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) )
OCV_OPTION(ENABLE_SSE3                "Enable SSE3 instructions"                                 ON   IF ((CV_ICC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) )
195
OCV_OPTION(ENABLE_SSSE3               "Enable SSSE3 instructions"                                OFF  IF (CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
A
Andrey Kamaev 已提交
196
OCV_OPTION(ENABLE_SSE41               "Enable SSE4.1 instructions"                               OFF  IF ((CV_ICC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) )
197
OCV_OPTION(ENABLE_SSE42               "Enable SSE4.2 instructions"                               OFF  IF (CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
198
OCV_OPTION(ENABLE_NOISY_WARNINGS      "Show all warnings even if they are too noisy"             OFF )
199
OCV_OPTION(OPENCV_WARNINGS_ARE_ERRORS "Treat warnings as errors"                                 OFF )
200

201

202 203 204 205 206 207
# uncategorized options
# ===================================================
OCV_OPTION(CMAKE_VERBOSE "Verbose mode" OFF )

# backward compatibility
# ===================================================
208
include(cmake/OpenCVLegacyOptions.cmake OPTIONAL)
A
Andrey Kamaev 已提交
209

210

A
Alexander Shishkov 已提交
211
# ----------------------------------------------------------------------------
212
#  Get actual OpenCV version number from sources
A
Alexander Shishkov 已提交
213
# ----------------------------------------------------------------------------
A
Andrey Kamaev 已提交
214
include(cmake/OpenCVVersion.cmake REQUIRED)
A
Alexander Shishkov 已提交
215 216


A
Andrey Kamaev 已提交
217 218 219
# ----------------------------------------------------------------------------
#  Build & install layouts
# ----------------------------------------------------------------------------
220

A
Andrey Kamaev 已提交
221
# Save libs and executables in the same place
A
Andrey Kamaev 已提交
222
set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/bin" CACHE PATH "Output directory for applications" )
A
Andrey Kamaev 已提交
223

224
if(ANDROID OR WIN32)
A
Andrey Kamaev 已提交
225
    set(OPENCV_DOC_INSTALL_PATH doc)
A
Andrey Kamaev 已提交
226
elseif(INSTALL_TO_MANGLED_PATHS)
227
    set(OPENCV_DOC_INSTALL_PATH share/OpenCV-${OPENCV_VERSION}/doc)
A
Andrey Kamaev 已提交
228
else()
229
    set(OPENCV_DOC_INSTALL_PATH share/OpenCV/doc)
A
Andrey Kamaev 已提交
230 231 232
endif()

if(ANDROID)
233 234
    set(LIBRARY_OUTPUT_PATH         "${OpenCV_BINARY_DIR}/lib/${ANDROID_NDK_ABI_NAME}")
    set(3P_LIBRARY_OUTPUT_PATH      "${OpenCV_BINARY_DIR}/3rdparty/lib/${ANDROID_NDK_ABI_NAME}")
A
Andrey Kamaev 已提交
235 236 237 238
    set(OPENCV_LIB_INSTALL_PATH     sdk/native/libs/${ANDROID_NDK_ABI_NAME})
    set(OPENCV_3P_LIB_INSTALL_PATH  sdk/native/3rdparty/libs/${ANDROID_NDK_ABI_NAME})
    set(OPENCV_CONFIG_INSTALL_PATH  sdk/native/jni)
    set(OPENCV_INCLUDE_INSTALL_PATH sdk/native/jni/include)
A
Andrey Kamaev 已提交
239
else()
240 241
    set(LIBRARY_OUTPUT_PATH         "${OpenCV_BINARY_DIR}/lib")
    set(3P_LIBRARY_OUTPUT_PATH      "${OpenCV_BINARY_DIR}/3rdparty/lib${LIB_SUFFIX}")
A
Andrey Kamaev 已提交
242 243 244 245 246 247 248 249 250 251
    set(OPENCV_LIB_INSTALL_PATH     lib${LIB_SUFFIX})
    set(OPENCV_3P_LIB_INSTALL_PATH  share/OpenCV/3rdparty/${OPENCV_LIB_INSTALL_PATH})
    set(OPENCV_INCLUDE_INSTALL_PATH include)

    math(EXPR SIZEOF_VOID_P_BITS "8 * ${CMAKE_SIZEOF_VOID_P}")
    if(LIB_SUFFIX AND NOT SIZEOF_VOID_P_BITS EQUAL LIB_SUFFIX)
      set(OPENCV_CONFIG_INSTALL_PATH lib${LIB_SUFFIX}/cmake/opencv)
    else()
      set(OPENCV_CONFIG_INSTALL_PATH share/OpenCV)
    endif()
A
Andrey Kamaev 已提交
252 253 254 255 256
endif()

set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${OPENCV_LIB_INSTALL_PATH}")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)

257
if(INSTALL_TO_MANGLED_PATHS)
A
Andrey Kamaev 已提交
258
  set(OPENCV_INCLUDE_INSTALL_PATH ${OPENCV_INCLUDE_INSTALL_PATH}/opencv-${OPENCV_VERSION})
259 260 261 262 263 264 265 266 267 268 269 270
endif()

if(WIN32)
  # Postfix of DLLs:
  set(OPENCV_DLLVERSION "${OPENCV_VERSION_MAJOR}${OPENCV_VERSION_MINOR}${OPENCV_VERSION_PATCH}")
  set(OPENCV_DEBUG_POSTFIX d)
else()
  # Postfix of so's:
  set(OPENCV_DLLVERSION "")
  set(OPENCV_DEBUG_POSTFIX "")
endif()

A
Andrey Kamaev 已提交
271
if(DEFINED CMAKE_DEBUG_POSTFIX)
272 273 274
  set(OPENCV_DEBUG_POSTFIX "${CMAKE_DEBUG_POSTFIX}")
endif()

275 276 277 278
if(CMAKE_VERBOSE)
  set(CMAKE_VERBOSE_MAKEFILE 1)
endif()

A
Andrey Kamaev 已提交
279 280 281 282 283 284

# ----------------------------------------------------------------------------
#  Path for build/platform -specific headers
# ----------------------------------------------------------------------------
set(OPENCV_CONFIG_FILE_INCLUDE_DIR "${CMAKE_BINARY_DIR}/" CACHE PATH "Where to create the platform-dependant cvconfig.h")
add_definitions(-DHAVE_CVCONFIG_H)
285
ocv_include_directories(${OPENCV_CONFIG_FILE_INCLUDE_DIR})
A
Andrey Kamaev 已提交
286 287


A
Alexander Shishkov 已提交
288
# ----------------------------------------------------------------------------
289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316
#  Autodetect if we are in a GIT repository
# ----------------------------------------------------------------------------

# don't use FindGit because it requires CMake 2.8.2
set(git_names git eg) # eg = easy git
# Prefer .cmd variants on Windows unless running in a Makefile in the MSYS shell
if(WIN32)
  if(NOT CMAKE_GENERATOR MATCHES "MSYS")
    set(git_names git.cmd git eg.cmd eg)
  endif()
endif()

find_host_program(GIT_EXECUTABLE NAMES ${git_names} PATH_SUFFIXES Git/cmd Git/bin DOC "git command line client")
mark_as_advanced(GIT_EXECUTABLE)

if(GIT_EXECUTABLE)
  execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
    WORKING_DIRECTORY "${OpenCV_SOURCE_DIR}"
    OUTPUT_VARIABLE OPENCV_GIT_HASH_SORT
    RESULT_VARIABLE GIT_RESULT
    ERROR_QUIET
    OUTPUT_STRIP_TRAILING_WHITESPACE
  )
  if(GIT_RESULT EQUAL 0)
    set(OPENCV_VCSVERSION "commit:${OPENCV_GIT_HASH_SORT}")
  else()
    set(OPENCV_VCSVERSION "exported")
  endif()
A
Alexander Shishkov 已提交
317
else()
318 319
  # We don't have git:
  set(OPENCV_VCSVERSION "")
A
Alexander Shishkov 已提交
320 321
endif()

A
Andrey Kamaev 已提交
322

323 324 325 326
# ----------------------------------------------------------------------------
# OpenCV compiler and linker options
# ----------------------------------------------------------------------------
# In case of Makefiles if the user does not setup CMAKE_BUILD_TYPE, assume it's Release:
V
Vadim Pisarevsky 已提交
327
if(CMAKE_GENERATOR MATCHES "Makefiles|Ninja" AND "${CMAKE_BUILD_TYPE}" STREQUAL "")
328 329 330
  set(CMAKE_BUILD_TYPE Release)
endif()

A
Andrey Kamaev 已提交
331 332
include(cmake/OpenCVCompilerOptions.cmake REQUIRED)

333

334 335 336 337 338 339 340 341
# ----------------------------------------------------------------------------
# Use statically or dynamically linked CRT?
# Default: dynamic
# ----------------------------------------------------------------------------
if(MSVC)
  include(cmake/OpenCVCRTLinkage.cmake REQUIRED)
endif(MSVC)

342 343 344 345
if(WIN32 AND NOT MINGW)
  add_definitions(-D_VARIADIC_MAX=10)
endif(WIN32 AND NOT MINGW)

346

A
Alexander Shishkov 已提交
347 348 349
# ----------------------------------------------------------------------------
#       CHECK FOR SYSTEM LIBRARIES, OPTIONS, ETC..
# ----------------------------------------------------------------------------
A
Andrey Kamaev 已提交
350 351 352 353
if(UNIX)
  include(cmake/OpenCVFindPkgConfig.cmake OPTIONAL)
  include(CheckFunctionExists)
  include(CheckIncludeFile)
354

355 356 357 358 359 360 361
  if(NOT APPLE)
    CHECK_INCLUDE_FILE(alloca.h HAVE_ALLOCA_H)
    CHECK_FUNCTION_EXISTS(alloca HAVE_ALLOCA)
    CHECK_INCLUDE_FILE(unistd.h HAVE_UNISTD_H)
    CHECK_INCLUDE_FILE(pthread.h HAVE_LIBPTHREAD)
    if(ANDROID)
      set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} dl m log)
362
    elseif(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD|NetBSD|DragonFly")
363 364 365 366 367 368 369
      set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} m pthread)
    else()
      set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} dl m pthread rt)
    endif()
  else()
    add_definitions(-DHAVE_ALLOCA -DHAVE_ALLOCA_H -DHAVE_LIBPTHREAD -DHAVE_UNISTD_H)
  endif()
A
Andrey Kamaev 已提交
370
endif()
A
Alexander Shishkov 已提交
371

372 373
include(cmake/OpenCVPCHSupport.cmake REQUIRED)
include(cmake/OpenCVModule.cmake REQUIRED)
A
Alexander Shishkov 已提交
374

A
Andrey Kamaev 已提交
375
# ----------------------------------------------------------------------------
376
#  Detect 3rd-party libraries
A
Andrey Kamaev 已提交
377
# ----------------------------------------------------------------------------
378

379 380 381 382
include(cmake/OpenCVFindLibsGrfmt.cmake REQUIRED)
include(cmake/OpenCVFindLibsGUI.cmake   REQUIRED)
include(cmake/OpenCVFindLibsVideo.cmake REQUIRED)
include(cmake/OpenCVFindLibsPerf.cmake  REQUIRED)
383

A
Alexander Shishkov 已提交
384

385 386 387
# ----------------------------------------------------------------------------
#  Detect other 3rd-party libraries/tools
# ----------------------------------------------------------------------------
388

389 390 391 392
# --- LATEX for pdf documentation ---
if(BUILD_DOCS)
  include(cmake/OpenCVFindLATEX.cmake REQUIRED)
endif(BUILD_DOCS)
393

394 395
# --- Python Support ---
include(cmake/OpenCVDetectPython.cmake REQUIRED)
A
Alexander Shishkov 已提交
396

397 398 399 400
# --- Java Support ---
if(ANDROID)
  include(cmake/OpenCVDetectApacheAnt.cmake REQUIRED)
  include(cmake/OpenCVDetectAndroidSDK.cmake REQUIRED)
401

402 403
  if(NOT ANDROID_TOOLS_Pkg_Revision GREATER 13)
    message(WARNING "OpenCV requires Android SDK tools revision 14 or newer. Otherwise tests and samples will no be compiled.")
A
Andrey Kamaev 已提交
404
  endif()
405
endif(ANDROID)
406

407 408 409 410
if(ANDROID AND ANDROID_EXECUTABLE AND ANT_EXECUTABLE AND (ANT_VERSION VERSION_GREATER 1.7) AND (ANDROID_TOOLS_Pkg_Revision GREATER 13))
  SET(CAN_BUILD_ANDROID_PROJECTS TRUE)
else()
  SET(CAN_BUILD_ANDROID_PROJECTS FALSE)
411
endif()
A
Alexander Shishkov 已提交
412

413 414 415 416 417 418
# --- OpenCL ---
if(WITH_OPENCL)
  include(cmake/OpenCVDetectOpenCL.cmake REQUIRED)
  if(OPENCL_FOUND)
    set(HAVE_OPENCL 1)
  endif()
419 420 421 422 423 424
  if(WITH_OPENCLAMDFFT)
    set(HAVE_CLAMDFFT 1)
  endif()
  if(WITH_OPENCLAMDBLAS)
    set(HAVE_CLAMDBLAS 1)
  endif()
425
endif()
A
Alexander Shishkov 已提交
426

A
Andrey Kamaev 已提交
427 428 429 430 431 432
# ----------------------------------------------------------------------------
# Solution folders:
# ----------------------------------------------------------------------------
if(ENABLE_SOLUTION_FOLDERS)
  set_property(GLOBAL PROPERTY USE_FOLDERS ON)
  set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "CMakeTargets")
433 434
endif()

A
Andrey Kamaev 已提交
435 436
# Extra OpenCV targets: uninstall, package_source, perf, etc.
include(cmake/OpenCVExtraTargets.cmake REQUIRED)
A
Alexander Shishkov 已提交
437

438

A
Andrey Kamaev 已提交
439 440 441
# ----------------------------------------------------------------------------
# Process subdirectories
# ----------------------------------------------------------------------------
A
Alexander Shishkov 已提交
442

A
Andrey Kamaev 已提交
443 444
# opencv.hpp and legacy headers
add_subdirectory(include)
445

A
Andrey Kamaev 已提交
446 447
# OpenCV modules
add_subdirectory(modules)
A
Alexander Shishkov 已提交
448

A
Andrey Kamaev 已提交
449 450
# Generate targets for documentation
add_subdirectory(doc)
451

A
Andrey Kamaev 已提交
452 453
# various data that is used by cv libraries and/or demo applications.
add_subdirectory(data)
A
Andrey Kamaev 已提交
454

A
Andrey Kamaev 已提交
455 456
# extra applications
add_subdirectory(apps)
457

A
Andrey Kamaev 已提交
458 459 460
# examples
if(BUILD_EXAMPLES OR BUILD_ANDROID_EXAMPLES OR INSTALL_PYTHON_EXAMPLES)
  add_subdirectory(samples)
A
Alexander Shishkov 已提交
461 462
endif()

A
Andrey Pavlenko 已提交
463 464 465 466 467 468 469
if(BUILD_ANDROID_SERVICE)
  add_subdirectory(android/service)
endif()

if(BUILD_ANDROID_PACKAGE)
  add_subdirectory(android/package)
endif()
470

A
Alexander Shishkov 已提交
471
# ----------------------------------------------------------------------------
A
Andrey Kamaev 已提交
472
# Finalization: generate configuration-based files
A
Alexander Shishkov 已提交
473
# ----------------------------------------------------------------------------
A
Andrey Kamaev 已提交
474
ocv_track_build_dependencies()
A
Alexander Shishkov 已提交
475

A
Andrey Kamaev 已提交
476 477
# Generate platform-dependent and configuration-dependent headers
include(cmake/OpenCVGenHeaders.cmake REQUIRED)
A
Alexander Shishkov 已提交
478

A
Andrey Kamaev 已提交
479 480
# Generate opencv.pc for pkg-config command
include(cmake/OpenCVGenPkgconfig.cmake REQUIRED)
A
Alexander Shishkov 已提交
481

A
Andrey Kamaev 已提交
482 483
# Generate OpenCV.mk for ndk-build (Android build tool)
include(cmake/OpenCVGenAndroidMK.cmake REQUIRED)
484

A
Andrey Kamaev 已提交
485 486
# Generate OpenCVСonfig.cmake and OpenCVConfig-version.cmake for cmake projects
include(cmake/OpenCVGenConfig.cmake REQUIRED)
A
Alexander Shishkov 已提交
487

488

A
Alexander Shishkov 已提交
489
# ----------------------------------------------------------------------------
A
Andrey Kamaev 已提交
490
# Summary:
A
Alexander Shishkov 已提交
491
# ----------------------------------------------------------------------------
A
Andrey Kamaev 已提交
492
status("")
493
status("General configuration for OpenCV ${OPENCV_VERSION} =====================================")
494 495
if(OPENCV_VCSVERSION)
  status("  Version control:" ${OPENCV_VCSVERSION})
496
endif()
497

498
# ========================== build platform ==========================
A
Andrey Kamaev 已提交
499
status("")
500 501
status("  Platform:")
status("    Host:"             ${CMAKE_HOST_SYSTEM_NAME} ${CMAKE_HOST_SYSTEM_VERSION} ${CMAKE_HOST_SYSTEM_PROCESSOR})
502
if(CMAKE_CROSSCOMPILING)
503
  status("    Target:"         ${CMAKE_SYSTEM_NAME} ${CMAKE_SYSTEM_VERSION} ${CMAKE_SYSTEM_PROCESSOR})
504
endif()
505 506 507 508 509 510 511 512 513
status("    CMake:"            ${CMAKE_VERSION})
status("    CMake generator:"  ${CMAKE_GENERATOR})
status("    CMake build tool:" ${CMAKE_BUILD_TOOL})
if(MSVC)
  status("    MSVC:"           ${MSVC_VERSION})
endif()
if(CMAKE_GENERATOR MATCHES Xcode)
  status("    Xcode:"          ${XCODE_VERSION})
endif()
V
Vadim Pisarevsky 已提交
514 515 516
if(NOT CMAKE_GENERATOR MATCHES "Xcode|Visual Studio")
  status("    Configuration:"  ${CMAKE_BUILD_TYPE})
endif()
517

518
# ========================== C/C++ options ==========================
519
status("")
520
status("  C/C++:")
A
Andrey Kamaev 已提交
521
status("    Built as dynamic libs?:" BUILD_SHARED_LIBS THEN YES ELSE NO)
522
status("    C++ Compiler:"           CMAKE_COMPILER_IS_GNUCXX THEN "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} (ver ${CMAKE_GCC_REGEX_VERSION})" ELSE "${CMAKE_CXX_COMPILER}" )
A
Andrey Kamaev 已提交
523 524
status("    C++ flags (Release):"    ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE})
status("    C++ flags (Debug):"      ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG})
525
status("    C Compiler:"             ${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1})
526 527
status("    C flags (Release):"      ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_RELEASE})
status("    C flags (Debug):"        ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_DEBUG})
A
Alexander Shishkov 已提交
528
if(WIN32)
529 530
  status("    Linker flags (Release):" ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_RELEASE})
  status("    Linker flags (Debug):"   ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_DEBUG})
A
Alexander Shishkov 已提交
531
else()
532 533
  status("    Linker flags (Release):" ${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS_RELEASE})
  status("    Linker flags (Debug):"   ${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS_DEBUG})
A
Alexander Shishkov 已提交
534
endif()
535
status("    Precompiled headers:"     PCHSupport_FOUND AND ENABLE_PRECOMPILED_HEADERS THEN YES ELSE NO)
A
Alexander Shishkov 已提交
536

537
# ========================== OpenCV modules ==========================
A
Andrey Kamaev 已提交
538 539 540 541 542
status("")
status("  OpenCV modules:")
string(REPLACE "opencv_" "" OPENCV_MODULES_BUILD_ST          "${OPENCV_MODULES_BUILD}")
string(REPLACE "opencv_" "" OPENCV_MODULES_DISABLED_USER_ST  "${OPENCV_MODULES_DISABLED_USER}")
string(REPLACE "opencv_" "" OPENCV_MODULES_DISABLED_FORCE_ST "${OPENCV_MODULES_DISABLED_FORCE}")
543 544 545 546 547 548 549 550 551 552 553 554
set(OPENCV_MODULES_DISABLED_AUTO_ST "")
foreach(m ${OPENCV_MODULES_DISABLED_AUTO})
  set(__mdeps "")
  foreach(d ${OPENCV_MODULE_${m}_DEPS})
    if(d MATCHES "^opencv_" AND NOT HAVE_${d})
      list(APPEND __mdeps ${d})
    endif()
  endforeach()
  list(APPEND OPENCV_MODULES_DISABLED_AUTO_ST "${m}(deps: ${__mdeps})")
endforeach()
string(REPLACE "opencv_" "" OPENCV_MODULES_DISABLED_AUTO_ST  "${OPENCV_MODULES_DISABLED_AUTO_ST}")

555 556 557 558
status("    To be built:"            OPENCV_MODULES_BUILD          THEN ${OPENCV_MODULES_BUILD_ST}          ELSE "-")
status("    Disabled:"               OPENCV_MODULES_DISABLED_USER  THEN ${OPENCV_MODULES_DISABLED_USER_ST}  ELSE "-")
status("    Disabled by dependency:" OPENCV_MODULES_DISABLED_AUTO  THEN ${OPENCV_MODULES_DISABLED_AUTO_ST}  ELSE "-")
status("    Unavailable:"            OPENCV_MODULES_DISABLED_FORCE THEN ${OPENCV_MODULES_DISABLED_FORCE_ST} ELSE "-")
A
Andrey Kamaev 已提交
559

560
# ========================== Android details ==========================
561
if(ANDROID)
562 563 564 565 566 567 568 569 570 571 572 573
  status("")
  status("  Android: ")
  status("    Android ABI:" ${ANDROID_ABI})
  status("    Native API level:" android-${ANDROID_NATIVE_API_LEVEL})
  status("    SDK target:" "${ANDROID_SDK_TARGET}")
  if(BUILD_WITH_ANDROID_NDK)
    status("    Android NDK:" "${ANDROID_NDK} (toolchain: ${ANDROID_TOOLCHAIN_NAME})")
  elseif(BUILD_WITH_STANDALONE_TOOLCHAIN)
    status("    Android toolchain:" "${ANDROID_STANDALONE_TOOLCHAIN}")
  endif()
  status("    android tool:"  ANDROID_EXECUTABLE  THEN "${ANDROID_EXECUTABLE} (${ANDROID_TOOLS_Pkg_Desc})" ELSE NO)
  status("    ant:"           ANT_EXECUTABLE      THEN "${ANT_EXECUTABLE} (ver ${ANT_VERSION})"            ELSE NO)
A
Andrey Kamaev 已提交
574
  status("    Google Play package:" BUILD_ANDROID_PACKAGE THEN YES ELSE NO)
575 576
endif()

577
# ========================== GUI ==========================
A
Andrey Kamaev 已提交
578 579
status("")
status("  GUI: ")
A
Alexander Shishkov 已提交
580

581
if(HAVE_QT)
582 583
  status("    QT 4.x:"            HAVE_QT        THEN "YES (ver ${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}.${QT_VERSION_PATCH} ${QT_EDITION})" ELSE NO)
  status("    QT OpenGL support:" HAVE_QT_OPENGL THEN "YES (${QT_QTOPENGL_LIBRARY})" ELSE NO)
A
Alexander Shishkov 已提交
584
else()
585 586 587
  if(DEFINED WITH_QT)
    status("    QT 4.x:" NO)
  endif()
588 589 590 591 592 593 594 595 596
  if(WIN32)
    status("    Win32 UI:" YES)
  else()
    if(APPLE)
      if(WITH_CARBON)
        status("    Carbon:" YES)
      else()
        status("    Cocoa:"  YES)
      endif()
A
Alexander Shishkov 已提交
597
    else()
598 599 600
      status("    GTK+ 2.x:" HAVE_GTK      THEN "YES (ver ${ALIASOF_gtk+-2.0_VERSION})"     ELSE NO)
      status("    GThread :" HAVE_GTHREAD  THEN "YES (ver ${ALIASOF_gthread-2.0_VERSION})"  ELSE NO)
      status("    GtkGlExt:" HAVE_GTKGLEXT THEN "YES (ver ${ALIASOF_gtkglext-1.0_VERSION})" ELSE NO)
A
Alexander Shishkov 已提交
601
    endif()
602
  endif()
A
Alexander Shishkov 已提交
603 604
endif()

605
status("    OpenGL support:" HAVE_OPENGL THEN "YES (${OPENGL_LIBRARIES})" ELSE NO)
606

607
# ========================== MEDIA IO ==========================
A
Andrey Kamaev 已提交
608 609
status("")
status("  Media I/O: ")
610
status("    ZLib:"         BUILD_ZLIB    THEN "build (ver ${ZLIB_VERSION_STRING})"               ELSE "${ZLIB_LIBRARY} (ver ${ZLIB_VERSION_STRING})")
A
Alexander Shishkov 已提交
611

612
if(WITH_JPEG)
613
  status("    JPEG:"       JPEG_FOUND    THEN "${JPEG_LIBRARY} (ver ${JPEG_LIB_VERSION})"        ELSE "build (ver ${JPEG_LIB_VERSION})")
614 615 616 617
else()
  status("    JPEG:"       "NO")
endif()
if(WITH_PNG)
618
  status("    PNG:"        PNG_FOUND     THEN "${PNG_LIBRARY} (ver ${PNG_VERSION})"              ELSE "build (ver ${PNG_VERSION})")
619 620 621 622
else()
  status("    PNG:"        "NO")
endif()
if(WITH_TIFF)
V
Vadim Pisarevsky 已提交
623 624 625
  if(TIFF_VERSION_STRING AND TIFF_FOUND)
    status("    TIFF:"     "${TIFF_LIBRARY} (ver ${TIFF_VERSION} - ${TIFF_VERSION_STRING})")
  else()
626
    status("    TIFF:"     TIFF_FOUND    THEN "${TIFF_LIBRARY} (ver ${TIFF_VERSION})"            ELSE "build (ver ${TIFF_VERSION} - ${TIFF_VERSION_STRING})")
V
Vadim Pisarevsky 已提交
627
  endif()
628 629 630 631
else()
  status("    TIFF:"       "NO")
endif()
if(WITH_JASPER)
632
  status("    JPEG 2000:"  JASPER_FOUND  THEN "${JASPER_LIBRARY} (ver ${JASPER_VERSION_STRING})" ELSE "build (ver ${JASPER_VERSION_STRING})")
633 634 635 636
else()
  status("    JPEG 2000:"  "NO")
endif()

637
status("    OpenEXR:"   WITH_OPENEXR AND OPENEXR_FOUND     THEN "${OPENEXR_LIBRARIES} (ver ${OPENEXR_VERSION})"                     ELSE NO)
A
Alexander Shishkov 已提交
638

639
# ========================== VIDEO IO ==========================
A
Andrey Kamaev 已提交
640
status("")
641 642 643
status("  Video I/O:")

if(DEFINED WITH_1394)
644 645
  status("    DC1394 1.x:"     HAVE_DC1394         THEN "YES (ver ${ALIASOF_libdc1394_VERSION})"   ELSE NO)
  status("    DC1394 2.x:"     HAVE_DC1394_2       THEN "YES (ver ${ALIASOF_libdc1394-2_VERSION})" ELSE NO)
646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675
endif(DEFINED WITH_1394)

if(ANDROID)
  if(HAVE_opencv_androidcamera)
    status("    AndroidNativeCamera:" BUILD_ANDROID_CAMERA_WRAPPER
                                                   THEN "YES, build for Android${ANDROID_VERSION}" ELSE "YES, use prebuilt libraries")
  else()
    status("    AndroidNativeCamera:" "NO (native camera requires Android API level 8 or higher)")
  endif()
endif()

if(DEFINED WITH_AVFOUNDATION)
  status("    AVFoundation:"   WITH_AVFOUNDATION   THEN YES                                        ELSE NO)
endif(DEFINED WITH_AVFOUNDATION)

if(DEFINED WITH_FFMPEG)
  if(WIN32)
    status("    FFMPEG:"       WITH_FFMPEG         THEN "YES (prebuilt binaries)"                  ELSE NO)
  else()
    status("    FFMPEG:"       HAVE_FFMPEG         THEN YES ELSE NO)
  endif()
  status("      codec:"        HAVE_FFMPEG_CODEC   THEN "YES (ver ${ALIASOF_libavcodec_VERSION})"  ELSE NO)
  status("      format:"       HAVE_FFMPEG_FORMAT  THEN "YES (ver ${ALIASOF_libavformat_VERSION})" ELSE NO)
  status("      util:"         HAVE_FFMPEG_UTIL    THEN "YES (ver ${ALIASOF_libavutil_VERSION})"   ELSE NO)
  status("      swscale:"      HAVE_FFMPEG_SWSCALE THEN "YES (ver ${ALIASOF_libswscale_VERSION})"  ELSE NO)
  status("      gentoo-style:" HAVE_GENTOO_FFMPEG  THEN YES                                        ELSE NO)
endif(DEFINED WITH_FFMPEG)

if(DEFINED WITH_GSTREAMER)
  status("    GStreamer:"      HAVE_GSTREAMER      THEN ""                                         ELSE NO)
676 677 678 679 680
  if(HAVE_GSTREAMER)
    status("      base:"       "YES (ver ${ALIASOF_gstreamer-base-0.10_VERSION})")
    status("      app:"        "YES (ver ${ALIASOF_gstreamer-app-0.10_VERSION})")
    status("      video:"      "YES (ver ${ALIASOF_gstreamer-video-0.10_VERSION})")
  endif()
681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704
endif(DEFINED WITH_GSTREAMER)

if(DEFINED WITH_OPENNI)
  status("    OpenNI:"         HAVE_OPENNI         THEN "YES (ver ${OPENNI_VERSION_STRING}, build ${OPENNI_VERSION_BUILD})"
                                                                                                   ELSE NO)
  status("    OpenNI PrimeSensor Modules:" HAVE_OPENNI_PRIME_SENSOR_MODULE
                                                   THEN "YES (${OPENNI_PRIME_SENSOR_MODULE})"      ELSE NO)
endif(DEFINED WITH_OPENNI)

if(DEFINED WITH_PVAPI)
  status("    PvAPI:"          HAVE_PVAPI          THEN YES                                        ELSE NO)
endif(DEFINED WITH_PVAPI)

if(DEFINED WITH_QUICKTIME)
  status("    QuickTime:"      WITH_QUICKTIME      THEN YES                                        ELSE NO)
  status("    QTKit:"          WITH_QUICKTIME      THEN NO                                         ELSE YES)
endif(DEFINED WITH_QUICKTIME)

if(DEFINED WITH_UNICAP)
  status("    UniCap:"         HAVE_UNICAP         THEN "YES (ver ${ALIASOF_libunicap_VERSION})"   ELSE NO)
  status("    UniCap ucil:"    HAVE_UNICAP_UCIL    THEN "YES (ver ${ALIASOF_libucil_VERSION})"     ELSE NO)
endif(DEFINED WITH_UNICAP)

if(DEFINED WITH_V4L)
705 706 707 708 709
  if(HAVE_CAMV4L)
    set(HAVE_CAMV4L_STR "YES")
  else()
    set(HAVE_CAMV4L_STR "NO")
  endif()
710
  if(HAVE_CAMV4L2)
711 712 713 714
    set(HAVE_CAMV4L2_STR "YES")
  else()
    set(HAVE_CAMV4L2_STR "NO")
  endif()
715 716 717
  status("    V4L/V4L2:"       HAVE_LIBV4L         THEN "Using libv4l (ver ${ALIASOF_libv4l1_VERSION})"
                                                                                                   ELSE "${HAVE_CAMV4L_STR}/${HAVE_CAMV4L2_STR}")
endif(DEFINED WITH_V4L)
718

719 720 721
if(DEFINED WITH_VIDEOINPUT)
  status("    DirectShow:"     HAVE_VIDEOINPUT     THEN YES                                        ELSE NO)
endif(DEFINED WITH_VIDEOINPUT)
A
Alexander Shishkov 已提交
722

723 724 725 726 727 728 729
if(DEFINED WITH_XIMEA)
  status("    XIMEA:"          HAVE_XIMEA          THEN YES                                        ELSE NO)
endif(DEFINED WITH_XIMEA)

if(DEFINED WITH_XINE)
  status("    Xine:"           HAVE_XINE           THEN "YES (ver ${ALIASOF_libxine_VERSION})"     ELSE NO)
endif(DEFINED WITH_XINE)
730

731
# ========================== Other third-party libraries ==========================
A
Andrey Kamaev 已提交
732
status("")
733
status("  Other third-party libraries:")
A
Alexander Shishkov 已提交
734

735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750
if(DEFINED WITH_IPP)
  if(WITH_IPP AND IPP_FOUND)
    status("    Use IPP:" "${IPP_LATEST_VERSION_STR} [${IPP_LATEST_VERSION_MAJOR}.${IPP_LATEST_VERSION_MINOR}.${IPP_LATEST_VERSION_BUILD}]")
    status("         at:" "${IPP_ROOT_DIR}")
  else()
    status("    Use IPP:"   WITH_IPP AND NOT IPP_FOUND THEN "IPP not found" ELSE NO)
  endif()
endif(DEFINED WITH_IPP)

if(DEFINED WITH_TBB)
  status("    Use TBB:"   HAVE_TBB   THEN "YES (ver ${TBB_VERSION_MAJOR}.${TBB_VERSION_MINOR} interface ${TBB_INTERFACE_VERSION})" ELSE NO)
endif(DEFINED WITH_TBB)

if(DEFINED WITH_CUDA)
  status("    Use Cuda:"  HAVE_CUDA  THEN "YES (ver ${CUDA_VERSION_STRING})" ELSE NO)
endif(DEFINED WITH_CUDA)
A
Alexander Shishkov 已提交
751

752 753
status("    Use OpenCL:"  HAVE_OPENCL  THEN YES ELSE NO)

754
status("    Use Eigen:" HAVE_EIGEN THEN "YES (ver ${EIGEN_WORLD_VERSION}.${EIGEN_MAJOR_VERSION}.${EIGEN_MINOR_VERSION})" ELSE NO)
755
status("    Use Clp:"   HAVE_CLP   THEN YES ELSE NO)
A
Alexander Shishkov 已提交
756

757 758
if(HAVE_CUDA)
  status("")
V
Vadim Pisarevsky 已提交
759
  status("  NVIDIA CUDA:"            "(ver ${CUDA_VERSION_STRING})")
760 761 762 763

  status("    Use CUFFT:"            HAVE_CUFFT  THEN YES ELSE NO)
  status("    Use CUBLAS:"           HAVE_CUBLAS THEN YES ELSE NO)
  status("    NVIDIA GPU arch:"      ${OPENCV_CUDA_ARCH_BIN})
A
Anatoly Baksheev 已提交
764
  status("    NVIDIA PTX archs:"     ${OPENCV_CUDA_ARCH_PTX})
765 766
endif()

767
# ========================== python ==========================
768
status("")
769 770 771
status("  Python:")
status("    Interpreter:"   PYTHON_EXECUTABLE     THEN "${PYTHON_EXECUTABLE} (ver ${PYTHON_VERSION_FULL})"         ELSE NO)
if(BUILD_opencv_python)
V
Vadim Pisarevsky 已提交
772 773 774 775 776
  if(PYTHONLIBS_VERSION_STRING)
    status("    Libraries:"     HAVE_opencv_python  THEN  "${PYTHON_LIBRARIES} (ver ${PYTHONLIBS_VERSION_STRING})" ELSE NO)
  else()
    status("    Libraries:"     HAVE_opencv_python  THEN  ${PYTHON_LIBRARIES}                                      ELSE NO)
  endif()
777 778 779 780
  status("    numpy:"         PYTHON_USE_NUMPY    THEN "${PYTHON_NUMPY_INCLUDE_DIR} (ver ${PYTHON_NUMPY_VERSION})" ELSE "NO (Python wrappers can not be generated)")
  status("    packages path:" PYTHON_EXECUTABLE   THEN "${PYTHON_PACKAGES_PATH}"                                   ELSE "-")
endif()

781
# ========================== documentation ==========================
782 783 784 785 786 787 788 789 790 791
if(BUILD_DOCS)
  status("")
  status("  Documentation:")
  if(HAVE_SPHINX)
    status("    Build Documentation:" PDFLATEX_COMPILER      THEN YES ELSE "YES (only HTML and without math expressions)")
  else()
    status("    Build Documentation:" NO)
  endif()
  status("    Sphinx:"              HAVE_SPHINX              THEN "${SPHINX_BUILD} (ver ${SPHINX_VERSION})" ELSE NO)
  status("    PdfLaTeX compiler:"   PDFLATEX_COMPILER        THEN "${PDFLATEX_COMPILER}" ELSE NO)
792
endif()
A
Alexander Shishkov 已提交
793

794
# ========================== samples and tests ==========================
A
Andrey Kamaev 已提交
795 796
status("")
status("  Tests and samples:")
797 798 799
status("    Tests:"             BUILD_TESTS AND HAVE_opencv_ts       THEN YES ELSE NO)
status("    Performance tests:" BUILD_PERF_TESTS AND HAVE_opencv_ts  THEN YES ELSE NO)
status("    Examples:"          BUILD_EXAMPLES                       THEN YES ELSE NO)
A
Andrey Kamaev 已提交
800 801

if(ANDROID)
802 803
  status("    Android tests:"    BUILD_TESTS AND CAN_BUILD_ANDROID_PROJECTS            THEN YES ELSE NO)
  status("    Android examples:" BUILD_ANDROID_EXAMPLES AND CAN_BUILD_ANDROID_PROJECTS THEN YES ELSE NO)
A
Alexander Shishkov 已提交
804 805
endif()

806
# ========================== auxiliary ==========================
A
Andrey Kamaev 已提交
807 808 809 810 811 812
status("")
status("  Install path:" "${CMAKE_INSTALL_PREFIX}")
status("")
status("  cvconfig.h is in:" "${OPENCV_CONFIG_FILE_INCLUDE_DIR}")
status("-----------------------------------------------------------------")
status("")
813

V
Vadim Pisarevsky 已提交
814 815
ocv_finalize_status()

A
Andrey Kamaev 已提交
816 817 818
# ----------------------------------------------------------------------------
# Warn in the case of in-source build
# ----------------------------------------------------------------------------
819
if("${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}")
820
  message(WARNING "The source directory is the same as binary directory. \"make clean\" may damage the source tree")
821
endif()
822