Fixed some warnings and install problems on linux
[profile/ivi/opencv.git] / CMakeLists.txt
1 # ----------------------------------------------------------------------------
2 #  Root CMake file for OpenCV
3 #
4 #    From the off-tree build directory, invoke:
5 #      $ cmake <PATH_TO_OPENCV_ROOT>
6 #
7 #
8 #   - OCT-2008: Initial version <joseluisblancoc@gmail.com>
9 #
10 # ----------------------------------------------------------------------------
11
12 set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true)
13
14 # --------------------------------------------------------------
15 # Indicate CMake 2.7 and above that we don't want to mix relative
16 #  and absolute paths in linker lib lists.
17 # Run "cmake --help-policy CMP0003" for more information.
18 # --------------------------------------------------------------
19 if(COMMAND cmake_policy)
20   cmake_policy(SET CMP0003 NEW)
21 endif()
22
23 # Following block can broke build in case of cross-compilng
24 # but CMAKE_CROSSCOMPILING variable will be set only on project(OpenCV) command
25 # so we will try to detect crosscompiling by presense of CMAKE_TOOLCHAIN_FILE
26 if(NOT CMAKE_TOOLCHAIN_FILE)
27   # it _must_ go before project(OpenCV) in order to work
28   if(WIN32)
29     set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "Installation Directory")
30   else()
31     set(CMAKE_INSTALL_PREFIX "/usr/local" CACHE PATH "Installation Directory")
32   endif()
33
34   if(MSVC)
35     set(CMAKE_USE_RELATIVE_PATHS ON CACHE INTERNAL "" FORCE)
36   endif()
37 else(NOT CMAKE_TOOLCHAIN_FILE)
38   #Android: set output folder to ${CMAKE_BINARY_DIR}
39   set( LIBRARY_OUTPUT_PATH_ROOT ${CMAKE_BINARY_DIR} CACHE PATH "root for library output, set this to change where android libs are compiled to" )
40   # any crosscompiling
41   set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "Installation Directory")
42 endif(NOT CMAKE_TOOLCHAIN_FILE)
43
44 # --------------------------------------------------------------
45 # Top level OpenCV project
46 # --------------------------------------------------------------
47 if(CMAKE_GENERATOR MATCHES Xcode AND XCODE_VERSION VERSION_GREATER 4.3)
48   cmake_minimum_required(VERSION 2.8.8)
49 elseif(IOS)
50   cmake_minimum_required(VERSION 2.8.0)
51 else()
52   cmake_minimum_required(VERSION 2.6.3)
53 endif()
54
55 # must go before the project command
56 set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Configs" FORCE)
57 if(DEFINED CMAKE_BUILD_TYPE AND CMAKE_VERSION VERSION_GREATER "2.8")
58   set_property( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS ${CMAKE_CONFIGURATION_TYPES} )
59 endif()
60
61 project(OpenCV CXX C)
62
63 include(cmake/OpenCVUtils.cmake REQUIRED)
64
65 # ----------------------------------------------------------------------------
66 # Break in case of popular CMake configuration mistakes
67 # ----------------------------------------------------------------------------
68 if(NOT CMAKE_SIZEOF_VOID_P GREATER 0)
69   message(FATAL_ERROR "CMake fails to deterimine the bitness of target platform.
70   Please check your CMake and compiler installation. If you are crosscompiling then ensure that your CMake toolchain file correctly sets the compiler details.")
71 endif()
72
73 # ----------------------------------------------------------------------------
74 # Detect compiler and target platform architecture
75 # ----------------------------------------------------------------------------
76 include(cmake/OpenCVDetectCXXCompiler.cmake REQUIRED)
77
78 # Add these standard paths to the search paths for FIND_LIBRARY
79 # to find libraries from these locations first
80 if(UNIX AND NOT ANDROID)
81   if(X86_64 OR CMAKE_SIZEOF_VOID_P EQUAL 8)
82     if(EXISTS /lib64)
83       list(APPEND CMAKE_LIBRARY_PATH /lib64)
84     else()
85       list(APPEND CMAKE_LIBRARY_PATH /lib)
86     endif()
87     if(EXISTS /usr/lib64)
88       list(APPEND CMAKE_LIBRARY_PATH /usr/lib64)
89     else()
90       list(APPEND CMAKE_LIBRARY_PATH /usr/lib)
91     endif()
92   elseif(X86 OR CMAKE_SIZEOF_VOID_P EQUAL 4)
93     if(EXISTS /lib32)
94       list(APPEND CMAKE_LIBRARY_PATH /lib32)
95     else()
96       list(APPEND CMAKE_LIBRARY_PATH /lib)
97     endif()
98     if(EXISTS /usr/lib32)
99       list(APPEND CMAKE_LIBRARY_PATH /usr/lib32)
100     else()
101       list(APPEND CMAKE_LIBRARY_PATH /usr/lib)
102     endif()
103   endif()
104 endif()
105
106
107 # ----------------------------------------------------------------------------
108 # OpenCV cmake options
109 # ----------------------------------------------------------------------------
110
111 # Optional 3rd party components
112 # ===================================================
113 OCV_OPTION(WITH_1394           "Include IEEE1394 support"                    ON   IF (UNIX AND NOT ANDROID AND NOT IOS) )
114 OCV_OPTION(WITH_AVFOUNDATION   "Use AVFoundation for Video I/O"              ON   IF IOS)
115 OCV_OPTION(WITH_CARBON         "Use Carbon for UI instead of Cocoa"          OFF  IF APPLE )
116 OCV_OPTION(WITH_CUBLAS         "Include NVidia Cuda Basic Linear Algebra Subprograms (BLAS) library support" OFF IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT ANDROID AND NOT IOS) )
117 OCV_OPTION(WITH_CUDA           "Include NVidia Cuda Runtime support"         ON   IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT ANDROID AND NOT IOS) )
118 OCV_OPTION(WITH_CUFFT          "Include NVidia Cuda Fast Fourier Transform (FFT) library support"            ON  IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT ANDROID AND NOT IOS) )
119 OCV_OPTION(WITH_EIGEN          "Include Eigen2/Eigen3 support"               ON)
120 OCV_OPTION(WITH_FFMPEG         "Include FFMPEG support"                      ON   IF (NOT ANDROID AND NOT IOS) )
121 OCV_OPTION(WITH_GSTREAMER      "Include Gstreamer support"                   ON   IF (UNIX AND NOT APPLE AND NOT ANDROID) )
122 OCV_OPTION(WITH_GTK            "Include GTK support"                         ON   IF (UNIX AND NOT APPLE AND NOT ANDROID) )
123 OCV_OPTION(WITH_IMAGEIO        "ImageIO support for OS X"                    OFF  IF APPLE)
124 OCV_OPTION(WITH_IPP            "Include Intel IPP support"                   OFF  IF (MSVC OR X86 OR X86_64) )
125 OCV_OPTION(WITH_JASPER         "Include JPEG2K support"                      ON   IF (NOT IOS) )
126 OCV_OPTION(WITH_JPEG           "Include JPEG support"                        ON   IF (NOT IOS) )
127 OCV_OPTION(WITH_OPENEXR        "Include ILM support via OpenEXR"             ON   IF (NOT IOS) )
128 OCV_OPTION(WITH_OPENGL         "Include OpenGL support"                      OFF  IF (NOT ANDROID AND NOT APPLE) )
129 OCV_OPTION(WITH_OPENNI         "Include OpenNI support"                      OFF  IF (NOT ANDROID AND NOT IOS) )
130 OCV_OPTION(WITH_PNG            "Include PNG support"                         ON   IF (NOT IOS) )
131 OCV_OPTION(WITH_PVAPI          "Include Prosilica GigE support"              ON   IF (NOT ANDROID AND NOT IOS) )
132 OCV_OPTION(WITH_QT             "Build with Qt Backend support"               OFF  IF (NOT ANDROID AND NOT IOS) )
133 OCV_OPTION(WITH_QUICKTIME      "Use QuickTime for Video I/O insted of QTKit" OFF  IF APPLE )
134 OCV_OPTION(WITH_TBB            "Include Intel TBB support"                   OFF  IF (NOT IOS) )
135 OCV_OPTION(WITH_TIFF           "Include TIFF support"                        ON   IF (NOT IOS) )
136 OCV_OPTION(WITH_UNICAP         "Include Unicap support (GPL)"                OFF  IF (UNIX AND NOT APPLE AND NOT ANDROID) )
137 OCV_OPTION(WITH_V4L            "Include Video 4 Linux support"               ON   IF (UNIX AND NOT APPLE AND NOT ANDROID) )
138 OCV_OPTION(WITH_VIDEOINPUT     "Build HighGUI with DirectShow support"       ON   IF WIN32 )
139 OCV_OPTION(WITH_XIMEA          "Include XIMEA cameras support"               OFF  IF (NOT ANDROID AND NOT APPLE) )
140 OCV_OPTION(WITH_XINE           "Include Xine support (GPL)"                  OFF  IF (UNIX AND NOT APPLE AND NOT ANDROID) )
141 OCV_OPTION(WITH_CLP            "Include Clp support (EPL)"                   OFF)
142
143 # OpenCV build components
144 # ===================================================
145 OCV_OPTION(BUILD_SHARED_LIBS        "Build shared libraries (.dll/.so) instead of static ones (.lib/.a)" NOT (ANDROID OR IOS) )
146 OCV_OPTION(BUILD_ANDROID_EXAMPLES   "Build examples for Android platform"         ON  IF ANDROID )
147 OCV_OPTION(BUILD_DOCS               "Create build rules for OpenCV Documentation" ON )
148 OCV_OPTION(BUILD_EXAMPLES           "Build all examples"                          OFF )
149 OCV_OPTION(BUILD_PACKAGE            "Enables 'make package_source' command"       ON )
150 OCV_OPTION(BUILD_PERF_TESTS         "Build performance tests"                     ON  IF (NOT IOS) )
151 OCV_OPTION(BUILD_TESTS              "Build accuracy & regression tests"           ON  IF (NOT IOS) )
152 OCV_OPTION(BUILD_WITH_DEBUG_INFO    "Include debug info into debug libs (not MSCV only)" ON )
153 OCV_OPTION(BUILD_WITH_STATIC_CRT    "Enables use of staticaly linked CRT for staticaly linked OpenCV" ON IF MSVC )
154 OCV_OPTION(BUILD_FAT_JAVA_LIB       "Create fat java wrapper containing the whole OpenCV library" ON IF ANDROID AND NOT BUILD_SHARED_LIBS AND CMAKE_COMPILER_IS_GNUCXX )
155 OCV_OPTION(BUILD_ANDROID_SERVICE    "TBD" OFF IF ANDROID AND ANDROID_USE_STLPORT AND ANDROID_SOURCE_TREE )
156
157 if(DEFINED BUILD_opencv_nonfree AND NOT BUILD_opencv_nonfree)
158   OCV_OPTION(BUILD_ANDROID_PACKAGE  "TBD" OFF IF ANDROID )
159 else()
160   unset(BUILD_ANDROID_PACKAGE CACHE)
161 endif()
162
163
164 # 3rd party libs
165 OCV_OPTION(BUILD_ZLIB               "Build zlib from source"         WIN32 OR IOS OR APPLE )
166 OCV_OPTION(BUILD_TIFF               "Build libtiff from source"      WIN32 OR IOS OR ANDROID OR APPLE )
167 OCV_OPTION(BUILD_JASPER             "Build libjasper from source"    WIN32 OR IOS OR ANDROID OR APPLE )
168 OCV_OPTION(BUILD_JPEG               "Build libjpeg from source"      WIN32 OR IOS OR ANDROID OR APPLE )
169 OCV_OPTION(BUILD_PNG                "Build libpng from source"       WIN32 OR IOS OR ANDROID OR APPLE )
170
171 # OpenCV installation options
172 # ===================================================
173 OCV_OPTION(INSTALL_C_EXAMPLES       "Install C examples"        OFF )
174 OCV_OPTION(INSTALL_PYTHON_EXAMPLES  "Install Python examples"   OFF )
175 OCV_OPTION(INSTALL_ANDROID_EXAMPLES "Install Android examples"  OFF  IF ANDROID )
176 OCV_OPTION(INSTALL_TO_MANGLED_PATHS "Enables mangled install paths, that help with side by side installs." OFF IF (UNIX AND NOT ANDROID AND NOT IOS AND BUILD_SHARED_LIBS) )
177
178
179 if(MSVC_IDE OR CMAKE_GENERATOR MATCHES Xcode)
180   set(ENABLE_SOLUTION_FOLDERS0 ON)
181 else()
182   set(ENABLE_SOLUTION_FOLDERS0 OFF)
183 endif()
184
185 # OpenCV build options
186 # ===================================================
187 OCV_OPTION(ENABLE_PRECOMPILED_HEADERS "Use precompiled headers"                                  ON   IF (NOT IOS) )
188 OCV_OPTION(ENABLE_SOLUTION_FOLDERS    "Solution folder in Visual Studio or in other IDEs"        ${ENABLE_SOLUTION_FOLDERS0} IF (CMAKE_VERSION VERSION_GREATER "2.8.0") )
189 OCV_OPTION(ENABLE_PROFILING           "Enable profiling in the GCC compiler (Add flags: -g -pg)" OFF  IF CMAKE_COMPILER_IS_GNUCXX )
190 OCV_OPTION(ENABLE_OMIT_FRAME_POINTER  "Enable -fomit-frame-pointer for GCC"                      ON   IF CMAKE_COMPILER_IS_GNUCXX )
191 OCV_OPTION(ENABLE_POWERPC             "Enable PowerPC for GCC"                                   ON   IF (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_SYSTEM_PROCESSOR MATCHES powerpc.*) )
192 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)) )
193 OCV_OPTION(ENABLE_SSE                 "Enable SSE instructions"                                  ON   IF (MSVC OR CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
194 OCV_OPTION(ENABLE_SSE2                "Enable SSE2 instructions"                                 ON   IF (MSVC OR CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
195 OCV_OPTION(ENABLE_SSE3                "Enable SSE3 instructions"                                 OFF  IF (CV_ICC OR CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
196 OCV_OPTION(ENABLE_SSSE3               "Enable SSSE3 instructions"                                OFF  IF (CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
197 OCV_OPTION(ENABLE_SSE41               "Enable SSE4.1 instructions"                               OFF  IF (CV_ICC OR CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
198 OCV_OPTION(ENABLE_SSE42               "Enable SSE4.2 instructions"                               OFF  IF (CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
199 OCV_OPTION(ENABLE_NOISY_WARNINGS      "Show all warnings even if they are too noisy"             OFF )
200 OCV_OPTION(OPENCV_WARNINGS_ARE_ERRORS "Treat warnings as errors"                                 OFF )
201
202 # uncategorized options
203 # ===================================================
204 OCV_OPTION(CMAKE_VERBOSE "Verbose mode" OFF )
205
206 # backward compatibility
207 # ===================================================
208 include(cmake/OpenCVLegacyOptions.cmake OPTIONAL)
209
210
211 # ----------------------------------------------------------------------------
212 #  Get actual OpenCV version number from sources
213 # ----------------------------------------------------------------------------
214 include(cmake/OpenCVVersion.cmake REQUIRED)
215
216
217 # ----------------------------------------------------------------------------
218 #  Build & install layouts
219 # ----------------------------------------------------------------------------
220
221 # Save libs and executables in the same place
222 set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/bin" CACHE PATH "Output directory for applications" )
223
224 if(ANDROID OR WIN32)
225     set(OPENCV_DOC_INSTALL_PATH doc)
226 elseif(INSTALL_TO_MANGLED_PATHS)
227     set(OPENCV_DOC_INSTALL_PATH share/OpenCV-${OPENCV_VERSION}/doc)
228 else()
229     set(OPENCV_DOC_INSTALL_PATH share/OpenCV/doc)
230 endif()
231
232 if(ANDROID)
233     set(   LIBRARY_OUTPUT_PATH "${CMAKE_BINARY_DIR}/lib/${ANDROID_NDK_ABI_NAME}")
234     set(3P_LIBRARY_OUTPUT_PATH "${CMAKE_BINARY_DIR}/3rdparty/lib/${ANDROID_NDK_ABI_NAME}")
235     set(   OPENCV_LIB_INSTALL_PATH sdk/native/libs/${ANDROID_NDK_ABI_NAME})
236     set(OPENCV_3P_LIB_INSTALL_PATH sdk/native/3rdparty/libs/${ANDROID_NDK_ABI_NAME})
237 else()
238     set(   LIBRARY_OUTPUT_PATH "${CMAKE_BINARY_DIR}/lib")
239     set(3P_LIBRARY_OUTPUT_PATH "${CMAKE_BINARY_DIR}/3rdparty/lib${LIB_SUFFIX}")
240     set(   OPENCV_LIB_INSTALL_PATH lib${LIB_SUFFIX})
241     set(OPENCV_3P_LIB_INSTALL_PATH share/OpenCV/3rdparty/${OPENCV_LIB_INSTALL_PATH})
242 endif()
243
244 set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${OPENCV_LIB_INSTALL_PATH}")
245 set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
246
247 if(ANDROID)
248     set(OPENCV_INCLUDE_PREFIX sdk/native/jni/include)
249 else()
250     set(OPENCV_INCLUDE_PREFIX include)
251 endif()
252 if(INSTALL_TO_MANGLED_PATHS)
253   set(OPENCV_INCLUDE_PREFIX include/opencv-${OPENCV_VERSION})
254 endif()
255
256 if(WIN32)
257   # Postfix of DLLs:
258   set(OPENCV_DLLVERSION "${OPENCV_VERSION_MAJOR}${OPENCV_VERSION_MINOR}${OPENCV_VERSION_PATCH}")
259   set(OPENCV_DEBUG_POSTFIX d)
260 else()
261   # Postfix of so's:
262   set(OPENCV_DLLVERSION "")
263   set(OPENCV_DEBUG_POSTFIX "")
264 endif()
265
266 if(DEFINED CMAKE_DEBUG_POSTFIX)
267   set(OPENCV_DEBUG_POSTFIX "${CMAKE_DEBUG_POSTFIX}")
268 endif()
269
270 if(CMAKE_VERBOSE)
271   set(CMAKE_VERBOSE_MAKEFILE 1)
272 endif()
273
274
275 # ----------------------------------------------------------------------------
276 #  Path for build/platform -specific headers
277 # ----------------------------------------------------------------------------
278 set(OPENCV_CONFIG_FILE_INCLUDE_DIR "${CMAKE_BINARY_DIR}/" CACHE PATH "Where to create the platform-dependant cvconfig.h")
279 add_definitions(-DHAVE_CVCONFIG_H)
280 ocv_include_directories(${OPENCV_CONFIG_FILE_INCLUDE_DIR})
281
282
283 # ----------------------------------------------------------------------------
284 #  Autodetect if we are in a SVN repository
285 # ----------------------------------------------------------------------------
286 find_host_program(SVNVERSION_PATH svnversion)
287 mark_as_advanced(force SVNVERSION_PATH)
288 if(SVNVERSION_PATH)
289     message(STATUS "Extracting svn version, please wait...")
290     execute_process(COMMAND ${SVNVERSION_PATH} -n ${OpenCV_SOURCE_DIR} OUTPUT_VARIABLE SVNVERSION_RESULT)
291
292     if(SVNVERSION_RESULT MATCHES "exported")
293         # This is NOT a svn repository:
294         set(OPENCV_SVNVERSION "")
295         message(STATUS "SVNVERSION: exported")
296     else()
297         set(OPENCV_SVNVERSION " svn:${SVNVERSION_RESULT}")
298         message(STATUS "SVNVERSION: ${OPENCV_SVNVERSION}")
299     endif()
300 else()
301     # We don't have svnversion:
302     set(OPENCV_SVNVERSION "")
303 endif()
304
305
306 # ----------------------------------------------------------------------------
307 # OpenCV compiler and linker options
308 # ----------------------------------------------------------------------------
309 # In case of Makefiles if the user does not setup CMAKE_BUILD_TYPE, assume it's Release:
310 if(CMAKE_GENERATOR MATCHES "Makefiles|Ninja" AND "${CMAKE_BUILD_TYPE}" STREQUAL "")
311   set(CMAKE_BUILD_TYPE Release)
312 endif()
313
314 include(cmake/OpenCVCompilerOptions.cmake REQUIRED)
315
316
317 # ----------------------------------------------------------------------------
318 # Use statically or dynamically linked CRT?
319 # Default: dynamic
320 # ----------------------------------------------------------------------------
321 if(MSVC)
322   include(cmake/OpenCVCRTLinkage.cmake REQUIRED)
323 endif(MSVC)
324
325
326 # ----------------------------------------------------------------------------
327 #       CHECK FOR SYSTEM LIBRARIES, OPTIONS, ETC..
328 # ----------------------------------------------------------------------------
329 if(UNIX)
330   include(cmake/OpenCVFindPkgConfig.cmake OPTIONAL)
331   include(CheckFunctionExists)
332   include(CheckIncludeFile)
333
334   if(NOT APPLE)
335     CHECK_INCLUDE_FILE(alloca.h HAVE_ALLOCA_H)
336     CHECK_FUNCTION_EXISTS(alloca HAVE_ALLOCA)
337     CHECK_INCLUDE_FILE(unistd.h HAVE_UNISTD_H)
338     CHECK_INCLUDE_FILE(pthread.h HAVE_LIBPTHREAD)
339     if(ANDROID)
340       set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} dl m log)
341     elseif(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD|NetBSD|DragonFly")
342       set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} m pthread)
343     else()
344       set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} dl m pthread rt)
345     endif()
346   else()
347     add_definitions(-DHAVE_ALLOCA -DHAVE_ALLOCA_H -DHAVE_LIBPTHREAD -DHAVE_UNISTD_H)
348   endif()
349 endif()
350
351 include(cmake/OpenCVPCHSupport.cmake REQUIRED)
352 include(cmake/OpenCVModule.cmake REQUIRED)
353
354 # ----------------------------------------------------------------------------
355 #  Detect 3rd-party libraries
356 # ----------------------------------------------------------------------------
357
358 include(cmake/OpenCVFindLibsGrfmt.cmake REQUIRED)
359 include(cmake/OpenCVFindLibsGUI.cmake   REQUIRED)
360 include(cmake/OpenCVFindLibsVideo.cmake REQUIRED)
361 include(cmake/OpenCVFindLibsPerf.cmake  REQUIRED)
362
363
364 # ----------------------------------------------------------------------------
365 #  Detect other 3rd-party libraries/tools
366 # ----------------------------------------------------------------------------
367
368 # --- LATEX for pdf documentation ---
369 if(BUILD_DOCS)
370   include(cmake/OpenCVFindLATEX.cmake REQUIRED)
371 endif(BUILD_DOCS)
372
373 # --- Python Support ---
374 include(cmake/OpenCVDetectPython.cmake REQUIRED)
375
376 # --- Java Support ---
377 if(ANDROID)
378   include(cmake/OpenCVDetectApacheAnt.cmake REQUIRED)
379   include(cmake/OpenCVDetectAndroidSDK.cmake REQUIRED)
380
381   if(NOT ANDROID_TOOLS_Pkg_Revision GREATER 13)
382     message(WARNING "OpenCV requires Android SDK tools revision 14 or newer. Otherwise tests and samples will no be compiled.")
383   endif()
384 endif(ANDROID)
385
386 if(ANDROID AND ANDROID_EXECUTABLE AND ANT_EXECUTABLE AND (ANT_VERSION VERSION_GREATER 1.7) AND (ANDROID_TOOLS_Pkg_Revision GREATER 13))
387   SET(CAN_BUILD_ANDROID_PROJECTS TRUE)
388 else()
389   SET(CAN_BUILD_ANDROID_PROJECTS FALSE)
390 endif()
391
392
393 # ----------------------------------------------------------------------------
394 # Solution folders:
395 # ----------------------------------------------------------------------------
396 if(ENABLE_SOLUTION_FOLDERS)
397   set_property(GLOBAL PROPERTY USE_FOLDERS ON)
398   set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "CMakeTargets")
399 endif()
400
401 # Extra OpenCV targets: uninstall, package_source, perf, etc.
402 include(cmake/OpenCVExtraTargets.cmake REQUIRED)
403
404
405 # ----------------------------------------------------------------------------
406 # Process subdirectories
407 # ----------------------------------------------------------------------------
408
409 # opencv.hpp and legacy headers
410 add_subdirectory(include)
411
412 # OpenCV modules
413 add_subdirectory(modules)
414
415 # Generate targets for documentation
416 add_subdirectory(doc)
417
418 # various data that is used by cv libraries and/or demo applications.
419 add_subdirectory(data)
420
421 # extra applications
422 add_subdirectory(apps)
423
424 # examples
425 if(BUILD_EXAMPLES OR BUILD_ANDROID_EXAMPLES OR INSTALL_PYTHON_EXAMPLES)
426   add_subdirectory(samples)
427 endif()
428
429 if(BUILD_ANDROID_SERVICE)
430   add_subdirectory(android/service)
431 endif()
432
433 if(BUILD_ANDROID_PACKAGE)
434   add_subdirectory(android/package)
435 endif()
436
437 # ----------------------------------------------------------------------------
438 # Finalization: generate configuration-based files
439 # ----------------------------------------------------------------------------
440 ocv_track_build_dependencies()
441
442 # Generate platform-dependent and configuration-dependent headers
443 include(cmake/OpenCVGenHeaders.cmake REQUIRED)
444
445 # Generate opencv.pc for pkg-config command
446 include(cmake/OpenCVGenPkgconfig.cmake REQUIRED)
447
448 # Generate OpenCV.mk for ndk-build (Android build tool)
449 include(cmake/OpenCVGenAndroidMK.cmake REQUIRED)
450
451 # Generate OpenCVСonfig.cmake and OpenCVConfig-version.cmake for cmake projects
452 include(cmake/OpenCVGenConfig.cmake REQUIRED)
453
454
455 # ----------------------------------------------------------------------------
456 # Summary:
457 # ----------------------------------------------------------------------------
458 status("")
459 status("General configuration for OpenCV ${OPENCV_VERSION} =====================================")
460 if(OPENCV_SVNVERSION)
461   status("Version control:" ${OPENCV_SVNVERSION})
462 endif()
463
464 # ========================== build platform ==========================
465 status("")
466 status("  Platform:")
467 status("    Host:"             ${CMAKE_HOST_SYSTEM_NAME} ${CMAKE_HOST_SYSTEM_VERSION} ${CMAKE_HOST_SYSTEM_PROCESSOR})
468 if(CMAKE_CROSSCOMPILING)
469   status("    Target:"         ${CMAKE_SYSTEM_NAME} ${CMAKE_SYSTEM_VERSION} ${CMAKE_SYSTEM_PROCESSOR})
470 endif()
471 status("    CMake:"            ${CMAKE_VERSION})
472 status("    CMake generator:"  ${CMAKE_GENERATOR})
473 status("    CMake build tool:" ${CMAKE_BUILD_TOOL})
474 if(MSVC)
475   status("    MSVC:"           ${MSVC_VERSION})
476 endif()
477 if(CMAKE_GENERATOR MATCHES Xcode)
478   status("    Xcode:"          ${XCODE_VERSION})
479 endif()
480 if(NOT CMAKE_GENERATOR MATCHES "Xcode|Visual Studio")
481   status("    Configuration:"  ${CMAKE_BUILD_TYPE})
482 endif()
483
484 # ========================== C/C++ options ==========================
485 status("")
486 status("  C/C++:")
487 status("    Built as dynamic libs?:" BUILD_SHARED_LIBS THEN YES ELSE NO)
488 status("    C++ Compiler:"           CMAKE_COMPILER_IS_GNUCXX THEN "${CMAKE_CXX_COMPILER} (ver ${CMAKE_GCC_REGEX_VERSION})" ELSE "${CMAKE_CXX_COMPILER}" )
489 status("    C++ flags (Release):"    ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE})
490 status("    C++ flags (Debug):"      ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG})
491 status("    C Compiler:"             ${CMAKE_C_COMPILER})
492 status("    C flags (Release):"      ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_RELEASE})
493 status("    C flags (Debug):"        ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_DEBUG})
494 if(WIN32)
495   status("    Linker flags (Release):" ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_RELEASE})
496   status("    Linker flags (Debug):"   ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_DEBUG})
497 else()
498   status("    Linker flags (Release):" ${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS_RELEASE})
499   status("    Linker flags (Debug):"   ${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS_DEBUG})
500 endif()
501 status("    Precompiled headers:"     PCHSupport_FOUND AND ENABLE_PRECOMPILED_HEADERS THEN YES ELSE NO)
502
503 # ========================== OpenCV modules ==========================
504 status("")
505 status("  OpenCV modules:")
506 string(REPLACE "opencv_" "" OPENCV_MODULES_BUILD_ST          "${OPENCV_MODULES_BUILD}")
507 string(REPLACE "opencv_" "" OPENCV_MODULES_DISABLED_USER_ST  "${OPENCV_MODULES_DISABLED_USER}")
508 string(REPLACE "opencv_" "" OPENCV_MODULES_DISABLED_FORCE_ST "${OPENCV_MODULES_DISABLED_FORCE}")
509 set(OPENCV_MODULES_DISABLED_AUTO_ST "")
510 foreach(m ${OPENCV_MODULES_DISABLED_AUTO})
511   set(__mdeps "")
512   foreach(d ${OPENCV_MODULE_${m}_DEPS})
513     if(d MATCHES "^opencv_" AND NOT HAVE_${d})
514       list(APPEND __mdeps ${d})
515     endif()
516   endforeach()
517   list(APPEND OPENCV_MODULES_DISABLED_AUTO_ST "${m}(deps: ${__mdeps})")
518 endforeach()
519 string(REPLACE "opencv_" "" OPENCV_MODULES_DISABLED_AUTO_ST  "${OPENCV_MODULES_DISABLED_AUTO_ST}")
520
521 status("    To be built:"            OPENCV_MODULES_BUILD          THEN ${OPENCV_MODULES_BUILD_ST}          ELSE "-")
522 status("    Disabled:"               OPENCV_MODULES_DISABLED_USER  THEN ${OPENCV_MODULES_DISABLED_USER_ST}  ELSE "-")
523 status("    Disabled by dependency:" OPENCV_MODULES_DISABLED_AUTO  THEN ${OPENCV_MODULES_DISABLED_AUTO_ST}  ELSE "-")
524 status("    Unavailable:"            OPENCV_MODULES_DISABLED_FORCE THEN ${OPENCV_MODULES_DISABLED_FORCE_ST} ELSE "-")
525
526 # ========================== Android details ==========================
527 if(ANDROID)
528   status("")
529   status("  Android: ")
530   status("    Android ABI:" ${ANDROID_ABI})
531   status("    Native API level:" android-${ANDROID_NATIVE_API_LEVEL})
532   status("    SDK target:" "${ANDROID_SDK_TARGET}")
533   if(BUILD_WITH_ANDROID_NDK)
534     status("    Android NDK:" "${ANDROID_NDK} (toolchain: ${ANDROID_TOOLCHAIN_NAME})")
535   elseif(BUILD_WITH_STANDALONE_TOOLCHAIN)
536     status("    Android toolchain:" "${ANDROID_STANDALONE_TOOLCHAIN}")
537   endif()
538   status("    android tool:"  ANDROID_EXECUTABLE  THEN "${ANDROID_EXECUTABLE} (${ANDROID_TOOLS_Pkg_Desc})" ELSE NO)
539   status("    ant:"           ANT_EXECUTABLE      THEN "${ANT_EXECUTABLE} (ver ${ANT_VERSION})"            ELSE NO)
540   status("    Google Play package:" BUILD_ANDROID_PACKAGE THEN YES ELSE NO)
541 endif()
542
543 # ========================== GUI ==========================
544 status("")
545 status("  GUI: ")
546
547 if(HAVE_QT)
548   status("    QT 4.x:"            HAVE_QT        THEN "YES (ver ${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}.${QT_VERSION_PATCH} ${QT_EDITION})" ELSE NO)
549   status("    QT OpenGL support:" HAVE_QT_OPENGL THEN "YES (${QT_QTOPENGL_LIBRARY})" ELSE NO)
550 else()
551   if(DEFINED WITH_QT)
552     status("    QT 4.x:" NO)
553   endif()
554   if(WIN32)
555     status("    Win32 UI:" YES)
556   else()
557     if(APPLE)
558       if(WITH_CARBON)
559         status("    Carbon:" YES)
560       else()
561         status("    Cocoa:"  YES)
562       endif()
563     else()
564       status("    GTK+ 2.x:" HAVE_GTK      THEN "YES (ver ${ALIASOF_gtk+-2.0_VERSION})"     ELSE NO)
565       status("    GThread :" HAVE_GTHREAD  THEN "YES (ver ${ALIASOF_gthread-2.0_VERSION})"  ELSE NO)
566       status("    GtkGlExt:" HAVE_GTKGLEXT THEN "YES (ver ${ALIASOF_gtkglext-1.0_VERSION})" ELSE NO)
567     endif()
568   endif()
569 endif()
570
571 status("    OpenGL support:" HAVE_OPENGL THEN "YES (${OPENGL_LIBRARIES})" ELSE NO)
572
573 # ========================== MEDIA IO ==========================
574 status("")
575 status("  Media I/O: ")
576 status("    ZLib:"         BUILD_ZLIB    THEN "build (ver ${ZLIB_VERSION_STRING})"               ELSE "${ZLIB_LIBRARY} (ver ${ZLIB_VERSION_STRING})")
577
578 if(WITH_JPEG)
579   status("    JPEG:"       JPEG_FOUND    THEN "${JPEG_LIBRARY} (ver ${JPEG_LIB_VERSION})"        ELSE "build (ver ${JPEG_LIB_VERSION})")
580 else()
581   status("    JPEG:"       "NO")
582 endif()
583 if(WITH_PNG)
584   status("    PNG:"        PNG_FOUND     THEN "${PNG_LIBRARY} (ver ${PNG_VERSION})"              ELSE "build (ver ${PNG_VERSION})")
585 else()
586   status("    PNG:"        "NO")
587 endif()
588 if(WITH_TIFF)
589   if(TIFF_VERSION_STRING AND TIFF_FOUND)
590     status("    TIFF:"     "${TIFF_LIBRARY} (ver ${TIFF_VERSION} - ${TIFF_VERSION_STRING})")
591   else()
592     status("    TIFF:"     TIFF_FOUND    THEN "${TIFF_LIBRARY} (ver ${TIFF_VERSION})"            ELSE "build (ver ${TIFF_VERSION} - ${TIFF_VERSION_STRING})")
593   endif()
594 else()
595   status("    TIFF:"       "NO")
596 endif()
597 if(WITH_JASPER)
598   status("    JPEG 2000:"  JASPER_FOUND  THEN "${JASPER_LIBRARY} (ver ${JASPER_VERSION_STRING})" ELSE "build (ver ${JASPER_VERSION_STRING})")
599 else()
600   status("    JPEG 2000:"  "NO")
601 endif()
602
603 status("    OpenEXR:"   WITH_OPENEXR AND OPENEXR_FOUND     THEN "${OPENEXR_LIBRARIES} (ver ${OPENEXR_VERSION})"                     ELSE NO)
604
605 # ========================== VIDEO IO ==========================
606 status("")
607 status("  Video I/O:")
608
609 if(DEFINED WITH_1394)
610   status("    DC1394 1.x:"     HAVE_DC1394         THEN "YES (ver ${ALIASOF_libdc1394_VERSION})"   ELSE NO)
611   status("    DC1394 2.x:"     HAVE_DC1394_2       THEN "YES (ver ${ALIASOF_libdc1394-2_VERSION})" ELSE NO)
612 endif(DEFINED WITH_1394)
613
614 if(ANDROID)
615   if(HAVE_opencv_androidcamera)
616     status("    AndroidNativeCamera:" BUILD_ANDROID_CAMERA_WRAPPER
617                                                    THEN "YES, build for Android${ANDROID_VERSION}" ELSE "YES, use prebuilt libraries")
618   else()
619     status("    AndroidNativeCamera:" "NO (native camera requires Android API level 8 or higher)")
620   endif()
621 endif()
622
623 if(DEFINED WITH_AVFOUNDATION)
624   status("    AVFoundation:"   WITH_AVFOUNDATION   THEN YES                                        ELSE NO)
625 endif(DEFINED WITH_AVFOUNDATION)
626
627 if(DEFINED WITH_FFMPEG)
628   if(WIN32)
629     status("    FFMPEG:"       WITH_FFMPEG         THEN "YES (prebuilt binaries)"                  ELSE NO)
630   else()
631     status("    FFMPEG:"       HAVE_FFMPEG         THEN YES ELSE NO)
632   endif()
633   status("      codec:"        HAVE_FFMPEG_CODEC   THEN "YES (ver ${ALIASOF_libavcodec_VERSION})"  ELSE NO)
634   status("      format:"       HAVE_FFMPEG_FORMAT  THEN "YES (ver ${ALIASOF_libavformat_VERSION})" ELSE NO)
635   status("      util:"         HAVE_FFMPEG_UTIL    THEN "YES (ver ${ALIASOF_libavutil_VERSION})"   ELSE NO)
636   status("      swscale:"      HAVE_FFMPEG_SWSCALE THEN "YES (ver ${ALIASOF_libswscale_VERSION})"  ELSE NO)
637   status("      gentoo-style:" HAVE_GENTOO_FFMPEG  THEN YES                                        ELSE NO)
638 endif(DEFINED WITH_FFMPEG)
639
640 if(DEFINED WITH_GSTREAMER)
641   status("    GStreamer:"      HAVE_GSTREAMER      THEN ""                                         ELSE NO)
642   if(HAVE_GSTREAMER)
643     status("      base:"       "YES (ver ${ALIASOF_gstreamer-base-0.10_VERSION})")
644     status("      app:"        "YES (ver ${ALIASOF_gstreamer-app-0.10_VERSION})")
645     status("      video:"      "YES (ver ${ALIASOF_gstreamer-video-0.10_VERSION})")
646   endif()
647 endif(DEFINED WITH_GSTREAMER)
648
649 if(DEFINED WITH_OPENNI)
650   status("    OpenNI:"         HAVE_OPENNI         THEN "YES (ver ${OPENNI_VERSION_STRING}, build ${OPENNI_VERSION_BUILD})"
651                                                                                                    ELSE NO)
652   status("    OpenNI PrimeSensor Modules:" HAVE_OPENNI_PRIME_SENSOR_MODULE
653                                                    THEN "YES (${OPENNI_PRIME_SENSOR_MODULE})"      ELSE NO)
654 endif(DEFINED WITH_OPENNI)
655
656 if(DEFINED WITH_PVAPI)
657   status("    PvAPI:"          HAVE_PVAPI          THEN YES                                        ELSE NO)
658 endif(DEFINED WITH_PVAPI)
659
660 if(DEFINED WITH_QUICKTIME)
661   status("    QuickTime:"      WITH_QUICKTIME      THEN YES                                        ELSE NO)
662   status("    QTKit:"          WITH_QUICKTIME      THEN NO                                         ELSE YES)
663 endif(DEFINED WITH_QUICKTIME)
664
665 if(DEFINED WITH_UNICAP)
666   status("    UniCap:"         HAVE_UNICAP         THEN "YES (ver ${ALIASOF_libunicap_VERSION})"   ELSE NO)
667   status("    UniCap ucil:"    HAVE_UNICAP_UCIL    THEN "YES (ver ${ALIASOF_libucil_VERSION})"     ELSE NO)
668 endif(DEFINED WITH_UNICAP)
669
670 if(DEFINED WITH_V4L)
671   if(HAVE_CAMV4L)
672     set(HAVE_CAMV4L_STR "YES")
673   else()
674     set(HAVE_CAMV4L_STR "NO")
675   endif()
676   if(HAVE_CAMV4L2)
677     set(HAVE_CAMV4L2_STR "YES")
678   else()
679     set(HAVE_CAMV4L2_STR "NO")
680   endif()
681   status("    V4L/V4L2:"       HAVE_LIBV4L         THEN "Using libv4l (ver ${ALIASOF_libv4l1_VERSION})"
682                                                                                                    ELSE "${HAVE_CAMV4L_STR}/${HAVE_CAMV4L2_STR}")
683 endif(DEFINED WITH_V4L)
684
685 if(DEFINED WITH_VIDEOINPUT)
686   status("    DirectShow:"     HAVE_VIDEOINPUT     THEN YES                                        ELSE NO)
687 endif(DEFINED WITH_VIDEOINPUT)
688
689 if(DEFINED WITH_XIMEA)
690   status("    XIMEA:"          HAVE_XIMEA          THEN YES                                        ELSE NO)
691 endif(DEFINED WITH_XIMEA)
692
693 if(DEFINED WITH_XINE)
694   status("    Xine:"           HAVE_XINE           THEN "YES (ver ${ALIASOF_libxine_VERSION})"     ELSE NO)
695 endif(DEFINED WITH_XINE)
696
697 # ========================== Other third-party libraries ==========================
698 status("")
699 status("  Other third-party libraries:")
700
701 if(DEFINED WITH_IPP)
702   if(WITH_IPP AND IPP_FOUND)
703     status("    Use IPP:" "${IPP_LATEST_VERSION_STR} [${IPP_LATEST_VERSION_MAJOR}.${IPP_LATEST_VERSION_MINOR}.${IPP_LATEST_VERSION_BUILD}]")
704     status("         at:" "${IPP_ROOT_DIR}")
705   else()
706     status("    Use IPP:"   WITH_IPP AND NOT IPP_FOUND THEN "IPP not found" ELSE NO)
707   endif()
708 endif(DEFINED WITH_IPP)
709
710 if(DEFINED WITH_TBB)
711   status("    Use TBB:"   HAVE_TBB   THEN "YES (ver ${TBB_VERSION_MAJOR}.${TBB_VERSION_MINOR} interface ${TBB_INTERFACE_VERSION})" ELSE NO)
712 endif(DEFINED WITH_TBB)
713
714 if(DEFINED WITH_CUDA)
715   status("    Use Cuda:"  HAVE_CUDA  THEN "YES (ver ${CUDA_VERSION_STRING})" ELSE NO)
716 endif(DEFINED WITH_CUDA)
717
718 status("    Use Eigen:" HAVE_EIGEN THEN "YES (ver ${EIGEN_WORLD_VERSION}.${EIGEN_MAJOR_VERSION}.${EIGEN_MINOR_VERSION})" ELSE NO)
719 status("    Use Clp:"   HAVE_CLP   THEN YES ELSE NO)
720
721 if(HAVE_CUDA)
722   status("")
723   status("  NVIDIA CUDA:"            "(ver ${CUDA_VERSION_STRING})")
724
725   status("    Use CUFFT:"            HAVE_CUFFT  THEN YES ELSE NO)
726   status("    Use CUBLAS:"           HAVE_CUBLAS THEN YES ELSE NO)
727   status("    NVIDIA GPU arch:"      ${OPENCV_CUDA_ARCH_BIN})
728   status("    NVIDIA PTX archs:"     ${OPENCV_CUDA_ARCH_BIN})
729   status("    NVIDIA GPU features:"  ${OPENCV_CUDA_ARCH_FEATURES})
730 endif()
731
732 # ========================== python ==========================
733 status("")
734 status("  Python:")
735 status("    Interpreter:"   PYTHON_EXECUTABLE     THEN "${PYTHON_EXECUTABLE} (ver ${PYTHON_VERSION_FULL})"         ELSE NO)
736 if(BUILD_opencv_python)
737   if(PYTHONLIBS_VERSION_STRING)
738     status("    Libraries:"     HAVE_opencv_python  THEN  "${PYTHON_LIBRARIES} (ver ${PYTHONLIBS_VERSION_STRING})" ELSE NO)
739   else()
740     status("    Libraries:"     HAVE_opencv_python  THEN  ${PYTHON_LIBRARIES}                                      ELSE NO)
741   endif()
742   status("    numpy:"         PYTHON_USE_NUMPY    THEN "${PYTHON_NUMPY_INCLUDE_DIR} (ver ${PYTHON_NUMPY_VERSION})" ELSE "NO (Python wrappers can not be generated)")
743   status("    packages path:" PYTHON_EXECUTABLE   THEN "${PYTHON_PACKAGES_PATH}"                                   ELSE "-")
744 endif()
745
746 # ========================== documentation ==========================
747 if(BUILD_DOCS)
748   status("")
749   status("  Documentation:")
750   if(HAVE_SPHINX)
751     status("    Build Documentation:" PDFLATEX_COMPILER      THEN YES ELSE "YES (only HTML and without math expressions)")
752   else()
753     status("    Build Documentation:" NO)
754   endif()
755   status("    Sphinx:"              HAVE_SPHINX              THEN "${SPHINX_BUILD} (ver ${SPHINX_VERSION})" ELSE NO)
756   status("    PdfLaTeX compiler:"   PDFLATEX_COMPILER        THEN "${PDFLATEX_COMPILER}" ELSE NO)
757 endif()
758
759 # ========================== samples and tests ==========================
760 status("")
761 status("  Tests and samples:")
762 status("    Tests:"             BUILD_TESTS AND HAVE_opencv_ts       THEN YES ELSE NO)
763 status("    Performance tests:" BUILD_PERF_TESTS AND HAVE_opencv_ts  THEN YES ELSE NO)
764 status("    Examples:"          BUILD_EXAMPLES                       THEN YES ELSE NO)
765
766 if(ANDROID)
767   status("    Android tests:"    BUILD_TESTS AND CAN_BUILD_ANDROID_PROJECTS            THEN YES ELSE NO)
768   status("    Android examples:" BUILD_ANDROID_EXAMPLES AND CAN_BUILD_ANDROID_PROJECTS THEN YES ELSE NO)
769 endif()
770
771 # ========================== auxiliary ==========================
772 status("")
773 status("  Install path:" "${CMAKE_INSTALL_PREFIX}")
774 status("")
775 status("  cvconfig.h is in:" "${OPENCV_CONFIG_FILE_INCLUDE_DIR}")
776 status("-----------------------------------------------------------------")
777 status("")
778
779 ocv_finalize_status()
780
781 # ----------------------------------------------------------------------------
782 # Warn in the case of in-source build
783 # ----------------------------------------------------------------------------
784 if("${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}")
785   message(WARNING "The source directory is the same as binary directory. \"make clean\" may damage the source tree")
786 endif()
787