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