Updated Clp library related code in CMakeLists.txt
[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(NOT IOS)
46   cmake_minimum_required(VERSION 2.6.3)
47 else()
48   cmake_minimum_required(VERSION 2.8)
49 endif()
50
51 set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Configs" FORCE)
52 if(DEFINED CMAKE_BUILD_TYPE AND CMAKE_VERSION VERSION_GREATER "2.8")
53   set_property( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS ${CMAKE_CONFIGURATION_TYPES} )
54 endif()
55
56 project(OpenCV)
57
58 include(cmake/OpenCVUtils.cmake REQUIRED)
59
60 # ----------------------------------------------------------------------------
61 # Detect compiler and target platform architecture
62 # ----------------------------------------------------------------------------
63 include(cmake/OpenCVDetectCXXCompiler.cmake REQUIRED)
64
65 # Add these standard paths to the search paths for FIND_LIBRARY
66 # to find libraries from these locations first
67 if(UNIX AND NOT ANDROID)
68   if(X86_64 OR CMAKE_SIZEOF_VOID_P EQUAL 8)
69     if(EXISTS /lib64)
70       list(APPEND CMAKE_LIBRARY_PATH /lib64)
71     else()
72       list(APPEND CMAKE_LIBRARY_PATH /lib)
73     endif()
74     if(EXISTS /usr/lib64)
75       list(APPEND CMAKE_LIBRARY_PATH /usr/lib64)
76     else()
77       list(APPEND CMAKE_LIBRARY_PATH /usr/lib)
78     endif()
79   elseif(X86 OR CMAKE_SIZEOF_VOID_P EQUAL 4)
80     if(EXISTS /lib32)
81       list(APPEND CMAKE_LIBRARY_PATH /lib32)
82     else()
83       list(APPEND CMAKE_LIBRARY_PATH /lib)
84     endif()
85     if(EXISTS /usr/lib32)
86       list(APPEND CMAKE_LIBRARY_PATH /usr/lib32)
87     else()
88       list(APPEND CMAKE_LIBRARY_PATH /usr/lib)
89     endif()
90   endif()
91 endif()
92
93
94 # ----------------------------------------------------------------------------
95 # OpenCV cmake options
96 # ----------------------------------------------------------------------------
97
98 # Optional 3rd party components
99 # ===================================================
100 OCV_OPTION(WITH_1394           "Include IEEE1394 support"                    ON   IF (UNIX AND NOT ANDROID AND NOT IOS) )
101 OCV_OPTION(WITH_AVFOUNDATION   "Use AVFoundation for Video I/O"              ON   IF IOS)
102 OCV_OPTION(WITH_CARBON         "Use Carbon for UI instead of Cocoa"          OFF  IF APPLE )
103 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) )
104 OCV_OPTION(WITH_CUDA           "Include NVidia Cuda Runtime support"         ON   IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT ANDROID AND NOT IOS) )
105 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) )
106 OCV_OPTION(WITH_EIGEN          "Include Eigen2/Eigen3 support"               ON)
107 OCV_OPTION(WITH_FFMPEG         "Include FFMPEG support"                      ON   IF (UNIX AND NOT ANDROID AND NOT IOS) )
108 OCV_OPTION(WITH_GSTREAMER      "Include Gstreamer support"                   ON   IF (UNIX AND NOT APPLE AND NOT ANDROID AND NOT IOS) )
109 OCV_OPTION(WITH_GTK            "Include GTK support"                         ON   IF (UNIX AND NOT APPLE AND NOT ANDROID AND NOT IOS) )
110 OCV_OPTION(WITH_IPP            "Include Intel IPP support"                   OFF  IF (MSVC OR X86 OR X86_64) )
111 OCV_OPTION(WITH_JASPER         "Include JPEG2K support"                      ON   IF (NOT IOS) )
112 OCV_OPTION(WITH_JPEG           "Include JPEG support"                        ON   IF (NOT IOS) )
113 OCV_OPTION(WITH_OPENEXR        "Include ILM support via OpenEXR"             ON   IF (NOT IOS) )
114 OCV_OPTION(WITH_OPENGL         "Include OpenGL support"                      OFF  IF (NOT ANDROID AND NOT IOS) )
115 OCV_OPTION(WITH_OPENNI         "Include OpenNI support"                      OFF  IF (NOT ANDROID AND NOT IOS) )
116 OCV_OPTION(WITH_PNG            "Include PNG support"                         ON   IF (NOT IOS) )
117 OCV_OPTION(WITH_PVAPI          "Include Prosilica GigE support"              ON   IF (UNIX AND NOT ANDROID AND NOT IOS) )
118 OCV_OPTION(WITH_QT             "Build with Qt Backend support"               OFF  IF (NOT ANDROID AND NOT IOS) )
119 OCV_OPTION(WITH_QUICKTIME      "Use QuickTime for Video I/O insted of QTKit" OFF  IF APPLE )
120 OCV_OPTION(WITH_TBB            "Include Intel TBB support"                   OFF  IF (NOT IOS) )
121 OCV_OPTION(WITH_TIFF           "Include TIFF support"                        ON   IF (NOT IOS) )
122 OCV_OPTION(WITH_UNICAP         "Include Unicap support (GPL)"                OFF  IF (UNIX AND NOT APPLE AND NOT ANDROID AND NOT IOS) )
123 OCV_OPTION(WITH_V4L            "Include Video 4 Linux support"               ON   IF (UNIX AND NOT APPLE AND NOT ANDROID AND NOT IOS) )
124 OCV_OPTION(WITH_VIDEOINPUT     "Build HighGUI with DirectShow support"       ON   IF WIN32 )
125 OCV_OPTION(WITH_XIMEA          "Include XIMEA cameras support"               OFF  IF WIN32 )
126 OCV_OPTION(WITH_XINE           "Include Xine support (GPL)"                  OFF  IF (UNIX AND NOT APPLE AND NOT ANDROID AND NOT IOS) )
127 OCV_OPTION(WITH_CLP            "Include Clp support (EPL)"                   OFF  IF (UNIX AND NOT ANDROID AND NOT IOS) )
128
129 # OpenCV build components
130 # ===================================================
131 OCV_OPTION(BUILD_SHARED_LIBS        "Build shared libraries (.dll/.so) instead of static ones (.lib/.a)" NOT (ANDROID OR IOS) )
132 OCV_OPTION(BUILD_ANDROID_EXAMPLES   "Build examples for Android platform"         ON  IF ANDROID )
133 OCV_OPTION(BUILD_DOCS               "Create build rules for OpenCV Documentation" ON )
134 OCV_OPTION(BUILD_EXAMPLES           "Build all examples"                          OFF )
135 OCV_OPTION(BUILD_PACKAGE            "Enables 'make package_source' command"       ON )
136 OCV_OPTION(BUILD_PERF_TESTS         "Build performance tests"                     ON  IF (NOT IOS) )
137 OCV_OPTION(BUILD_TESTS              "Build accuracy & regression tests"           ON  IF (NOT IOS) )
138 OCV_OPTION(BUILD_WITH_DEBUG_INFO    "Include debug info into debug libs (not MSCV only)" ON )
139 OCV_OPTION(BUILD_WITH_STATIC_CRT    "Enables use of staticaly linked CRT for staticaly linked OpenCV" ON IF MSVC )
140 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 )
141
142 # 3rd party libs
143 OCV_OPTION(BUILD_ZLIB               "Build zlib from source"         WIN32 OR IOS )
144 OCV_OPTION(BUILD_TIFF               "Build libtiff from source"      WIN32 OR IOS OR ANDROID )
145 OCV_OPTION(BUILD_JASPER             "Build libjasper from source"    WIN32 OR IOS OR ANDROID )
146 OCV_OPTION(BUILD_JPEG               "Build libjpeg from source"      WIN32 OR IOS OR ANDROID )
147 OCV_OPTION(BUILD_PNG                "Build libpng from source"       WIN32 OR IOS OR ANDROID )
148
149 # OpenCV installation options
150 # ===================================================
151 OCV_OPTION(INSTALL_C_EXAMPLES       "Install C examples"        OFF )
152 OCV_OPTION(INSTALL_PYTHON_EXAMPLES  "Install Python examples"   OFF )
153 OCV_OPTION(INSTALL_ANDROID_EXAMPLES "Install Android examples"  OFF  IF ANDROID )
154 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) )
155
156 # OpenCV build options
157 # ===================================================
158 OCV_OPTION(ENABLE_PRECOMPILED_HEADERS "Use precompiled headers"                                  ON   IF (NOT IOS) )
159 OCV_OPTION(ENABLE_SOLUTION_FOLDERS    "Solution folder in Visual Studio or in other IDEs"        MSVC_IDE IF (CMAKE_VERSION VERSION_GREATER "2.8.0") )
160 OCV_OPTION(ENABLE_PROFILING           "Enable profiling in the GCC compiler (Add flags: -g -pg)" OFF  IF CMAKE_COMPILER_IS_GNUCXX )
161 OCV_OPTION(ENABLE_OMIT_FRAME_POINTER  "Enable -fomit-frame-pointer for GCC"                      ON   IF CMAKE_COMPILER_IS_GNUCXX )
162 OCV_OPTION(ENABLE_POWERPC             "Enable PowerPC for GCC"                                   ON   IF (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_SYSTEM_PROCESSOR MATCHES powerpc.*) )
163 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)) )
164 OCV_OPTION(ENABLE_SSE                 "Enable SSE instructions"                                  ON   IF (MSVC OR CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
165 OCV_OPTION(ENABLE_SSE2                "Enable SSE2 instructions"                                 ON   IF (MSVC OR CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
166 OCV_OPTION(ENABLE_SSE3                "Enable SSE3 instructions"                                 OFF  IF (CV_ICC OR CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
167 OCV_OPTION(ENABLE_SSSE3               "Enable SSSE3 instructions"                                OFF  IF (CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
168 OCV_OPTION(ENABLE_SSE41               "Enable SSE4.1 instructions"                               OFF  IF (CV_ICC OR CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
169 OCV_OPTION(ENABLE_SSE42               "Enable SSE4.2 instructions"                               OFF  IF (CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
170 OCV_OPTION(OPENCV_WARNINGS_ARE_ERRORS "Treat warnings as errors"                                 OFF )
171
172 # uncategorized options
173 # ===================================================
174 OCV_OPTION(CMAKE_VERBOSE "Verbose mode" OFF )
175
176 # backward compatibility
177 # ===================================================
178 include(cmake/OpenCVLegacyOptions.cmake OPTIONAL)
179
180
181 # ----------------------------------------------------------------------------
182 #  Get actual OpenCV version number from sources
183 # ----------------------------------------------------------------------------
184 include(cmake/OpenCVVersion.cmake REQUIRED)
185
186
187 # ----------------------------------------------------------------------------
188 #  Build & install layouts
189 # ----------------------------------------------------------------------------
190
191 # Save libs and executables in the same place
192 set(LIBRARY_OUTPUT_PATH "${CMAKE_BINARY_DIR}/lib" CACHE PATH "Output directory for libraries" )
193 set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/bin" CACHE PATH "Output directory for applications" )
194
195 if(ANDROID OR WIN32)
196     set(OPENCV_DOC_INSTALL_PATH doc)
197 elseif(INSTALL_TO_MANGLED_PATHS)
198     set(OPENCV_DOC_INSTALL_PATH share/OpenCV-${OPENCV_VERSION}/doc)
199 else()
200     set(OPENCV_DOC_INSTALL_PATH share/OpenCV/doc)
201 endif()
202
203 if(ANDROID)
204     set(OPENCV_LIB_INSTALL_PATH libs/${ANDROID_NDK_ABI_NAME})
205 else()
206     set(OPENCV_LIB_INSTALL_PATH lib${LIB_SUFFIX})
207 endif()
208
209 set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${OPENCV_LIB_INSTALL_PATH}")
210 set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
211
212 set(OPENCV_INCLUDE_PREFIX include)
213 if(INSTALL_TO_MANGLED_PATHS)
214   set(OPENCV_INCLUDE_PREFIX include/opencv-${OPENCV_VERSION})
215 endif()
216
217 if(WIN32)
218   # Postfix of DLLs:
219   set(OPENCV_DLLVERSION "${OPENCV_VERSION_MAJOR}${OPENCV_VERSION_MINOR}${OPENCV_VERSION_PATCH}")
220   set(OPENCV_DEBUG_POSTFIX d)
221 else()
222   # Postfix of so's:
223   set(OPENCV_DLLVERSION "")
224   set(OPENCV_DEBUG_POSTFIX "")
225 endif()
226
227 if(DEFINED CMAKE_DEBUG_POSTFIX)
228   set(OPENCV_DEBUG_POSTFIX "${CMAKE_DEBUG_POSTFIX}")
229 endif()
230
231 if(CMAKE_VERBOSE)
232   set(CMAKE_VERBOSE_MAKEFILE 1)
233 endif()
234
235
236 # ----------------------------------------------------------------------------
237 #  Path for build/platform -specific headers
238 # ----------------------------------------------------------------------------
239 set(OPENCV_CONFIG_FILE_INCLUDE_DIR "${CMAKE_BINARY_DIR}/" CACHE PATH "Where to create the platform-dependant cvconfig.h")
240 add_definitions(-DHAVE_CVCONFIG_H)
241 ocv_include_directories(${OPENCV_CONFIG_FILE_INCLUDE_DIR})
242
243
244 # ----------------------------------------------------------------------------
245 # Use statically or dynamically linked CRT?
246 # Default: dynamic
247 # ----------------------------------------------------------------------------
248 if(MSVC)
249   include(cmake/OpenCVCRTLinkage.cmake REQUIRED)
250 endif(MSVC)
251
252
253 # ----------------------------------------------------------------------------
254 #  Autodetect if we are in a SVN repository
255 # ----------------------------------------------------------------------------
256 find_host_program(SVNVERSION_PATH svnversion)
257 mark_as_advanced(force SVNVERSION_PATH)
258 if(SVNVERSION_PATH)
259     message(STATUS "Extracting svn version, please wait...")
260     execute_process(COMMAND ${SVNVERSION_PATH} -n ${OpenCV_SOURCE_DIR} OUTPUT_VARIABLE SVNVERSION_RESULT)
261
262     if(SVNVERSION_RESULT MATCHES "exported")
263         # This is NOT a svn repository:
264         set(OPENCV_SVNVERSION "")
265         message(STATUS "SVNVERSION: exported")
266     else()
267         set(OPENCV_SVNVERSION " svn:${SVNVERSION_RESULT}")
268         message(STATUS "SVNVERSION: ${OPENCV_SVNVERSION}")
269     endif()
270 else()
271     # We don't have svnversion:
272     set(OPENCV_SVNVERSION "")
273 endif()
274
275
276 # ----------------------------------------------------------------------------
277 # OpenCV compiler and linker options
278 # ----------------------------------------------------------------------------
279 include(cmake/OpenCVCompilerOptions.cmake REQUIRED)
280
281 # In case of Makefiles if the user does not setup CMAKE_BUILD_TYPE, assume it's Release:
282 if(CMAKE_GENERATOR MATCHES "Makefiles" AND "${CMAKE_BUILD_TYPE}" STREQUAL "")
283   set(CMAKE_BUILD_TYPE Release)
284 endif()
285
286
287 # ----------------------------------------------------------------------------
288 #       CHECK FOR SYSTEM LIBRARIES, OPTIONS, ETC..
289 # ----------------------------------------------------------------------------
290 if(UNIX)
291   include(cmake/OpenCVFindPkgConfig.cmake OPTIONAL)
292   include(CheckFunctionExists)
293   include(CheckIncludeFile)
294 endif()
295
296 include(cmake/OpenCVPCHSupport.cmake REQUIRED)
297 include(cmake/OpenCVModule.cmake REQUIRED)
298
299 # ----------------------------------------------------------------------------
300 #  Detect 3rd-party tools and libraries
301 # ----------------------------------------------------------------------------
302
303 # IO libraries
304 include(cmake/OpenCVIOLibs.cmake REQUIRED)
305
306 #Graphic libraries
307 set(HAVE_OPENGL 0)
308 if(UNIX)
309     if(NOT APPLE)
310       if(WITH_GTK)
311         CHECK_MODULE(gtk+-2.0 HAVE_GTK)
312         CHECK_MODULE(gthread-2.0 HAVE_GTHREAD)
313         if(WITH_OPENGL)
314             CHECK_MODULE(gtkglext-1.0 HAVE_GTKGLEXT)
315             if(HAVE_GTKGLEXT)
316                 find_package(OpenGL QUIET)
317                 if(OPENGL_FOUND)
318                     set(HAVE_OPENGL 1)
319                     set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${OPENGL_LIBRARIES})
320                     ocv_include_directories(${OPENGL_INCLUDE_DIR})
321                 endif()
322             endif()
323         endif()
324       else()
325         set(HAVE_GTK FALSE)
326         set(HAVE_GTHREAD FALSE)
327       endif()
328       if(WITH_GSTREAMER)
329         CHECK_MODULE(gstreamer-base-0.10 HAVE_GSTREAMER)
330         CHECK_MODULE(gstreamer-app-0.10 HAVE_GSTREAMER)
331         CHECK_MODULE(gstreamer-video-0.10 HAVE_GSTREAMER)
332       else()
333         set(HAVE_GSTREAMER FALSE)
334       endif()
335     endif()
336
337     if(WITH_UNICAP)
338       CHECK_MODULE(libunicap HAVE_UNICAP_)
339       CHECK_MODULE(libucil HAVE_UNICAP_UCIL)
340       if(HAVE_UNICAP_ AND HAVE_UNICAP_UCIL)
341         set(HAVE_UNICAP 1)
342       endif()
343     else()
344       set(HAVE_UNICAP FALSE)
345     endif()
346
347     if(WITH_PVAPI)
348       find_path(PVAPI_INCLUDE_PATH "PvApi.h"
349                 PATHS "/usr/local/include" "/usr/include"
350                 DOC "The path to PvAPI header")
351       if(PVAPI_INCLUDE_PATH)
352         set(HAVE_PVAPI 1)
353       endif()
354     endif()
355
356     set(HAVE_FFMPEG 0)
357     if(WITH_FFMPEG)
358       CHECK_MODULE(libavcodec HAVE_FFMPEG_CODEC)
359       CHECK_MODULE(libavformat HAVE_FFMPEG_FORMAT)
360       CHECK_MODULE(libavutil HAVE_FFMPEG_UTIL)
361       CHECK_MODULE(libswscale HAVE_FFMPEG_SWSCALE)
362       CHECK_INCLUDE_FILE(libavformat/avformat.h HAVE_GENTOO_FFMPEG)
363       CHECK_INCLUDE_FILE(ffmpeg/avformat.h HAVE_FFMPEG_FFMPEG)
364       if(NOT HAVE_GENTOO_FFMPEG AND NOT HAVE_FFMPEG_FFMPEG)
365         if(EXISTS /usr/include/ffmpeg/libavformat/avformat.h OR HAVE_FFMPEG_SWSCALE)
366           set(HAVE_GENTOO_FFMPEG 1)
367         endif()
368       endif()
369       if(HAVE_FFMPEG_CODEC AND HAVE_FFMPEG_FORMAT AND HAVE_FFMPEG_UTIL)
370         if(HAVE_FFMPEG_SWSCALE OR NOT HAVE_GENTOO_FFMPEG)
371             set(HAVE_FFMPEG 1)
372         endif()
373       endif()
374
375       # Find the bzip2 library because it is required on some systems
376       FIND_LIBRARY(BZIP2_LIBRARIES NAMES bz2 bzip2)
377       if(NOT BZIP2_LIBRARIES)
378         # Do an other trial
379         FIND_FILE(BZIP2_LIBRARIES NAMES libbz2.so.1 PATHS /lib)
380       endif()
381     endif()
382
383     if(HAVE_FFMPEG)
384     CHECK_MODULE(libavformat>=52.111.0 NEW_FFMPEG)
385     endif()
386
387     if(WITH_1394)
388       CHECK_MODULE(libdc1394-2 HAVE_DC1394_2)
389       if(NOT HAVE_DC1394_2)
390         CHECK_MODULE(libdc1394 HAVE_DC1394)
391       endif()
392     else()
393       set(HAVE_DC1394_2 FALSE)
394       set(HAVE_DC1394 FALSE)
395     endif()
396
397     if(NOT APPLE)
398         CHECK_INCLUDE_FILE(alloca.h HAVE_ALLOCA_H)
399         CHECK_FUNCTION_EXISTS(alloca HAVE_ALLOCA)
400         CHECK_INCLUDE_FILE(unistd.h HAVE_UNISTD_H)
401         CHECK_INCLUDE_FILE(pthread.h HAVE_LIBPTHREAD)
402
403         if(WITH_XINE)
404             CHECK_MODULE(libxine HAVE_XINE)
405         else()
406             set(HAVE_XINE FALSE)
407         endif()
408         if(WITH_V4L)
409             CHECK_MODULE(libv4l1 HAVE_LIBV4L)
410             CHECK_INCLUDE_FILE(linux/videodev.h HAVE_CAMV4L)
411             CHECK_INCLUDE_FILE(linux/videodev2.h HAVE_CAMV4L2)
412         else()
413             set(HAVE_LIBV4L FALSE)
414             set(HAVE_CAMV4L FALSE)
415             set(HAVE_CAMV4L2 FALSE)
416         endif()
417
418         if(ANDROID)
419             set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} dl m log)
420         elseif(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD" OR ${CMAKE_SYSTEM_NAME} MATCHES "NetBSD")
421             set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} m pthread)
422         else()
423             set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} dl m pthread rt)
424         endif()
425     else()
426         add_definitions(-DHAVE_ALLOCA -DHAVE_ALLOCA_H -DHAVE_LIBPTHREAD -DHAVE_UNISTD_H)
427     endif()
428 endif()
429
430 #################### LATEX for dpf documentation ##################
431 if(BUILD_DOCS)
432   include(cmake/OpenCVFindLATEX.cmake REQUIRED)
433 endif()
434
435 ########################## Python Support #########################
436 include(cmake/OpenCVDetectPython.cmake REQUIRED)
437
438 ########################### Java Support ##########################
439 if(ANDROID)
440   include(cmake/OpenCVDetectApacheAnt.cmake REQUIRED)
441   include(cmake/OpenCVDetectAndroidSDK.cmake REQUIRED)
442   
443   if(NOT ANDROID_TOOLS_Pkg_Revision GREATER 13)
444     message(WARNING "OpenCV requires Android SDK tools revision 14 or newer. Otherwise tests and samples will no be compiled.")
445   endif()
446 endif()
447
448 if(ANDROID AND ANDROID_EXECUTABLE AND ANT_EXECUTABLE AND (ANT_VERSION VERSION_GREATER 1.7) AND (ANDROID_TOOLS_Pkg_Revision GREATER 13))
449   SET(CAN_BUILD_ANDROID_PROJECTS TRUE)
450 else()
451   SET(CAN_BUILD_ANDROID_PROJECTS FALSE)
452 endif()
453
454 ############################### QT ################################
455 set(HAVE_QT 0)
456 set(HAVE_QT_OPENGL 0)
457
458 if(WITH_QT)
459   find_package(Qt4)
460   if(QT4_FOUND)
461     set(HAVE_QT 1)
462     add_definitions(-DHAVE_QT) #We need to define te macro this way, using cvconfig.h.cmake does not work
463
464     if(WITH_OPENGL)
465       find_package (OpenGL QUIET)
466       if(QT_QTOPENGL_FOUND AND OPENGL_FOUND)
467         set(HAVE_OPENGL 1)
468         set(HAVE_QT_OPENGL 1)
469         add_definitions(-DHAVE_QT_OPENGL)
470         set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${OPENGL_LIBRARIES})
471       endif()
472     endif()
473   endif()
474 endif()
475
476 ############################### TBB ################################
477 if(WITH_TBB)
478   include(cmake/OpenCVDetectTBB.cmake REQUIRED)
479 endif()
480
481 ############################ Intel IPP #############################
482 set(IPP_FOUND)
483
484 if(WITH_IPP)
485   include(cmake/OpenCVFindIPP.cmake)
486 endif()
487
488 if(IPP_FOUND)
489   add_definitions(-DHAVE_IPP)
490   ocv_include_directories(${IPP_INCLUDE_DIRS})
491   link_directories(${IPP_LIBRARY_DIRS})
492   set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${IPP_LIBRARIES})
493 endif()
494
495 ############################### CUDA ################################
496 if(WITH_CUDA)
497   include(cmake/OpenCVDetectCUDA.cmake REQUIRED)
498 endif()
499
500 ############################### OpenNI ################################
501 set(HAVE_OPENNI FALSE)
502 set(HAVE_OPENNI_PRIME_SENSOR_MODULE FALSE)
503
504 if(WITH_OPENNI)
505   include(cmake/OpenCVFindOpenNI.cmake)
506 endif()
507
508 ############################### XIMEA ################################
509 set(HAVE_XIMEA FALSE)
510
511 if(WITH_XIMEA)
512   include(cmake/OpenCVFindXimea.cmake)
513 endif()
514
515 if(XIMEA_FOUND)
516   set(HAVE_XIMEA TRUE)
517 endif()
518
519 ############################## Eigen ##############################
520 if(WITH_EIGEN)
521   find_path(EIGEN_INCLUDE_PATH "Eigen/Core"
522             PATHS "/usr/local/include/eigen2" "/opt/include/eigen2" "/usr/include/eigen2"
523                   "/usr/local/include/eigen3" "/opt/include/eigen3" "/usr/include/eigen3"
524             DOC "The path to Eigen2/Eigen3 headers")
525   if(EIGEN_INCLUDE_PATH)
526     ocv_include_directories(${EIGEN_INCLUDE_PATH})
527     set(HAVE_EIGEN 1)
528   endif()
529 endif()
530
531 ########################## Clp #####################################
532 set(HAVE_CLP FALSE)
533
534 if(WITH_CLP)
535   PKG_CHECK_MODULES(CLP clp)
536   if(CLP_FOUND)
537     set(HAVE_CLP TRUE)
538     if(NOT ${CLP_INCLUDE_DIRS} STREQUAL "")
539       ocv_include_directories(${CLP_INCLUDE_DIRS})
540     endif()
541     link_directories(${CLP_LIBRARY_DIRS})
542     set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${CLP_LIBRARIES})
543   else()
544     find_path(CLP_INCLUDE_PATH "coin"
545               PATHS "/usr/local/include" "/usr/include" "/opt/include"
546               DOC "The path to Clp headers")
547     if(CLP_INCLUDE_PATH)
548       ocv_include_directories(${CLP_INCLUDE_PATH})
549       set(CLP_LIBRARY_DIR "${CLP_INCLUDE_PATH}/../lib" CACHE PATH "Full path of Clp library directory")
550       link_directories(${CLP_LIBRARY_DIR})
551       set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} Clp CoinUtils bz2 z lapack blas m)
552       set(HAVE_CLP TRUE)
553     endif()  
554   endif()
555 endif()
556
557 ################## Extra HighGUI libs on Windows ###################
558 if(WIN32)
559   set(HIGHGUI_LIBRARIES ${HIGHGUI_LIBRARIES} comctl32 gdi32 ole32)
560
561   if(WITH_VIDEOINPUT)
562     set(HAVE_VIDEOINPUT 1)
563   endif()
564
565   if(MSVC)
566     set(HIGHGUI_LIBRARIES ${HIGHGUI_LIBRARIES} vfw32)
567   endif()
568
569   if(MINGW)
570     if(MINGW64)
571       set(HIGHGUI_LIBRARIES ${HIGHGUI_LIBRARIES} msvfw32 avifil32 avicap32 winmm)
572     else()
573       set(HIGHGUI_LIBRARIES ${HIGHGUI_LIBRARIES} vfw32 winmm)
574     endif()
575   endif()
576
577   if(WITH_OPENGL AND NOT HAVE_QT_OPENGL)
578     find_package(OpenGL QUIET)
579
580     if(OPENGL_FOUND)
581       set(HAVE_OPENGL 1)
582       set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${OPENGL_LIBRARIES})
583       ocv_include_directories(${OPENGL_INCLUDE_DIR})
584     endif()
585   endif()
586 endif()
587
588
589 # ----------------------------------------------------------------------------
590 # Solution folders:
591 # ----------------------------------------------------------------------------
592 if(ENABLE_SOLUTION_FOLDERS)
593   set_property(GLOBAL PROPERTY USE_FOLDERS ON)
594   set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "CMakeTargets")
595 endif()
596
597 # Extra OpenCV targets: uninstall, package_source, perf, etc.
598 include(cmake/OpenCVExtraTargets.cmake REQUIRED)
599
600
601 # ----------------------------------------------------------------------------
602 # Process subdirectories
603 # ----------------------------------------------------------------------------
604
605 # opencv.hpp and legacy headers
606 add_subdirectory(include)
607
608 # OpenCV modules
609 add_subdirectory(modules)
610
611 # Generate targets for documentation
612 add_subdirectory(doc)
613
614 # various data that is used by cv libraries and/or demo applications.
615 add_subdirectory(data)
616
617 # extra applications
618 add_subdirectory(apps)
619
620 # examples
621 if(BUILD_EXAMPLES OR BUILD_ANDROID_EXAMPLES OR INSTALL_PYTHON_EXAMPLES)
622   add_subdirectory(samples)
623 endif()
624
625
626 # ----------------------------------------------------------------------------
627 # Finalization: generate configuration-based files
628 # ----------------------------------------------------------------------------
629 ocv_track_build_dependencies()
630
631 # Generate platform-dependent and configuration-dependent headers
632 include(cmake/OpenCVGenHeaders.cmake REQUIRED)
633
634 # Generate opencv.pc for pkg-config command
635 include(cmake/OpenCVGenPkgconfig.cmake REQUIRED)
636
637 # Generate OpenCV.mk for ndk-build (Android build tool)
638 include(cmake/OpenCVGenAndroidMK.cmake REQUIRED)
639
640 # Generate OpenCVŠ”onfig.cmake and OpenCVConfig-version.cmake for cmake projects
641 include(cmake/OpenCVGenConfig.cmake REQUIRED)
642
643
644 # ----------------------------------------------------------------------------
645 # Summary:
646 # ----------------------------------------------------------------------------
647 status("")
648 status("General configuration for OpenCV ${OPENCV_VERSION} =====================================")
649
650 #build platform
651 status("")
652 status("  Platform:")
653 status("    Host:"             ${CMAKE_HOST_SYSTEM_NAME} ${CMAKE_HOST_SYSTEM_VERSION} ${CMAKE_HOST_SYSTEM_PROCESSOR})
654 status("    Target:"           ${CMAKE_SYSTEM_NAME} ${CMAKE_SYSTEM_VERSION} ${CMAKE_SYSTEM_PROCESSOR})
655 status("    CMake:"            ${CMAKE_VERSION})
656 status("    CMake generator:"  ${CMAKE_GENERATOR})
657 status("    CMake build tool:" ${CMAKE_BUILD_TOOL})
658 if(MSVC)
659   status("    MSVC:"           ${MSVC_VERSION})
660 endif()
661 if(CMAKE_GENERATOR MATCHES Xcode)
662   status("    Xcode:"          ${XCODE_VERSION})
663 endif()
664
665 # C/C++ options
666 status("")
667 status("  C++:")
668 status("    Built as dynamic libs?:" BUILD_SHARED_LIBS THEN YES ELSE NO)
669 status("    C++ Compiler:"           CMAKE_COMPILER    THEN "${CMAKE_COMPILER}" ELSE "${CMAKE_CXX_COMPILER}")
670 status("    C++ flags (Release):"    ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE})
671 status("    C++ flags (Debug):"      ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG})
672 if(WIN32)
673   status("    Linker flags (Release):" ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_RELEASE})
674   status("    Linker flags (Debug):"   ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_DEBUG})
675 else()
676   status("    Linker flags (Release):" ${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS_RELEASE})
677   status("    Linker flags (Debug):"   ${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS_DEBUG})
678 endif()
679
680 # OpenCV modules
681 status("")
682 status("  OpenCV modules:")
683 string(REPLACE "opencv_" "" OPENCV_MODULES_BUILD_ST          "${OPENCV_MODULES_BUILD}")
684 string(REPLACE "opencv_" "" OPENCV_MODULES_DISABLED_USER_ST  "${OPENCV_MODULES_DISABLED_USER}")
685 string(REPLACE "opencv_" "" OPENCV_MODULES_DISABLED_FORCE_ST "${OPENCV_MODULES_DISABLED_FORCE}")
686 set(OPENCV_MODULES_DISABLED_AUTO_ST "")
687 foreach(m ${OPENCV_MODULES_DISABLED_AUTO})
688   set(__mdeps "")
689   foreach(d ${OPENCV_MODULE_${m}_DEPS})
690     if(d MATCHES "^opencv_" AND NOT HAVE_${d})
691       list(APPEND __mdeps ${d})
692     endif()
693   endforeach()
694   list(APPEND OPENCV_MODULES_DISABLED_AUTO_ST "${m}(deps: ${__mdeps})")
695 endforeach()
696 string(REPLACE "opencv_" "" OPENCV_MODULES_DISABLED_AUTO_ST  "${OPENCV_MODULES_DISABLED_AUTO_ST}")
697
698 status("    To be built:"            OPENCV_MODULES_BUILD          THEN ${OPENCV_MODULES_BUILD_ST}          ELSE "-")
699 status("    Disabled by user:"       OPENCV_MODULES_DISABLED_USER  THEN ${OPENCV_MODULES_DISABLED_USER_ST}  ELSE "-")
700 status("    Disabled by dependency:" OPENCV_MODULES_DISABLED_AUTO  THEN ${OPENCV_MODULES_DISABLED_AUTO_ST}  ELSE "-")
701 status("    Unavailable:"            OPENCV_MODULES_DISABLED_FORCE THEN ${OPENCV_MODULES_DISABLED_FORCE_ST} ELSE "-")
702
703 # Android extra
704 if(ANDROID)
705   status("")
706   status("  Android: ")
707   status("    Android ABI:" ${ANDROID_ABI})
708   status("    Native API level:" android-${ANDROID_NATIVE_API_LEVEL})
709   status("    SDK target:" "${ANDROID_SDK_TARGET}")
710   if(BUILD_WITH_ANDROID_NDK)
711     status("    Android NDK:" "${ANDROID_NDK} (toolchain: ${ANDROID_TOOLCHAIN_NAME})")
712   elseif(BUILD_WITH_STANDALONE_TOOLCHAIN)
713     status("    Android toolchain:" "${ANDROID_STANDALONE_TOOLCHAIN}")
714   endif()
715   status("    android tool:"  ANDROID_EXECUTABLE  THEN "${ANDROID_EXECUTABLE} (${ANDROID_TOOLS_Pkg_Desc})" ELSE NO)
716   status("    ant:"           ANT_EXECUTABLE      THEN "${ANT_EXECUTABLE} (ver ${ANT_VERSION})"            ELSE NO)
717 endif()
718
719 #YV
720 status("")
721 status("  GUI: ")
722
723 if (HAVE_QT)
724   status("    QT 4.x:"            HAVE_QT        THEN YES ELSE NO)
725   status("    QT OpenGL support:" HAVE_QT_OPENGL THEN YES ELSE NO)
726 else()
727   if(WIN32)
728     status("    Win32 UI:" YES)
729   else()
730     if(APPLE)
731       if(WITH_CARBON)
732         status("    Carbon:" YES)
733       else()
734         status("    Cocoa:"  YES)
735       endif()
736     else()
737       status("    GTK+ 2.x:" HAVE_GTK      THEN YES ELSE NO)
738       status("    GThread :" HAVE_GTHREAD  THEN YES ELSE NO)
739       status("    GtkGlExt:" HAVE_GTKGLEXT THEN YES ELSE NO)
740     endif()
741   endif()
742 endif()
743
744 status("    OpenGL support:" HAVE_OPENGL THEN YES ELSE NO)
745
746 # media
747 status("")
748 status("  Media I/O: ")
749 status("    ZLib:"         ZLIB_FOUND    THEN "${ZLIB_LIBRARY}"    ELSE build)
750
751 if(WITH_JPEG)
752   status("    JPEG:"       JPEG_FOUND    THEN "${JPEG_LIBRARY}"    ELSE build)
753 else()
754   status("    JPEG:"       "NO")
755 endif()
756 if(WITH_PNG)
757   status("    PNG:"        PNG_FOUND     THEN "${PNG_LIBRARY}"     ELSE build)
758 else()
759   status("    PNG:"        "NO")
760 endif()
761 if(WITH_TIFF)
762   status("    TIFF:"       TIFF_FOUND    THEN "${TIFF_LIBRARY}"    ELSE build)
763 else()
764   status("    TIFF:"       "NO")
765 endif()
766 if(WITH_JASPER)
767   status("    JPEG 2000:"  JASPER_FOUND  THEN "${JASPER_LIBRARY}"  ELSE build)
768 else()
769   status("    JPEG 2000:"  "NO")
770 endif()
771
772 status("    OpenEXR:"   WITH_OPENEXR AND OPENEXR_FOUND     THEN YES             ELSE NO)
773 status("    OpenNI:"    HAVE_OPENNI                        THEN YES             ELSE NO)
774 status("    OpenNI PrimeSensor Modules:"
775                         HAVE_OPENNI_PRIME_SENSOR_MODULE    THEN YES             ELSE NO)
776 if(WIN32)
777   status("    XIMEA:"     HAVE_XIMEA  THEN YES ELSE NO)
778 endif()
779
780 # video
781 status("")
782 if(UNIX AND NOT APPLE)
783   status("  Video I/O:")
784   status("    DC1394 1.x:"     HAVE_DC1394         THEN YES ELSE NO)
785   status("    DC1394 2.x:"     HAVE_DC1394_2       THEN YES ELSE NO)
786   status("    FFMPEG:"         HAVE_FFMPEG         THEN YES ELSE NO)
787   status("      codec:"        HAVE_FFMPEG_CODEC   THEN YES ELSE NO)
788   status("      format:"       HAVE_FFMPEG_FORMAT  THEN YES ELSE NO)
789   status("      util:"         HAVE_FFMPEG_UTIL    THEN YES ELSE NO)
790   status("      swscale:"      HAVE_FFMPEG_SWSCALE THEN YES ELSE NO)
791   status("      gentoo-style:" HAVE_GENTOO_FFMPEG  THEN YES ELSE NO)
792   status("    GStreamer:"      HAVE_GSTREAMER      THEN YES ELSE NO)
793   status("    UniCap:"         HAVE_UNICAP         THEN YES ELSE NO)
794   status("    PvAPI:"          HAVE_PVAPI          THEN YES ELSE NO)
795   status("    V4L/V4L2:"       HAVE_LIBV4L         THEN "Using libv4l" ELSE ${HAVE_CAMV4L}/${HAVE_CAMV4L2})
796   status("    Xine:"           HAVE_XINE           THEN YES ELSE NO)
797
798   if(ANDROID)
799     if(HAVE_opencv_androidcamera)
800       status("    AndroidNativeCamera:" BUILD_ANDROID_CAMERA_WRAPPER THEN "YES, build for Android ${ANDROID_VERSION}" ELSE "YES, use prebuilt libraries")
801     else()
802       status("    AndroidNativeCamera:" "NO (native camera requires Android API level 8 or higher)")
803     endif()
804   endif()
805 elseif(APPLE)
806   if(NOT IOS)
807     status("  Video I/O:"    WITH_QUICKTIME      THEN QuickTime ELSE QTKit)
808   else()
809     status("  Video I/O: AVFoundation")
810   endif()
811 elseif(WIN32)
812   status("  Video I/O:"        HAVE_VIDEOINPUT     THEN DirectShow ELSE NO)
813 endif()
814
815 # Other third-party libraries
816 status("")
817 status("  Other third-party libraries:")
818
819 if(WITH_IPP AND IPP_FOUND)
820   status("    Use IPP:" "${IPP_LATEST_VERSION_STR} [${IPP_LATEST_VERSION_MAJOR}.${IPP_LATEST_VERSION_MINOR}.${IPP_LATEST_VERSION_BUILD}]")
821   status("         at:" "${IPP_ROOT_DIR}")
822 else()
823   status("    Use IPP:"   WITH_IPP AND NOT IPP_FOUND THEN "IPP not found" ELSE NO)
824 endif()
825
826 status("    Use TBB:"   HAVE_TBB   THEN YES ELSE NO)
827 status("    Use Cuda:"  HAVE_CUDA  THEN YES ELSE NO)
828 status("    Use Eigen:" HAVE_EIGEN THEN YES ELSE NO)
829 status("    Use Clp:"   HAVE_CLP   THEN YES ELSE NO)
830
831 status("")
832 status("  Python interpreter:"  PYTHON_EXECUTABLE        THEN "${PYTHON_EXECUTABLE} (ver ${PYTHON_VERSION_MAJOR_MINOR})" ELSE NO)
833 # interfaces to other languages
834 status("")
835 status("  Interfaces:")
836 status("    Python:"              HAVE_opencv_python THEN YES ELSE NO)
837 status("    Python numpy:"        PYTHON_USE_NUMPY THEN YES ELSE "NO (Python wrappers can not be generated)")
838 if(ANDROID)
839   status("    Java:" HAVE_opencv_java THEN YES ELSE NO)
840 endif()
841
842 # documentation
843 status("")
844 status("  Documentation:")
845 status("    Sphinx:"              HAVE_SPHINX              THEN "${SPHINX_BUILD} (ver ${SPHINX_VERSION})" ELSE NO)
846 status("    PdfLaTeX compiler:"   PDFLATEX_COMPILER        THEN "${PDFLATEX_COMPILER}" ELSE NO)
847 if(BUILD_DOCS AND HAVE_SPHINX)
848   status("    Build Documentation:" PDFLATEX_COMPILER    THEN YES ELSE "YES (only HTML without math expressions)")
849 else()
850   status("    Build Documentation:" NO)
851 endif()
852
853 # samples and tests
854 status("")
855 status("  Tests and samples:")
856 status("    Tests:"             BUILD_TESTS AND HAVE_opencv_ts       THEN YES ELSE NO)
857 status("    Performance tests:" BUILD_PERF_TESTS AND HAVE_opencv_ts  THEN YES ELSE NO)
858 status("    Examples:"          BUILD_EXAMPLES                       THEN YES ELSE NO)
859
860 if(ANDROID)
861   status("    Android tests:"    BUILD_TESTS AND CAN_BUILD_ANDROID_PROJECTS THEN YES ELSE NO)
862   status("    Android examples:" BUILD_ANDROID_EXAMPLES                     THEN YES ELSE NO)
863 endif()
864
865 #auxiliary
866 status("")
867 status("  Install path:" "${CMAKE_INSTALL_PREFIX}")
868 status("")
869 status("  cvconfig.h is in:" "${OPENCV_CONFIG_FILE_INCLUDE_DIR}")
870 status("-----------------------------------------------------------------")
871 status("")
872
873 # ----------------------------------------------------------------------------
874 # Warn in the case of in-source build
875 # ----------------------------------------------------------------------------
876 if("${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}")
877   message(WARNING "The source directory is the same as binary directory. \"make clean\" may damage the source tree")
878 endif()
879