1 # ----------------------------------------------------------------------------
\r
2 # Root CMake file for OpenCV
\r
4 # From the off-tree build directory, invoke:
\r
5 # $ cmake <PATH_TO_OPENCV_ROOT>
\r
8 # - OCT-2008: Initial version <joseluisblancoc@gmail.com>
\r
10 # ----------------------------------------------------------------------------
\r
12 set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true)
\r
14 # it _must_ go before PROJECT(OpenCV) in order to work
\r
15 if (NOT CMAKE_INSTALL_PREFIX)
\r
17 set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR} CACHE INTERNAL "" FORCE)
\r
19 set(CMAKE_INSTALL_PREFIX "/usr" CACHE INTERNAL "" FORCE)
\r
23 set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Configs" FORCE)
\r
24 set(CMAKE_C_FLAGS_MINSIZEREL "" CACHE INTERNAL "" FORCE)
\r
25 set(CMAKE_C_FLAGS_RELWITHDEBINFO "" CACHE INTERNAL "" FORCE)
\r
26 set(CMAKE_CXX_FLAGS_MINSIZEREL "" CACHE INTERNAL "" FORCE)
\r
27 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "" CACHE INTERNAL "" FORCE)
\r
28 set(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "" CACHE INTERNAL "" FORCE)
\r
29 set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "" CACHE INTERNAL "" FORCE)
\r
30 set(CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL "" CACHE INTERNAL "" FORCE)
\r
31 set(CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO "" CACHE INTERNAL "" FORCE)
\r
32 set(CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL "" CACHE INTERNAL "" FORCE)
\r
33 set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "" CACHE INTERNAL "" FORCE)
\r
37 cmake_minimum_required(VERSION 2.4)
\r
40 set(CMAKE_USE_RELATIVE_PATHS ON CACHE INTERNAL "" FORCE)
\r
43 # --------------------------------------------------------------
\r
44 # Indicate CMake 2.7 and above that we don't want to mix relative
\r
45 # and absolute paths in linker lib lists.
\r
46 # Run "cmake --help-policy CMP0003" for more information.
\r
47 # --------------------------------------------------------------
\r
48 if(COMMAND cmake_policy)
\r
49 cmake_policy(SET CMP0003 NEW)
\r
52 # ----------------------------------------------------------------------------
\r
53 # Current version number:
\r
54 # ----------------------------------------------------------------------------
\r
55 set(OPENCV_VERSION "1.2.0")
\r
57 string(REGEX MATCHALL "[0-9]" OPENCV_VERSION_PARTS "${OPENCV_VERSION}")
\r
59 list(GET OPENCV_VERSION_PARTS 0 OPENCV_VERSION_MAJOR)
\r
60 list(GET OPENCV_VERSION_PARTS 1 OPENCV_VERSION_MINOR)
\r
61 list(GET OPENCV_VERSION_PARTS 2 OPENCV_VERSION_PATCH)
\r
63 set(OPENCV_SOVERSION "${OPENCV_VERSION_MAJOR}.${OPENCV_VERSION_MINOR}")
\r
67 set(OPENCV_DLLVERSION "${OPENCV_VERSION_MAJOR}${OPENCV_VERSION_MINOR}${OPENCV_VERSION_PATCH}")
\r
68 set(OPENCV_DEBUG_POSTFIX d)
\r
71 #set(OPENCV_DLLVERSION "${OPENCV_VERSION_MAJOR}${OPENCV_VERSION_MINOR}${OPENCV_VERSION_PATCH}")
\r
72 set(OPENCV_DLLVERSION "")
\r
73 set(OPENCV_DEBUG_POSTFIX)
\r
77 # ----------------------------------------------------------------------------
\r
78 # Variables for cvconfig.h.cmake
\r
79 # ----------------------------------------------------------------------------
\r
80 set(PACKAGE "opencv")
\r
81 set(PACKAGE_BUGREPORT "opencvlibrary-devel@lists.sourceforge.net")
\r
82 set(PACKAGE_NAME "opencv")
\r
83 set(PACKAGE_STRING "${PACKAGE} ${OPENCV_VERSION}")
\r
84 set(PACKAGE_TARNAME "${PACKAGE}")
\r
85 set(PACKAGE_VERSION "${OPENCV_VERSION}")
\r
87 # ----------------------------------------------------------------------------
\r
88 # Autodetect if we are in a SVN repository
\r
89 # ----------------------------------------------------------------------------
\r
90 find_program(SVNVERSION_PATH svnversion)
\r
91 mark_as_advanced(force SVNVERSION_PATH)
\r
93 message(STATUS "Extracting svn version, please wait...")
\r
94 execute_process(COMMAND ${SVNVERSION_PATH} -n ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE SVNVERSION_RESULT)
\r
96 if(SVNVERSION_RESULT MATCHES "exported")
\r
97 # This is NOT a svn repository:
\r
98 set(OPENCV_SVNVERSION "")
\r
100 set(OPENCV_SVNVERSION " svn:${SVNVERSION_RESULT}")
\r
103 message(STATUS "SVNVERSION: ${OPENCV_SVNVERSION}")
\r
105 # We don't have svnversion:
\r
106 set(OPENCV_SVNVERSION "")
\r
109 # ----------------------------------------------------------------------------
\r
110 # Detect GNU version:
\r
111 # ----------------------------------------------------------------------------
\r
112 if(CMAKE_COMPILER_IS_GNUCXX)
\r
113 execute_process(COMMAND ${CMAKE_CXX_COMPILER} --version
\r
114 OUTPUT_VARIABLE CMAKE_OPENCV_GCC_VERSION_FULL
\r
115 OUTPUT_STRIP_TRAILING_WHITESPACE)
\r
117 # Typical output in CMAKE_OPENCV_GCC_VERSION_FULL: "c+//0 (whatever) 4.2.3 (...)"
\r
118 # Look for the version number
\r
119 string(REGEX MATCH "[0-9].[0-9].[0-9]" CMAKE_GCC_REGEX_VERSION "${CMAKE_OPENCV_GCC_VERSION_FULL}")
\r
121 # Split the three parts:
\r
122 string(REGEX MATCHALL "[0-9]" CMAKE_OPENCV_GCC_VERSIONS "${CMAKE_GCC_REGEX_VERSION}")
\r
124 list(GET CMAKE_OPENCV_GCC_VERSIONS 0 CMAKE_OPENCV_GCC_VERSION_MAJOR)
\r
125 list(GET CMAKE_OPENCV_GCC_VERSIONS 1 CMAKE_OPENCV_GCC_VERSION_MINOR)
\r
127 set(CMAKE_OPENCV_GCC_VERSION ${CMAKE_OPENCV_GCC_VERSION_MAJOR}${CMAKE_OPENCV_GCC_VERSION_MINOR})
\r
128 message(STATUS "Detected version of GNU GCC: ${CMAKE_OPENCV_GCC_VERSION}")
\r
131 # ----------------------------------------------------------------------------
\r
132 # CHECK FOR SYSTEM LIBRARIES, OPTIONS, ETC..
\r
133 # ----------------------------------------------------------------------------
\r
135 # Build/install (or not) some apps:
\r
136 # ===================================================
\r
137 set(BUILD_EXAMPLES OFF CACHE BOOL "Build all examples")
\r
138 set(INSTALL_C_EXAMPLES OFF CACHE BOOL "Install C examples")
\r
139 set(INSTALL_PYTHON_EXAMPLES OFF CACHE BOOL "Install Python examples")
\r
140 set(INSTALL_OCTAVE_EXAMPLES OFF CACHE BOOL "Install Octave examples")
\r
143 # ===================================================
\r
144 set(BUILD_TESTS ON CACHE BOOL "Build tests")
\r
146 # Build 3rdparty libraries under unix
\r
147 # ===================================================
\r
149 set(OPENCV_BUILD_3RDPARTY_LIBS TRUE CACHE BOOL "Build 3rd party libraries")
\r
151 set(OPENCV_BUILD_3RDPARTY_LIBS FALSE CACHE BOOL "Build 3rd party libraries")
\r
154 include(OpenCVPCHSupport.cmake REQUIRED)
\r
157 include(OpenCVFindPkgConfig.cmake OPTIONAL)
\r
158 include(CheckFunctionExists)
\r
159 include(CheckIncludeFile)
\r
162 # Default value for OPENMP:
\r
165 # ===================================================
\r
167 set(DEFAULT_ENABLE_OPENMP ON)
\r
169 set(DEFAULT_ENABLE_OPENMP OFF)
\r
172 set(ENABLE_OPENMP ${DEFAULT_ENABLE_OPENMP} CACHE BOOL "")
\r
174 if(CMAKE_COMPILER_IS_GNUCXX)
\r
175 set(ENABLE_PROFILING OFF CACHE BOOL "Enable profiling in the GCC compiler (Add flags: -g -pg)")
\r
176 set(USE_OMIT_FRAME_POINTER ON CACHE BOOL "Enable -fomit-frame-pointer for GCC")
\r
177 if(${CMAKE_SYSTEM_PROCESSOR} MATCHES arm*)
\r
178 # We can use only -O2 because the -O3 causes gcc crash
\r
179 set(USE_O2 ON CACHE BOOL "Enable -O2 for GCC")
\r
180 set(USE_FAST_MATH ON CACHE BOOL "Enable -ffast-math for GCC")
\r
182 if(${CMAKE_SYSTEM_PROCESSOR} MATCHES amd64*)
\r
183 set(USE_O3 ON CACHE BOOL "Enable -O3 for GCC")
\r
184 set(USE_FAST_MATH ON CACHE BOOL "Enable -ffast-math for GCC")
\r
185 set(USE_MMX ON CACHE BOOL "Enable MMX for GCC")
\r
186 set(USE_SSE ON CACHE BOOL "Enable SSE for GCC")
\r
187 set(USE_SSE2 ON CACHE BOOL "Enable SSE2 for GCC")
\r
188 set(USE_SSE3 ON CACHE BOOL "Enable SSE3 for GCC")
\r
190 if(${CMAKE_SYSTEM_PROCESSOR} MATCHES x86_64*)
\r
191 set(USE_O3 ON CACHE BOOL "Enable -O3 for GCC")
\r
192 set(USE_FAST_MATH ON CACHE BOOL "Enable -ffast-math for GCC")
\r
193 set(USE_MMX ON CACHE BOOL "Enable MMX for GCC")
\r
194 set(USE_SSE ON CACHE BOOL "Enable SSE for GCC")
\r
195 set(USE_SSE2 ON CACHE BOOL "Enable SSE2 for GCC")
\r
196 set(USE_SSE3 ON CACHE BOOL "Enable SSE3 for GCC")
\r
198 if(${CMAKE_SYSTEM_PROCESSOR} MATCHES powerpc*)
\r
199 set(USE_O3 ON CACHE BOOL "Enable -O3 for GCC")
\r
200 set(USE_POWERPC ON CACHE BOOL "Enable PowerPC for GCC")
\r
202 if(${CMAKE_SYSTEM_PROCESSOR} MATCHES i686*)
\r
203 set(USE_O3 ON CACHE BOOL "Enable -O3 for GCC")
\r
204 set(USE_FAST_MATH ON CACHE BOOL "Enable -ffast-math for GCC")
\r
205 set(USE_MMX ON CACHE BOOL "Enable MMX for GCC")
\r
206 set(USE_SSE OFF CACHE BOOL "Enable SSE for GCC")
\r
207 set(USE_SSE2 OFF CACHE BOOL "Enable SSE2 for GCC")
\r
208 set(USE_SSE3 OFF CACHE BOOL "Enable SSE3 for GCC")
\r
209 # SSE/SSE2 might probably be not available for some old AMD or VIA processors
\r
211 if(${CMAKE_SYSTEM_PROCESSOR} MATCHES x86)
\r
212 set(USE_O3 ON CACHE BOOL "Enable -O3 for GCC")
\r
213 set(USE_FAST_MATH ON CACHE BOOL "Enable -ffast-math for GCC")
\r
214 set(USE_MMX ON CACHE BOOL "Enable MMX for GCC")
\r
215 set(USE_SSE OFF CACHE BOOL "Enable SSE for GCC")
\r
216 set(USE_SSE2 OFF CACHE BOOL "Enable SSE2 for GCC")
\r
217 set(USE_SSE3 OFF CACHE BOOL "Enable SSE3 for GCC")
\r
218 # SSE/SSE2 might probably be not available for some old AMD or VIA processors
\r
222 # allow fine grained control over which libraries not to link, even if
\r
223 # they are available on the system
\r
224 # ====================================================================
\r
226 set(WITH_PNG ON CACHE BOOL "Include PNG support")
\r
227 set(WITH_JPEG ON CACHE BOOL "Include JPEG support")
\r
228 set(WITH_JASPER ON CACHE BOOL "Include JPEG2K support")
\r
229 set(WITH_TIFF ON CACHE BOOL "Include TIFF support")
\r
230 set(WITH_FFMPEG ON CACHE BOOL "Include FFMPEG support")
\r
231 set(WITH_UNICAP ON CACHE BOOL "Include Unicap support")
\r
232 set(WITH_GTK ON CACHE BOOL "Include GTK support")
\r
233 set(WITH_GSTREAMER ON CACHE BOOL "Include Gstreamer support")
\r
234 set(WITH_1394 ON CACHE BOOL "Include IEEE1394 support")
\r
235 set(WITH_V4L ON CACHE BOOL "Include Video 4 Linux support")
\r
236 set(WITH_XINE ON CACHE BOOL "Include Xine support")
\r
239 # ===================================================
\r
240 # Macros that checks if module have been installed.
\r
241 # After it adds module to build and define
\r
242 # constants passed as second arg
\r
243 # ===================================================
\r
245 macro(CHECK_MODULE module_name define)
\r
247 if(PKG_CONFIG_FOUND)
\r
248 set(ALIAS ALIASOF_${module_name})
\r
249 set(ALIAS_FOUND ${ALIAS}_FOUND)
\r
250 set(ALIAS_INCLUDE_DIRS ${ALIAS}_INCLUDE_DIRS)
\r
251 set(ALIAS_LIBRARY_DIRS ${ALIAS}_LIBRARY_DIRS)
\r
252 set(ALIAS_LIBRARIES ${ALIAS}_LIBRARIES)
\r
254 PKG_CHECK_MODULES(${ALIAS} ${module_name})
\r
256 if (${ALIAS_FOUND})
\r
258 foreach(P "${ALIAS_INCLUDE_DIRS}")
\r
260 list(APPEND HIGHGUI_INCLUDE_DIRS ${${P}})
\r
264 foreach(P "${ALIAS_LIBRARY_DIRS}")
\r
266 list(APPEND HIGHGUI_LIBRARY_DIRS ${${P}})
\r
270 list(APPEND HIGHGUI_LIBRARIES ${${ALIAS_LIBRARIES}})
\r
278 CHECK_MODULE(gtk+-2.0 HAVE_GTK)
\r
279 CHECK_MODULE(gthread-2.0 HAVE_GTHREAD)
\r
281 set(HAVE_GTK FALSE)
\r
282 set(HAVE_GTHREAD FALSE)
\r
285 CHECK_MODULE(gstreamer-base-0.10 HAVE_GSTREAMER)
\r
287 set(HAVE_GSTREAMER FALSE)
\r
292 CHECK_MODULE(libunicap HAVE_UNICAP_)
\r
293 CHECK_MODULE(libucil HAVE_UNICAP_UCIL)
\r
294 if(HAVE_UNICAP_ AND HAVE_UNICAP_UCIL)
\r
298 set(HAVE_UNICAP FALSE)
\r
302 CHECK_MODULE(libavcodec HAVE_FFMPEG_CODEC)
\r
303 CHECK_MODULE(libavformat HAVE_FFMPEG_FORMAT)
\r
304 CHECK_MODULE(libavutil HAVE_FFMPEG_UTIL)
\r
305 CHECK_MODULE(libswscale HAVE_FFMPEG_SWSCALE)
\r
306 CHECK_INCLUDE_FILE(libavformat/avformat.h HAVE_GENTOO_FFMPEG)
\r
307 if(NOT HAVE_GENTOO_FFMPEG)
\r
308 if(EXISTS /usr/include/ffmpeg/libavformat/avformat.h)
\r
309 set(HAVE_GENTOO_FFMPEG 1)
\r
312 if(HAVE_FFMPEG_CODEC AND HAVE_FFMPEG_FORMAT AND HAVE_FFMPEG_UTIL)
\r
316 set(HAVE_FFMPEG FALSE)
\r
320 CHECK_MODULE(libdc1394-2 HAVE_DC1394_2)
\r
321 if(NOT HAVE_DC1394_2)
\r
322 CHECK_MODULE(libdc1394 HAVE_DC1394)
\r
325 set(HAVE_DC1394_2 FALSE)
\r
326 set(HAVE_DC1394 FALSE)
\r
330 CHECK_INCLUDE_FILE(alloca.h HAVE_ALLOCA_H)
\r
331 CHECK_FUNCTION_EXISTS(alloca HAVE_ALLOCA)
\r
332 CHECK_INCLUDE_FILE(unistd.h HAVE_UNISTD_H)
\r
333 CHECK_INCLUDE_FILE(pthread.h HAVE_LIBPTHREAD)
\r
336 CHECK_MODULE(libxine HAVE_XINE)
\r
338 set(HAVE_XINE FALSE)
\r
341 CHECK_MODULE(libv4l1 HAVE_LIBV4L)
\r
342 CHECK_INCLUDE_FILE(linux/videodev.h HAVE_CAMV4L)
\r
343 CHECK_INCLUDE_FILE(linux/videodev2.h HAVE_CAMV4L2)
\r
345 set(HAVE_LIBV4L FALSE)
\r
346 set(HAVE_CAMV4L FALSE)
\r
347 set(HAVE_CAMV4L2 FALSE)
\r
350 if(NOT OPENCV_BUILD_3RDPARTY_LIBS)
\r
354 CHECK_INCLUDE_FILE(${PNG_PNG_INCLUDE_DIR}/png.h HAVE_PNG_H)
\r
355 CHECK_INCLUDE_FILE(${PNG_PNG_INCLUDE_DIR}/libpng/png.h HAVE_LIBPNG_PNG_H)
\r
358 set(PNG_FOUND FALSE)
\r
363 set(TIFF_FOUND FALSE)
\r
366 include(FindJasper)
\r
368 set(JASPER_FOUND FALSE)
\r
373 set(JPEG_FOUND FALSE)
\r
377 if(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
\r
378 set(OPENCV_LINKER_LIBS m pthread)
\r
380 set(OPENCV_LINKER_LIBS dl m pthread rt)
\r
383 add_definitions(-DHAVE_ALLOCA -DHAVE_ALLOCA_H -DHAVE_LIBPTHREAD -DHAVE_UNISTD_H)
\r
387 set(BUILD_PYTHON_SUPPORT OFF CACHE BOOL "Build with Python support")
\r
388 set(BUILD_OCTAVE_SUPPORT OFF CACHE BOOL "Build with Octave support")
\r
393 find_package(PythonInterp)
\r
394 find_package(PythonLibs)
\r
396 # cmake 2.4 (at least on Ubuntu 8.04 (hardy)) don't define PYTHONLIBS_FOUND
\r
397 if(NOT PYTHONLIBS_FOUND AND PYTHON_INCLUDE_PATH)
\r
398 set(PYTHONLIBS_FOUND ON)
\r
399 endif(NOT PYTHONLIBS_FOUND AND PYTHON_INCLUDE_PATH)
\r
401 # Build with python if installed:
\r
402 # ===================================================
\r
403 if(PYTHONLIBS_FOUND AND BUILD_PYTHON_SUPPORT)
\r
404 execute_process(COMMAND ${PYTHON_EXECUTABLE} --version
\r
405 ERROR_VARIABLE PYTHON_VERSION_FULL
\r
406 OUTPUT_STRIP_TRAILING_WHITESPACE)
\r
408 string(REGEX MATCH "[0-9].[0-9]" PYTHON_VERSION_MAJOR_MINOR "${PYTHON_VERSION_FULL}")
\r
410 set(PYTHON_PLUGIN_INSTALL_PATH lib/python${PYTHON_VERSION_MAJOR_MINOR}/site-packages/opencv)
\r
413 get_filename_component(PYTHON_PATH "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${PYTHON_VERSION_MAJOR_MINOR}\\InstallPath]" ABSOLUTE CACHE)
\r
414 set(PYTHON_PLUGIN_INSTALL_PATH "${PYTHON_PATH}/Lib/site-packages/opencv")
\r
423 foreach(v "6.1" "6.0" "5.3" "5.2" "5.1")
\r
425 find_path(IPP_PATH "ippi-${v}.dll"
\r
426 PATHS ${CMAKE_PROGRAM_PATH} ${CMAKE_SYSTEM_PROGRAM_PATH}
\r
427 DOC "The path to IPP DLLs")
\r
429 file(GLOB IPP_HDRS "${IPP_PATH}/../include")
\r
431 set(IPP_FOUND TRUE)
\r
437 message(STATUS "IPP detected: ${IPP_FOUND}")
\r
438 set(USE_IPP ${IPP_FOUND} CACHE BOOL "Use IPP when available")
\r
440 if(IPP_FOUND AND USE_IPP)
\r
441 add_definitions(-DHAVE_IPP)
\r
442 include_directories("${IPP_PATH}/../include")
\r
443 link_directories("${IPP_PATH}/../lib")
\r
444 set(IPP_LIBS ippsmerged.lib ippsemerged.lib ippimerged.lib ippiemerged.lib
\r
445 ippvmmerged.lib ippvmemerged.lib ippccmerged.lib ippccemerged.lib
\r
446 ippcvmerged.lib ippcvemerged.lib ippcorel.lib)
\r
451 set(BUILD_LATEX_DOCS OFF CACHE BOOL "Build LaTeX OpenCV Documentation")
\r
453 # ----------------------------------------------------------------------------
\r
454 # UPDATE CONFIG FILES & SCRIPTS:
\r
456 # CONFIGURE_FILE(InputFile OutputFile [COPYONLY] [ESCAPE_QUOTES] [@ONLY])
\r
457 # If @ONLY is specified, only variables of the form @VAR@ will be
\r
458 # replaces and ${VAR} will be ignored.
\r
460 # A directory will be created for each platform so the "cvconfig.h" file is
\r
461 # not overwritten if cmake generates code in the same path.
\r
462 # ----------------------------------------------------------------------------
\r
463 add_definitions(-DHAVE_CONFIG_H)
\r
465 set(OPENCV_CONFIG_FILE_INCLUDE_DIR "${CMAKE_BINARY_DIR}/" CACHE PATH "Where to create the platform-dependant cvconfig.h")
\r
467 message(STATUS "Parsing 'cvconfig.h.cmake'")
\r
468 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cvconfig.h.cmake" "${OPENCV_CONFIG_FILE_INCLUDE_DIR}/cvconfig.h")
\r
470 # ---------------------------------------------------------------------------
\r
471 # The C+//0 include & link directories:
\r
472 # ---------------------------------------------------------------------------
\r
473 include_directories("."
\r
474 "${OPENCV_CONFIG_FILE_INCLUDE_DIR}"
\r
475 "${CMAKE_CURRENT_SOURCE_DIR}/include"
\r
476 "${CMAKE_CURRENT_SOURCE_DIR}/include/opencv"
\r
479 # ----------------------------------------------------------------------------
\r
480 # Set the maximum level of warnings:
\r
481 # ----------------------------------------------------------------------------
\r
482 # Should be set to true for development
\r
483 set(OPENCV_WARNINGS_ARE_ERRORS OFF CACHE BOOL "Treat warnings as errors")
\r
485 # Whole program optimization?
\r
486 set(OPENCV_WHOLE_PROGRAM_OPTIMIZATION OFF CACHE BOOL "Flags for whole program optimization.")
\r
488 set(EXTRA_C_FLAGS "")
\r
489 set(EXTRA_C_FLAGS_RELEASE "")
\r
490 set(EXTRA_C_FLAGS_DEBUG "")
\r
491 set(EXTRA_EXE_LINKER_FLAGS "")
\r
492 set(EXTRA_EXE_LINKER_FLAGS_RELEASE "")
\r
493 set(EXTRA_EXE_LINKER_FLAGS_DEBUG "")
\r
496 set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS")
\r
497 # 64-bit portability warnings, in MSVC8
\r
499 set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} /Wp64")
\r
502 set(EXTRA_EXE_LINKER_FLAGS_RELEASE "${EXTRA_EXE_LINKER_FLAGS_RELEASE} /debug")
\r
504 # Whole program optimization
\r
505 if(OPENCV_WHOLE_PROGRAM_OPTIMIZATION AND MSVC_VERSION GREATER 1300)
\r
506 set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} /GL")
\r
507 set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG")
\r
508 set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS_RELEASE} /LTCG")
\r
512 set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} /openmp")
\r
515 # Remove unreferenced functions: function level linking
\r
516 set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} /Gy")
\r
517 set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} /Zi")
\r
520 if(CMAKE_COMPILER_IS_GNUCXX)
\r
521 # High level of warnings.
\r
522 set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} -Wall")
\r
524 # The -Wno-long-long is required in 64bit systems when including sytem headers.
\r
525 if(${CMAKE_SYSTEM_PROCESSOR} MATCHES x86_64*)
\r
526 set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} -Wno-long-long")
\r
528 if(${CMAKE_SYSTEM_PROCESSOR} MATCHES amd64*)
\r
529 set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} -Wno-long-long")
\r
532 # We need pthread's
\r
534 set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} -pthread")
\r
537 if(OPENCV_WARNINGS_ARE_ERRORS)
\r
538 set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} -Werror")
\r
541 # Whole program optimization
\r
542 if(OPENCV_WHOLE_PROGRAM_OPTIMIZATION)
\r
543 set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -fwhole-program --combine")
\r
546 # Other optimizations
\r
547 if(USE_OMIT_FRAME_POINTER)
\r
548 set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -fomit-frame-pointer")
\r
551 set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -O2")
\r
554 set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -O3")
\r
557 set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -ffast-math")
\r
560 set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -mcpu=G3 -mtune=G5")
\r
563 set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -mmmx")
\r
565 # SSE should be disabled under MingW because it generates compiler errors
\r
567 set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -msse")
\r
569 # SSE2 should be disabled under MingW because it generates compiler errors
\r
571 set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -msse2")
\r
573 # SSE3 should be disabled under MingW because it generates compiler errors
\r
574 if(USE_SSE3 AND NOT MINGW)
\r
575 set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -msse3")
\r
579 if(ENABLE_PROFILING)
\r
580 set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -pg -g")
\r
582 # Remove unreferenced functions: function level linking
\r
584 set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} -ffunction-sections")
\r
590 set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} -D_GLIBCXX_PARALLEL -fopenmp")
\r
593 set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -DNDEBUG")
\r
594 set(EXTRA_C_FLAGS_DEBUG "${EXTRA_C_FLAGS_DEBUG} -O0 -DDEBUG -D_DEBUG")
\r
598 # Add user supplied extra options (optimization, etc...)
\r
599 # ==========================================================
\r
600 set(OPENCV_EXTRA_C_FLAGS ${EXTRA_C_FLAGS} CACHE STRING "Extra compiler options")
\r
601 set(OPENCV_EXTRA_C_FLAGS_RELEASE ${EXTRA_C_FLAGS_RELEASE} CACHE STRING "Extra compiler options for Release build")
\r
602 set(OPENCV_EXTRA_C_FLAGS_DEBUG ${EXTRA_C_FLAGS_DEBUG} CACHE STRING "Extra compiler options for Debug build")
\r
603 set(OPENCV_EXTRA_EXE_LINKER_FLAGS ${EXTRA_EXE_LINKER_FLAGS} CACHE STRING "Extra linker flags" FORCE)
\r
604 set(OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE ${EXTRA_EXE_LINKER_FLAGS_RELEASE} CACHE STRING "Extra linker flags for Release build" FORCE)
\r
605 set(OPENCV_EXTRA_EXE_LINKER_FLAGS_DEBUG ${EXTRA_EXE_LINKER_FLAGS_DEBUG} CACHE STRING "Extra linker flags for Debug build" FORCE)
\r
607 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OPENCV_EXTRA_C_FLAGS}")
\r
608 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OPENCV_EXTRA_C_FLAGS}")
\r
609 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${OPENCV_EXTRA_C_FLAGS_RELEASE}")
\r
610 set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${OPENCV_EXTRA_C_FLAGS_RELEASE}")
\r
611 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${OPENCV_EXTRA_C_FLAGS_DEBUG}")
\r
612 set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${OPENCV_EXTRA_C_FLAGS_DEBUG}")
\r
613 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OPENCV_EXTRA_EXE_LINKER_FLAGS}")
\r
614 set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} ${OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE}")
\r
615 set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} ${OPENCV_EXTRA_EXE_LINKER_FLAGS_DEBUG}")
\r
617 # In case of Makefiles if the user does not setup CMAKE_BUILD_TYPE, assume it's Release:
\r
618 if (${CMAKE_GENERATOR} MATCHES ".*Makefiles")
\r
619 if("${CMAKE_BUILD_TYPE}" STREQUAL "")
\r
620 set(CMAKE_BUILD_TYPE Release)
\r
624 if (WIN32 AND MSVC)
\r
625 # avoid warnings from MSVC about overriding the /W* option
\r
626 # we replace /W3 with /W4 only for C++ files,
\r
627 # since all the 3rd-party libraries OpenCV uses are in C,
\r
628 # and we do not care about their warnings.
\r
629 string(REPLACE "/W3" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
\r
630 string(REPLACE "/W3" "/W4" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
\r
631 string(REPLACE "/W3" "/W4" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
\r
634 if("${CMAKE_CONFIGURE_LDFLAGS}")
\r
635 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_CONFIGURE_LDFLAGS}")
\r
636 endif("${CMAKE_CONFIGURE_LDFLAGS}")
\r
638 # ----------------------------------------------------------------------------
\r
639 # PROCESS SUBDIRECTORIES:
\r
640 # ----------------------------------------------------------------------------
\r
641 # Save libs and executables in the same place
\r
642 set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib CACHE PATH "Output directory for libraries" )
\r
643 set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin CACHE PATH "Output directory for applications" )
\r
646 set(OPENCV_DOC_INSTALL_PATH doc)
\r
648 set(OPENCV_DOC_INSTALL_PATH share/opencv/doc)
\r
651 # --------------------------------------------------------------------------------------------
\r
652 # Installation for CMake Module: OpenCVConfig.cmake
\r
653 # Part 1/3: ${BIN_DIR}/OpenCVConfig.cmake -> For use *without* "make install"
\r
654 # Part 2/3: ${BIN_DIR}/unix-install/OpenCVConfig.cmake -> For use with "make install"
\r
655 # Part 3/3: ${BIN_DIR}/win-install/OpenCVConfig.cmake -> For use within binary installers/packages
\r
656 # -------------------------------------------------------------------------------------------
\r
658 # -------------------------------------------------------------------------------------------
\r
659 # Part 1/3: ${BIN_DIR}/OpenCVConfig.cmake -> For use *without* "make install"
\r
660 # -------------------------------------------------------------------------------------------
\r
662 # Name of libraries is: libcv.so.1.1.0, etc...
\r
663 # OPENCV_DLLVERSION must be set to "110", etc..
\r
664 # Already done above.
\r
666 # Set CMAKE_INCLUDE_DIRS_CONFIGCMAKE to the list of include directories:
\r
667 set(CMAKE_INCLUDE_DIRS_CONFIGCMAKE "\"${OPENCV_CONFIG_FILE_INCLUDE_DIR}\" \"${CMAKE_CURRENT_SOURCE_DIR}/include\" \"${CMAKE_CURRENT_SOURCE_DIR}/include/opencv\"")
\r
669 set(CMAKE_LIB_DIRS_CONFIGCMAKE "${LIBRARY_OUTPUT_PATH}")
\r
671 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/OpenCVConfig.cmake.in" "${CMAKE_BINARY_DIR}/OpenCVConfig.cmake" IMMEDIATE @ONLY)
\r
673 # --------------------------------------------------------------------------------------------
\r
674 # Part 2/3: ${BIN_DIR}/unix-install/OpenCVConfig.cmake -> For use *with* "make install"
\r
675 # -------------------------------------------------------------------------------------------
\r
676 # Set CMAKE_INCLUDE_DIRS_CONFIGCMAKE to the list of include directories:
\r
678 set(CMAKE_INCLUDE_DIRS_CONFIGCMAKE "${CMAKE_INSTALL_PREFIX}/include/opencv")
\r
679 set(CMAKE_LIB_DIRS_CONFIGCMAKE "${CMAKE_INSTALL_PREFIX}/lib")
\r
681 #exec_program(${CMAKE_COMMAND} ARGS "-E make_directory \"${CMAKE_BINARY_DIR}/unix-install/\"")
\r
682 exec_program(mkdir ARGS "-p \"${CMAKE_BINARY_DIR}/unix-install/\"")
\r
683 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/OpenCVConfig.cmake.in" "${CMAKE_BINARY_DIR}/unix-install/OpenCVConfig.cmake" IMMEDIATE @ONLY)
\r
686 # For a command "FIND_PACKAGE(FOO)", CMake will look at the directory /usr/share|lib/FOO/FOOConfig.cmake, so:
\r
687 install(FILES ${CMAKE_BINARY_DIR}/unix-install/OpenCVConfig.cmake DESTINATION ${CMAKE_INSTALL_PREFIX}/share/opencv/)
\r
690 # --------------------------------------------------------------------------------------------
\r
691 # Part 3/3: ${BIN_DIR}/win-install/OpenCVConfig.cmake -> For use within binary installers/packages
\r
692 # -------------------------------------------------------------------------------------------
\r
694 # Set CMAKE_INCLUDE_DIRS_CONFIGCMAKE to the list of include directories:
\r
696 # This will expand to, for example, <program files>/OpenCV 1.1.0/include
\r
697 set(CMAKE_INCLUDE_DIRS_CONFIGCMAKE "\"\${THIS_OPENCV_CONFIG_PATH}/include\" \"\${THIS_OPENCV_CONFIG_PATH}/include/opencv\"")
\r
699 # This will expand to, for example, <program files>/OpenCV 1.1.0/lib
\r
700 set(CMAKE_LIB_DIRS_CONFIGCMAKE "\"\${THIS_OPENCV_CONFIG_PATH}/lib\"")
\r
702 #exec_program(${CMAKE_COMMAND} ARGS "-E make_directory \"${CMAKE_BINARY_DIR}/win-install/\"")
\r
703 exec_program(mkdir ARGS "-p \"${CMAKE_BINARY_DIR}/win-install/\"")
\r
704 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/OpenCVConfig.cmake.in" "${CMAKE_BINARY_DIR}/win-install/OpenCVConfig.cmake" IMMEDIATE @ONLY)
\r
708 # --------------------------------------------------------------------------------------------
\r
709 # Part 2/2: ${BIN_DIR}/unix-install/opencv.pc -> For use *with* "make install"
\r
711 # exec_prefix=${prefix}
\r
712 # libdir=${exec_prefix}/lib
\r
713 # includedir=${prefix}/include/opencv
\r
714 # -------------------------------------------------------------------------------------------
\r
715 set(prefix ${CMAKE_INSTALL_PREFIX})
\r
716 set(exec_prefix "\${prefix}")
\r
717 set(libdir "\${exec_prefix}/lib")
\r
718 set(includedir "\${prefix}/include")
\r
719 set(VERSION ${OPENCV_VERSION})
\r
721 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/opencv.pc.cmake.in" "${CMAKE_BINARY_DIR}/unix-install/opencv.pc" @ONLY IMMEDIATE)
\r
724 install(FILES ${CMAKE_BINARY_DIR}/unix-install/opencv.pc DESTINATION lib/pkgconfig)
\r
728 # ----------------------------------------------------------------------------
\r
729 # Uninstall target, for "make uninstall"
\r
730 # ----------------------------------------------------------------------------
\r
732 "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"
\r
733 "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
\r
736 ADD_CUSTOM_TARGET(uninstall
\r
737 "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
\r
740 # Make sure the system libraries are also copied when doing an "INSTALL":
\r
741 # ----------------------------------------------------------------------------
\r
742 include(InstallRequiredSystemLibraries)
\r
744 # ----------------------------------------------------------------------------
\r
746 # ----------------------------------------------------------------------------
\r
748 set(BUILD_PACKAGE OFF CACHE BOOL "Build a installer with the SDK")
\r
754 ${CMAKE_BINARY_DIR}/.cpack/Package.cmake
\r
758 include(${CMAKE_BINARY_DIR}/.cpack/Package.cmake)
\r
760 set(root_files AUTHORS README ChangeLog COPYING INSTALL NEWS THANKS)
\r
762 file(GLOB root_src_files *.in *.sh *.cmake CMakeLists.txt)
\r
765 install(FILES ${root_files}
\r
766 DESTINATION ${OPENCV_DOC_INSTALL_PATH}
\r
769 install(FILES ${root_files}
\r
772 install(FILES ${root_src_files}
\r
775 # Add the "win-install/OpenCVConfig.cmake" file to the "main" install component
\r
777 "${CMAKE_BINARY_DIR}/win-install/OpenCVConfig.cmake"
\r
782 install(DIRECTORY data samples DESTINATION "." COMPONENT main PATTERN ".svn" EXCLUDE)
\r
783 install(DIRECTORY 3rdparty apps interfaces src tests DESTINATION "." COMPONENT src PATTERN ".svn" EXCLUDE)
\r
784 install(DIRECTORY doc/ DESTINATION doc COMPONENT src FILES_MATCHING PATTERN "*.tex")
\r
785 install(DIRECTORY doc/pics DESTINATION doc COMPONENT src PATTERN ".svn" EXCLUDE)
\r
786 install(DIRECTORY doc/plastex DESTINATION doc COMPONENT src PATTERN ".svn" EXCLUDE)
\r
791 #-----------------------------------
\r
793 #-----------------------------------
\r
794 add_subdirectory(src)
\r
795 add_subdirectory(apps)
\r
797 if(BUILD_LATEX_DOCS)
\r
798 include(OpenCVFindLATEX.cmake REQUIRED)
\r
800 if(PDFLATEX_COMPILER)
\r
801 message(STATUS "PDF LaTeX found!")
\r
805 add_subdirectory(doc)
\r
806 add_subdirectory(data)
\r
808 if(BUILD_EXAMPLES OR INSTALL_PYTHON_EXAMPLES OR INSTALL_OCTAVE_EXAMPLES)
\r
809 add_subdirectory(samples)
\r
814 add_subdirectory(tests)
\r
817 add_subdirectory(interfaces)
\r
818 add_subdirectory(3rdparty)
\r
821 # ----------------------------------------------------------------------------
\r
823 # ----------------------------------------------------------------------------
\r
825 message(STATUS "General configuration for opencv ${OPENCV_VERSION} =====================================")
\r
827 message(STATUS " Compiler: ${CMAKE_COMPILER}")
\r
828 message(STATUS " C++ flags (Release): ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE}")
\r
829 message(STATUS " C++ flags (Debug): ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG}")
\r
831 message(STATUS " Linker flags (Release): ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_RELEASE}")
\r
832 message(STATUS " Linker flags (Debug): ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_DEBUG}")
\r
834 message(STATUS " Linker flags (Release): ${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS_RELEASE}")
\r
835 message(STATUS " Linker flags (Debug): ${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS_DEBUG}")
\r
841 message(STATUS " GUI: ")
\r
842 message(STATUS " GTK+ 2.x: ${HAVE_GTK}")
\r
843 message(STATUS " GThread: ${HAVE_GTHREAD}")
\r
845 if(NOT OPENCV_BUILD_3RDPARTY_LIBS)
\r
846 message(STATUS " Image I/O: ")
\r
847 message(STATUS " JPEG: ${JPEG_FOUND}")
\r
848 message(STATUS " PNG: ${PNG_FOUND}")
\r
849 message(STATUS " TIFF: ${TIFF_FOUND}")
\r
850 message(STATUS " JASPER: ${JASPER_FOUND}")
\r
852 message(STATUS " Image I/O: ")
\r
853 message(STATUS " JPEG: build")
\r
854 message(STATUS " PNG: build")
\r
855 message(STATUS " TIFF: build")
\r
856 message(STATUS " JASPER: build")
\r
860 message(STATUS " Video I/O: ")
\r
861 message(STATUS " DC1394 1.x: ${HAVE_DC1394}")
\r
862 message(STATUS " DC1394 2.x: ${HAVE_DC1394_2}")
\r
863 message(STATUS " FFMPEG: ${HAVE_FFMPEG}")
\r
864 message(STATUS " codec: ${HAVE_FFMPEG_CODEC}")
\r
865 message(STATUS " format: ${HAVE_FFMPEG_FORMAT}")
\r
866 message(STATUS " util: ${HAVE_FFMPEG_UTIL}")
\r
867 message(STATUS " gentoo-style: ${HAVE_GENTOO_FFMPEG}")
\r
868 message(STATUS " GStreamer: ${HAVE_GSTREAMER}")
\r
869 message(STATUS " UniCap: ${HAVE_UNICAP}")
\r
871 message(STATUS " V4L/V4L2: Using libv4l")
\r
873 message(STATUS " V4L/V4L2: ${HAVE_CAMV4L}/${HAVE_CAMV4L2}")
\r
875 message(STATUS " Xine: ${HAVE_XINE}")
\r
878 message(STATUS " Interfaces: ")
\r
879 if(PYTHONLIBS_FOUND AND BUILD_PYTHON_SUPPORT)
\r
880 message(STATUS " Python: 1")
\r
882 message(STATUS " Python: 0")
\r
884 if(IPP_FOUND AND USE_IPP)
\r
885 message(STATUS " Use IPP: 1")
\r
887 message(STATUS " Use IPP: 0")
\r
889 if(BUILD_LATEX_DOCS AND PDFLATEX_COMPILER)
\r
890 message(STATUS " Build Documentation 1")
\r
892 message(STATUS " Build Documentation 0")
\r
895 message(STATUS " Install path: ${CMAKE_INSTALL_PREFIX}")
\r
897 message(STATUS " cvconfig.h is in: ${OPENCV_CONFIG_FILE_INCLUDE_DIR}")
\r
898 message(STATUS "-----------------------------------------------------------------")
\r
901 #----------------------------------------------------------------------------
\r
902 # Generate the OpenCVConfig.cmake file for unix
\r
903 # installation in CMAKE_INSTALL_PREFIX
\r
904 #----------------------------------------------------------------------------
\r