CMakeLists.txt 42.7 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 41 42 43 44
endif(NOT CMAKE_TOOLCHAIN_FILE)

# --------------------------------------------------------------
# Top level OpenCV project
# --------------------------------------------------------------
V
Vadim Pisarevsky 已提交
45 46 47 48
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)
49
else()
V
Vadim Pisarevsky 已提交
50
  cmake_minimum_required(VERSION 2.6.3)
51
endif()
A
Andrey Kamaev 已提交
52

A
Alexander Shishkov 已提交
53
set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Configs" FORCE)
54
if(DEFINED CMAKE_BUILD_TYPE AND CMAKE_VERSION VERSION_GREATER "2.8")
A
Andrey Kamaev 已提交
55
  set_property( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS ${CMAKE_CONFIGURATION_TYPES} )
A
Andrey Kamaev 已提交
56
endif()
57

V
Vadim Pisarevsky 已提交
58
project(OpenCV CXX C)
A
Andrey Kamaev 已提交
59

60 61
include(cmake/OpenCVUtils.cmake REQUIRED)

62 63 64 65 66 67 68 69
# ----------------------------------------------------------------------------
# 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()

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

75 76 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
# 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()

103

104
# ----------------------------------------------------------------------------
A
Andrey Kamaev 已提交
105
# OpenCV cmake options
106
# ----------------------------------------------------------------------------
107 108 109 110 111 112 113 114 115 116

# 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)
117
OCV_OPTION(WITH_FFMPEG         "Include FFMPEG support"                      ON   IF (NOT ANDROID AND NOT IOS) )
118 119 120 121 122 123
OCV_OPTION(WITH_GSTREAMER      "Include Gstreamer support"                   ON   IF (UNIX AND NOT APPLE AND NOT ANDROID AND NOT IOS) )
OCV_OPTION(WITH_GTK            "Include GTK support"                         ON   IF (UNIX AND NOT APPLE AND NOT ANDROID AND NOT IOS) )
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) )
124
OCV_OPTION(WITH_OPENGL         "Include OpenGL support"                      OFF  IF (NOT ANDROID AND NOT IOS AND NOT APPLE) )
125 126
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) )
127
OCV_OPTION(WITH_PVAPI          "Include Prosilica GigE support"              ON   IF (NOT ANDROID AND NOT IOS) )
128 129 130 131 132 133 134 135 136
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) )
OCV_OPTION(WITH_UNICAP         "Include Unicap support (GPL)"                OFF  IF (UNIX AND NOT APPLE AND NOT ANDROID AND NOT IOS) )
OCV_OPTION(WITH_V4L            "Include Video 4 Linux support"               ON   IF (UNIX AND NOT APPLE AND NOT ANDROID AND NOT IOS) )
OCV_OPTION(WITH_VIDEOINPUT     "Build HighGUI with DirectShow support"       ON   IF WIN32 )
OCV_OPTION(WITH_XIMEA          "Include XIMEA cameras support"               OFF  IF WIN32 )
OCV_OPTION(WITH_XINE           "Include Xine support (GPL)"                  OFF  IF (UNIX AND NOT APPLE AND NOT ANDROID AND NOT IOS) )
137
OCV_OPTION(WITH_CLP            "Include Clp support (EPL)"                   OFF  IF (NOT ANDROID AND NOT IOS) )
138 139 140

# OpenCV build components
# ===================================================
141
OCV_OPTION(BUILD_SHARED_LIBS        "Build shared libraries (.dll/.so) instead of static ones (.lib/.a)" NOT (ANDROID OR IOS) )
142 143 144 145 146 147
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) )
148
OCV_OPTION(BUILD_WITH_DEBUG_INFO    "Include debug info into debug libs (not MSCV only)" ON )
149
OCV_OPTION(BUILD_WITH_STATIC_CRT    "Enables use of staticaly linked CRT for staticaly linked OpenCV" ON IF MSVC )
150
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 )
151

152
# 3rd party libs
V
Vadim Pisarevsky 已提交
153 154 155 156 157
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 )
158 159 160 161 162 163

# 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 已提交
164
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) )
165

166 167 168 169 170 171 172 173 174

if(CMAKE_GENERATOR MATCHES Xcode)
    set(ENABLE_SOLUTION_FOLDERS0 ON)
elseif(MSVC_IDE)
    set(ENABLE_SOLUTION_FOLDERS0 ON)
else()
    set(ENABLE_SOLUTION_FOLDERS0 OFF)
endif()    

175 176 177
# OpenCV build options
# ===================================================
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 180 181 182 183 184 185 186 187 188
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)) )
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"                                 OFF  IF (CV_ICC OR CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
OCV_OPTION(ENABLE_SSSE3               "Enable SSSE3 instructions"                                OFF  IF (CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
OCV_OPTION(ENABLE_SSE41               "Enable SSE4.1 instructions"                               OFF  IF (CV_ICC OR CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
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 )
191

192 193 194 195 196 197
# uncategorized options
# ===================================================
OCV_OPTION(CMAKE_VERBOSE "Verbose mode" OFF )

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

200

A
Alexander Shishkov 已提交
201
# ----------------------------------------------------------------------------
202
#  Get actual OpenCV version number from sources
A
Alexander Shishkov 已提交
203
# ----------------------------------------------------------------------------
A
Andrey Kamaev 已提交
204
include(cmake/OpenCVVersion.cmake REQUIRED)
A
Alexander Shishkov 已提交
205 206


A
Andrey Kamaev 已提交
207 208 209
# ----------------------------------------------------------------------------
#  Build & install layouts
# ----------------------------------------------------------------------------
210

A
Andrey Kamaev 已提交
211
# Save libs and executables in the same place
A
Andrey Kamaev 已提交
212 213
set(LIBRARY_OUTPUT_PATH "${CMAKE_BINARY_DIR}/lib" CACHE PATH "Output directory for libraries" )
set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/bin" CACHE PATH "Output directory for applications" )
A
Andrey Kamaev 已提交
214

215
if(ANDROID OR WIN32)
A
Andrey Kamaev 已提交
216
    set(OPENCV_DOC_INSTALL_PATH doc)
A
Andrey Kamaev 已提交
217
elseif(INSTALL_TO_MANGLED_PATHS)
218
    set(OPENCV_DOC_INSTALL_PATH share/OpenCV-${OPENCV_VERSION}/doc)
A
Andrey Kamaev 已提交
219
else()
220
    set(OPENCV_DOC_INSTALL_PATH share/OpenCV/doc)
A
Andrey Kamaev 已提交
221 222 223
endif()

if(ANDROID)
224
    set(OPENCV_LIB_INSTALL_PATH libs/${ANDROID_NDK_ABI_NAME})
A
Andrey Kamaev 已提交
225
else()
226
    set(OPENCV_LIB_INSTALL_PATH lib${LIB_SUFFIX})
A
Andrey Kamaev 已提交
227 228 229 230 231
endif()

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

232 233 234 235 236 237 238 239 240 241 242 243 244 245 246
set(OPENCV_INCLUDE_PREFIX include)
if(INSTALL_TO_MANGLED_PATHS)
  set(OPENCV_INCLUDE_PREFIX include/opencv-${OPENCV_VERSION})
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 已提交
247
if(DEFINED CMAKE_DEBUG_POSTFIX)
248 249 250
  set(OPENCV_DEBUG_POSTFIX "${CMAKE_DEBUG_POSTFIX}")
endif()

251 252 253 254
if(CMAKE_VERBOSE)
  set(CMAKE_VERBOSE_MAKEFILE 1)
endif()

A
Andrey Kamaev 已提交
255 256 257 258 259 260

# ----------------------------------------------------------------------------
#  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)
261
ocv_include_directories(${OPENCV_CONFIG_FILE_INCLUDE_DIR})
A
Andrey Kamaev 已提交
262 263


A
Alexander Shishkov 已提交
264 265 266
# ----------------------------------------------------------------------------
#  Autodetect if we are in a SVN repository
# ----------------------------------------------------------------------------
267
find_host_program(SVNVERSION_PATH svnversion)
A
Alexander Shishkov 已提交
268 269 270
mark_as_advanced(force SVNVERSION_PATH)
if(SVNVERSION_PATH)
    message(STATUS "Extracting svn version, please wait...")
A
Alexander Shishkov 已提交
271
    execute_process(COMMAND ${SVNVERSION_PATH} -n ${OpenCV_SOURCE_DIR} OUTPUT_VARIABLE SVNVERSION_RESULT)
A
Alexander Shishkov 已提交
272 273

    if(SVNVERSION_RESULT MATCHES "exported")
274 275 276
        # This is NOT a svn repository:
        set(OPENCV_SVNVERSION "")
        message(STATUS "SVNVERSION: exported")
A
Alexander Shishkov 已提交
277 278
    else()
        set(OPENCV_SVNVERSION " svn:${SVNVERSION_RESULT}")
279
        message(STATUS "SVNVERSION: ${OPENCV_SVNVERSION}")
A
Alexander Shishkov 已提交
280 281 282 283 284 285
    endif()
else()
    # We don't have svnversion:
    set(OPENCV_SVNVERSION "")
endif()

A
Andrey Kamaev 已提交
286

287 288 289 290 291 292
# ----------------------------------------------------------------------------
# OpenCV compiler and linker options
# ----------------------------------------------------------------------------
include(cmake/OpenCVCompilerOptions.cmake REQUIRED)

# In case of Makefiles if the user does not setup CMAKE_BUILD_TYPE, assume it's Release:
V
Vadim Pisarevsky 已提交
293
if(CMAKE_GENERATOR MATCHES "Makefiles|Ninja" AND "${CMAKE_BUILD_TYPE}" STREQUAL "")
294 295 296 297
  set(CMAKE_BUILD_TYPE Release)
endif()


298 299 300 301 302 303 304 305 306
# ----------------------------------------------------------------------------
# Use statically or dynamically linked CRT?
# Default: dynamic
# ----------------------------------------------------------------------------
if(MSVC)
  include(cmake/OpenCVCRTLinkage.cmake REQUIRED)
endif(MSVC)


A
Alexander Shishkov 已提交
307 308 309
# ----------------------------------------------------------------------------
#       CHECK FOR SYSTEM LIBRARIES, OPTIONS, ETC..
# ----------------------------------------------------------------------------
A
Andrey Kamaev 已提交
310 311 312 313 314
if(UNIX)
  include(cmake/OpenCVFindPkgConfig.cmake OPTIONAL)
  include(CheckFunctionExists)
  include(CheckIncludeFile)
endif()
A
Alexander Shishkov 已提交
315

316 317
include(cmake/OpenCVPCHSupport.cmake REQUIRED)
include(cmake/OpenCVModule.cmake REQUIRED)
A
Alexander Shishkov 已提交
318

A
Andrey Kamaev 已提交
319 320 321
# ----------------------------------------------------------------------------
#  Detect 3rd-party tools and libraries
# ----------------------------------------------------------------------------
A
Alexander Shishkov 已提交
322

323 324 325
# IO libraries
include(cmake/OpenCVIOLibs.cmake REQUIRED)

A
Andrey Kamaev 已提交
326 327
#Graphic libraries
set(HAVE_OPENGL 0)
A
Alexander Shishkov 已提交
328 329 330 331 332
if(UNIX)
    if(NOT APPLE)
      if(WITH_GTK)
        CHECK_MODULE(gtk+-2.0 HAVE_GTK)
        CHECK_MODULE(gthread-2.0 HAVE_GTHREAD)
333 334 335 336 337 338 339
        if(WITH_OPENGL)
            CHECK_MODULE(gtkglext-1.0 HAVE_GTKGLEXT)
            if(HAVE_GTKGLEXT)
                find_package(OpenGL QUIET)
                if(OPENGL_FOUND)
                    set(HAVE_OPENGL 1)
                    set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${OPENGL_LIBRARIES})
340
                    ocv_include_directories(${OPENGL_INCLUDE_DIR})
341 342 343
                endif()
            endif()
        endif()
A
Alexander Shishkov 已提交
344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389
      else()
        set(HAVE_GTK FALSE)
        set(HAVE_GTHREAD FALSE)
      endif()
      if(WITH_GSTREAMER)
        CHECK_MODULE(gstreamer-base-0.10 HAVE_GSTREAMER)
        CHECK_MODULE(gstreamer-app-0.10 HAVE_GSTREAMER)
        CHECK_MODULE(gstreamer-video-0.10 HAVE_GSTREAMER)
      else()
        set(HAVE_GSTREAMER FALSE)
      endif()
    endif()

    if(WITH_UNICAP)
      CHECK_MODULE(libunicap HAVE_UNICAP_)
      CHECK_MODULE(libucil HAVE_UNICAP_UCIL)
      if(HAVE_UNICAP_ AND HAVE_UNICAP_UCIL)
        set(HAVE_UNICAP 1)
      endif()
    else()
      set(HAVE_UNICAP FALSE)
    endif()

    if(WITH_PVAPI)
      find_path(PVAPI_INCLUDE_PATH "PvApi.h"
                PATHS "/usr/local/include" "/usr/include"
                DOC "The path to PvAPI header")
      if(PVAPI_INCLUDE_PATH)
        set(HAVE_PVAPI 1)
      endif()
    endif()

    set(HAVE_FFMPEG 0)
    if(WITH_FFMPEG)
      CHECK_MODULE(libavcodec HAVE_FFMPEG_CODEC)
      CHECK_MODULE(libavformat HAVE_FFMPEG_FORMAT)
      CHECK_MODULE(libavutil HAVE_FFMPEG_UTIL)
      CHECK_MODULE(libswscale HAVE_FFMPEG_SWSCALE)
      CHECK_INCLUDE_FILE(libavformat/avformat.h HAVE_GENTOO_FFMPEG)
      CHECK_INCLUDE_FILE(ffmpeg/avformat.h HAVE_FFMPEG_FFMPEG)
      if(NOT HAVE_GENTOO_FFMPEG AND NOT HAVE_FFMPEG_FFMPEG)
        if(EXISTS /usr/include/ffmpeg/libavformat/avformat.h OR HAVE_FFMPEG_SWSCALE)
          set(HAVE_GENTOO_FFMPEG 1)
        endif()
      endif()
      if(HAVE_FFMPEG_CODEC AND HAVE_FFMPEG_FORMAT AND HAVE_FFMPEG_UTIL)
V
Vadim Pisarevsky 已提交
390
        if(HAVE_FFMPEG_SWSCALE)
A
Alexander Shishkov 已提交
391 392 393
            set(HAVE_FFMPEG 1)
        endif()
      endif()
394

A
Alexander Shishkov 已提交
395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412
      # Find the bzip2 library because it is required on some systems
      FIND_LIBRARY(BZIP2_LIBRARIES NAMES bz2 bzip2)
      if(NOT BZIP2_LIBRARIES)
        # Do an other trial
        FIND_FILE(BZIP2_LIBRARIES NAMES libbz2.so.1 PATHS /lib)
      endif()
    endif()

    if(WITH_1394)
      CHECK_MODULE(libdc1394-2 HAVE_DC1394_2)
      if(NOT HAVE_DC1394_2)
        CHECK_MODULE(libdc1394 HAVE_DC1394)
      endif()
    else()
      set(HAVE_DC1394_2 FALSE)
      set(HAVE_DC1394 FALSE)
    endif()

413
    if(NOT APPLE)
A
Alexander Shishkov 已提交
414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433
        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(WITH_XINE)
            CHECK_MODULE(libxine HAVE_XINE)
        else()
            set(HAVE_XINE FALSE)
        endif()
        if(WITH_V4L)
            CHECK_MODULE(libv4l1 HAVE_LIBV4L)
            CHECK_INCLUDE_FILE(linux/videodev.h HAVE_CAMV4L)
            CHECK_INCLUDE_FILE(linux/videodev2.h HAVE_CAMV4L2)
        else()
            set(HAVE_LIBV4L FALSE)
            set(HAVE_CAMV4L FALSE)
            set(HAVE_CAMV4L2 FALSE)
        endif()

A
Andrey Kamaev 已提交
434
        if(ANDROID)
A
Alexander Shishkov 已提交
435
            set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} dl m log)
A
Andrey Kamaev 已提交
436
        elseif(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD" OR ${CMAKE_SYSTEM_NAME} MATCHES "NetBSD")
A
Alexander Shishkov 已提交
437
            set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} m pthread)
A
Alexander Shishkov 已提交
438
        else()
A
Alexander Shishkov 已提交
439
            set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} dl m pthread rt)
A
Alexander Shishkov 已提交
440 441 442 443 444 445
        endif()
    else()
        add_definitions(-DHAVE_ALLOCA -DHAVE_ALLOCA_H -DHAVE_LIBPTHREAD -DHAVE_UNISTD_H)
    endif()
endif()

446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480
if(APPLE AND WITH_FFMPEG)
  set(FFMPEG_DEFAULT_INCLUDE_DIRS "/usr/local/include/" "/usr/include/" "opt/include/")

  find_path(FFMPEG_INCLUDE_DIR "libavformat/avformat.h" PATHS ${FFMPEG_DEFAULT_INCLUDE_DIRS} DOC "The path to FFMPEG headers")
  if(FFMPEG_INCLUDE_DIR)
    set(HAVE_GENTOO_FFMPEG 1)
    set(FFMPEG_LIB_DIR "${FFMPEG_INCLUDE_DIR}/../lib" CACHE PATH "Full path of FFMPEG library directory")
    if(EXISTS "${FFMPEG_LIB_DIR}/libavcodec.a")
    set(HAVE_FFMPEG_CODEC 1)
    set(ALIASOF_libavcodec_VERSION "Unknown")
    if(EXISTS "${FFMPEG_LIB_DIR}/libavformat.a")
    set(HAVE_FFMPEG_FORMAT 1)
    set(ALIASOF_libavformat_VERSION "Unknown")
    if(EXISTS "${FFMPEG_LIB_DIR}/libavutil.a")
    set(HAVE_FFMPEG_UTIL 1)
    set(ALIASOF_libavutil_VERSION "Unknown")
    if(EXISTS "${FFMPEG_LIB_DIR}/libswscale.a")
        ocv_include_directories(${FFMPEG_INCLUDE_DIR})
        set(HAVE_FFMPEG_SWSCALE 1)
        set(ALIASOF_libswscale_VERSION "Unknown")
        set(HIGHGUI_LIBRARIES ${HIGHGUI_LIBRARIES} "${FFMPEG_LIB_DIR}/libavcodec.a"
            "${FFMPEG_LIB_DIR}/libavformat.a" "${FFMPEG_LIB_DIR}/libavutil.a"
            "${FFMPEG_LIB_DIR}/libswscale.a")
        set(HAVE_FFMPEG 1)
    endif()
    endif()
    endif()
    endif()
  endif()
endif()

if(WIN32 AND WITH_FFMPEG)
  include(3rdparty/ffmpeg/ffmpeg_version.cmake REQUIRED)
endif()

A
Andrey Kamaev 已提交
481
#################### LATEX for dpf documentation ##################
482
if(BUILD_DOCS)
483
  include(cmake/OpenCVFindLATEX.cmake REQUIRED)
484
endif()
A
Alexander Shishkov 已提交
485

A
Andrey Kamaev 已提交
486 487
########################## Python Support #########################
include(cmake/OpenCVDetectPython.cmake REQUIRED)
488

A
Andrey Kamaev 已提交
489
########################### Java Support ##########################
490
if(ANDROID)
A
Andrey Kamaev 已提交
491
  include(cmake/OpenCVDetectApacheAnt.cmake REQUIRED)
492 493 494 495
  include(cmake/OpenCVDetectAndroidSDK.cmake REQUIRED)
  
  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 已提交
496
  endif()
497 498
endif()

499 500 501 502 503 504
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)
endif()

A
Alexander Shishkov 已提交
505 506 507 508
############################### QT ################################
set(HAVE_QT 0)
set(HAVE_QT_OPENGL 0)

A
Andrey Kamaev 已提交
509 510 511 512 513 514 515 516 517 518 519 520 521 522
if(WITH_QT)
  find_package(Qt4)
  if(QT4_FOUND)
    set(HAVE_QT 1)
    add_definitions(-DHAVE_QT) #We need to define te macro this way, using cvconfig.h.cmake does not work

    if(WITH_OPENGL)
      find_package (OpenGL QUIET)
      if(QT_QTOPENGL_FOUND AND OPENGL_FOUND)
        set(HAVE_OPENGL 1)
        set(HAVE_QT_OPENGL 1)
        add_definitions(-DHAVE_QT_OPENGL)
        set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${OPENGL_LIBRARIES})
      endif()
A
Alexander Shishkov 已提交
523
    endif()
A
Andrey Kamaev 已提交
524
  endif()
A
Alexander Shishkov 已提交
525 526 527
endif()

############################### TBB ################################
A
Andrey Kamaev 已提交
528 529 530
if(WITH_TBB)
  include(cmake/OpenCVDetectTBB.cmake REQUIRED)
endif()
A
Alexander Shishkov 已提交
531 532 533 534 535

############################ Intel IPP #############################
set(IPP_FOUND)

if(WITH_IPP)
A
Andrey Kamaev 已提交
536
  include(cmake/OpenCVFindIPP.cmake)
A
Alexander Shishkov 已提交
537 538 539
endif()

if(IPP_FOUND)
A
Andrey Kamaev 已提交
540
  add_definitions(-DHAVE_IPP)
541
  ocv_include_directories(${IPP_INCLUDE_DIRS})
A
Andrey Kamaev 已提交
542 543
  link_directories(${IPP_LIBRARY_DIRS})
  set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${IPP_LIBRARIES})
A
Alexander Shishkov 已提交
544 545 546 547
endif()

############################### CUDA ################################
if(WITH_CUDA)
A
Andrey Kamaev 已提交
548
  include(cmake/OpenCVDetectCUDA.cmake REQUIRED)
A
Alexander Shishkov 已提交
549 550 551 552 553 554 555
endif()

############################### OpenNI ################################
set(HAVE_OPENNI FALSE)
set(HAVE_OPENNI_PRIME_SENSOR_MODULE FALSE)

if(WITH_OPENNI)
A
Andrey Kamaev 已提交
556
  include(cmake/OpenCVFindOpenNI.cmake)
A
Alexander Shishkov 已提交
557 558
endif()

559 560
############################### XIMEA ################################
set(HAVE_XIMEA FALSE)
561

562
if(WITH_XIMEA)
A
Andrey Kamaev 已提交
563
  include(cmake/OpenCVFindXimea.cmake)
564 565 566
endif()

if(XIMEA_FOUND)
A
Andrey Kamaev 已提交
567
  set(HAVE_XIMEA TRUE)
568 569
endif()

A
Alexander Shishkov 已提交
570 571
############################## Eigen ##############################
if(WITH_EIGEN)
A
Andrey Kamaev 已提交
572
  find_path(EIGEN_INCLUDE_PATH "Eigen/Core"
573 574 575 576
            PATHS /usr/local /opt /usr ENV ProgramFiles ENV ProgramW6432
            PATH_SUFFIXES include/eigen3 include/eigen2 Eigen/include/eigen3 Eigen/include/eigen2
            DOC "The path to Eigen3/Eigen2 headers")

A
Andrey Kamaev 已提交
577
  if(EIGEN_INCLUDE_PATH)
578
    ocv_include_directories(${EIGEN_INCLUDE_PATH})
579
    ocv_parse_header("${EIGEN_INCLUDE_PATH}/Eigen/src/Core/util/Macros.h" EIGEN_VERSION_LINES EIGEN_WORLD_VERSION EIGEN_MAJOR_VERSION EIGEN_MINOR_VERSION)
A
Andrey Kamaev 已提交
580 581
    set(HAVE_EIGEN 1)
  endif()
A
Alexander Shishkov 已提交
582 583
endif()

584 585 586 587
########################## Clp #####################################
set(HAVE_CLP FALSE)

if(WITH_CLP)
588 589 590 591 592 593 594 595 596 597

  if(UNIX)
    PKG_CHECK_MODULES(CLP clp)
    if(CLP_FOUND)
      set(HAVE_CLP TRUE)
      if(NOT ${CLP_INCLUDE_DIRS} STREQUAL "")
        ocv_include_directories(${CLP_INCLUDE_DIRS})
      endif()
      link_directories(${CLP_LIBRARY_DIRS})
      set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${CLP_LIBRARIES})
598
    endif()
599 600 601
  endif()
  
  if(NOT CLP_FOUND)
602 603 604 605
    find_path(CLP_INCLUDE_PATH "coin"
              PATHS "/usr/local/include" "/usr/include" "/opt/include"
              DOC "The path to Clp headers")
    if(CLP_INCLUDE_PATH)
606
      ocv_include_directories(${CLP_INCLUDE_PATH} "${CLP_INCLUDE_PATH}/coin")
607 608
      set(CLP_LIBRARY_DIR "${CLP_INCLUDE_PATH}/../lib" CACHE PATH "Full path of Clp library directory")
      link_directories(${CLP_LIBRARY_DIR})
609 610 611 612 613
      if(UNIX)
        set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} Clp CoinUtils bz2 z lapack blas m)
      else()
        set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} libClp libCoinUtils)
      endif()
614 615
      set(HAVE_CLP TRUE)
    endif()  
616
  endif()
617
  
618 619
endif()

A
Alexander Shishkov 已提交
620 621
################## Extra HighGUI libs on Windows ###################
if(WIN32)
A
Andrey Kamaev 已提交
622
  set(HIGHGUI_LIBRARIES ${HIGHGUI_LIBRARIES} comctl32 gdi32 ole32)
623

A
Andrey Kamaev 已提交
624 625 626
  if(WITH_VIDEOINPUT)
    set(HAVE_VIDEOINPUT 1)
  endif()
627

A
Andrey Kamaev 已提交
628 629 630
  if(MSVC)
    set(HIGHGUI_LIBRARIES ${HIGHGUI_LIBRARIES} vfw32)
  endif()
A
Alexander Shishkov 已提交
631

A
Andrey Kamaev 已提交
632 633 634 635 636
  if(MINGW)
    if(MINGW64)
      set(HIGHGUI_LIBRARIES ${HIGHGUI_LIBRARIES} msvfw32 avifil32 avicap32 winmm)
    else()
      set(HIGHGUI_LIBRARIES ${HIGHGUI_LIBRARIES} vfw32 winmm)
A
Alexander Shishkov 已提交
637
    endif()
A
Andrey Kamaev 已提交
638
  endif()
639

A
Andrey Kamaev 已提交
640 641
  if(WITH_OPENGL AND NOT HAVE_QT_OPENGL)
    find_package(OpenGL QUIET)
642

A
Andrey Kamaev 已提交
643 644 645
    if(OPENGL_FOUND)
      set(HAVE_OPENGL 1)
      set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${OPENGL_LIBRARIES})
646
      ocv_include_directories(${OPENGL_INCLUDE_DIR})
647
    endif()
A
Andrey Kamaev 已提交
648
  endif()
649
endif()
A
Alexander Shishkov 已提交
650 651


A
Andrey Kamaev 已提交
652 653 654 655 656 657
# ----------------------------------------------------------------------------
# Solution folders:
# ----------------------------------------------------------------------------
if(ENABLE_SOLUTION_FOLDERS)
  set_property(GLOBAL PROPERTY USE_FOLDERS ON)
  set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "CMakeTargets")
658 659
endif()

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

663

A
Andrey Kamaev 已提交
664 665 666
# ----------------------------------------------------------------------------
# Process subdirectories
# ----------------------------------------------------------------------------
A
Alexander Shishkov 已提交
667

A
Andrey Kamaev 已提交
668 669
# opencv.hpp and legacy headers
add_subdirectory(include)
670

A
Andrey Kamaev 已提交
671 672
# OpenCV modules
add_subdirectory(modules)
A
Alexander Shishkov 已提交
673

A
Andrey Kamaev 已提交
674 675
# Generate targets for documentation
add_subdirectory(doc)
676

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

A
Andrey Kamaev 已提交
680 681
# extra applications
add_subdirectory(apps)
682

A
Andrey Kamaev 已提交
683 684 685
# examples
if(BUILD_EXAMPLES OR BUILD_ANDROID_EXAMPLES OR INSTALL_PYTHON_EXAMPLES)
  add_subdirectory(samples)
A
Alexander Shishkov 已提交
686 687
endif()

688

A
Alexander Shishkov 已提交
689
# ----------------------------------------------------------------------------
A
Andrey Kamaev 已提交
690
# Finalization: generate configuration-based files
A
Alexander Shishkov 已提交
691
# ----------------------------------------------------------------------------
A
Andrey Kamaev 已提交
692
ocv_track_build_dependencies()
A
Alexander Shishkov 已提交
693

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

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

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

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

706

A
Alexander Shishkov 已提交
707
# ----------------------------------------------------------------------------
A
Andrey Kamaev 已提交
708
# Summary:
A
Alexander Shishkov 已提交
709
# ----------------------------------------------------------------------------
A
Andrey Kamaev 已提交
710
status("")
711
status("General configuration for OpenCV ${OPENCV_VERSION} =====================================")
712 713 714
if(OPENCV_SVNVERSION)
  status("Version control:" ${OPENCV_SVNVERSION})
endif()
715

716
# ========================== build platform ==========================
A
Andrey Kamaev 已提交
717
status("")
718 719
status("  Platform:")
status("    Host:"             ${CMAKE_HOST_SYSTEM_NAME} ${CMAKE_HOST_SYSTEM_VERSION} ${CMAKE_HOST_SYSTEM_PROCESSOR})
720
if(CMAKE_CROSSCOMPILING)
721
  status("    Target:"         ${CMAKE_SYSTEM_NAME} ${CMAKE_SYSTEM_VERSION} ${CMAKE_SYSTEM_PROCESSOR})
722
endif()
723 724 725 726 727 728 729 730 731
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 已提交
732 733 734
if(NOT CMAKE_GENERATOR MATCHES "Xcode|Visual Studio")
  status("    Configuration:"  ${CMAKE_BUILD_TYPE})
endif()
735

736
# ========================== C/C++ options ==========================
737
status("")
738
status("  C/C++:")
A
Andrey Kamaev 已提交
739
status("    Built as dynamic libs?:" BUILD_SHARED_LIBS THEN YES ELSE NO)
740
status("    C++ Compiler:"           CMAKE_COMPILER_IS_GNUCXX THEN "${CMAKE_CXX_COMPILER} (ver ${CMAKE_GCC_REGEX_VERSION})" ELSE "${CMAKE_CXX_COMPILER}" )
A
Andrey Kamaev 已提交
741 742
status("    C++ flags (Release):"    ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE})
status("    C++ flags (Debug):"      ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG})
743 744 745
status("    C Compiler:"             ${CMAKE_C_COMPILER})
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 已提交
746
if(WIN32)
747 748
  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 已提交
749
else()
750 751
  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 已提交
752 753
endif()

754
# ========================== OpenCV modules ==========================
A
Andrey Kamaev 已提交
755 756 757 758 759
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}")
760 761 762 763 764 765 766 767 768 769 770 771
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}")

772 773 774 775
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 on this platform:" OPENCV_MODULES_DISABLED_FORCE THEN ${OPENCV_MODULES_DISABLED_FORCE_ST} ELSE "-")
A
Andrey Kamaev 已提交
776

777
# ========================== Android details ==========================
778
if(ANDROID)
779 780 781 782 783 784 785 786 787 788 789 790
  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)
791 792
endif()

793
# ========================== GUI ==========================
A
Andrey Kamaev 已提交
794 795
status("")
status("  GUI: ")
A
Alexander Shishkov 已提交
796

797
if(HAVE_QT)
798 799
  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 已提交
800
else()
801 802 803
  if(DEFINED WITH_QT)
    status("    QT 4.x:" NO)
  endif()
804 805 806 807 808 809 810 811 812
  if(WIN32)
    status("    Win32 UI:" YES)
  else()
    if(APPLE)
      if(WITH_CARBON)
        status("    Carbon:" YES)
      else()
        status("    Cocoa:"  YES)
      endif()
A
Alexander Shishkov 已提交
813
    else()
814 815 816
      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 已提交
817
    endif()
818
  endif()
A
Alexander Shishkov 已提交
819 820
endif()

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

823
# ========================== MEDIA IO ==========================
A
Andrey Kamaev 已提交
824 825
status("")
status("  Media I/O: ")
826
status("    ZLib:"         BUILD_ZLIB    THEN "build (ver ${ZLIB_VERSION_STRING})"               ELSE "${ZLIB_LIBRARY} (ver ${ZLIB_VERSION_STRING})")
A
Alexander Shishkov 已提交
827

828
if(WITH_JPEG)
829
  status("    JPEG:"       JPEG_FOUND    THEN "${JPEG_LIBRARY} (ver ${JPEG_LIB_VERSION})"        ELSE "build (ver ${JPEG_LIB_VERSION})")
830 831 832 833
else()
  status("    JPEG:"       "NO")
endif()
if(WITH_PNG)
834
  status("    PNG:"        PNG_FOUND     THEN "${PNG_LIBRARY} (ver ${PNG_VERSION})"              ELSE "build (ver ${PNG_VERSION})")
835 836 837 838
else()
  status("    PNG:"        "NO")
endif()
if(WITH_TIFF)
V
Vadim Pisarevsky 已提交
839 840 841 842 843
  if(TIFF_VERSION_STRING AND TIFF_FOUND)
    status("    TIFF:"     "${TIFF_LIBRARY} (ver ${TIFF_VERSION} - ${TIFF_VERSION_STRING})")
  else()
    status("    TIFF:"     TIFF_FOUND    THEN "${TIFF_LIBRARY} (ver ${TIFF_VERSION})"            ELSE "build (ver ${TIFF_VERSION})")
  endif()
844 845 846 847
else()
  status("    TIFF:"       "NO")
endif()
if(WITH_JASPER)
848
  status("    JPEG 2000:"  JASPER_FOUND  THEN "${JASPER_LIBRARY} (ver ${JASPER_VERSION_STRING})" ELSE "build (ver ${JASPER_VERSION_STRING})")
849 850 851 852
else()
  status("    JPEG 2000:"  "NO")
endif()

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

855
# ========================== VIDEO IO ==========================
A
Andrey Kamaev 已提交
856
status("")
857 858 859
status("  Video I/O:")

if(DEFINED WITH_1394)
860 861
  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)
862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891
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)
892 893 894 895 896
  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()
897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920
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)
921 922 923 924 925
  if(HAVE_CAMV4L)
    set(HAVE_CAMV4L_STR "YES")
  else()
    set(HAVE_CAMV4L_STR "NO")
  endif()
926
  if(HAVE_CAMV4L2)
927 928 929 930
    set(HAVE_CAMV4L2_STR "YES")
  else()
    set(HAVE_CAMV4L2_STR "NO")
  endif()
931 932 933
  status("    V4L/V4L2:"       HAVE_LIBV4L         THEN "Using libv4l (ver ${ALIASOF_libv4l1_VERSION})"
                                                                                                   ELSE "${HAVE_CAMV4L_STR}/${HAVE_CAMV4L2_STR}")
endif(DEFINED WITH_V4L)
934

935 936 937
if(DEFINED WITH_VIDEOINPUT)
  status("    DirectShow:"     HAVE_VIDEOINPUT     THEN YES                                        ELSE NO)
endif(DEFINED WITH_VIDEOINPUT)
A
Alexander Shishkov 已提交
938

939 940 941 942 943 944 945
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)
946

947
# ========================== Other third-party libraries ==========================
A
Andrey Kamaev 已提交
948
status("")
949
status("  Other third-party libraries:")
A
Alexander Shishkov 已提交
950 951

if(WITH_IPP AND IPP_FOUND)
952 953
  status("    Use IPP:" "${IPP_LATEST_VERSION_STR} [${IPP_LATEST_VERSION_MAJOR}.${IPP_LATEST_VERSION_MINOR}.${IPP_LATEST_VERSION_BUILD}]")
  status("         at:" "${IPP_ROOT_DIR}")
A
Alexander Shishkov 已提交
954
else()
955
  status("    Use IPP:"   WITH_IPP AND NOT IPP_FOUND THEN "IPP not found" ELSE NO)
A
Alexander Shishkov 已提交
956 957
endif()

958 959 960
status("    Use TBB:"   HAVE_TBB   THEN "YES (ver ${TBB_VERSION_MAJOR}.${TBB_VERSION_MINOR} interface ${TBB_INTERFACE_VERSION})" ELSE NO)
status("    Use Cuda:"  HAVE_CUDA  THEN "YES (ver ${CUDA_VERSION_STRING})" ELSE NO)
status("    Use Eigen:" HAVE_EIGEN THEN "YES (ver ${EIGEN_WORLD_VERSION}.${EIGEN_MAJOR_VERSION}.${EIGEN_MINOR_VERSION})" ELSE NO)
961
status("    Use Clp:"   HAVE_CLP   THEN YES ELSE NO)
A
Alexander Shishkov 已提交
962

963 964
if(HAVE_CUDA)
  status("")
V
Vadim Pisarevsky 已提交
965
  status("  NVIDIA CUDA:"            "(ver ${CUDA_VERSION_STRING})")
966 967 968 969 970 971 972 973

  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})
  status("    NVIDIA PTX archs:"     ${OPENCV_CUDA_ARCH_BIN})
  status("    NVIDIA GPU features:"  ${OPENCV_CUDA_ARCH_FEATURES})
endif()

974
# ========================== interfaces to languages ==========================
975
status("")
976 977 978
status("  Python:")
status("    Interpreter:"   PYTHON_EXECUTABLE     THEN "${PYTHON_EXECUTABLE} (ver ${PYTHON_VERSION_FULL})"         ELSE NO)
if(BUILD_opencv_python)
V
Vadim Pisarevsky 已提交
979 980 981 982 983
  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()
984 985 986 987 988 989 990
  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()

if(BUILD_opencv_java)
  status("")
  status("  Java:" HAVE_opencv_java THEN YES ELSE NO)
991
endif()
992

993
# ========================== documentation ==========================
994 995 996 997 998 999 1000 1001 1002 1003
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)
1004
endif()
A
Alexander Shishkov 已提交
1005

1006
# ========================== samples and tests ==========================
A
Andrey Kamaev 已提交
1007 1008
status("")
status("  Tests and samples:")
1009 1010 1011
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 已提交
1012 1013

if(ANDROID)
1014 1015
  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 已提交
1016 1017
endif()

1018
# ========================== auxiliary ==========================
A
Andrey Kamaev 已提交
1019 1020 1021 1022 1023 1024
status("")
status("  Install path:" "${CMAKE_INSTALL_PREFIX}")
status("")
status("  cvconfig.h is in:" "${OPENCV_CONFIG_FILE_INCLUDE_DIR}")
status("-----------------------------------------------------------------")
status("")
1025

V
Vadim Pisarevsky 已提交
1026 1027
ocv_finalize_status()

A
Andrey Kamaev 已提交
1028 1029 1030
# ----------------------------------------------------------------------------
# Warn in the case of in-source build
# ----------------------------------------------------------------------------
1031
if("${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}")
1032
  message(WARNING "The source directory is the same as binary directory. \"make clean\" may damage the source tree")
1033
endif()
1034