Merge pull request #3364 from mshabunin:doxygen-docs-24
[platform/upstream/opencv.git] / CMakeLists.txt
1 # ----------------------------------------------------------------------------
2 #  Root CMake file for OpenCV
3 #
4 #    From the off-tree build directory, invoke:
5 #      $ cmake <PATH_TO_OPENCV_ROOT>
6 #
7 #
8 #   - OCT-2008: Initial version <joseluisblancoc@gmail.com>
9 #
10 # ----------------------------------------------------------------------------
11
12 set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true)
13
14 # Following block can broke build in case of cross-compilng
15 # but CMAKE_CROSSCOMPILING variable will be set only on project(OpenCV) command
16 # so we will try to detect crosscompiling by presense of CMAKE_TOOLCHAIN_FILE
17 if(NOT CMAKE_TOOLCHAIN_FILE)
18   # it _must_ go before project(OpenCV) in order to work
19   if(WIN32)
20     set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "Installation Directory")
21   else()
22     set(CMAKE_INSTALL_PREFIX "/usr/local" CACHE PATH "Installation Directory")
23   endif()
24 else(NOT CMAKE_TOOLCHAIN_FILE)
25   #Android: set output folder to ${CMAKE_BINARY_DIR}
26   set( LIBRARY_OUTPUT_PATH_ROOT ${CMAKE_BINARY_DIR} CACHE PATH "root for library output, set this to change where android libs are compiled to" )
27   # any crosscompiling
28   set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "Installation Directory")
29 endif(NOT CMAKE_TOOLCHAIN_FILE)
30
31 # --------------------------------------------------------------
32 # Top level OpenCV project
33 # --------------------------------------------------------------
34 if(CMAKE_GENERATOR MATCHES Xcode AND XCODE_VERSION VERSION_GREATER 4.3)
35   cmake_minimum_required(VERSION 2.8.8)
36 elseif(IOS)
37   cmake_minimum_required(VERSION 2.8.0)
38 else()
39   cmake_minimum_required(VERSION 2.6.3)
40 endif()
41
42 if(POLICY CMP0017)
43   cmake_policy(SET CMP0017 NEW)
44 endif()
45
46 if(POLICY CMP0022)
47   cmake_policy(SET CMP0022 OLD)
48 endif()
49
50 if(POLICY CMP0026)
51   # silence cmake 3.0+ warnings about reading LOCATION attribute
52   cmake_policy(SET CMP0026 OLD)
53 endif()
54
55 # must go before the project command
56 set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Configs" FORCE)
57 if(DEFINED CMAKE_BUILD_TYPE AND CMAKE_VERSION VERSION_GREATER "2.8")
58   set_property( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS ${CMAKE_CONFIGURATION_TYPES} )
59 endif()
60
61 enable_testing()
62
63 project(OpenCV CXX C)
64
65 if(MSVC)
66   set(CMAKE_USE_RELATIVE_PATHS ON CACHE INTERNAL "" FORCE)
67 endif()
68
69 include(cmake/OpenCVUtils.cmake)
70
71 ocv_clear_vars(OpenCVModules_TARGETS)
72
73 # ----------------------------------------------------------------------------
74 # Break in case of popular CMake configuration mistakes
75 # ----------------------------------------------------------------------------
76 if(NOT CMAKE_SIZEOF_VOID_P GREATER 0)
77   message(FATAL_ERROR "CMake fails to deterimine the bitness of target platform.
78   Please check your CMake and compiler installation. If you are crosscompiling then ensure that your CMake toolchain file correctly sets the compiler details.")
79 endif()
80
81 # ----------------------------------------------------------------------------
82 # Detect compiler and target platform architecture
83 # ----------------------------------------------------------------------------
84 include(cmake/OpenCVDetectCXXCompiler.cmake)
85
86 # Add these standard paths to the search paths for FIND_LIBRARY
87 # to find libraries from these locations first
88 if(UNIX AND NOT ANDROID)
89   if(X86_64 OR CMAKE_SIZEOF_VOID_P EQUAL 8)
90     if(EXISTS /lib64)
91       list(APPEND CMAKE_LIBRARY_PATH /lib64)
92     else()
93       list(APPEND CMAKE_LIBRARY_PATH /lib)
94     endif()
95     if(EXISTS /usr/lib64)
96       list(APPEND CMAKE_LIBRARY_PATH /usr/lib64)
97     else()
98       list(APPEND CMAKE_LIBRARY_PATH /usr/lib)
99     endif()
100   elseif(X86 OR CMAKE_SIZEOF_VOID_P EQUAL 4)
101     if(EXISTS /lib32)
102       list(APPEND CMAKE_LIBRARY_PATH /lib32)
103     else()
104       list(APPEND CMAKE_LIBRARY_PATH /lib)
105     endif()
106     if(EXISTS /usr/lib32)
107       list(APPEND CMAKE_LIBRARY_PATH /usr/lib32)
108     else()
109       list(APPEND CMAKE_LIBRARY_PATH /usr/lib)
110     endif()
111   endif()
112 endif()
113
114 # Add these standard paths to the search paths for FIND_PATH
115 # to find include files from these locations first
116 if(MINGW)
117   if(EXISTS /mingw)
118       list(APPEND CMAKE_INCLUDE_PATH /mingw)
119   endif()
120   if(EXISTS /mingw32)
121       list(APPEND CMAKE_INCLUDE_PATH /mingw32)
122   endif()
123   if(EXISTS /mingw64)
124       list(APPEND CMAKE_INCLUDE_PATH /mingw64)
125   endif()
126 endif()
127
128 # ----------------------------------------------------------------------------
129 # OpenCV cmake options
130 # ----------------------------------------------------------------------------
131
132 # Optional 3rd party components
133 # ===================================================
134 OCV_OPTION(WITH_1394           "Include IEEE1394 support"                    ON   IF (NOT ANDROID AND NOT IOS) )
135 OCV_OPTION(WITH_AVFOUNDATION   "Use AVFoundation for Video I/O"              ON   IF IOS)
136 OCV_OPTION(WITH_CARBON         "Use Carbon for UI instead of Cocoa"          OFF  IF APPLE )
137 OCV_OPTION(WITH_CUDA           "Include NVidia Cuda Runtime support"         ON   IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT IOS) )
138 OCV_OPTION(WITH_VTK            "Include VTK library support (and build opencv_viz module eiher)"             OFF IF (NOT ANDROID AND NOT IOS) )
139 OCV_OPTION(WITH_CUFFT          "Include NVidia Cuda Fast Fourier Transform (FFT) library support"            ON  IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT IOS) )
140 OCV_OPTION(WITH_CUBLAS         "Include NVidia Cuda Basic Linear Algebra Subprograms (BLAS) library support" OFF IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT IOS) )
141 OCV_OPTION(WITH_NVCUVID        "Include NVidia Video Decoding library support"                               OFF IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT ANDROID AND NOT IOS AND NOT APPLE) )
142 OCV_OPTION(WITH_EIGEN          "Include Eigen2/Eigen3 support"               ON)
143 OCV_OPTION(WITH_VFW            "Include Video for Windows support"           ON   IF WIN32 )
144 OCV_OPTION(WITH_FFMPEG         "Include FFMPEG support"                      ON   IF (NOT ANDROID AND NOT IOS))
145 OCV_OPTION(WITH_GSTREAMER      "Include Gstreamer support"                   ON   IF (UNIX AND NOT APPLE AND NOT ANDROID) )
146 OCV_OPTION(WITH_GSTREAMER_0_10 "Enable Gstreamer 0.10 support (instead of 1.x)"   OFF )
147 OCV_OPTION(WITH_GTK            "Include GTK support"                         ON   IF (UNIX AND NOT APPLE AND NOT ANDROID) )
148 OCV_OPTION(WITH_IMAGEIO        "ImageIO support for OS X"                    OFF  IF APPLE )
149 OCV_OPTION(WITH_IPP            "Include Intel IPP support"                   OFF  IF (MSVC OR X86 OR X86_64) )
150 OCV_OPTION(WITH_JASPER         "Include JPEG2K support"                      ON   IF (NOT IOS) )
151 OCV_OPTION(WITH_JPEG           "Include JPEG support"                        ON)
152 OCV_OPTION(WITH_OPENEXR        "Include ILM support via OpenEXR"             ON   IF (NOT IOS) )
153 OCV_OPTION(WITH_OPENGL         "Include OpenGL support"                      OFF  IF (NOT ANDROID) )
154 OCV_OPTION(WITH_OPENNI         "Include OpenNI support"                      OFF  IF (NOT ANDROID AND NOT IOS) )
155 OCV_OPTION(WITH_PNG            "Include PNG support"                         ON)
156 OCV_OPTION(WITH_PVAPI          "Include Prosilica GigE support"              ON   IF (NOT ANDROID AND NOT IOS) )
157 OCV_OPTION(WITH_GIGEAPI        "Include Smartek GigE support"                ON   IF (NOT ANDROID AND NOT IOS) )
158 OCV_OPTION(WITH_QT             "Build with Qt Backend support"               OFF  IF (NOT ANDROID AND NOT IOS) )
159 OCV_OPTION(WITH_WIN32UI        "Build with Win32 UI Backend support"         ON   IF WIN32 )
160 OCV_OPTION(WITH_QUICKTIME      "Use QuickTime for Video I/O insted of QTKit" OFF  IF APPLE )
161 OCV_OPTION(WITH_TBB            "Include Intel TBB support"                   OFF  IF (NOT IOS) )
162 OCV_OPTION(WITH_OPENMP         "Include OpenMP support"                      OFF)
163 OCV_OPTION(WITH_CSTRIPES       "Include C= support"                          OFF  IF WIN32 )
164 OCV_OPTION(WITH_TIFF           "Include TIFF support"                        ON   IF (NOT IOS) )
165 OCV_OPTION(WITH_UNICAP         "Include Unicap support (GPL)"                OFF  IF (UNIX AND NOT APPLE AND NOT ANDROID) )
166 OCV_OPTION(WITH_V4L            "Include Video 4 Linux support"               ON   IF (UNIX AND NOT ANDROID) )
167 OCV_OPTION(WITH_LIBV4L         "Use libv4l for Video 4 Linux support"        ON   IF (UNIX AND NOT ANDROID) )
168 OCV_OPTION(WITH_DSHOW          "Build HighGUI with DirectShow support"       ON   IF (WIN32 AND NOT ARM) )
169 OCV_OPTION(WITH_MSMF           "Build HighGUI with Media Foundation support" OFF  IF WIN32 )
170 OCV_OPTION(WITH_XIMEA          "Include XIMEA cameras support"               OFF  IF (NOT ANDROID) )
171 OCV_OPTION(WITH_XINE           "Include Xine support (GPL)"                  OFF  IF (UNIX AND NOT APPLE AND NOT ANDROID) )
172 OCV_OPTION(WITH_OPENCL         "Include OpenCL Runtime support"              ON   IF (NOT IOS) )
173 OCV_OPTION(WITH_OPENCLAMDFFT   "Include AMD OpenCL FFT library support"      ON   IF (NOT ANDROID AND NOT IOS) )
174 OCV_OPTION(WITH_OPENCLAMDBLAS  "Include AMD OpenCL BLAS library support"     ON   IF (NOT ANDROID AND NOT IOS) )
175 OCV_OPTION(WITH_INTELPERC      "Include Intel Perceptual Computing support"  OFF  IF WIN32 )
176
177 # OpenCV build components
178 # ===================================================
179 OCV_OPTION(BUILD_SHARED_LIBS        "Build shared libraries (.dll/.so) instead of static ones (.lib/.a)" NOT (ANDROID OR IOS) )
180 OCV_OPTION(BUILD_opencv_apps        "Build utility applications (used for example to train classifiers)" (NOT ANDROID) IF (NOT IOS) )
181 OCV_OPTION(BUILD_ANDROID_EXAMPLES   "Build examples for Android platform"         ON  IF ANDROID )
182 OCV_OPTION(BUILD_DOCS               "Create build rules for OpenCV Documentation" ON )
183 OCV_OPTION(BUILD_EXAMPLES           "Build all examples"                          OFF )
184 OCV_OPTION(BUILD_PACKAGE            "Enables 'make package_source' command"       ON )
185 OCV_OPTION(BUILD_PERF_TESTS         "Build performance tests"                     ON  IF (NOT IOS) )
186 OCV_OPTION(BUILD_TESTS              "Build accuracy & regression tests"           ON  IF (NOT IOS) )
187 OCV_OPTION(BUILD_WITH_DEBUG_INFO    "Include debug info into debug libs (not MSCV only)" ON )
188 OCV_OPTION(BUILD_WITH_STATIC_CRT    "Enables use of staticaly linked CRT for staticaly linked OpenCV" ON IF MSVC )
189 OCV_OPTION(BUILD_FAT_JAVA_LIB       "Create fat java wrapper containing the whole OpenCV library" ON IF NOT BUILD_SHARED_LIBS AND CMAKE_COMPILER_IS_GNUCXX )
190 OCV_OPTION(BUILD_ANDROID_SERVICE    "Build OpenCV Manager for Google Play" OFF IF ANDROID AND ANDROID_SOURCE_TREE )
191 OCV_OPTION(BUILD_ANDROID_PACKAGE    "Build platform-specific package for Google Play" OFF IF ANDROID )
192
193 # 3rd party libs
194 OCV_OPTION(BUILD_ZLIB               "Build zlib from source"             WIN32 OR APPLE )
195 OCV_OPTION(BUILD_TIFF               "Build libtiff from source"          WIN32 OR ANDROID OR APPLE )
196 OCV_OPTION(BUILD_JASPER             "Build libjasper from source"        WIN32 OR ANDROID OR APPLE )
197 OCV_OPTION(BUILD_JPEG               "Build libjpeg from source"          WIN32 OR ANDROID OR APPLE )
198 OCV_OPTION(BUILD_PNG                "Build libpng from source"           WIN32 OR ANDROID OR APPLE )
199 OCV_OPTION(BUILD_OPENEXR            "Build openexr from source"          WIN32 OR ANDROID OR APPLE )
200 OCV_OPTION(BUILD_TBB                "Download and build TBB from source" ANDROID )
201
202 # OpenCV installation options
203 # ===================================================
204 OCV_OPTION(INSTALL_CREATE_DISTRIB   "Change install rules to build the distribution package" OFF )
205 OCV_OPTION(INSTALL_C_EXAMPLES       "Install C examples"        OFF )
206 OCV_OPTION(INSTALL_PYTHON_EXAMPLES  "Install Python examples"   OFF )
207 OCV_OPTION(INSTALL_ANDROID_EXAMPLES "Install Android examples"  OFF IF ANDROID )
208 OCV_OPTION(INSTALL_TO_MANGLED_PATHS "Enables mangled install paths, that help with side by side installs." OFF IF (UNIX AND NOT ANDROID AND NOT IOS AND BUILD_SHARED_LIBS) )
209 OCV_OPTION(INSTALL_TESTS            "Install accuracy and performance test binaries and test data" OFF)
210
211 # OpenCV build options
212 # ===================================================
213 OCV_OPTION(ENABLE_DYNAMIC_CUDA        "Enabled dynamic CUDA linkage"                             ON   IF ANDROID )
214 OCV_OPTION(ENABLE_PRECOMPILED_HEADERS "Use precompiled headers"                                  ON   IF (NOT IOS) )
215 OCV_OPTION(ENABLE_SOLUTION_FOLDERS    "Solution folder in Visual Studio or in other IDEs"        (MSVC_IDE OR CMAKE_GENERATOR MATCHES Xcode) IF (CMAKE_VERSION VERSION_GREATER "2.8.0") )
216 OCV_OPTION(ENABLE_PROFILING           "Enable profiling in the GCC compiler (Add flags: -g -pg)" OFF  IF CMAKE_COMPILER_IS_GNUCXX )
217 OCV_OPTION(ENABLE_COVERAGE            "Enable coverage collection with  GCov"                    OFF  IF CMAKE_COMPILER_IS_GNUCXX )
218 OCV_OPTION(ENABLE_OMIT_FRAME_POINTER  "Enable -fomit-frame-pointer for GCC"                      ON   IF CMAKE_COMPILER_IS_GNUCXX AND NOT (APPLE AND CMAKE_COMPILER_IS_CLANGCXX) )
219 OCV_OPTION(ENABLE_POWERPC             "Enable PowerPC for GCC"                                   ON   IF (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_SYSTEM_PROCESSOR MATCHES powerpc.*) )
220 OCV_OPTION(ENABLE_FAST_MATH           "Enable -ffast-math (not recommended for GCC 4.6.x)"       OFF  IF (CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
221 OCV_OPTION(ENABLE_SSE                 "Enable SSE instructions"                                  ON   IF ((MSVC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) )
222 OCV_OPTION(ENABLE_SSE2                "Enable SSE2 instructions"                                 ON   IF ((MSVC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) )
223 OCV_OPTION(ENABLE_SSE3                "Enable SSE3 instructions"                                 ON   IF ((CV_ICC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) )
224 OCV_OPTION(ENABLE_SSSE3               "Enable SSSE3 instructions"                                OFF  IF (CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
225 OCV_OPTION(ENABLE_SSE41               "Enable SSE4.1 instructions"                               OFF  IF ((CV_ICC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) )
226 OCV_OPTION(ENABLE_SSE42               "Enable SSE4.2 instructions"                               OFF  IF (CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
227 OCV_OPTION(ENABLE_AVX                 "Enable AVX instructions"                                  OFF  IF ((MSVC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) )
228 OCV_OPTION(ENABLE_AVX2                "Enable AVX2 instructions"                                 OFF  IF ((MSVC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) )
229 OCV_OPTION(ENABLE_NEON                "Enable NEON instructions"                                 OFF  IF CMAKE_COMPILER_IS_GNUCXX AND ARM )
230 OCV_OPTION(ENABLE_VFPV3               "Enable VFPv3-D32 instructions"                            OFF  IF CMAKE_COMPILER_IS_GNUCXX AND ARM )
231 OCV_OPTION(ENABLE_NOISY_WARNINGS      "Show all warnings even if they are too noisy"             OFF )
232 OCV_OPTION(OPENCV_WARNINGS_ARE_ERRORS "Treat warnings as errors"                                 OFF )
233 OCV_OPTION(ENABLE_WINRT_MODE          "Build with Windows Runtime support"                       OFF  IF WIN32 )
234 OCV_OPTION(ENABLE_WINRT_MODE_NATIVE   "Build with Windows Runtime native C++ support"            OFF  IF WIN32 )
235 OCV_OPTION(ENABLE_LIBVS2013           "Build VS2013 with Visual Studio 2013 libraries"           OFF  IF WIN32 AND (MSVC_VERSION EQUAL 1800) )
236 OCV_OPTION(ENABLE_WINSDK81            "Build VS2013 with Windows 8.1 SDK"                        OFF  IF WIN32 AND (MSVC_VERSION EQUAL 1800) )
237 OCV_OPTION(ENABLE_WINPHONESDK80       "Build with Windows Phone 8.0 SDK"                         OFF  IF WIN32 AND (MSVC_VERSION EQUAL 1700) )
238 OCV_OPTION(ENABLE_WINPHONESDK81       "Build VS2013 with Windows Phone 8.1 SDK"                  OFF  IF WIN32 AND (MSVC_VERSION EQUAL 1800) )
239
240 # uncategorized options
241 # ===================================================
242 OCV_OPTION(CMAKE_VERBOSE "Verbose mode" OFF )
243
244 # backward compatibility
245 # ===================================================
246 include(cmake/OpenCVLegacyOptions.cmake OPTIONAL)
247
248
249 # ----------------------------------------------------------------------------
250 #  Get actual OpenCV version number from sources
251 # ----------------------------------------------------------------------------
252 include(cmake/OpenCVVersion.cmake)
253
254
255 # ----------------------------------------------------------------------------
256 #  Build & install layouts
257 # ----------------------------------------------------------------------------
258
259 # Save libs and executables in the same place
260 set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/bin" CACHE PATH "Output directory for applications" )
261
262 if (ANDROID)
263   if (ANDROID_ABI MATCHES "NEON")
264     set(ENABLE_NEON ON)
265   endif()
266   if (ANDROID_ABI MATCHES "VFPV3")
267     set(ENABLE_VFPV3 ON)
268   endif()
269 endif()
270
271 if(ANDROID OR WIN32)
272   set(OPENCV_DOC_INSTALL_PATH doc)
273 elseif(INSTALL_TO_MANGLED_PATHS)
274   set(OPENCV_DOC_INSTALL_PATH share/OpenCV-${OPENCV_VERSION}/doc)
275 else()
276   set(OPENCV_DOC_INSTALL_PATH share/OpenCV/doc)
277 endif()
278
279 if(WIN32)
280   if(DEFINED OpenCV_RUNTIME AND DEFINED OpenCV_ARCH)
281     set(OpenCV_INSTALL_BINARIES_PREFIX "${OpenCV_ARCH}/${OpenCV_RUNTIME}/")
282   else()
283     message(STATUS "Can't detect runtime and/or arch")
284     set(OpenCV_INSTALL_BINARIES_PREFIX "")
285   endif()
286 elseif(ANDROID)
287   set(OpenCV_INSTALL_BINARIES_PREFIX "sdk/native/")
288 else()
289   set(OpenCV_INSTALL_BINARIES_PREFIX "")
290 endif()
291
292 if(ANDROID)
293   set(OPENCV_SAMPLES_BIN_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}samples/${ANDROID_NDK_ABI_NAME}")
294 else()
295   set(OPENCV_SAMPLES_BIN_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}samples")
296 endif()
297
298 if(ANDROID)
299   set(OPENCV_BIN_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}bin/${ANDROID_NDK_ABI_NAME}")
300 else()
301   set(OPENCV_BIN_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}bin")
302 endif()
303
304 if(NOT OPENCV_TEST_INSTALL_PATH)
305   set(OPENCV_TEST_INSTALL_PATH "${OPENCV_BIN_INSTALL_PATH}")
306 endif()
307
308 if(ANDROID)
309   set(LIBRARY_OUTPUT_PATH         "${OpenCV_BINARY_DIR}/lib/${ANDROID_NDK_ABI_NAME}")
310   set(3P_LIBRARY_OUTPUT_PATH      "${OpenCV_BINARY_DIR}/3rdparty/lib/${ANDROID_NDK_ABI_NAME}")
311   set(OPENCV_LIB_INSTALL_PATH     sdk/native/libs/${ANDROID_NDK_ABI_NAME})
312   set(OPENCV_3P_LIB_INSTALL_PATH  sdk/native/3rdparty/libs/${ANDROID_NDK_ABI_NAME})
313   set(OPENCV_CONFIG_INSTALL_PATH  sdk/native/jni)
314   set(OPENCV_INCLUDE_INSTALL_PATH sdk/native/jni/include)
315   set(OPENCV_SAMPLES_SRC_INSTALL_PATH samples/native)
316 else()
317   set(LIBRARY_OUTPUT_PATH         "${OpenCV_BINARY_DIR}/lib")
318   set(3P_LIBRARY_OUTPUT_PATH      "${OpenCV_BINARY_DIR}/3rdparty/lib${LIB_SUFFIX}")
319   if(WIN32)
320     if(OpenCV_STATIC)
321       set(OPENCV_LIB_INSTALL_PATH   "${OpenCV_INSTALL_BINARIES_PREFIX}staticlib${LIB_SUFFIX}")
322     else()
323       set(OPENCV_LIB_INSTALL_PATH   "${OpenCV_INSTALL_BINARIES_PREFIX}lib${LIB_SUFFIX}")
324     endif()
325     set(OPENCV_3P_LIB_INSTALL_PATH  "${OpenCV_INSTALL_BINARIES_PREFIX}staticlib${LIB_SUFFIX}")
326     set(OPENCV_SAMPLES_SRC_INSTALL_PATH    samples/native)
327   else()
328     set(OPENCV_LIB_INSTALL_PATH     lib${LIB_SUFFIX})
329     set(OPENCV_3P_LIB_INSTALL_PATH  share/OpenCV/3rdparty/${OPENCV_LIB_INSTALL_PATH})
330     set(OPENCV_SAMPLES_SRC_INSTALL_PATH    share/OpenCV/samples)
331   endif()
332   set(OPENCV_INCLUDE_INSTALL_PATH "include")
333
334   math(EXPR SIZEOF_VOID_P_BITS "8 * ${CMAKE_SIZEOF_VOID_P}")
335   if(LIB_SUFFIX AND NOT SIZEOF_VOID_P_BITS EQUAL LIB_SUFFIX)
336     set(OPENCV_CONFIG_INSTALL_PATH lib${LIB_SUFFIX}/cmake/opencv)
337   else()
338     set(OPENCV_CONFIG_INSTALL_PATH share/OpenCV)
339   endif()
340 endif()
341
342 set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${OPENCV_LIB_INSTALL_PATH}")
343 set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
344
345 if(INSTALL_TO_MANGLED_PATHS)
346   set(OPENCV_INCLUDE_INSTALL_PATH ${OPENCV_INCLUDE_INSTALL_PATH}/opencv-${OPENCV_VERSION})
347 endif()
348
349 if(WIN32)
350   # Postfix of DLLs:
351   set(OPENCV_DLLVERSION "${OPENCV_VERSION_MAJOR}${OPENCV_VERSION_MINOR}${OPENCV_VERSION_PATCH}")
352   set(OPENCV_DEBUG_POSTFIX d)
353 else()
354   # Postfix of so's:
355   set(OPENCV_DLLVERSION "")
356   set(OPENCV_DEBUG_POSTFIX "")
357 endif()
358
359 if(DEFINED CMAKE_DEBUG_POSTFIX)
360   set(OPENCV_DEBUG_POSTFIX "${CMAKE_DEBUG_POSTFIX}")
361 endif()
362
363 if(CMAKE_VERBOSE)
364   set(CMAKE_VERBOSE_MAKEFILE 1)
365 endif()
366
367
368 # ----------------------------------------------------------------------------
369 #  Path for build/platform -specific headers
370 # ----------------------------------------------------------------------------
371 set(OPENCV_CONFIG_FILE_INCLUDE_DIR "${CMAKE_BINARY_DIR}/" CACHE PATH "Where to create the platform-dependant cvconfig.h")
372 ocv_include_directories(${OPENCV_CONFIG_FILE_INCLUDE_DIR})
373
374 # ----------------------------------------------------------------------------
375 #  Path for additional modules
376 # ----------------------------------------------------------------------------
377 set(OPENCV_EXTRA_MODULES_PATH "" CACHE PATH "Where to look for additional OpenCV modules")
378
379 # ----------------------------------------------------------------------------
380 #  Autodetect if we are in a GIT repository
381 # ----------------------------------------------------------------------------
382
383 # don't use FindGit because it requires CMake 2.8.2
384 set(git_names git eg) # eg = easy git
385 # Prefer .cmd variants on Windows unless running in a Makefile in the MSYS shell
386 if(CMAKE_HOST_WIN32)
387   if(NOT CMAKE_GENERATOR MATCHES "MSYS")
388     set(git_names git.cmd git eg.cmd eg)
389   endif()
390 endif()
391
392 find_host_program(GIT_EXECUTABLE NAMES ${git_names} PATH_SUFFIXES Git/cmd Git/bin DOC "git command line client")
393 mark_as_advanced(GIT_EXECUTABLE)
394
395 if(GIT_EXECUTABLE)
396   execute_process(COMMAND ${GIT_EXECUTABLE} describe --tags --always --dirty --match "2.[0-9].[0-9]*"
397     WORKING_DIRECTORY "${OpenCV_SOURCE_DIR}"
398     OUTPUT_VARIABLE OPENCV_VCSVERSION
399     RESULT_VARIABLE GIT_RESULT
400     ERROR_QUIET
401     OUTPUT_STRIP_TRAILING_WHITESPACE
402   )
403   if(NOT GIT_RESULT EQUAL 0)
404     set(OPENCV_VCSVERSION "unknown")
405   endif()
406 else()
407   # We don't have git:
408   set(OPENCV_VCSVERSION "unknown")
409 endif()
410
411
412 # ----------------------------------------------------------------------------
413 # OpenCV compiler and linker options
414 # ----------------------------------------------------------------------------
415 # In case of Makefiles if the user does not setup CMAKE_BUILD_TYPE, assume it's Release:
416 if(CMAKE_GENERATOR MATCHES "Makefiles|Ninja" AND "${CMAKE_BUILD_TYPE}" STREQUAL "")
417   set(CMAKE_BUILD_TYPE Release)
418 endif()
419
420 include(cmake/OpenCVCompilerOptions.cmake)
421
422
423 # ----------------------------------------------------------------------------
424 # Use statically or dynamically linked CRT?
425 # Default: dynamic
426 # ----------------------------------------------------------------------------
427 if(MSVC)
428   include(cmake/OpenCVCRTLinkage.cmake)
429 endif(MSVC)
430
431 if(WIN32 AND NOT MINGW)
432   add_definitions(-D_VARIADIC_MAX=10)
433 endif(WIN32 AND NOT MINGW)
434
435
436 # ----------------------------------------------------------------------------
437 #       CHECK FOR SYSTEM LIBRARIES, OPTIONS, ETC..
438 # ----------------------------------------------------------------------------
439 if(UNIX)
440   include(cmake/OpenCVFindPkgConfig.cmake OPTIONAL)
441   include(CheckFunctionExists)
442   include(CheckIncludeFile)
443
444   if(NOT APPLE)
445     CHECK_INCLUDE_FILE(pthread.h HAVE_LIBPTHREAD)
446     if(ANDROID)
447       set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} dl m log)
448     elseif(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD|NetBSD|DragonFly")
449       set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} m pthread)
450     elseif(${CMAKE_SYSTEM_NAME} MATCHES "QNX")
451       set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} m)
452     else()
453       set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} dl m pthread rt)
454     endif()
455   else()
456     set(HAVE_LIBPTHREAD YES)
457   endif()
458 endif()
459
460 include(cmake/OpenCVPCHSupport.cmake)
461 include(cmake/OpenCVModule.cmake)
462
463 # ----------------------------------------------------------------------------
464 #  Detect endianness of build platform
465 # ----------------------------------------------------------------------------
466
467 if(CMAKE_SYSTEM_NAME STREQUAL iOS)
468   # test_big_endian needs try_compile, which doesn't work for iOS
469   # http://public.kitware.com/Bug/view.php?id=12288
470   set(WORDS_BIGENDIAN 0)
471 else()
472   include(TestBigEndian)
473   test_big_endian(WORDS_BIGENDIAN)
474 endif()
475
476 # ----------------------------------------------------------------------------
477 #  Detect 3rd-party libraries
478 # ----------------------------------------------------------------------------
479
480 include(cmake/OpenCVFindLibsGrfmt.cmake)
481 include(cmake/OpenCVFindLibsGUI.cmake)
482 include(cmake/OpenCVFindLibsVideo.cmake)
483 include(cmake/OpenCVFindLibsPerf.cmake)
484
485 # ----------------------------------------------------------------------------
486 #  Detect other 3rd-party libraries/tools
487 # ----------------------------------------------------------------------------
488
489 # --- LATEX for pdf documentation ---
490 unset(HAVE_DOXYGEN CACHE)
491 if(BUILD_DOCS)
492   include(cmake/OpenCVFindLATEX.cmake)
493   find_host_program(DOXYGEN_BUILD doxygen)
494   if (DOXYGEN_BUILD)
495     set(HAVE_DOXYGEN 1)
496   endif (DOXYGEN_BUILD)
497 endif(BUILD_DOCS)
498
499 # --- Python Support ---
500 include(cmake/OpenCVDetectPython.cmake)
501
502 # --- Java Support ---
503 include(cmake/OpenCVDetectApacheAnt.cmake)
504 if(ANDROID)
505   include(cmake/OpenCVDetectAndroidSDK.cmake)
506
507   if(NOT ANDROID_TOOLS_Pkg_Revision GREATER 13)
508     message(WARNING "OpenCV requires Android SDK tools revision 14 or newer. Otherwise tests and samples will no be compiled.")
509   endif()
510 else()
511   find_package(JNI)
512 endif()
513
514 if(ANDROID AND ANDROID_EXECUTABLE AND ANT_EXECUTABLE AND (ANT_VERSION VERSION_GREATER 1.7) AND (ANDROID_TOOLS_Pkg_Revision GREATER 13))
515   SET(CAN_BUILD_ANDROID_PROJECTS TRUE)
516 else()
517   SET(CAN_BUILD_ANDROID_PROJECTS FALSE)
518 endif()
519
520 # --- OpenCL ---
521 if(WITH_OPENCL)
522   include(cmake/OpenCVDetectOpenCL.cmake)
523 endif()
524
525 # --- VTK support ---
526 include(cmake/OpenCVDetectVTK.cmake)
527
528 # ----------------------------------------------------------------------------
529 # Add CUDA libraries (needed for apps/tools, samples)
530 # ----------------------------------------------------------------------------
531 if(NOT HAVE_CUDA)
532   set(ENABLE_DYNAMIC_CUDA OFF)
533 endif()
534
535 if(HAVE_CUDA AND NOT ENABLE_DYNAMIC_CUDA)
536   set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${CUDA_LIBRARIES} ${CUDA_npp_LIBRARY})
537   if(HAVE_CUBLAS)
538     set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${CUDA_cublas_LIBRARY})
539   endif()
540   if(HAVE_CUFFT)
541     set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${CUDA_cufft_LIBRARY})
542   endif()
543 endif()
544
545 # ----------------------------------------------------------------------------
546 # Solution folders:
547 # ----------------------------------------------------------------------------
548 if(ENABLE_SOLUTION_FOLDERS)
549   set_property(GLOBAL PROPERTY USE_FOLDERS ON)
550   set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "CMakeTargets")
551 endif()
552
553 # Extra OpenCV targets: uninstall, package_source, perf, etc.
554 include(cmake/OpenCVExtraTargets.cmake)
555
556
557 # ----------------------------------------------------------------------------
558 # Process subdirectories
559 # ----------------------------------------------------------------------------
560
561 # opencv.hpp and legacy headers
562 add_subdirectory(include)
563
564 # OpenCV modules
565 add_subdirectory(modules)
566
567 # Generate targets for documentation
568 add_subdirectory(doc)
569
570 # various data that is used by cv libraries and/or demo applications.
571 add_subdirectory(data)
572
573 # extra applications
574 if(BUILD_opencv_apps)
575   add_subdirectory(apps)
576 endif()
577
578 # examples
579 if(BUILD_EXAMPLES OR BUILD_ANDROID_EXAMPLES OR INSTALL_PYTHON_EXAMPLES)
580   add_subdirectory(samples)
581 endif()
582
583 if(ANDROID)
584   add_subdirectory(platforms/android/service)
585 endif()
586
587 if(BUILD_ANDROID_PACKAGE)
588   add_subdirectory(platforms/android/package)
589 endif()
590
591 if (ANDROID)
592   add_subdirectory(platforms/android/libinfo)
593 endif()
594
595 # ----------------------------------------------------------------------------
596 # Finalization: generate configuration-based files
597 # ----------------------------------------------------------------------------
598 ocv_track_build_dependencies()
599
600 # Generate platform-dependent and configuration-dependent headers
601 include(cmake/OpenCVGenHeaders.cmake)
602
603 # Generate opencv.pc for pkg-config command
604 include(cmake/OpenCVGenPkgconfig.cmake)
605
606 # Generate OpenCV.mk for ndk-build (Android build tool)
607 include(cmake/OpenCVGenAndroidMK.cmake)
608
609 # Generate OpenCVСonfig.cmake and OpenCVConfig-version.cmake for cmake projects
610 include(cmake/OpenCVGenConfig.cmake)
611
612 # Generate Info.plist for the IOS framework
613 include(cmake/OpenCVGenInfoPlist.cmake)
614
615 # Generate environment setup file
616 if(INSTALL_TESTS AND OPENCV_TEST_DATA_PATH AND UNIX)
617   if(ANDROID)
618     get_filename_component(TEST_PATH ${OPENCV_TEST_INSTALL_PATH} DIRECTORY)
619     configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/opencv_run_all_tests_android.sh.in"
620                    "${CMAKE_BINARY_DIR}/unix-install/opencv_run_all_tests.sh" @ONLY)
621     install(PROGRAMS "${CMAKE_BINARY_DIR}/unix-install/opencv_run_all_tests.sh"
622             DESTINATION ${CMAKE_INSTALL_PREFIX} COMPONENT tests)
623   else()
624     set(OPENCV_PYTHON_TESTS_LIST "")
625     if(BUILD_opencv_python)
626       file(GLOB py_tests modules/python/test/*.py)
627       install(PROGRAMS ${py_tests} DESTINATION ${OPENCV_TEST_INSTALL_PATH} COMPONENT tests)
628       set(OPENCV_PYTHON_TESTS_LIST "test2.py")
629     endif()
630     configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/opencv_testing.sh.in"
631                    "${CMAKE_BINARY_DIR}/unix-install/opencv_testing.sh" @ONLY)
632     install(FILES "${CMAKE_BINARY_DIR}/unix-install/opencv_testing.sh"
633             DESTINATION /etc/profile.d/ COMPONENT tests)
634     configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/opencv_run_all_tests_unix.sh.in"
635                    "${CMAKE_BINARY_DIR}/unix-install/opencv_run_all_tests.sh" @ONLY)
636     install(PROGRAMS "${CMAKE_BINARY_DIR}/unix-install/opencv_run_all_tests.sh"
637             DESTINATION ${OPENCV_TEST_INSTALL_PATH} COMPONENT tests)
638   endif()
639 endif()
640
641 if(NOT OPENCV_README_FILE)
642   if(ANDROID)
643     set(OPENCV_README_FILE ${CMAKE_CURRENT_SOURCE_DIR}/platforms/android/README.android)
644   endif()
645 endif()
646
647 if(NOT OPENCV_LICENSE_FILE)
648   set(OPENCV_LICENSE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE)
649 endif()
650
651 # for UNIX it does not make sense as LICENSE and readme will be part of the package automatically
652 if(ANDROID OR NOT UNIX)
653   install(FILES ${OPENCV_LICENSE_FILE}
654         PERMISSIONS OWNER_READ GROUP_READ WORLD_READ
655         DESTINATION ${CMAKE_INSTALL_PREFIX} COMPONENT libs)
656   if(OPENCV_README_FILE)
657     install(FILES ${OPENCV_README_FILE}
658             PERMISSIONS OWNER_READ GROUP_READ WORLD_READ
659             DESTINATION ${CMAKE_INSTALL_PREFIX} COMPONENT libs)
660   endif()
661 endif()
662
663 # ----------------------------------------------------------------------------
664 # Summary:
665 # ----------------------------------------------------------------------------
666 status("")
667 status("General configuration for OpenCV ${OPENCV_VERSION} =====================================")
668 if(OPENCV_VCSVERSION)
669   status("  Version control:" ${OPENCV_VCSVERSION})
670 endif()
671
672 # ========================== build platform ==========================
673 status("")
674 status("  Platform:")
675 status("    Host:"             ${CMAKE_HOST_SYSTEM_NAME} ${CMAKE_HOST_SYSTEM_VERSION} ${CMAKE_HOST_SYSTEM_PROCESSOR})
676 if(CMAKE_CROSSCOMPILING)
677   status("    Target:"         ${CMAKE_SYSTEM_NAME} ${CMAKE_SYSTEM_VERSION} ${CMAKE_SYSTEM_PROCESSOR})
678 endif()
679 status("    CMake:"            ${CMAKE_VERSION})
680 status("    CMake generator:"  ${CMAKE_GENERATOR})
681 status("    CMake build tool:" ${CMAKE_BUILD_TOOL})
682 if(MSVC)
683   status("    MSVC:"           ${MSVC_VERSION})
684 endif()
685 if(CMAKE_GENERATOR MATCHES Xcode)
686   status("    Xcode:"          ${XCODE_VERSION})
687 endif()
688 if(NOT CMAKE_GENERATOR MATCHES "Xcode|Visual Studio")
689   status("    Configuration:"  ${CMAKE_BUILD_TYPE})
690 endif()
691
692 # ========================== C/C++ options ==========================
693 if(CMAKE_CXX_COMPILER_VERSION)
694   set(OPENCV_COMPILER_STR "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} (ver ${CMAKE_CXX_COMPILER_VERSION})")
695 elseif(CMAKE_COMPILER_IS_CLANGCXX)
696   set(OPENCV_COMPILER_STR "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} (ver ${CMAKE_CLANG_REGEX_VERSION})")
697 elseif(CMAKE_COMPILER_IS_GNUCXX)
698   set(OPENCV_COMPILER_STR "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} (ver ${CMAKE_GCC_REGEX_VERSION})")
699 else()
700   set(OPENCV_COMPILER_STR "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1}")
701 endif()
702 string(STRIP "${OPENCV_COMPILER_STR}" OPENCV_COMPILER_STR)
703
704 status("")
705 status("  C/C++:")
706 status("    Built as dynamic libs?:" BUILD_SHARED_LIBS THEN YES ELSE NO)
707 status("    C++ Compiler:"           ${OPENCV_COMPILER_STR})
708 status("    C++ flags (Release):"    ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE})
709 status("    C++ flags (Debug):"      ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG})
710 status("    C Compiler:"             ${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1})
711 status("    C flags (Release):"      ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_RELEASE})
712 status("    C flags (Debug):"        ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_DEBUG})
713 if(WIN32)
714   status("    Linker flags (Release):" ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_RELEASE})
715   status("    Linker flags (Debug):"   ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_DEBUG})
716 else()
717   status("    Linker flags (Release):" ${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS_RELEASE})
718   status("    Linker flags (Debug):"   ${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS_DEBUG})
719 endif()
720 status("    Precompiled headers:"     PCHSupport_FOUND AND ENABLE_PRECOMPILED_HEADERS THEN YES ELSE NO)
721
722 # ========================== OpenCV modules ==========================
723 status("")
724 status("  OpenCV modules:")
725 string(REPLACE "opencv_" "" OPENCV_MODULES_BUILD_ST          "${OPENCV_MODULES_BUILD}")
726 string(REPLACE "opencv_" "" OPENCV_MODULES_DISABLED_USER_ST  "${OPENCV_MODULES_DISABLED_USER}")
727 string(REPLACE "opencv_" "" OPENCV_MODULES_DISABLED_FORCE_ST "${OPENCV_MODULES_DISABLED_FORCE}")
728 set(OPENCV_MODULES_DISABLED_AUTO_ST "")
729 foreach(m ${OPENCV_MODULES_DISABLED_AUTO})
730   set(__mdeps "")
731   foreach(d ${OPENCV_MODULE_${m}_DEPS})
732     if(d MATCHES "^opencv_" AND NOT HAVE_${d})
733       list(APPEND __mdeps ${d})
734     endif()
735   endforeach()
736   if(__mdeps)
737     list(APPEND OPENCV_MODULES_DISABLED_AUTO_ST "${m}(deps: ${__mdeps})")
738   else()
739     list(APPEND OPENCV_MODULES_DISABLED_AUTO_ST "${m}")
740   endif()
741 endforeach()
742 string(REPLACE "opencv_" "" OPENCV_MODULES_DISABLED_AUTO_ST  "${OPENCV_MODULES_DISABLED_AUTO_ST}")
743
744 status("    To be built:"            OPENCV_MODULES_BUILD          THEN ${OPENCV_MODULES_BUILD_ST}          ELSE "-")
745 status("    Disabled:"               OPENCV_MODULES_DISABLED_USER  THEN ${OPENCV_MODULES_DISABLED_USER_ST}  ELSE "-")
746 status("    Disabled by dependency:" OPENCV_MODULES_DISABLED_AUTO  THEN ${OPENCV_MODULES_DISABLED_AUTO_ST}  ELSE "-")
747 status("    Unavailable:"            OPENCV_MODULES_DISABLED_FORCE THEN ${OPENCV_MODULES_DISABLED_FORCE_ST} ELSE "-")
748
749 # ========================== Android details ==========================
750 if(ANDROID)
751   status("")
752   status("  Android: ")
753   status("    Android ABI:" ${ANDROID_ABI})
754   status("    STL type:" ${ANDROID_STL})
755   status("    Native API level:" android-${ANDROID_NATIVE_API_LEVEL})
756   android_get_compatible_target(android_sdk_target_status ${ANDROID_NATIVE_API_LEVEL} ${ANDROID_SDK_TARGET} 11)
757   status("    SDK target:" "${android_sdk_target_status}")
758   if(BUILD_WITH_ANDROID_NDK)
759     status("    Android NDK:" "${ANDROID_NDK} (toolchain: ${ANDROID_TOOLCHAIN_NAME})")
760   elseif(BUILD_WITH_STANDALONE_TOOLCHAIN)
761     status("    Android toolchain:" "${ANDROID_STANDALONE_TOOLCHAIN}")
762   endif()
763   status("    android tool:"  ANDROID_EXECUTABLE  THEN "${ANDROID_EXECUTABLE} (${ANDROID_TOOLS_Pkg_Desc})" ELSE NO)
764   status("    Google Play package:" BUILD_ANDROID_PACKAGE                                         THEN YES ELSE NO)
765   status("    Android examples:"    BUILD_ANDROID_EXAMPLES AND CAN_BUILD_ANDROID_PROJECTS         THEN YES ELSE NO)
766 endif()
767
768 # ================== Windows RT features ==================
769 if(WIN32)
770 status("")
771     status("  Windows RT support:" HAVE_WINRT THEN YES ELSE NO)
772     if (ENABLE_WINRT_MODE OR ENABLE_WINRT_MODE_NATIVE)
773       status("  Windows (Phone) SDK v8.0/v8.1:" ${WINDOWS_SDK_PATH})
774       status("  Visual Studio 2012/2013:" ${VISUAL_STUDIO_PATH})
775     endif()
776 endif(WIN32)
777
778 # ========================== GUI ==========================
779 status("")
780 status("  GUI: ")
781
782 if(HAVE_QT5)
783   status("    QT 5.x:"            HAVE_QT        THEN "YES (ver ${Qt5Core_VERSION_STRING})" ELSE NO)
784   status("    QT OpenGL support:" HAVE_QT_OPENGL THEN "YES (${Qt5OpenGL_LIBRARIES} ${Qt5OpenGL_VERSION_STRING})" ELSE NO)
785 elseif(HAVE_QT)
786   status("    QT 4.x:"            HAVE_QT        THEN "YES (ver ${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}.${QT_VERSION_PATCH} ${QT_EDITION})" ELSE NO)
787   status("    QT OpenGL support:" HAVE_QT_OPENGL THEN "YES (${QT_QTOPENGL_LIBRARY})" ELSE NO)
788 else()
789   if(DEFINED WITH_QT)
790     status("    QT:" NO)
791   endif()
792   if(DEFINED WITH_WIN32UI)
793     status("    Win32 UI:" HAVE_WIN32UI THEN YES ELSE NO)
794   else()
795     if(APPLE)
796       if(WITH_CARBON)
797         status("    Carbon:" YES)
798       else()
799         status("    Cocoa:"  YES)
800       endif()
801     else()
802       status("    GTK+ 2.x:" HAVE_GTK      THEN "YES (ver ${ALIASOF_gtk+-2.0_VERSION})"     ELSE NO)
803       status("    GThread :" HAVE_GTHREAD  THEN "YES (ver ${ALIASOF_gthread-2.0_VERSION})"  ELSE NO)
804       status("    GtkGlExt:" HAVE_GTKGLEXT THEN "YES (ver ${ALIASOF_gtkglext-1.0_VERSION})" ELSE NO)
805     endif()
806   endif()
807 endif()
808
809 status("    OpenGL support:" HAVE_OPENGL THEN "YES (${OPENGL_LIBRARIES})" ELSE NO)
810 status("    VTK support:" HAVE_VTK THEN "YES (ver ${VTK_VERSION})" ELSE NO)
811
812 # ========================== MEDIA IO ==========================
813 status("")
814 status("  Media I/O: ")
815 status("    ZLib:"         BUILD_ZLIB    THEN "build (ver ${ZLIB_VERSION_STRING})"               ELSE "${ZLIB_LIBRARY} (ver ${ZLIB_VERSION_STRING})")
816
817 if(WITH_JPEG)
818   status("    JPEG:"       JPEG_FOUND    THEN "${JPEG_LIBRARY} (ver ${JPEG_LIB_VERSION})"        ELSE "build (ver ${JPEG_LIB_VERSION})")
819 else()
820   status("    JPEG:"       "NO")
821 endif()
822 if(WITH_PNG)
823   status("    PNG:"        PNG_FOUND     THEN "${PNG_LIBRARY} (ver ${PNG_VERSION})"              ELSE "build (ver ${PNG_VERSION})")
824 else()
825   status("    PNG:"        "NO")
826 endif()
827 if(WITH_TIFF)
828   if(TIFF_VERSION_STRING AND TIFF_FOUND)
829     status("    TIFF:"     "${TIFF_LIBRARY} (ver ${TIFF_VERSION} - ${TIFF_VERSION_STRING})")
830   else()
831     status("    TIFF:"     TIFF_FOUND    THEN "${TIFF_LIBRARY} (ver ${TIFF_VERSION})"            ELSE "build (ver ${TIFF_VERSION} - ${TIFF_VERSION_STRING})")
832   endif()
833 else()
834   status("    TIFF:"       "NO")
835 endif()
836 if(WITH_JASPER)
837   status("    JPEG 2000:"  JASPER_FOUND  THEN "${JASPER_LIBRARY} (ver ${JASPER_VERSION_STRING})" ELSE "build (ver ${JASPER_VERSION_STRING})")
838 else()
839   status("    JPEG 2000:"  "NO")
840 endif()
841 if(WITH_OPENEXR)
842   status("    OpenEXR:"  OPENEXR_FOUND  THEN "${OPENEXR_LIBRARIES} (ver ${OPENEXR_VERSION})" ELSE "build (ver ${OPENEXR_VERSION})")
843 else()
844   status("    OpenEXR:"  "NO")
845 endif()
846
847 # ========================== VIDEO IO ==========================
848 status("")
849 status("  Video I/O:")
850
851 if (DEFINED WITH_VFW)
852   status("    Video for Windows:" HAVE_VFW         THEN YES                                        ELSE NO)
853 endif(DEFINED WITH_VFW)
854
855 if(DEFINED WITH_1394)
856   status("    DC1394 1.x:"     HAVE_DC1394         THEN "YES (ver ${ALIASOF_libdc1394_VERSION})"   ELSE NO)
857   status("    DC1394 2.x:"     HAVE_DC1394_2       THEN "YES (ver ${ALIASOF_libdc1394-2_VERSION})" ELSE NO)
858 endif(DEFINED WITH_1394)
859
860 if(ANDROID)
861   if(HAVE_opencv_androidcamera)
862     status("    AndroidNativeCamera:" BUILD_ANDROID_CAMERA_WRAPPER
863                                                    THEN "YES, build for Android${ANDROID_VERSION}" ELSE "YES, use prebuilt libraries")
864   else()
865     status("    AndroidNativeCamera:" "NO (native camera requires Android API level 8 or higher)")
866   endif()
867 endif()
868
869 if(DEFINED WITH_AVFOUNDATION)
870   status("    AVFoundation:"   WITH_AVFOUNDATION   THEN YES                                        ELSE NO)
871 endif(DEFINED WITH_AVFOUNDATION)
872
873 if(DEFINED WITH_FFMPEG)
874   if(WIN32)
875     status("    FFMPEG:"       WITH_FFMPEG         THEN "YES (prebuilt binaries)"                  ELSE NO)
876   else()
877     status("    FFMPEG:"       HAVE_FFMPEG         THEN YES ELSE NO)
878   endif()
879   status("      codec:"        HAVE_FFMPEG_CODEC   THEN "YES (ver ${ALIASOF_libavcodec_VERSION})"  ELSE NO)
880   status("      format:"       HAVE_FFMPEG_FORMAT  THEN "YES (ver ${ALIASOF_libavformat_VERSION})" ELSE NO)
881   status("      util:"         HAVE_FFMPEG_UTIL    THEN "YES (ver ${ALIASOF_libavutil_VERSION})"   ELSE NO)
882   status("      swscale:"      HAVE_FFMPEG_SWSCALE THEN "YES (ver ${ALIASOF_libswscale_VERSION})"  ELSE NO)
883   status("      gentoo-style:" HAVE_GENTOO_FFMPEG  THEN YES                                        ELSE NO)
884 endif(DEFINED WITH_FFMPEG)
885
886 if(DEFINED WITH_GSTREAMER)
887   status("    GStreamer:"      HAVE_GSTREAMER      THEN ""                                         ELSE NO)
888   if(HAVE_GSTREAMER)
889     status("      base:"       "YES (ver ${GSTREAMER_BASE_VERSION})")
890     status("      video:"      "YES (ver ${GSTREAMER_VIDEO_VERSION})")
891     status("      app:"        "YES (ver ${GSTREAMER_APP_VERSION})")
892     status("      riff:"       "YES (ver ${GSTREAMER_RIFF_VERSION})")
893     status("      pbutils:"    "YES (ver ${GSTREAMER_PBUTILS_VERSION})")
894   endif(HAVE_GSTREAMER)
895 endif(DEFINED WITH_GSTREAMER)
896
897 if(DEFINED WITH_OPENNI)
898   status("    OpenNI:"         HAVE_OPENNI         THEN "YES (ver ${OPENNI_VERSION_STRING}, build ${OPENNI_VERSION_BUILD})"
899                                                                                                    ELSE NO)
900   status("    OpenNI PrimeSensor Modules:" HAVE_OPENNI_PRIME_SENSOR_MODULE
901                                                    THEN "YES (${OPENNI_PRIME_SENSOR_MODULE})"      ELSE NO)
902 endif(DEFINED WITH_OPENNI)
903
904 if(DEFINED WITH_PVAPI)
905   status("    PvAPI:"          HAVE_PVAPI          THEN YES                                        ELSE NO)
906 endif(DEFINED WITH_PVAPI)
907
908 if(DEFINED WITH_GIGEAPI)
909   status("    GigEVisionSDK:"  HAVE_GIGE_API       THEN YES                                        ELSE NO)
910 endif(DEFINED WITH_GIGEAPI)
911
912 if(DEFINED WITH_QUICKTIME)
913   status("    QuickTime:"      HAVE_QUICKTIME      THEN YES                                        ELSE NO)
914   status("    QTKit:"          HAVE_QTKIT          THEN YES                                        ELSE NO)
915 endif(DEFINED WITH_QUICKTIME)
916
917 if(DEFINED WITH_UNICAP)
918   status("    UniCap:"         HAVE_UNICAP         THEN "YES (ver ${ALIASOF_libunicap_VERSION})"   ELSE NO)
919   status("    UniCap ucil:"    HAVE_UNICAP_UCIL    THEN "YES (ver ${ALIASOF_libucil_VERSION})"     ELSE NO)
920 endif(DEFINED WITH_UNICAP)
921
922 if(DEFINED WITH_V4L)
923   if(HAVE_CAMV4L)
924     set(HAVE_CAMV4L_STR "YES")
925   else()
926     set(HAVE_CAMV4L_STR "NO")
927   endif()
928   if(HAVE_CAMV4L2)
929     set(HAVE_CAMV4L2_STR "YES")
930   elseif(HAVE_VIDEOIO)
931     set(HAVE_CAMV4L2_STR "YES(videoio)")
932   else()
933     set(HAVE_CAMV4L2_STR "NO")
934   endif()
935   status("    V4L/V4L2:"       HAVE_LIBV4L
936              THEN "Using libv4l1 (ver ${ALIASOF_libv4l1_VERSION}) / libv4l2 (ver ${ALIASOF_libv4l2_VERSION})"
937              ELSE "${HAVE_CAMV4L_STR}/${HAVE_CAMV4L2_STR}")
938 endif(DEFINED WITH_V4L)
939
940 if(DEFINED WITH_DSHOW)
941   status("    DirectShow:"     HAVE_DSHOW     THEN YES                                        ELSE NO)
942 endif(DEFINED WITH_DSHOW)
943
944 if(DEFINED WITH_MSMF)
945   status("    Media Foundation:" HAVE_MSMF    THEN YES                                        ELSE NO)
946 endif(DEFINED WITH_MSMF)
947
948 if(DEFINED WITH_XIMEA)
949   status("    XIMEA:"          HAVE_XIMEA          THEN YES                                        ELSE NO)
950 endif(DEFINED WITH_XIMEA)
951
952 if(DEFINED WITH_XINE)
953   status("    Xine:"           HAVE_XINE           THEN "YES (ver ${ALIASOF_libxine_VERSION})"     ELSE NO)
954 endif(DEFINED WITH_XINE)
955
956 if(DEFINED WITH_INTELPERC)
957   status("    Intel PerC:"     HAVE_INTELPERC      THEN "YES"                                 ELSE NO)
958 endif(DEFINED WITH_INTELPERC)
959
960
961 # ========================== Other third-party libraries ==========================
962 status("")
963 status("  Other third-party libraries:")
964
965 if(WITH_IPP AND IPP_FOUND)
966   status("    Use IPP:" "${IPP_LATEST_VERSION_STR} [${IPP_LATEST_VERSION_MAJOR}.${IPP_LATEST_VERSION_MINOR}.${IPP_LATEST_VERSION_BUILD}]")
967   status("         at:" "${IPP_ROOT_DIR}")
968 else()
969   status("    Use IPP:"   WITH_IPP AND NOT IPP_FOUND THEN "IPP not found" ELSE NO)
970 endif()
971
972 status("    Use Eigen:"      HAVE_EIGEN       THEN "YES (ver ${EIGEN_WORLD_VERSION}.${EIGEN_MAJOR_VERSION}.${EIGEN_MINOR_VERSION})" ELSE NO)
973 status("    Use TBB:"        HAVE_TBB         THEN "YES (ver ${TBB_VERSION_MAJOR}.${TBB_VERSION_MINOR} interface ${TBB_INTERFACE_VERSION})" ELSE NO)
974 status("    Use OpenMP:"     HAVE_OPENMP      THEN YES ELSE NO)
975 status("    Use GCD"         HAVE_GCD         THEN YES ELSE NO)
976 status("    Use Concurrency" HAVE_CONCURRENCY THEN YES ELSE NO)
977 status("    Use C=:"         HAVE_CSTRIPES    THEN YES ELSE NO)
978 status("    Use Cuda:"       HAVE_CUDA        THEN "YES (ver ${CUDA_VERSION_STRING})" ELSE NO)
979 status("    Use OpenCL:"     HAVE_OPENCL      THEN YES ELSE NO)
980
981 if(HAVE_CUDA)
982   status("")
983   status("  NVIDIA CUDA")
984
985   status("    Use CUFFT:"            HAVE_CUFFT   THEN YES ELSE NO)
986   status("    Use CUBLAS:"           HAVE_CUBLAS  THEN YES ELSE NO)
987   status("    USE NVCUVID:"          HAVE_NVCUVID THEN YES ELSE NO)
988   status("    NVIDIA GPU arch:"      ${OPENCV_CUDA_ARCH_BIN})
989   status("    NVIDIA PTX archs:"     ${OPENCV_CUDA_ARCH_PTX})
990   status("    Use fast math:"        CUDA_FAST_MATH THEN YES ELSE NO)
991 endif()
992
993 if(HAVE_OPENCL)
994   status("")
995   status("  OpenCL:")
996   if(HAVE_OPENCL_STATIC)
997     set(__opencl_ver "static")
998   else()
999     set(__opencl_ver "dynamic")
1000   endif()
1001   status("    Version:"       ${__opencl_ver})
1002   if(OPENCL_INCLUDE_DIR)
1003     status("    Include path:"       ${OPENCL_INCLUDE_DIRS})
1004   endif()
1005   if(OPENCL_LIBRARIES)
1006     set(__libs "")
1007     foreach(l ${OPENCL_LIBRARIES})
1008       if(TARGET ${l})
1009         get_target_property(p ${l} LOCATION)
1010         if(p MATCHES NOTFOUND)
1011           list(APPEND __libs "${l}")
1012         else()
1013           list(APPEND __libs "${p}")
1014         endif()
1015       else()
1016         list(APPEND __libs "${l}")
1017       endif()
1018     endforeach()
1019     status("    libraries:"          ${__libs})
1020   endif()
1021   status("    Use AMD FFT:"          HAVE_CLAMDFFT  THEN YES ELSE NO)
1022   status("    Use AMD BLAS:"         HAVE_CLAMDBLAS THEN YES ELSE NO)
1023 endif()
1024
1025 # ========================== python ==========================
1026 status("")
1027 status("  Python:")
1028 status("    Interpreter:"     PYTHON_EXECUTABLE   THEN "${PYTHON_EXECUTABLE} (ver ${PYTHON_VERSION_FULL})"         ELSE NO)
1029 if(BUILD_opencv_python)
1030   if(PYTHONLIBS_VERSION_STRING)
1031     status("    Libraries:"   HAVE_opencv_python  THEN  "${PYTHON_LIBRARIES} (ver ${PYTHONLIBS_VERSION_STRING})"   ELSE NO)
1032   else()
1033     status("    Libraries:"   HAVE_opencv_python  THEN  ${PYTHON_LIBRARIES}                                        ELSE NO)
1034   endif()
1035   status("    numpy:"         PYTHON_USE_NUMPY    THEN "${PYTHON_NUMPY_INCLUDE_DIR} (ver ${PYTHON_NUMPY_VERSION})" ELSE "NO (Python wrappers can not be generated)")
1036   status("    packages path:" PYTHON_EXECUTABLE   THEN "${PYTHON_PACKAGES_PATH}"                                   ELSE "-")
1037 endif()
1038
1039 # ========================== java ==========================
1040 status("")
1041 status("  Java:")
1042 status("    ant:"           ANT_EXECUTABLE      THEN "${ANT_EXECUTABLE} (ver ${ANT_VERSION})"                    ELSE NO)
1043 if(NOT ANDROID)
1044   status("    JNI:"         JNI_INCLUDE_DIRS    THEN "${JNI_INCLUDE_DIRS}"                                       ELSE NO)
1045 endif()
1046 status("    Java tests:"    BUILD_TESTS AND (CAN_BUILD_ANDROID_PROJECTS OR HAVE_opencv_java)            THEN YES ELSE NO)
1047
1048 # ========================== documentation ==========================
1049 if(BUILD_DOCS)
1050   status("")
1051   status("  Documentation:")
1052   if(HAVE_SPHINX)
1053     status("    Build Documentation:" PDFLATEX_COMPILER      THEN YES ELSE "YES (only HTML and without math expressions)")
1054   else()
1055     status("    Build Documentation:" NO)
1056   endif()
1057   status("    Sphinx:"              HAVE_SPHINX              THEN "${SPHINX_BUILD} (ver ${SPHINX_VERSION})" ELSE NO)
1058   status("    PdfLaTeX compiler:"   PDFLATEX_COMPILER        THEN "${PDFLATEX_COMPILER}" ELSE NO)
1059   status("    Doxygen:"             HAVE_DOXYGEN             THEN "YES (${DOXYGEN_BUILD})" ELSE NO)
1060 endif()
1061
1062 # ========================== samples and tests ==========================
1063 status("")
1064 status("  Tests and samples:")
1065 status("    Tests:"             BUILD_TESTS AND HAVE_opencv_ts       THEN YES ELSE NO)
1066 status("    Performance tests:" BUILD_PERF_TESTS AND HAVE_opencv_ts  THEN YES ELSE NO)
1067 status("    C/C++ Examples:"    BUILD_EXAMPLES                       THEN YES ELSE NO)
1068
1069 # ========================== auxiliary ==========================
1070 status("")
1071 status("  Install path:" "${CMAKE_INSTALL_PREFIX}")
1072 status("")
1073 status("  cvconfig.h is in:" "${OPENCV_CONFIG_FILE_INCLUDE_DIR}")
1074 status("-----------------------------------------------------------------")
1075 status("")
1076
1077 ocv_finalize_status()
1078
1079 # ----------------------------------------------------------------------------
1080 # Warn in the case of in-source build
1081 # ----------------------------------------------------------------------------
1082 if("${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}")
1083   message(WARNING "The source directory is the same as binary directory. \"make clean\" may damage the source tree")
1084 endif()
1085
1086 # ----------------------------------------------------------------------------
1087 # CPack stuff
1088 # ----------------------------------------------------------------------------
1089
1090 include(cmake/OpenCVPackaging.cmake)