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