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