1 # ----------------------------------------------------------------------------
2 # Root CMake file for OpenCV
4 # From the off-tree build directory, invoke:
5 # $ cmake <PATH_TO_OPENCV_ROOT>
8 # - OCT-2008: Initial version <joseluisblancoc@gmail.com>
10 # ----------------------------------------------------------------------------
12 set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true)
14 # it _must_ go before PROJECT(OpenCV) in order to work
15 if (NOT CMAKE_INSTALL_PREFIX)
17 set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR} CACHE INTERNAL "" FORCE)
19 set(CMAKE_INSTALL_PREFIX "/usr" CACHE INTERNAL "" FORCE)
23 set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Configs" FORCE)
24 set(CMAKE_C_FLAGS_MINSIZEREL "" CACHE INTERNAL "" FORCE)
25 set(CMAKE_C_FLAGS_RELWITHDEBINFO "" CACHE INTERNAL "" FORCE)
26 set(CMAKE_CXX_FLAGS_MINSIZEREL "" CACHE INTERNAL "" FORCE)
27 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "" CACHE INTERNAL "" FORCE)
28 set(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "" CACHE INTERNAL "" FORCE)
29 set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "" CACHE INTERNAL "" FORCE)
30 set(CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL "" CACHE INTERNAL "" FORCE)
31 set(CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO "" CACHE INTERNAL "" FORCE)
32 set(CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL "" CACHE INTERNAL "" FORCE)
33 set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "" CACHE INTERNAL "" FORCE)
37 cmake_minimum_required(VERSION 2.4)
40 set(CMAKE_USE_RELATIVE_PATHS ON CACHE INTERNAL "" FORCE)
43 # --------------------------------------------------------------
44 # Indicate CMake 2.7 and above that we don't want to mix relative
45 # and absolute paths in linker lib lists.
46 # Run "cmake --help-policy CMP0003" for more information.
47 # --------------------------------------------------------------
48 if(COMMAND cmake_policy)
49 cmake_policy(SET CMP0003 NEW)
52 # ----------------------------------------------------------------------------
53 # Current version number:
54 # ----------------------------------------------------------------------------
55 set(OPENCV_VERSION "1.1.0")
57 string(REGEX MATCHALL "[0-9]" OPENCV_VERSION_PARTS "${OPENCV_VERSION}")
59 list(GET OPENCV_VERSION_PARTS 0 OPENCV_VERSION_MAJOR)
60 list(GET OPENCV_VERSION_PARTS 1 OPENCV_VERSION_MINOR)
61 list(GET OPENCV_VERSION_PARTS 2 OPENCV_VERSION_PATCH)
63 set(OPENCV_SOVERSION "${OPENCV_VERSION_MAJOR}.${OPENCV_VERSION_MINOR}")
67 set(OPENCV_DLLVERSION "${OPENCV_VERSION_MAJOR}${OPENCV_VERSION_MINOR}${OPENCV_VERSION_PATCH}")
68 set(OPENCV_DEBUG_POSTFIX d)
71 #set(OPENCV_DLLVERSION "${OPENCV_VERSION_MAJOR}${OPENCV_VERSION_MINOR}${OPENCV_VERSION_PATCH}")
72 set(OPENCV_DLLVERSION "")
73 set(OPENCV_DEBUG_POSTFIX)
77 # ----------------------------------------------------------------------------
78 # Variables for cvconfig.h.cmake
79 # ----------------------------------------------------------------------------
81 set(PACKAGE_BUGREPORT "opencvlibrary-devel@lists.sourceforge.net")
82 set(PACKAGE_NAME "opencv")
83 set(PACKAGE_STRING "${PACKAGE} ${OPENCV_VERSION}")
84 set(PACKAGE_TARNAME "${PACKAGE}")
85 set(PACKAGE_VERSION "${OPENCV_VERSION}")
87 # ----------------------------------------------------------------------------
88 # Autodetect if we are in a SVN repository
89 # ----------------------------------------------------------------------------
90 find_program(SVNVERSION_PATH svnversion)
91 mark_as_advanced(force SVNVERSION_PATH)
93 message(STATUS "Extracting svn version, please wait...")
94 execute_process(COMMAND ${SVNVERSION_PATH} -n ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE SVNVERSION_RESULT)
96 if(SVNVERSION_RESULT MATCHES "exported")
97 # This is NOT a svn repository:
98 set(OPENCV_SVNVERSION "")
100 set(OPENCV_SVNVERSION " svn:${SVNVERSION_RESULT}")
103 message(STATUS "SVNVERSION: ${OPENCV_SVNVERSION}")
105 # We don't have svnversion:
106 set(OPENCV_SVNVERSION "")
109 # ----------------------------------------------------------------------------
110 # Detect GNU version:
111 # ----------------------------------------------------------------------------
112 if(CMAKE_COMPILER_IS_GNUCXX)
113 execute_process(COMMAND ${CMAKE_CXX_COMPILER} --version
114 OUTPUT_VARIABLE CMAKE_OPENCV_GCC_VERSION_FULL
115 OUTPUT_STRIP_TRAILING_WHITESPACE)
117 # Typical output in CMAKE_OPENCV_GCC_VERSION_FULL: "c+//0 (whatever) 4.2.3 (...)"
118 # Look for the version number
119 string(REGEX MATCH "[0-9].[0-9].[0-9]" CMAKE_GCC_REGEX_VERSION "${CMAKE_OPENCV_GCC_VERSION_FULL}")
121 # Split the three parts:
122 string(REGEX MATCHALL "[0-9]" CMAKE_OPENCV_GCC_VERSIONS "${CMAKE_GCC_REGEX_VERSION}")
124 list(GET CMAKE_OPENCV_GCC_VERSIONS 0 CMAKE_OPENCV_GCC_VERSION_MAJOR)
125 list(GET CMAKE_OPENCV_GCC_VERSIONS 1 CMAKE_OPENCV_GCC_VERSION_MINOR)
127 set(CMAKE_OPENCV_GCC_VERSION ${CMAKE_OPENCV_GCC_VERSION_MAJOR}${CMAKE_OPENCV_GCC_VERSION_MINOR})
128 message(STATUS "Detected version of GNU GCC: ${CMAKE_OPENCV_GCC_VERSION}")
131 # ----------------------------------------------------------------------------
132 # CHECK FOR SYSTEM LIBRARIES, OPTIONS, ETC..
133 # ----------------------------------------------------------------------------
135 # Build/install (or not) some apps:
136 # ===================================================
137 set(BUILD_EXAMPLES OFF CACHE BOOL "Build all examples")
138 set(INSTALL_C_EXAMPLES OFF CACHE BOOL "Install C examples")
139 set(INSTALL_PYTHON_EXAMPLES OFF CACHE BOOL "Install Python examples")
140 set(INSTALL_OCTAVE_EXAMPLES OFF CACHE BOOL "Install Octave examples")
143 # ===================================================
144 set(BUILD_TESTS ON CACHE BOOL "Build tests")
146 # Build 3rdparty libraries under unix
147 # ===================================================
149 set(OPENCV_BUILD_3RDPARTY_LIBS TRUE CACHE BOOL "Build 3rd party libraries")
151 set(OPENCV_BUILD_3RDPARTY_LIBS FALSE CACHE BOOL "Build 3rd party libraries")
155 include(OpenCVFindPkgConfig.cmake OPTIONAL)
156 include(CheckFunctionExists)
157 include(CheckIncludeFile)
160 set(OPENCV_ENABLE_OPENMP OFF CACHE BOOL "")
162 if(CMAKE_COMPILER_IS_GNUCXX)
163 set(OPENCV_ENABLE_PROFILING OFF CACHE BOOL "Enable profiling in the GCC compiler (Add flags: -g -pg)")
164 set(OPENCV_USE_OMIT_FRAME_POINTER ON CACHE BOOL "Enable -fomit-frame-pointer for GCC")
165 if(${CMAKE_SYSTEM_PROCESSOR} MATCHES arm*)
166 # We can use only -O2 because the -O3 causes gcc crash
167 set(OPENCV_USE_O2 ON CACHE BOOL "Enable -O2 for GCC")
168 set(OPENCV_USE_FAST_MATH ON CACHE BOOL "Enable -ffast-math for GCC")
170 if(${CMAKE_SYSTEM_PROCESSOR} MATCHES amd64*)
171 set(OPENCV_USE_O3 ON CACHE BOOL "Enable -O3 for GCC")
172 set(OPENCV_USE_FAST_MATH ON CACHE BOOL "Enable -ffast-math for GCC")
173 set(OPENCV_USE_MMX ON CACHE BOOL "Enable MMX for GCC")
174 set(OPENCV_USE_SSE ON CACHE BOOL "Enable SSE for GCC")
175 set(OPENCV_USE_SSE2 ON CACHE BOOL "Enable SSE2 for GCC")
176 set(OPENCV_USE_SSE3 ON CACHE BOOL "Enable SSE3 for GCC")
178 if(${CMAKE_SYSTEM_PROCESSOR} MATCHES x86_64*)
179 set(OPENCV_USE_O3 ON CACHE BOOL "Enable -O3 for GCC")
180 set(OPENCV_USE_FAST_MATH ON CACHE BOOL "Enable -ffast-math for GCC")
181 set(OPENCV_USE_MMX ON CACHE BOOL "Enable MMX for GCC")
182 set(OPENCV_USE_SSE ON CACHE BOOL "Enable SSE for GCC")
183 set(OPENCV_USE_SSE2 ON CACHE BOOL "Enable SSE2 for GCC")
184 set(OPENCV_USE_SSE3 ON CACHE BOOL "Enable SSE3 for GCC")
186 if(${CMAKE_SYSTEM_PROCESSOR} MATCHES powerpc*)
187 set(OPENCV_USE_O3 ON CACHE BOOL "Enable -O3 for GCC")
188 set(OPENCV_USE_POWERPC ON CACHE BOOL "Enable PowerPC for GCC")
190 if(${CMAKE_SYSTEM_PROCESSOR} MATCHES i686*)
191 set(OPENCV_USE_O3 ON CACHE BOOL "Enable -O3 for GCC")
192 set(OPENCV_USE_FAST_MATH ON CACHE BOOL "Enable -ffast-math for GCC")
193 set(OPENCV_USE_MMX ON CACHE BOOL "Enable MMX for GCC")
194 set(OPENCV_USE_SSE OFF CACHE BOOL "Enable SSE for GCC")
195 set(OPENCV_USE_SSE2 OFF CACHE BOOL "Enable SSE2 for GCC")
196 set(OPENCV_USE_SSE3 OFF CACHE BOOL "Enable SSE3 for GCC")
197 # SSE/SSE2 might probably be not available for some old AMD or VIA processors
199 if(${CMAKE_SYSTEM_PROCESSOR} MATCHES x86)
200 set(OPENCV_USE_O3 ON CACHE BOOL "Enable -O3 for GCC")
201 set(OPENCV_USE_FAST_MATH ON CACHE BOOL "Enable -ffast-math for GCC")
202 set(OPENCV_USE_MMX ON CACHE BOOL "Enable MMX for GCC")
203 set(OPENCV_USE_SSE OFF CACHE BOOL "Enable SSE for GCC")
204 set(OPENCV_USE_SSE2 OFF CACHE BOOL "Enable SSE2 for GCC")
205 set(OPENCV_USE_SSE3 OFF CACHE BOOL "Enable SSE3 for GCC")
206 # SSE/SSE2 might probably be not available for some old AMD or VIA processors
210 # ===================================================
211 # Macros that checks if module have been installed.
212 # After it adds module to build and define
213 # constants passed as second arg
214 # ===================================================
216 macro(CHECK_MODULE module_name define)
219 set(ALIAS ALIASOF_${module_name})
220 set(ALIAS_FOUND ${ALIAS}_FOUND)
221 set(ALIAS_INCLUDE_DIRS ${ALIAS}_INCLUDE_DIRS)
222 set(ALIAS_LIBRARY_DIRS ${ALIAS}_LIBRARY_DIRS)
223 set(ALIAS_LIBRARIES ${ALIAS}_LIBRARIES)
225 PKG_CHECK_MODULES(${ALIAS} ${module_name})
229 foreach(P "${ALIAS_INCLUDE_DIRS}")
230 list(APPEND HIGHGUI_INCLUDE_DIRS ${${P}})
233 foreach(P "${ALIAS_LIBRARY_DIRS}")
235 list(APPEND HIGHGUI_LIBRARY_DIRS ${${P}})
239 list(APPEND HIGHGUI_LIBRARIES ${${ALIAS_LIBRARIES}})
246 CHECK_MODULE(gtk+-2.0 HAVE_GTK)
247 CHECK_MODULE(gthread-2.0 HAVE_GTHREAD)
248 CHECK_MODULE(gstreamer-base-0.10 HAVE_GSTREAMER)
251 CHECK_MODULE(libunicap HAVE_UNICAP_)
252 CHECK_MODULE(libucil HAVE_UNICAP_UCIL)
253 if(HAVE_UNICAP_ AND HAVE_UNICAP_UCIL)
257 CHECK_MODULE(libavcodec HAVE_FFMPEG_CODEC)
258 CHECK_MODULE(libavformat HAVE_FFMPEG_FORMAT)
259 CHECK_MODULE(libavutil HAVE_FFMPEG_UTIL)
260 CHECK_MODULE(libswscale HAVE_FFMPEG_SWSCALE)
261 CHECK_INCLUDE_FILE(libavformat/avformat.h HAVE_GENTOO_FFMPEG)
262 if(HAVE_FFMPEG_CODEC AND HAVE_FFMPEG_FORMAT AND HAVE_FFMPEG_UTIL)
266 CHECK_MODULE(libdc1394-2 HAVE_DC1394_2)
267 if(NOT HAVE_DC1394_2)
268 CHECK_MODULE(libdc1394 HAVE_DC1394)
272 CHECK_INCLUDE_FILE(alloca.h HAVE_ALLOCA_H)
273 CHECK_FUNCTION_EXISTS(alloca HAVE_ALLOCA)
274 CHECK_INCLUDE_FILE(unistd.h HAVE_UNISTD_H)
275 CHECK_INCLUDE_FILE(pthread.h HAVE_LIBPTHREAD)
277 CHECK_MODULE(libxine HAVE_XINE)
278 CHECK_MODULE(libv4l1 HAVE_LIBV4L)
279 CHECK_INCLUDE_FILE(linux/videodev.h HAVE_CAMV4L)
280 CHECK_INCLUDE_FILE(linux/videodev2.h HAVE_CAMV4L2)
282 if(NOT OPENCV_BUILD_3RDPARTY_LIBS)
285 CHECK_INCLUDE_FILE(${PNG_PNG_INCLUDE_DIR}/png.h HAVE_PNG_H)
286 CHECK_INCLUDE_FILE(${PNG_PNG_INCLUDE_DIR}/libpng/png.h HAVE_LIBPNG_PNG_H)
293 set(OPENCV_LINKER_LIBS dl m pthread rt)
295 add_definitions(-DHAVE_ALLOCA -DHAVE_ALLOCA_H -DHAVE_LIBPTHREAD -DHAVE_UNISTD_H)
299 set(BUILD_PYTHON_SUPPORT OFF CACHE BOOL "Build with Python support")
300 set(BUILD_OCTAVE_SUPPORT OFF CACHE BOOL "Build with Octave support")
305 find_package(PythonInterp)
306 find_package(PythonLibs)
308 # cmake 2.4 (at least on Ubuntu 8.04 (hardy)) don't define PYTHONLIBS_FOUND
309 if(NOT PYTHONLIBS_FOUND AND PYTHON_INCLUDE_PATH)
310 set(PYTHONLIBS_FOUND ON)
311 endif(NOT PYTHONLIBS_FOUND AND PYTHON_INCLUDE_PATH)
313 # Build with python if installed:
314 # ===================================================
315 if(PYTHONLIBS_FOUND AND BUILD_PYTHON_SUPPORT)
316 execute_process(COMMAND ${PYTHON_EXECUTABLE} --version
317 ERROR_VARIABLE PYTHON_VERSION_FULL
318 OUTPUT_STRIP_TRAILING_WHITESPACE)
320 string(REGEX MATCH "[0-9].[0-9]" PYTHON_VERSION_MAJOR_MINOR "${PYTHON_VERSION_FULL}")
322 set(PYTHON_PLUGIN_INSTALL_PATH lib/python${PYTHON_VERSION_MAJOR_MINOR}/site-packages/opencv)
325 get_filename_component(PYTHON_PATH "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${PYTHON_VERSION_MAJOR_MINOR}\\InstallPath]" ABSOLUTE CACHE)
326 set(PYTHON_PLUGIN_INSTALL_PATH "${PYTHON_PATH}/Lib/site-packages/opencv")
335 foreach(v "6.1" "6.0" "5.3" "5.2" "5.1")
337 find_path(IPP_PATH "ippi-${v}.dll"
338 PATHS ${CMAKE_PROGRAM_PATH} ${CMAKE_SYSTEM_PROGRAM_PATH}
339 DOC "The path to IPP DLLs")
341 file(GLOB IPP_HDRS "${IPP_PATH}/../include")
349 message(STATUS "IPP detected: ${IPP_FOUND}")
350 set(USE_IPP ${IPP_FOUND} CACHE BOOL "Use IPP when available")
352 if(IPP_FOUND AND USE_IPP)
353 add_definitions(-DHAVE_IPP)
354 include_directories("${IPP_PATH}/../include")
355 link_directories("${IPP_PATH}/../lib")
356 set(IPP_LIBS ippsmerged.lib ippsemerged.lib ippimerged.lib ippiemerged.lib
357 ippvmmerged.lib ippvmemerged.lib ippccmerged.lib ippccemerged.lib
358 ippcvmerged.lib ippcvemerged.lib ippcorel.lib)
363 # ----------------------------------------------------------------------------
364 # UPDATE CONFIG FILES & SCRIPTS:
366 # CONFIGURE_FILE(InputFile OutputFile [COPYONLY] [ESCAPE_QUOTES] [@ONLY])
367 # If @ONLY is specified, only variables of the form @VAR@ will be
368 # replaces and ${VAR} will be ignored.
370 # A directory will be created for each platform so the "cvconfig.h" file is
371 # not overwritten if cmake generates code in the same path.
372 # ----------------------------------------------------------------------------
373 add_definitions(-DHAVE_CONFIG_H)
375 set(OPENCV_CONFIG_FILE_INCLUDE_DIR "${CMAKE_BINARY_DIR}/" CACHE PATH "Where to create the platform-dependant cvconfig.h")
377 message(STATUS "Parsing 'cvconfig.h.cmake'")
378 configure_file("${CMAKE_SOURCE_DIR}/cvconfig.h.cmake" "${OPENCV_CONFIG_FILE_INCLUDE_DIR}/cvconfig.h")
380 # ---------------------------------------------------------------------------
381 # The C+//0 include & link directories:
382 # ---------------------------------------------------------------------------
383 include_directories("."
384 "${OPENCV_CONFIG_FILE_INCLUDE_DIR}"
385 "${CMAKE_SOURCE_DIR}/include"
386 "${CMAKE_SOURCE_DIR}/include/opencv"
389 # ----------------------------------------------------------------------------
390 # Set the maximum level of warnings:
391 # ----------------------------------------------------------------------------
392 # Should be set to true for development
393 set(OPENCV_WARNINGS_ARE_ERRORS OFF CACHE BOOL "Treat warnings as errors")
395 # Whole program optimization?
396 set(OPENCV_WHOLE_PROGRAM_OPTIMIZATION OFF CACHE BOOL "Flags for whole program optimization.")
398 set(EXTRA_C_FLAGS "")
399 set(EXTRA_C_FLAGS_RELEASE "")
400 set(EXTRA_C_FLAGS_DEBUG "")
401 set(EXTRA_EXE_LINKER_FLAGS "")
402 set(EXTRA_EXE_LINKER_FLAGS_RELEASE "")
403 set(EXTRA_EXE_LINKER_FLAGS_DEBUG "")
406 set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE")
407 # 64-bit portability warnings, in MSVC8
409 set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} /Wp64")
412 set(EXTRA_EXE_LINKER_FLAGS_RELEASE "${EXTRA_EXE_LINKER_FLAGS_RELEASE} /debug")
414 # Whole program optimization
415 if(OPENCV_WHOLE_PROGRAM_OPTIMIZATION AND MSVC_VERSION GREATER 1300)
416 set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} /GL")
417 set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG")
418 set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS_RELEASE} /LTCG")
421 if(OPENCV_ENABLE_OPENMP)
422 set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} /openmp")
425 # Remove unreferenced functions: function level linking
426 set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} /Gy")
427 set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} /Zi")
430 if(CMAKE_COMPILER_IS_GNUCXX)
431 # High level of warnings.
432 set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} -Wall")
434 # The -Wno-long-long is required in 64bit systems when including sytem headers.
435 if(${CMAKE_SYSTEM_PROCESSOR} MATCHES amd64* OR ${CMAKE_SYSTEM_PROCESSOR} MATCHES x86_64*)
436 set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} -Wno-long-long")
441 set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} -pthread")
444 if(OPENCV_WARNINGS_ARE_ERRORS)
445 set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} -Werror")
448 # Whole program optimization
449 if(OPENCV_WHOLE_PROGRAM_OPTIMIZATION)
450 set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -fwhole-program --combine")
453 # Other optimizations
454 if(OPENCV_USE_OMIT_FRAME_POINTER)
455 set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -fomit-frame-pointer")
458 set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -O2")
461 set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -O3")
463 if(OPENCV_USE_FAST_MATH)
464 set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -ffast-math")
466 if(OPENCV_USE_POWERPC)
467 set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -mcpu=G3 -mtune=G5")
470 set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -mmmx")
472 # SSE should be disabled under MingW because it generates compiler errors
474 set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -msse")
476 # SSE2 should be disabled under MingW because it generates compiler errors
478 set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -msse2")
480 # SSE3 should be disabled under MingW because it generates compiler errors
481 if(OPENCV_USE_SSE3 AND NOT MINGW)
482 set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -msse3")
486 if(OPENCV_ENABLE_PROFILING)
487 set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -pg -g")
489 # Remove unreferenced functions: function level linking
491 set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} -ffunction-sections")
496 if(OPENCV_ENABLE_OPENMP)
497 set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} -D_GLIBCXX_PARALLEL -fopenmp")
500 set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -DNDEBUG")
501 set(EXTRA_C_FLAGS_DEBUG "${EXTRA_C_FLAGS_DEBUG} -O0 -DDEBUG -D_DEBUG")
505 # Add user supplied extra options (optimization, etc...)
506 # ==========================================================
507 set(OPENCV_EXTRA_C_FLAGS ${EXTRA_C_FLAGS} CACHE STRING "Extra compiler options" FORCE)
508 set(OPENCV_EXTRA_C_FLAGS_RELEASE ${EXTRA_C_FLAGS_RELEASE} CACHE STRING "Extra compiler options for Release build" FORCE)
509 set(OPENCV_EXTRA_C_FLAGS_DEBUG ${EXTRA_C_FLAGS_DEBUG} CACHE STRING "Extra compiler options for Debug build" FORCE)
510 set(OPENCV_EXTRA_EXE_LINKER_FLAGS ${EXTRA_EXE_LINKER_FLAGS} CACHE STRING "Extra linker flags" FORCE)
511 set(OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE ${EXTRA_EXE_LINKER_FLAGS_RELEASE} CACHE STRING "Extra linker flags for Release build" FORCE)
512 set(OPENCV_EXTRA_EXE_LINKER_FLAGS_DEBUG ${EXTRA_EXE_LINKER_FLAGS_DEBUG} CACHE STRING "Extra linker flags for Debug build" FORCE)
514 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${OPENCV_EXTRA_C_FLAGS_RELEASE}")
515 set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${OPENCV_EXTRA_C_FLAGS_RELEASE}")
516 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${OPENCV_EXTRA_C_FLAGS_DEBUG}")
517 set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${OPENCV_EXTRA_C_FLAGS_DEBUG}")
518 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OPENCV_EXTRA_EXE_LINKER_FLAGS}")
519 set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} ${OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE}")
520 set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} ${OPENCV_EXTRA_EXE_LINKER_FLAGS_DEBUG}")
522 # In case of Makefiles if the user does not setup CMAKE_BUILD_TYPE, assume it's Release:
523 if (${CMAKE_GENERATOR} MATCHES ".*Makefiles")
524 if("${CMAKE_BUILD_TYPE}" STREQUAL "")
525 set(CMAKE_BUILD_TYPE Release)
530 # avoid warnings from MSVC about overriding the /W* option
531 # we replace /W3 with /W4 only for C++ files,
532 # since all the 3rd-party libraries OpenCV uses are in C,
533 # and we do not care about their warnings.
534 string(REPLACE "/W3" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
535 string(REPLACE "/W3" "/W4" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
536 string(REPLACE "/W3" "/W4" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
539 if("${CMAKE_CONFIGURE_LDFLAGS}")
540 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_CONFIGURE_LDFLAGS}")
541 endif("${CMAKE_CONFIGURE_LDFLAGS}")
543 # ----------------------------------------------------------------------------
544 # PROCESS SUBDIRECTORIES:
545 # ----------------------------------------------------------------------------
546 # Save libs and executables in the same place
547 set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib CACHE PATH "Output directory for libraries" )
548 set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin CACHE PATH "Output directory for applications" )
551 set(OPENCV_DOC_INSTALL_PATH doc)
553 set(OPENCV_DOC_INSTALL_PATH share/opencv/doc)
556 #-----------------------------------
558 #-----------------------------------
559 add_subdirectory(src)
560 add_subdirectory(apps)
561 add_subdirectory(doc)
562 add_subdirectory(data)
564 if(BUILD_EXAMPLES OR INSTALL_PYTHON_EXAMPLES OR INSTALL_OCTAVE_EXAMPLES)
565 add_subdirectory(samples)
570 add_subdirectory(tests)
573 add_subdirectory(interfaces)
574 add_subdirectory(3rdparty)
576 # --------------------------------------------------------------------------------------------
577 # Installation for CMake Module: OpenCVConfig.cmake
578 # Part 1/3: ${BIN_DIR}/OpenCVConfig.cmake -> For use *without* "make install"
579 # Part 2/3: ${BIN_DIR}/unix-install/OpenCVConfig.cmake -> For use with "make install"
580 # Part 3/3: ${BIN_DIR}/win-install/OpenCVConfig.cmake -> For use within binary installers/packages
581 # -------------------------------------------------------------------------------------------
583 # -------------------------------------------------------------------------------------------
584 # Part 1/2: ${BIN_DIR}/OpenCVConfig.cmake -> For use *without* "make install"
585 # -------------------------------------------------------------------------------------------
587 # Name of libraries is: libcv.so.1.1.0, etc...
588 # OPENCV_DLLVERSION must be set to "110", etc..
589 # Already done above.
591 # Set CMAKE_INCLUDE_DIRS_CONFIGCMAKE to the list of include directories:
592 set(CMAKE_INCLUDE_DIRS_CONFIGCMAKE)
593 list(APPEND CMAKE_INCLUDE_DIRS_CONFIGCMAKE "${OPENCV_CONFIG_FILE_INCLUDE_DIR}")
594 list(APPEND CMAKE_INCLUDE_DIRS_CONFIGCMAKE "${CMAKE_SOURCE_DIR}/include")
595 list(APPEND CMAKE_INCLUDE_DIRS_CONFIGCMAKE "${CMAKE_SOURCE_DIR}/include/opencv")
597 set(CMAKE_LIB_DIRS_CONFIGCMAKE ${LIBRARY_OUTPUT_PATH})
599 configure_file("${CMAKE_SOURCE_DIR}/OpenCVConfig.cmake.in" "${CMAKE_BINARY_DIR}/OpenCVConfig.cmake" IMMEDIATE @ONLY)
601 # --------------------------------------------------------------------------------------------
602 # Part 2/2: ${BIN_DIR}/unix-install/OpenCVConfig.cmake -> For use *with* "make install"
603 # -------------------------------------------------------------------------------------------
604 # Set CMAKE_INCLUDE_DIRS_CONFIGCMAKE to the list of include directories:
606 set(CMAKE_INCLUDE_DIRS_CONFIGCMAKE "${CMAKE_INSTALL_PREFIX}/include/opencv")
607 set(CMAKE_LIB_DIRS_CONFIGCMAKE "${CMAKE_INSTALL_PREFIX}/lib")
609 #exec_program(${CMAKE_COMMAND} ARGS "-E make_directory \"${CMAKE_BINARY_DIR}/unix-install/\"")
610 exec_program(mkdir ARGS "-p \"${CMAKE_BINARY_DIR}/unix-install/\"")
611 configure_file("${CMAKE_SOURCE_DIR}/OpenCVConfig.cmake.in" "${CMAKE_BINARY_DIR}/unix-install/OpenCVConfig.cmake" IMMEDIATE @ONLY)
614 # For a command "FIND_PACKAGE(FOO)", CMake will look at the directory /usr/share|lib/FOO/FOOConfig.cmake, so:
615 install(FILES ${CMAKE_BINARY_DIR}/unix-install/OpenCVConfig.cmake DESTINATION ${CMAKE_INSTALL_PREFIX}/share/opencv/)
618 # --------------------------------------------------------------------------------------------
619 # Part 3/3: ${BIN_DIR}/win-install/OpenCVConfig.cmake -> For use within binary installers/packages
620 # -------------------------------------------------------------------------------------------
622 # Set CMAKE_INCLUDE_DIRS_CONFIGCMAKE to the list of include directories:
624 # This will expand to, for example, <program files>/OpenCV 1.1.0/include
625 set(CMAKE_INCLUDE_DIRS_CONFIGCMAKE "\"\${THIS_OPENCV_CONFIG_PATH}/include\"")
627 # This will expand to, for example, <program files>/OpenCV 1.1.0/lib
628 set(CMAKE_LIB_DIRS_CONFIGCMAKE "\"\${THIS_OPENCV_CONFIG_PATH}/lib\"")
630 #exec_program(${CMAKE_COMMAND} ARGS "-E make_directory \"${CMAKE_BINARY_DIR}/win-install/\"")
631 exec_program(mkdir ARGS "-p \"${CMAKE_BINARY_DIR}/win-install/\"")
632 configure_file("${CMAKE_SOURCE_DIR}/OpenCVConfig.cmake.in" "${CMAKE_BINARY_DIR}/win-install/OpenCVConfig.cmake" IMMEDIATE @ONLY)
636 # --------------------------------------------------------------------------------------------
637 # Part 2/2: ${BIN_DIR}/unix-install/opencv.pc -> For use *with* "make install"
639 # exec_prefix=${prefix}
640 # libdir=${exec_prefix}/lib
641 # includedir=${prefix}/include/opencv
642 # -------------------------------------------------------------------------------------------
643 set(prefix ${CMAKE_INSTALL_PREFIX})
644 set(exec_prefix "\${prefix}")
645 set(libdir "\${exec_prefix}/lib")
646 set(includedir "\${prefix}/include")
647 set(VERSION ${OPENCV_VERSION})
649 configure_file("${CMAKE_SOURCE_DIR}/opencv.pc.cmake.in" "${CMAKE_BINARY_DIR}/unix-install/opencv.pc" @ONLY IMMEDIATE)
652 install(FILES ${CMAKE_BINARY_DIR}/unix-install/opencv.pc DESTINATION lib/pkgconfig)
656 # ----------------------------------------------------------------------------
657 # Uninstall target, for "make uninstall"
658 # ----------------------------------------------------------------------------
660 "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"
661 "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
664 ADD_CUSTOM_TARGET(uninstall
665 "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
668 # ----------------------------------------------------------------------------
670 # ----------------------------------------------------------------------------
672 option(BUILD_PACKAGE "Build a installer with the SDK")
678 ${CMAKE_BINARY_DIR}/.cpack/Package.cmake
691 DESTINATION ${OPENCV_DOC_INSTALL_PATH}
695 include(${CMAKE_BINARY_DIR}/.cpack/Package.cmake)
699 # ----------------------------------------------------------------------------
701 # ----------------------------------------------------------------------------
703 message(STATUS "General configuration for opencv ${OPENCV_VERSION} =====================================")
705 message(STATUS " Compiler: ${CMAKE_COMPILER}")
706 message(STATUS " C++ flags (Release): ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE}")
707 message(STATUS " C++ flags (Debug): ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG}")
709 message(STATUS " Linker flags (Release): ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_RELEASE}")
710 message(STATUS " Linker flags (Debug): ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_DEBUG}")
712 message(STATUS " Linker flags (Release): ${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS_RELEASE}")
713 message(STATUS " Linker flags (Debug): ${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS_DEBUG}")
719 message(STATUS " GUI: ")
720 message(STATUS " GTK+ 2.x: ${HAVE_GTK}")
721 message(STATUS " GThread: ${HAVE_GTHREAD}")
723 if(NOT OPENCV_BUILD_3RDPARTY_LIBS)
724 message(STATUS " Image I/O: ")
725 message(STATUS " JPEG: ${JPEG_FOUND}")
726 message(STATUS " PNG: ${PNG_FOUND}")
727 message(STATUS " TIFF: ${TIFF_FOUND}")
728 message(STATUS " JASPER: ${JASPER_FOUND}")
730 message(STATUS " Image I/O: ")
731 message(STATUS " JPEG: build")
732 message(STATUS " PNG: build")
733 message(STATUS " TIFF: build")
734 message(STATUS " JASPER: build")
738 message(STATUS " Video I/O: ")
739 message(STATUS " DC1394 1.x: ${HAVE_DC1394}")
740 message(STATUS " DC1394 2.x: ${HAVE_DC1394_2}")
741 message(STATUS " FFMPEG: ${HAVE_FFMPEG}")
742 message(STATUS " GStreamer: ${HAVE_GSTREAMER}")
743 message(STATUS " UniCap: ${HAVE_UNICAP}")
745 message(STATUS " V4L/V4L2: Using libv4l")
747 message(STATUS " V4L/V4L2: ${HAVE_CAMV4L}/${HAVE_CAMV4L2}")
749 message(STATUS " Xine: ${HAVE_XINE}")
752 message(STATUS " Interfaces: ")
753 if(PYTHONLIBS_FOUND AND BUILD_PYTHON_SUPPORT)
754 message(STATUS " Python: 1")
756 message(STATUS " Python: 0")
758 if(IPP_FOUND AND USE_IPP)
759 message(STATUS " Use IPP: 1")
761 message(STATUS " Use IPP: 0")
764 message(STATUS " Install path: ${CMAKE_INSTALL_PREFIX}")
766 message(STATUS " cvconfig.h is in: ${OPENCV_CONFIG_FILE_INCLUDE_DIR}")
767 message(STATUS "-----------------------------------------------------------------")
770 #----------------------------------------------------------------------------
771 # Generate the OpenCVConfig.cmake file for unix
772 # installation in CMAKE_INSTALL_PREFIX
773 #----------------------------------------------------------------------------