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