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