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