Move _dst.create() to the begining of scaleAdd function
[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 if(BUILD_DOCS)
462   include(cmake/OpenCVFindLATEX.cmake)
463 endif(BUILD_DOCS)
464
465 # --- Python Support ---
466 include(cmake/OpenCVDetectPython.cmake)
467
468 # --- Java Support ---
469 include(cmake/OpenCVDetectApacheAnt.cmake)
470 if(ANDROID)
471   include(cmake/OpenCVDetectAndroidSDK.cmake)
472
473   if(NOT ANDROID_TOOLS_Pkg_Revision GREATER 13)
474     message(WARNING "OpenCV requires Android SDK tools revision 14 or newer. Otherwise tests and samples will no be compiled.")
475   endif()
476 else()
477   find_package(JNI)
478 endif()
479
480 if(ANDROID AND ANDROID_EXECUTABLE AND ANT_EXECUTABLE AND (ANT_VERSION VERSION_GREATER 1.7) AND (ANDROID_TOOLS_Pkg_Revision GREATER 13))
481   SET(CAN_BUILD_ANDROID_PROJECTS TRUE)
482 else()
483   SET(CAN_BUILD_ANDROID_PROJECTS FALSE)
484 endif()
485
486 # --- OpenCL ---
487 if(WITH_OPENCL)
488   include(cmake/OpenCVDetectOpenCL.cmake)
489 endif()
490
491 # --- DirectX ---
492 if(WITH_DIRECTX)
493   include(cmake/OpenCVDetectDirectX.cmake)
494 endif()
495
496 # --- Matlab/Octave ---
497 include(cmake/OpenCVFindMatlab.cmake)
498
499 include(cmake/OpenCVDetectVTK.cmake)
500
501 # ----------------------------------------------------------------------------
502 # Add CUDA libraries (needed for apps/tools, samples)
503 # ----------------------------------------------------------------------------
504 if(HAVE_CUDA)
505   set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${CUDA_LIBRARIES} ${CUDA_npp_LIBRARY})
506   if(HAVE_CUBLAS)
507     set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${CUDA_cublas_LIBRARY})
508   endif()
509   if(HAVE_CUFFT)
510     set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${CUDA_cufft_LIBRARY})
511   endif()
512 endif()
513 # ----------------------------------------------------------------------------
514 # Solution folders:
515 # ----------------------------------------------------------------------------
516 if(ENABLE_SOLUTION_FOLDERS)
517   set_property(GLOBAL PROPERTY USE_FOLDERS ON)
518   set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "CMakeTargets")
519 endif()
520
521 # Extra OpenCV targets: uninstall, package_source, perf, etc.
522 include(cmake/OpenCVExtraTargets.cmake)
523
524
525 # ----------------------------------------------------------------------------
526 # Process subdirectories
527 # ----------------------------------------------------------------------------
528
529 # opencv.hpp and legacy headers
530 add_subdirectory(include)
531
532 # OpenCV modules
533 add_subdirectory(modules)
534
535 # Generate targets for documentation
536 add_subdirectory(doc)
537
538 # various data that is used by cv libraries and/or demo applications.
539 add_subdirectory(data)
540
541 # extra applications
542 if(BUILD_opencv_apps)
543   add_subdirectory(apps)
544 endif()
545
546 # examples
547 if(BUILD_EXAMPLES OR BUILD_ANDROID_EXAMPLES OR INSTALL_PYTHON_EXAMPLES)
548   add_subdirectory(samples)
549 endif()
550
551 if(ANDROID)
552   add_subdirectory(platforms/android/service)
553 endif()
554
555 if(BUILD_ANDROID_PACKAGE)
556   add_subdirectory(platforms/android/package)
557 endif()
558
559 if (ANDROID)
560   add_subdirectory(platforms/android/libinfo)
561 endif()
562
563 # ----------------------------------------------------------------------------
564 # Finalization: generate configuration-based files
565 # ----------------------------------------------------------------------------
566
567 # Generate platform-dependent and configuration-dependent headers
568 include(cmake/OpenCVGenHeaders.cmake)
569
570 # Generate opencv.pc for pkg-config command
571 include(cmake/OpenCVGenPkgconfig.cmake)
572
573 # Generate OpenCV.mk for ndk-build (Android build tool)
574 include(cmake/OpenCVGenAndroidMK.cmake)
575
576 # Generate OpenCVСonfig.cmake and OpenCVConfig-version.cmake for cmake projects
577 include(cmake/OpenCVGenConfig.cmake)
578
579 # Generate Info.plist for the IOS framework
580 include(cmake/OpenCVGenInfoPlist.cmake)
581
582 # Generate environment setup file
583 if(INSTALL_TESTS AND OPENCV_TEST_DATA_PATH AND UNIX)
584   if(ANDROID)
585     get_filename_component(TEST_PATH ${OPENCV_TEST_INSTALL_PATH} DIRECTORY)
586     configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/opencv_run_all_tests_android.sh.in"
587                    "${CMAKE_BINARY_DIR}/unix-install/opencv_run_all_tests.sh" @ONLY)
588     install(PROGRAMS "${CMAKE_BINARY_DIR}/unix-install/opencv_run_all_tests.sh"
589             DESTINATION ${CMAKE_INSTALL_PREFIX} COMPONENT tests)
590   else()
591     configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/opencv_testing.sh.in"
592                    "${CMAKE_BINARY_DIR}/unix-install/opencv_testing.sh" @ONLY)
593     install(FILES "${CMAKE_BINARY_DIR}/unix-install/opencv_testing.sh"
594             DESTINATION /etc/profile.d/ COMPONENT tests)
595     configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/opencv_run_all_tests_unix.sh.in"
596                    "${CMAKE_BINARY_DIR}/unix-install/opencv_run_all_tests.sh" @ONLY)
597     install(PROGRAMS "${CMAKE_BINARY_DIR}/unix-install/opencv_run_all_tests.sh"
598             DESTINATION ${OPENCV_TEST_INSTALL_PATH} COMPONENT tests)
599
600   endif()
601 endif()
602
603 if(NOT OPENCV_README_FILE)
604   if(ANDROID)
605     set(OPENCV_README_FILE ${CMAKE_CURRENT_SOURCE_DIR}/platforms/android/README.android)
606   endif()
607 endif()
608
609 if(NOT OPENCV_LICENSE_FILE)
610   set(OPENCV_LICENSE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE)
611 endif()
612
613 # for UNIX it does not make sense as LICENSE and readme will be part of the package automatically
614 if(ANDROID OR NOT UNIX)
615   install(FILES ${OPENCV_LICENSE_FILE}
616         PERMISSIONS OWNER_READ GROUP_READ WORLD_READ
617         DESTINATION ${CMAKE_INSTALL_PREFIX} COMPONENT libs)
618   if(OPENCV_README_FILE)
619     install(FILES ${OPENCV_README_FILE}
620             PERMISSIONS OWNER_READ GROUP_READ WORLD_READ
621             DESTINATION ${CMAKE_INSTALL_PREFIX} COMPONENT libs)
622   endif()
623 endif()
624
625 # ----------------------------------------------------------------------------
626 # Summary:
627 # ----------------------------------------------------------------------------
628 status("")
629 status("General configuration for OpenCV ${OPENCV_VERSION} =====================================")
630 if(OPENCV_VCSVERSION)
631   status("  Version control:" ${OPENCV_VCSVERSION})
632 endif()
633
634 # ========================== build platform ==========================
635 status("")
636 status("  Platform:")
637 status("    Host:"             ${CMAKE_HOST_SYSTEM_NAME} ${CMAKE_HOST_SYSTEM_VERSION} ${CMAKE_HOST_SYSTEM_PROCESSOR})
638 if(CMAKE_CROSSCOMPILING)
639   status("    Target:"         ${CMAKE_SYSTEM_NAME} ${CMAKE_SYSTEM_VERSION} ${CMAKE_SYSTEM_PROCESSOR})
640 endif()
641 status("    CMake:"            ${CMAKE_VERSION})
642 status("    CMake generator:"  ${CMAKE_GENERATOR})
643 status("    CMake build tool:" ${CMAKE_BUILD_TOOL})
644 if(MSVC)
645   status("    MSVC:"           ${MSVC_VERSION})
646 endif()
647 if(CMAKE_GENERATOR MATCHES Xcode)
648   status("    Xcode:"          ${XCODE_VERSION})
649 endif()
650 if(NOT CMAKE_GENERATOR MATCHES "Xcode|Visual Studio")
651   status("    Configuration:"  ${CMAKE_BUILD_TYPE})
652 endif()
653
654 # ========================== C/C++ options ==========================
655 if(CMAKE_CXX_COMPILER_VERSION)
656   set(OPENCV_COMPILER_STR "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} (ver ${CMAKE_CXX_COMPILER_VERSION})")
657 elseif(CMAKE_COMPILER_IS_CLANGCXX)
658   set(OPENCV_COMPILER_STR "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} (ver ${CMAKE_CLANG_REGEX_VERSION})")
659 elseif(CMAKE_COMPILER_IS_GNUCXX)
660   set(OPENCV_COMPILER_STR "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} (ver ${CMAKE_GCC_REGEX_VERSION})")
661 else()
662   set(OPENCV_COMPILER_STR "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1}")
663 endif()
664 string(STRIP "${OPENCV_COMPILER_STR}" OPENCV_COMPILER_STR)
665
666 status("")
667 status("  C/C++:")
668 status("    Built as dynamic libs?:" BUILD_SHARED_LIBS THEN YES ELSE NO)
669 status("    C++ Compiler:"           ${OPENCV_COMPILER_STR})
670 status("    C++ flags (Release):"    ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE})
671 status("    C++ flags (Debug):"      ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG})
672 status("    C Compiler:"             ${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1})
673 status("    C flags (Release):"      ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_RELEASE})
674 status("    C flags (Debug):"        ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_DEBUG})
675 if(WIN32)
676   status("    Linker flags (Release):" ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_RELEASE})
677   status("    Linker flags (Debug):"   ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_DEBUG})
678 else()
679   status("    Linker flags (Release):" ${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS_RELEASE})
680   status("    Linker flags (Debug):"   ${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS_DEBUG})
681 endif()
682 status("    Precompiled headers:"     PCHSupport_FOUND AND ENABLE_PRECOMPILED_HEADERS THEN YES ELSE NO)
683
684 # ========================== OpenCV modules ==========================
685 status("")
686 status("  OpenCV modules:")
687 string(REPLACE "opencv_" "" OPENCV_MODULES_BUILD_ST          "${OPENCV_MODULES_BUILD}")
688 string(REPLACE "opencv_" "" OPENCV_MODULES_DISABLED_USER_ST  "${OPENCV_MODULES_DISABLED_USER}")
689 string(REPLACE "opencv_" "" OPENCV_MODULES_DISABLED_FORCE_ST "${OPENCV_MODULES_DISABLED_FORCE}")
690 set(OPENCV_MODULES_DISABLED_AUTO_ST "")
691 foreach(m ${OPENCV_MODULES_DISABLED_AUTO})
692   set(__mdeps "")
693   foreach(d ${OPENCV_MODULE_${m}_DEPS})
694     if(d MATCHES "^opencv_" AND NOT HAVE_${d})
695       list(APPEND __mdeps ${d})
696     endif()
697   endforeach()
698   if(__mdeps)
699     list(APPEND OPENCV_MODULES_DISABLED_AUTO_ST "${m}(deps: ${__mdeps})")
700   else()
701     list(APPEND OPENCV_MODULES_DISABLED_AUTO_ST "${m}")
702   endif()
703 endforeach()
704 string(REPLACE "opencv_" "" OPENCV_MODULES_DISABLED_AUTO_ST  "${OPENCV_MODULES_DISABLED_AUTO_ST}")
705
706 status("    To be built:"            OPENCV_MODULES_BUILD          THEN ${OPENCV_MODULES_BUILD_ST}          ELSE "-")
707 status("    Disabled:"               OPENCV_MODULES_DISABLED_USER  THEN ${OPENCV_MODULES_DISABLED_USER_ST}  ELSE "-")
708 status("    Disabled by dependency:" OPENCV_MODULES_DISABLED_AUTO  THEN ${OPENCV_MODULES_DISABLED_AUTO_ST}  ELSE "-")
709 status("    Unavailable:"            OPENCV_MODULES_DISABLED_FORCE THEN ${OPENCV_MODULES_DISABLED_FORCE_ST} ELSE "-")
710
711 # ========================== Android details ==========================
712 if(ANDROID)
713   status("")
714   status("  Android: ")
715   status("    Android ABI:" ${ANDROID_ABI})
716   status("    STL type:" ${ANDROID_STL})
717   status("    Native API level:" android-${ANDROID_NATIVE_API_LEVEL})
718   android_get_compatible_target(android_sdk_target_status ${ANDROID_NATIVE_API_LEVEL} ${ANDROID_SDK_TARGET} 11)
719   status("    SDK target:" "${android_sdk_target_status}")
720   if(BUILD_WITH_ANDROID_NDK)
721     status("    Android NDK:" "${ANDROID_NDK} (toolchain: ${ANDROID_TOOLCHAIN_NAME})")
722   elseif(BUILD_WITH_STANDALONE_TOOLCHAIN)
723     status("    Android toolchain:" "${ANDROID_STANDALONE_TOOLCHAIN}")
724   endif()
725   status("    android tool:"  ANDROID_EXECUTABLE  THEN "${ANDROID_EXECUTABLE} (${ANDROID_TOOLS_Pkg_Desc})" ELSE NO)
726   status("    Google Play package:" BUILD_ANDROID_PACKAGE                                         THEN YES ELSE NO)
727   status("    Android examples:"    BUILD_ANDROID_EXAMPLES AND CAN_BUILD_ANDROID_PROJECTS         THEN YES ELSE NO)
728 endif()
729
730 # ================== Windows RT features ==================
731 if(WIN32)
732 status("")
733     status("  Windows RT support:" HAVE_WINRT THEN YES ELSE NO)
734     if (ENABLE_WINRT_MODE OR ENABLE_WINRT_MODE_NATIVE)
735       status("    Windows SDK v8.0:" ${WINDOWS_SDK_PATH})
736       status("    Visual Studio 2012:" ${VISUAL_STUDIO_PATH})
737     endif()
738 endif(WIN32)
739
740 # ========================== GUI ==========================
741 status("")
742 status("  GUI: ")
743
744 if(HAVE_QT5)
745   status("    QT 5.x:"            HAVE_QT        THEN "YES (ver ${Qt5Core_VERSION_STRING})" ELSE NO)
746   status("    QT OpenGL support:" HAVE_QT_OPENGL THEN "YES (${Qt5OpenGL_LIBRARIES} ${Qt5OpenGL_VERSION_STRING})" ELSE NO)
747 elseif(HAVE_QT)
748   status("    QT 4.x:"            HAVE_QT        THEN "YES (ver ${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}.${QT_VERSION_PATCH} ${QT_EDITION})" ELSE NO)
749   status("    QT OpenGL support:" HAVE_QT_OPENGL THEN "YES (${QT_QTOPENGL_LIBRARY})" ELSE NO)
750 else()
751   if(DEFINED WITH_QT)
752     status("    QT:" NO)
753   endif()
754   if(DEFINED WITH_WIN32UI)
755     status("    Win32 UI:" HAVE_WIN32UI THEN YES ELSE NO)
756   else()
757     if(APPLE)
758       if(WITH_CARBON)
759         status("    Carbon:" YES)
760       else()
761         status("    Cocoa:"  YES)
762       endif()
763     else()
764       if(HAVE_GTK3)
765         status("    GTK+ 3.x:" HAVE_GTK THEN "YES (ver ${ALIASOF_gtk+-3.0_VERSION})" ELSE NO)
766       elseif(HAVE_GTK)
767         status("    GTK+ 2.x:" HAVE_GTK THEN "YES (ver ${ALIASOF_gtk+-2.0_VERSION})" ELSE NO)
768       else()
769         status("    GTK+:" NO)
770       endif()
771       status("    GThread :" HAVE_GTHREAD THEN "YES (ver ${ALIASOF_gthread-2.0_VERSION})" ELSE NO)
772       status("    GtkGlExt:" HAVE_GTKGLEXT THEN "YES (ver ${ALIASOF_gtkglext-1.0_VERSION})" ELSE NO)
773     endif()
774   endif()
775 endif()
776
777 status("    OpenGL support:" HAVE_OPENGL THEN "YES (${OPENGL_LIBRARIES})" ELSE NO)
778 status("    VTK support:" HAVE_VTK THEN "YES (ver ${VTK_VERSION})" ELSE NO)
779
780 # ========================== MEDIA IO ==========================
781 status("")
782 status("  Media I/O: ")
783 status("    ZLib:"         BUILD_ZLIB    THEN "build (ver ${ZLIB_VERSION_STRING})"               ELSE "${ZLIB_LIBRARIES} (ver ${ZLIB_VERSION_STRING})")
784
785 if(WITH_JPEG)
786   status("    JPEG:"       JPEG_FOUND    THEN "${JPEG_LIBRARY} (ver ${JPEG_LIB_VERSION})"        ELSE "build (ver ${JPEG_LIB_VERSION})")
787 else()
788   status("    JPEG:"       "NO")
789 endif()
790
791 if(WITH_WEBP)
792   status("    WEBP:"       WEBP_FOUND    THEN "${WEBP_LIBRARY} (ver ${WEBP_VERSION})"        ELSE "build (ver ${WEBP_VERSION})")
793 else()
794   status("    WEBP:"       "NO")
795 endif()
796
797 if(WITH_PNG)
798   status("    PNG:"        PNG_FOUND     THEN "${PNG_LIBRARY} (ver ${PNG_VERSION})"              ELSE "build (ver ${PNG_VERSION})")
799 else()
800   status("    PNG:"        "NO")
801 endif()
802 if(WITH_TIFF)
803   if(TIFF_VERSION_STRING AND TIFF_FOUND)
804     status("    TIFF:"     "${TIFF_LIBRARY} (ver ${TIFF_VERSION} - ${TIFF_VERSION_STRING})")
805   else()
806     status("    TIFF:"     TIFF_FOUND    THEN "${TIFF_LIBRARY} (ver ${TIFF_VERSION})"            ELSE "build (ver ${TIFF_VERSION} - ${TIFF_VERSION_STRING})")
807   endif()
808 else()
809   status("    TIFF:"       "NO")
810 endif()
811 if(WITH_JASPER)
812   status("    JPEG 2000:"  JASPER_FOUND  THEN "${JASPER_LIBRARY} (ver ${JASPER_VERSION_STRING})" ELSE "build (ver ${JASPER_VERSION_STRING})")
813 else()
814   status("    JPEG 2000:"  "NO")
815 endif()
816 if(WITH_OPENEXR)
817   status("    OpenEXR:"  OPENEXR_FOUND  THEN "${OPENEXR_LIBRARIES} (ver ${OPENEXR_VERSION})" ELSE "build (ver ${OPENEXR_VERSION})")
818 else()
819   status("    OpenEXR:"  "NO")
820 endif()
821
822 if( WITH_GDAL )
823   status("    GDAL:"   GDAL_FOUND THEN "${GDAL_LIBRARY}")
824 else()
825   status("    GDAL:"     "NO")
826 endif()
827
828 # ========================== VIDEO IO ==========================
829 status("")
830 status("  Video I/O:")
831
832 if (DEFINED WITH_VFW)
833   status("    Video for Windows:" HAVE_VFW         THEN YES                                        ELSE NO)
834 endif(DEFINED WITH_VFW)
835
836 if(DEFINED WITH_1394)
837   status("    DC1394 1.x:"     HAVE_DC1394         THEN "YES (ver ${ALIASOF_libdc1394_VERSION})"   ELSE NO)
838   status("    DC1394 2.x:"     HAVE_DC1394_2       THEN "YES (ver ${ALIASOF_libdc1394-2_VERSION})" ELSE NO)
839 endif(DEFINED WITH_1394)
840
841 if(ANDROID)
842   if(HAVE_opencv_androidcamera)
843     status("    AndroidNativeCamera:" BUILD_ANDROID_CAMERA_WRAPPER
844                                                    THEN "YES, build for Android${ANDROID_VERSION}" ELSE "YES, use prebuilt libraries")
845   else()
846     status("    AndroidNativeCamera:" "NO (native camera requires Android API level 8 or higher)")
847   endif()
848 endif()
849
850 if(DEFINED WITH_AVFOUNDATION)
851   status("    AVFoundation:"   WITH_AVFOUNDATION   THEN YES                                        ELSE NO)
852 endif(DEFINED WITH_AVFOUNDATION)
853
854 if(DEFINED WITH_FFMPEG)
855   if(WIN32)
856     status("    FFMPEG:"       WITH_FFMPEG         THEN "YES (prebuilt binaries)"                  ELSE NO)
857   else()
858     status("    FFMPEG:"       HAVE_FFMPEG         THEN YES ELSE NO)
859   endif()
860   status("      codec:"        HAVE_FFMPEG_CODEC   THEN "YES (ver ${ALIASOF_libavcodec_VERSION})"  ELSE NO)
861   status("      format:"       HAVE_FFMPEG_FORMAT  THEN "YES (ver ${ALIASOF_libavformat_VERSION})" ELSE NO)
862   status("      util:"         HAVE_FFMPEG_UTIL    THEN "YES (ver ${ALIASOF_libavutil_VERSION})"   ELSE NO)
863   status("      swscale:"      HAVE_FFMPEG_SWSCALE THEN "YES (ver ${ALIASOF_libswscale_VERSION})"  ELSE NO)
864   status("      gentoo-style:" HAVE_GENTOO_FFMPEG  THEN YES                                        ELSE NO)
865 endif(DEFINED WITH_FFMPEG)
866
867 if(DEFINED WITH_GSTREAMER)
868   status("    GStreamer:"      HAVE_GSTREAMER      THEN ""                                         ELSE NO)
869   if(HAVE_GSTREAMER)
870     status("      base:"       "YES (ver ${GSTREAMER_BASE_VERSION})")
871     status("      video:"      "YES (ver ${GSTREAMER_VIDEO_VERSION})")
872     status("      app:"        "YES (ver ${GSTREAMER_APP_VERSION})")
873     status("      riff:"       "YES (ver ${GSTREAMER_RIFF_VERSION})")
874     status("      pbutils:"    "YES (ver ${GSTREAMER_PBUTILS_VERSION})")
875   endif(HAVE_GSTREAMER)
876 endif(DEFINED WITH_GSTREAMER)
877
878 if(DEFINED WITH_OPENNI)
879   status("    OpenNI:"         HAVE_OPENNI         THEN "YES (ver ${OPENNI_VERSION_STRING}, build ${OPENNI_VERSION_BUILD})"
880                                                                                                    ELSE NO)
881   status("    OpenNI PrimeSensor Modules:" HAVE_OPENNI_PRIME_SENSOR_MODULE
882                                                    THEN "YES (${OPENNI_PRIME_SENSOR_MODULE})"      ELSE NO)
883 endif(DEFINED WITH_OPENNI)
884
885 if(DEFINED WITH_OPENNI2)
886   status("    OpenNI2:"            HAVE_OPENNI2    THEN "YES (ver ${OPENNI2_VERSION_STRING}, build ${OPENNI2_VERSION_BUILD})"
887                                                                                                                                                                                                    ELSE NO)
888 endif(DEFINED WITH_OPENNI2)
889
890 if(DEFINED WITH_PVAPI)
891   status("    PvAPI:"          HAVE_PVAPI          THEN YES                                        ELSE NO)
892 endif(DEFINED WITH_PVAPI)
893
894 if(DEFINED WITH_GIGEAPI)
895   status("    GigEVisionSDK:"  HAVE_GIGE_API       THEN YES                                        ELSE NO)
896 endif(DEFINED WITH_GIGEAPI)
897
898 if(DEFINED WITH_QUICKTIME)
899   status("    QuickTime:"      HAVE_QUICKTIME      THEN YES                                        ELSE NO)
900   status("    QTKit:"          HAVE_QTKIT          THEN YES                                        ELSE NO)
901 endif(DEFINED WITH_QUICKTIME)
902
903 if(DEFINED WITH_UNICAP)
904   status("    UniCap:"         HAVE_UNICAP         THEN "YES (ver ${ALIASOF_libunicap_VERSION})"   ELSE NO)
905   status("    UniCap ucil:"    HAVE_UNICAP_UCIL    THEN "YES (ver ${ALIASOF_libucil_VERSION})"     ELSE NO)
906 endif(DEFINED WITH_UNICAP)
907
908 if(DEFINED WITH_V4L)
909   if(HAVE_CAMV4L)
910     set(HAVE_CAMV4L_STR "YES")
911   else()
912     set(HAVE_CAMV4L_STR "NO")
913   endif()
914   if(HAVE_CAMV4L2)
915     set(HAVE_CAMV4L2_STR "YES")
916   elseif(HAVE_VIDEOIO)
917     set(HAVE_CAMV4L2_STR "YES(videoio)")
918   else()
919     set(HAVE_CAMV4L2_STR "NO")
920   endif()
921   status("    V4L/V4L2:"       HAVE_LIBV4L         THEN "Using libv4l (ver ${ALIASOF_libv4l1_VERSION})"
922                                                    ELSE "${HAVE_CAMV4L_STR}/${HAVE_CAMV4L2_STR}")
923 endif(DEFINED WITH_V4L)
924
925 if(DEFINED WITH_DSHOW)
926   status("    DirectShow:"     HAVE_DSHOW     THEN YES                                        ELSE NO)
927 endif(DEFINED WITH_DSHOW)
928
929 if(DEFINED WITH_MSMF)
930   status("    Media Foundation:" HAVE_MSMF    THEN YES                                        ELSE NO)
931 endif(DEFINED WITH_MSMF)
932
933 if(DEFINED WITH_XIMEA)
934   status("    XIMEA:"          HAVE_XIMEA          THEN YES                                        ELSE NO)
935 endif(DEFINED WITH_XIMEA)
936
937 if(DEFINED WITH_XINE)
938   status("    Xine:"           HAVE_XINE           THEN "YES (ver ${ALIASOF_libxine_VERSION})"     ELSE NO)
939 endif(DEFINED WITH_XINE)
940
941 if(DEFINED WITH_INTELPERC)
942   status("    Intel PerC:"     HAVE_INTELPERC      THEN "YES"                                 ELSE NO)
943 endif(DEFINED WITH_INTELPERC)
944
945
946 # ========================== Other third-party libraries ==========================
947 status("")
948 status("  Other third-party libraries:")
949
950 if(WITH_IPP AND HAVE_IPP)
951   status("    Use IPP:" "${IPP_VERSION_STR} [${IPP_VERSION_MAJOR}.${IPP_VERSION_MINOR}.${IPP_VERSION_BUILD}]")
952   status("         at:" "${IPP_ROOT_DIR}")
953 else()
954   status("    Use IPP:"   WITH_IPP AND NOT HAVE_IPP THEN "IPP not found" ELSE NO)
955 endif()
956
957 if(DEFINED WITH_IPP_A)
958 status("    Use IPP Async:"  HAVE_IPP_A       THEN "YES" ELSE NO)
959 endif(DEFINED WITH_IPP_A)
960
961 status("    Use Eigen:"      HAVE_EIGEN       THEN "YES (ver ${EIGEN_WORLD_VERSION}.${EIGEN_MAJOR_VERSION}.${EIGEN_MINOR_VERSION})" ELSE NO)
962 status("    Use TBB:"        HAVE_TBB         THEN "YES (ver ${TBB_VERSION_MAJOR}.${TBB_VERSION_MINOR} interface ${TBB_INTERFACE_VERSION})" ELSE NO)
963 status("    Use OpenMP:"     HAVE_OPENMP      THEN YES ELSE NO)
964 status("    Use GCD"         HAVE_GCD         THEN YES ELSE NO)
965 status("    Use Concurrency" HAVE_CONCURRENCY THEN YES ELSE NO)
966 status("    Use C=:"         HAVE_CSTRIPES    THEN YES ELSE NO)
967 status("    Use Cuda:"       HAVE_CUDA        THEN "YES (ver ${CUDA_VERSION_STRING})" ELSE NO)
968 status("    Use OpenCL:"     HAVE_OPENCL      THEN YES ELSE NO)
969
970 if(HAVE_CUDA)
971   status("")
972   status("  NVIDIA CUDA")
973
974   status("    Use CUFFT:"            HAVE_CUFFT   THEN YES ELSE NO)
975   status("    Use CUBLAS:"           HAVE_CUBLAS  THEN YES ELSE NO)
976   status("    USE NVCUVID:"          HAVE_NVCUVID THEN YES ELSE NO)
977   status("    NVIDIA GPU arch:"      ${OPENCV_CUDA_ARCH_BIN})
978   status("    NVIDIA PTX archs:"     ${OPENCV_CUDA_ARCH_PTX})
979   status("    Use fast math:"        CUDA_FAST_MATH THEN YES ELSE NO)
980 endif()
981
982 if(HAVE_OPENCL)
983   status("")
984   status("  OpenCL:")
985   if(HAVE_OPENCL_STATIC)
986     set(__opencl_ver "static")
987   else()
988     set(__opencl_ver "dynamic")
989   endif()
990   status("    Version:"       ${__opencl_ver})
991   if(OPENCL_INCLUDE_DIR)
992     status("    Include path:"       ${OPENCL_INCLUDE_DIRS})
993   endif()
994   if(OPENCL_LIBRARIES)
995     set(__libs "")
996     foreach(l ${OPENCL_LIBRARIES})
997       if(TARGET ${l})
998         get_target_property(p ${l} LOCATION)
999         if(p MATCHES NOTFOUND)
1000           list(APPEND __libs "${l}")
1001         else()
1002           list(APPEND __libs "${p}")
1003         endif()
1004       else()
1005         list(APPEND __libs "${l}")
1006       endif()
1007     endforeach()
1008     status("    libraries:"          ${__libs})
1009   endif()
1010   status("    Use AMDFFT:"           HAVE_CLAMDFFT  THEN YES ELSE NO)
1011   status("    Use AMDBLAS:"          HAVE_CLAMDBLAS THEN YES ELSE NO)
1012 endif()
1013
1014 # ========================== python ==========================
1015 status("")
1016 status("  Python 2:")
1017 status("    Interpreter:"     PYTHON2INTERP_FOUND  THEN "${PYTHON2_EXECUTABLE} (ver ${PYTHON2_VERSION_STRING})"       ELSE NO)
1018 if(BUILD_opencv_python2)
1019   if(PYTHON2LIBS_VERSION_STRING)
1020     status("    Libraries:"   HAVE_opencv_python2  THEN  "${PYTHON2_LIBRARIES} (ver ${PYTHON2LIBS_VERSION_STRING})"   ELSE NO)
1021   else()
1022     status("    Libraries:"   HAVE_opencv_python2  THEN  "${PYTHON2_LIBRARIES}"                                      ELSE NO)
1023   endif()
1024   status("    numpy:"         PYTHON2_NUMPY_INCLUDE_DIRS THEN "${PYTHON2_NUMPY_INCLUDE_DIRS} (ver ${PYTHON2_NUMPY_VERSION})" ELSE "NO (Python wrappers can not be generated)")
1025   status("    packages path:" PYTHON2_EXECUTABLE         THEN "${PYTHON2_PACKAGES_PATH}"                                    ELSE "-")
1026 endif()
1027
1028 status("")
1029 status("  Python 3:")
1030 status("    Interpreter:"     PYTHON3INTERP_FOUND  THEN "${PYTHON3_EXECUTABLE} (ver ${PYTHON3_VERSION_STRING})"       ELSE NO)
1031 if(BUILD_opencv_python3)
1032   if(PYTHON3LIBS_VERSION_STRING)
1033     status("    Libraries:"   HAVE_opencv_python3  THEN  "${PYTHON3_LIBRARIES} (ver ${PYTHON3LIBS_VERSION_STRING})"   ELSE NO)
1034   else()
1035     status("    Libraries:"   HAVE_opencv_python3  THEN  "${PYTHON3_LIBRARIES}"                                      ELSE NO)
1036   endif()
1037   status("    numpy:"         PYTHON3_NUMPY_INCLUDE_DIRS THEN "${PYTHON3_NUMPY_INCLUDE_DIRS} (ver ${PYTHON3_NUMPY_VERSION})" ELSE "NO (Python3 wrappers can not be generated)")
1038   status("    packages path:" PYTHON3_EXECUTABLE         THEN "${PYTHON3_PACKAGES_PATH}"                                    ELSE "-")
1039 endif()
1040
1041 status("")
1042 status("  Python (for build):"  PYTHON_DEFAULT_AVAILABLE THEN "${PYTHON_DEFAULT_EXECUTABLE}" ELSE NO)
1043
1044 # ========================== java ==========================
1045 status("")
1046 status("  Java:")
1047 status("    ant:"           ANT_EXECUTABLE      THEN "${ANT_EXECUTABLE} (ver ${ANT_VERSION})"                    ELSE NO)
1048 if(NOT ANDROID)
1049   status("    JNI:"         JNI_INCLUDE_DIRS    THEN "${JNI_INCLUDE_DIRS}"                                       ELSE NO)
1050 endif()
1051 status("    Java wrappers:" HAVE_opencv_java                                                            THEN YES ELSE NO)
1052 status("    Java tests:"    BUILD_TESTS AND opencv_test_java_BINARY_DIR                                 THEN YES ELSE NO)
1053
1054 # ========================= matlab =========================
1055 status("")
1056 status("  Matlab:")
1057 status("    mex:"         MATLAB_MEX_SCRIPT  THEN  "${MATLAB_MEX_SCRIPT}"   ELSE NO)
1058 if (MATLAB_FOUND)
1059   status("    Compiler/generator:" MEX_WORKS    THEN  "Working"                ELSE "Not working (bindings will not be generated)")
1060 endif()
1061
1062 # ========================== documentation ==========================
1063 if(BUILD_DOCS)
1064   status("")
1065   status("  Documentation:")
1066   if(HAVE_SPHINX)
1067     status("    Build Documentation:" PDFLATEX_COMPILER      THEN YES ELSE "YES (only HTML and without math expressions)")
1068   else()
1069     status("    Build Documentation:" NO)
1070   endif()
1071   status("    Sphinx:"              HAVE_SPHINX              THEN "${SPHINX_BUILD} (ver ${SPHINX_VERSION})" ELSE NO)
1072   status("    PdfLaTeX compiler:"   PDFLATEX_COMPILER        THEN "${PDFLATEX_COMPILER}" ELSE NO)
1073   status("    PlantUML:"            PLANTUML                 THEN "${PLANTUML}" ELSE NO)
1074 endif()
1075
1076 # ========================== samples and tests ==========================
1077 status("")
1078 status("  Tests and samples:")
1079 status("    Tests:"             BUILD_TESTS AND HAVE_opencv_ts       THEN YES ELSE NO)
1080 status("    Performance tests:" BUILD_PERF_TESTS AND HAVE_opencv_ts  THEN YES ELSE NO)
1081 status("    C/C++ Examples:"    BUILD_EXAMPLES                       THEN YES ELSE NO)
1082
1083 # ========================== auxiliary ==========================
1084 status("")
1085 status("  Install path:" "${CMAKE_INSTALL_PREFIX}")
1086 status("")
1087 status("  cvconfig.h is in:" "${OPENCV_CONFIG_FILE_INCLUDE_DIR}")
1088 status("-----------------------------------------------------------------")
1089 status("")
1090
1091 ocv_finalize_status()
1092
1093 # ----------------------------------------------------------------------------
1094 # Warn in the case of in-source build
1095 # ----------------------------------------------------------------------------
1096 if("${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}")
1097   message(WARNING "The source directory is the same as binary directory. \"make clean\" may damage the source tree")
1098 endif()
1099
1100 # ----------------------------------------------------------------------------
1101 # CPack stuff
1102 # ----------------------------------------------------------------------------
1103
1104 include(cmake/OpenCVPackaging.cmake)