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