]> rtime.felk.cvut.cz Git - opencv.git/blob - opencv/CMakeLists.txt
added support for CMake 2.4.x
[opencv.git] / opencv / 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 # it _must_ go before PROJECT(OpenCV) in order to work
15 if (NOT CMAKE_INSTALL_PREFIX)
16     if (WIN32)
17         set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR} CACHE INTERNAL "" FORCE)
18     elseif()
19         set(CMAKE_INSTALL_PREFIX "/usr" CACHE INTERNAL "" FORCE)
20     endif()
21 endif()
22
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)
34
35 project(OpenCV)
36
37 cmake_minimum_required(VERSION 2.4)
38
39 if(MSVC)
40     set(CMAKE_USE_RELATIVE_PATHS ON CACHE INTERNAL "" FORCE)
41 endif()
42
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)
50 endif()
51
52 # ----------------------------------------------------------------------------
53 #  Current version number:
54 # ----------------------------------------------------------------------------
55 set(OPENCV_VERSION "1.1.0")
56
57 string(REGEX MATCHALL "[0-9]" OPENCV_VERSION_PARTS "${OPENCV_VERSION}")
58
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)
62
63 set(OPENCV_SOVERSION "${OPENCV_VERSION_MAJOR}.${OPENCV_VERSION_MINOR}")
64
65 if(WIN32)
66         # Postfix of DLLs:
67         set(OPENCV_DLLVERSION "${OPENCV_VERSION_MAJOR}${OPENCV_VERSION_MINOR}${OPENCV_VERSION_PATCH}")
68         set(OPENCV_DEBUG_POSTFIX d)
69 else()
70         # Postfix of so's:
71         #set(OPENCV_DLLVERSION "${OPENCV_VERSION_MAJOR}${OPENCV_VERSION_MINOR}${OPENCV_VERSION_PATCH}")
72         set(OPENCV_DLLVERSION "")
73         set(OPENCV_DEBUG_POSTFIX)
74 endif()
75
76
77 # ----------------------------------------------------------------------------
78 #  Variables for cvconfig.h.cmake
79 # ----------------------------------------------------------------------------
80 set(PACKAGE "opencv")
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}")
86
87 # ----------------------------------------------------------------------------
88 #  Autodetect if we are in a SVN repository
89 # ----------------------------------------------------------------------------
90 find_program(SVNVERSION_PATH svnversion)
91 mark_as_advanced(force SVNVERSION_PATH)
92 if(SVNVERSION_PATH)
93     message(STATUS "Extracting svn version, please wait...")
94     execute_process(COMMAND ${SVNVERSION_PATH} -n ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE SVNVERSION_RESULT)
95
96     if(SVNVERSION_RESULT MATCHES "exported")
97        # This is NOT a svn repository:
98        set(OPENCV_SVNVERSION "")
99     else()
100         set(OPENCV_SVNVERSION " svn:${SVNVERSION_RESULT}")
101     endif()
102
103     message(STATUS "SVNVERSION: ${OPENCV_SVNVERSION}")
104 else()
105     # We don't have svnversion:
106     set(OPENCV_SVNVERSION "")
107 endif()
108
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)
116
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}")
120
121     # Split the three parts:
122     string(REGEX MATCHALL "[0-9]" CMAKE_OPENCV_GCC_VERSIONS "${CMAKE_GCC_REGEX_VERSION}")
123
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)
126
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}")
129 endif()
130
131 # ----------------------------------------------------------------------------
132 #               CHECK FOR SYSTEM LIBRARIES, OPTIONS, ETC..
133 # ----------------------------------------------------------------------------
134
135 # Build (or not) some apps:
136 # ===================================================
137 set(BUILD_EXAMPLES OFF CACHE BOOL "Build all examples")
138
139 # Build tests:
140 # ===================================================
141 set(BUILD_TESTS ON CACHE BOOL "Build tests")
142
143 if(UNIX)
144     include(OpenCVFindPkgConfig.cmake OPTIONAL)
145     include(CheckFunctionExists)
146     include(CheckIncludeFile)
147 endif()
148
149 set(OPENCV_ENABLE_OPENMP OFF CACHE BOOL "")
150
151 if(CMAKE_COMPILER_IS_GNUCXX)
152     set(OPENCV_ENABLE_PROFILING OFF CACHE BOOL "Enable profiling in the GCC compiler (Add flags: -g -pg)")
153     set(OPENCV_USE_OMIT_FRAME_POINTER ON CACHE BOOL "Enable -fomit-frame-pointer for GCC")
154     if(${CMAKE_SYSTEM_PROCESSOR} MATCHES arm*)
155         # We can use only -O2 because the -O3 causes gcc crash
156         set(OPENCV_USE_O2 ON CACHE BOOL "Enable -O2 for GCC")
157         set(OPENCV_USE_FAST_MATH ON CACHE BOOL "Enable -ffast-math for GCC")
158     endif()
159     if(${CMAKE_SYSTEM_PROCESSOR} MATCHES amd64*)
160         set(OPENCV_USE_O3 ON CACHE BOOL "Enable -O3 for GCC")
161         set(OPENCV_USE_FAST_MATH ON CACHE BOOL "Enable -ffast-math for GCC")
162         set(OPENCV_USE_MMX ON CACHE BOOL "Enable MMX for GCC")
163         set(OPENCV_USE_SSE ON CACHE BOOL "Enable SSE for GCC")
164         set(OPENCV_USE_SSE2 ON CACHE BOOL "Enable SSE2 for GCC")
165         set(OPENCV_USE_SSE3 ON CACHE BOOL "Enable SSE3 for GCC")
166     endif()
167     if(${CMAKE_SYSTEM_PROCESSOR} MATCHES x86_64*)
168         set(OPENCV_USE_O3 ON CACHE BOOL "Enable -O3 for GCC")
169         set(OPENCV_USE_FAST_MATH ON CACHE BOOL "Enable -ffast-math for GCC")
170         set(OPENCV_USE_MMX ON CACHE BOOL "Enable MMX for GCC")
171         set(OPENCV_USE_SSE ON CACHE BOOL "Enable SSE for GCC")
172         set(OPENCV_USE_SSE2 ON CACHE BOOL "Enable SSE2 for GCC")
173         set(OPENCV_USE_SSE3 ON CACHE BOOL "Enable SSE3 for GCC")
174     endif()
175     if(${CMAKE_SYSTEM_PROCESSOR} MATCHES powerpc*)
176         set(OPENCV_USE_O3 ON CACHE BOOL "Enable -O3 for GCC")
177         set(OPENCV_USE_POWERPC ON CACHE BOOL "Enable PowerPC for GCC")
178     endif ()
179     if(${CMAKE_SYSTEM_PROCESSOR} MATCHES i686*)
180         set(OPENCV_USE_O3 ON CACHE BOOL "Enable -O3 for GCC")
181         set(OPENCV_USE_FAST_MATH ON CACHE BOOL "Enable -ffast-math for GCC")
182         set(OPENCV_USE_MMX ON CACHE BOOL "Enable MMX for GCC")
183         set(OPENCV_USE_SSE ON CACHE BOOL "Enable SSE for GCC")
184         set(OPENCV_USE_SSE ON CACHE BOOL "Enable SSE2 for GCC")
185     endif ()
186     if(${CMAKE_SYSTEM_PROCESSOR} MATCHES x86)
187         set(OPENCV_USE_O3 ON CACHE BOOL "Enable -O3 for GCC")
188         set(OPENCV_USE_FAST_MATH ON CACHE BOOL "Enable -ffast-math for GCC")
189         set(OPENCV_USE_MMX ON CACHE BOOL "Enable MMX for GCC")
190         set(OPENCV_USE_SSE ON CACHE BOOL "Enable SSE for GCC")
191         set(OPENCV_USE_SSE ON CACHE BOOL "Enable SSE2 for GCC")
192     endif ()
193 endif()
194
195 # ===================================================
196 # Macros that checks if module have been installed.
197 # After it adds module to build and define
198 # constants passed as second arg
199 # ===================================================
200
201 macro(CHECK_MODULE module_name define)
202     set(${define} 0)
203     if(PKG_CONFIG_FOUND)
204         set(ALIAS               ALIASOF_${module_name})
205         set(ALIAS_FOUND                 ${ALIAS}_FOUND)
206         set(ALIAS_INCLUDE_DIRS   ${ALIAS}_INCLUDE_DIRS)
207         set(ALIAS_LIBRARY_DIRS   ${ALIAS}_LIBRARY_DIRS)
208         set(ALIAS_LIBRARIES         ${ALIAS}_LIBRARIES)
209
210         PKG_CHECK_MODULES(${ALIAS} ${module_name})
211
212         if (${ALIAS_FOUND})
213             set(${define} 1)
214             foreach(P "${ALIAS_INCLUDE_DIRS}")
215                 list(APPEND HIGHGUI_INCLUDE_DIRS ${${P}})
216             endforeach()
217
218             foreach(P "${ALIAS_LIBRARY_DIRS}")
219                 if (${${P}})
220                     list(APPEND HIGHGUI_LIBRARY_DIRS ${${P}})
221                 endif()
222             endforeach()
223
224             list(APPEND HIGHGUI_LIBRARIES ${${ALIAS_LIBRARIES}})
225         endif()
226     endif()
227 endmacro()
228
229 if(UNIX)
230     if(NOT APPLE)
231         CHECK_MODULE(gtk+-2.0 HAVE_GTK)
232         CHECK_MODULE(gthread-2.0 HAVE_GTHREAD)
233         CHECK_MODULE(gstreamer-base-0.10 HAVE_GSTREAMER)
234     endif()
235
236     CHECK_MODULE(libunicap HAVE_UNICAP_)
237     CHECK_MODULE(libucil HAVE_UNICAP_UCIL)
238     if(HAVE_UNICAP_ AND HAVE_UNICAP_UCIL)
239         set(HAVE_UNICAP 1)
240     endif()
241
242     CHECK_MODULE(libavcodec HAVE_FFMPEG_CODEC)
243     CHECK_MODULE(libavformat HAVE_FFMPEG_FORMAT)
244     CHECK_MODULE(libavutil HAVE_FFMPEG_UTIL)
245     CHECK_MODULE(libswscale HAVE_FFMPEG_SWSCALE)
246     CHECK_INCLUDE_FILE(libavformat/avformat.h HAVE_GENTOO_FFMPEG)
247     if(HAVE_FFMPEG_CODEC AND HAVE_FFMPEG_FORMAT AND HAVE_FFMPEG_UTIL)
248         set(HAVE_FFMPEG 1)
249     endif()
250
251     CHECK_MODULE(libdc1394-2 HAVE_DC1394_2)
252     if(NOT HAVE_DC1394_2)
253         CHECK_MODULE(libdc1394 HAVE_DC1394)
254     endif()
255
256     if(NOT APPLE)
257         CHECK_INCLUDE_FILE(alloca.h HAVE_ALLOCA_H)
258         CHECK_FUNCTION_EXISTS(alloca HAVE_ALLOCA)
259         CHECK_INCLUDE_FILE(unistd.h HAVE_UNISTD_H)
260         CHECK_INCLUDE_FILE(pthread.h HAVE_LIBPTHREAD)
261
262         CHECK_MODULE(libxine HAVE_XINE)
263         CHECK_INCLUDE_FILE(linux/videodev.h HAVE_CAMV4L)
264         CHECK_INCLUDE_FILE(linux/videodev2.h HAVE_CAMV4L2)
265
266         include(FindPNG)
267         if(PNG_FOUND)
268             CHECK_INCLUDE_FILE(${PNG_PNG_INCLUDE_DIR}/png.h HAVE_PNG_H)
269             CHECK_INCLUDE_FILE(${PNG_PNG_INCLUDE_DIR}/libpng/png.h HAVE_LIBPNG_PNG_H)
270         endif()
271         include(FindJPEG)
272         include(FindTIFF)
273         include(FindJasper)
274
275         set(OPENCV_LINKER_LIBS dl m pthread)
276     else()
277         add_definitions(-DHAVE_ALLOCA -DHAVE_ALLOCA_H -DHAVE_LIBPTHREAD -DHAVE_UNISTD_H)
278     endif()
279 endif()
280
281 set(BUILD_PYTHON_SUPPORT OFF CACHE BOOL "Build with Python support")
282 set(BUILD_OCTAVE_SUPPORT OFF CACHE BOOL "Build with Octave support")
283
284 find_package(SWIG)
285 if(SWIG_FOUND)
286
287 find_package(PythonInterp)
288 find_package(PythonLibs)
289
290 # Build with python if installes:
291 # ===================================================
292 if(PYTHONLIBS_FOUND AND BUILD_PYTHON_SUPPORT)
293     execute_process(COMMAND ${PYTHON_EXECUTABLE} --version
294               ERROR_VARIABLE PYTHON_VERSION_FULL
295               OUTPUT_STRIP_TRAILING_WHITESPACE)
296
297     string(REGEX MATCH "[0-9].[0-9]" PYTHON_VERSION_MAJOR_MINOR "${PYTHON_VERSION_FULL}")
298     if(UNIX)
299         set(PYTHON_PLUGIN_INSTALL_PATH lib/python${PYTHON_VERSION_MAJOR_MINOR}/site-packages/opencv)
300     endif()
301     if(WIN32)
302         get_filename_component(PYTHON_PATH "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${PYTHON_VERSION_MAJOR_MINOR}\\InstallPath]" ABSOLUTE CACHE)
303         set(PYTHON_PLUGIN_INSTALL_PATH "${PYTHON_PATH}/Lib/site-packages/opencv")
304     endif()
305 endif()
306
307 endif()
308
309 if(MSVC)
310
311 set(IPP_FOUND)
312 foreach(v "6.1" "6.0" "5.3" "5.2" "5.1")
313     if(NOT IPP_FOUND)
314         find_path(IPP_PATH "ippi-${v}.dll"
315             PATHS ${CMAKE_PROGRAM_PATH} ${CMAKE_SYSTEM_PROGRAM_PATH}
316             DOC "The path to IPP DLLs")
317         if(IPP_PATH)
318             file(GLOB IPP_HDRS "${IPP_PATH}/../include")
319             if(IPP_HDRS)
320                 set(IPP_FOUND TRUE)
321             endif()
322         endif()
323     endif()
324 endforeach()
325
326 message(STATUS "IPP detected: ${IPP_FOUND}")
327 set(BUILD_CUSTOM_IPP_LIB ${IPP_FOUND} CACHE BOOL "Build custom opencv_ipp*.dll")
328
329 endif()
330
331 # ----------------------------------------------------------------------------
332 #                               UPDATE CONFIG FILES & SCRIPTS:
333 #
334 #  CONFIGURE_FILE(InputFile OutputFile [COPYONLY] [ESCAPE_QUOTES] [@ONLY])
335 # If @ONLY is specified, only variables of the form @VAR@ will be
336 #  replaces and ${VAR} will be ignored.
337 #
338 #  A directory will be created for each platform so the "cvconfig.h" file is
339 #   not overwritten if cmake generates code in the same path.
340 # ----------------------------------------------------------------------------
341 add_definitions(-DHAVE_CONFIG_H)
342
343 set(OPENCV_CONFIG_FILE_INCLUDE_DIR "${CMAKE_BINARY_DIR}/" CACHE PATH "Where to create the platform-dependant cvconfig.h")
344
345 message(STATUS "Parsing 'cvconfig.h.cmake'")
346 configure_file("${CMAKE_SOURCE_DIR}/cvconfig.h.cmake" "${OPENCV_CONFIG_FILE_INCLUDE_DIR}/cvconfig.h")
347
348 # ---------------------------------------------------------------------------
349 # The C+//0 include & link directories:
350 # ---------------------------------------------------------------------------
351 include_directories("."
352     "${OPENCV_CONFIG_FILE_INCLUDE_DIR}"
353     "${CMAKE_SOURCE_DIR}/include"
354     "${CMAKE_SOURCE_DIR}/include/opencv"
355     )
356
357 # ----------------------------------------------------------------------------
358 #                       Set the maximum level of warnings:
359 # ----------------------------------------------------------------------------
360 # Should be set to true for development
361 set(OPENCV_WARNINGS_ARE_ERRORS OFF CACHE BOOL "Treat warnings as errors")
362
363 # Whole program optimization?
364 set(OPENCV_WHOLE_PROGRAM_OPTIMIZATION OFF CACHE BOOL "Flags for whole program optimization.")
365
366 set(EXTRA_C_FLAGS "")
367 set(EXTRA_C_FLAGS_RELEASE "")
368 set(EXTRA_C_FLAGS_DEBUG "")
369 set(EXTRA_EXE_LINKER_FLAGS "")
370 set(EXTRA_EXE_LINKER_FLAGS_RELEASE "")
371 set(EXTRA_EXE_LINKER_FLAGS_DEBUG "")
372
373 if(MSVC)
374     set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} /W4 /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE")
375     # 64-bit portability warnings, in MSVC8
376     if(MSVC80)
377         set(EXTRA_C_FLAGS "${OPENCV_EXTRA_CPP_FLAGS} /Wp64")
378     endif()
379
380     set(EXTRA_EXE_LINKER_FLAGS_RELEASE "${EXTRA_EXE_LINKER_FLAGS_RELEASE} /debug")
381
382     # Whole program optimization
383     if(OPENCV_WHOLE_PROGRAM_OPTIMIZATION AND MSVC80)
384         set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} /GL")
385         set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS} /LTCG")
386         set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS} /LTCG")
387     endif()
388
389     if(OPENCV_ENABLE_OPENMP)
390         set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS} /openmp")
391     endif()
392
393     # Remove unreferenced functions: function level linking
394     set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} /Gy")
395     set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} /Zi")
396 endif()
397
398 if(CMAKE_COMPILER_IS_GNUCXX)
399     # High level of warnings.
400     # The -Wno-long-long is required in 64bit systems when including sytem headers.
401     set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} -Wall")
402
403     # We need pthread's
404     if(UNIX)
405         set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} -pthread")
406     endif()
407
408     if(OPENCV_WARNINGS_ARE_ERRORS)
409         set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} -Werror")
410     endif()
411
412     # Whole program optimization
413     if(OPENCV_WHOLE_PROGRAM_OPTIMIZATION)
414         set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -fwhole-program --combine")
415     endif()
416
417     # Other optimizations
418     if(OPENCV_USE_OMIT_FRAME_POINTER)
419        set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -fomit-frame-pointer")
420     endif()
421     if(OPENCV_USE_O2)
422        set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -O2")
423     endif()
424     if(OPENCV_USE_O3)
425        set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -O3")
426     endif()
427     if(OPENCV_USE_FAST_MATH)
428        set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -ffast-math")
429     endif()
430     if(OPENCV_USE_POWERPC)
431        set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -mcpu=G3 -mtune=G5")
432     endif()
433     if(OPENCV_USE_MMX)
434        set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -mmmx")
435     endif()
436     # SSE should be disabled under MingW because it generates compiler errors
437     if(OPENCV_USE_SSE)
438        set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -msse")
439     endif()
440     # SSE2 should be disabled under MingW because it generates compiler errors
441     if(OPENCV_USE_SSE2)
442        set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -msse2")
443     endif()
444     # SSE3 should be disabled under MingW because it generates compiler errors
445     if(OPENCV_USE_SSE3 AND NOT MINGW)
446        set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -msse3")
447     endif()
448
449     # Profiling?
450     if(OPENCV_ENABLE_PROFILING)
451         set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -pg -g")
452     else()
453         # Remove unreferenced functions: function level linking
454         if(NOT APPLE)
455             set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} -ffunction-sections")
456         endif()
457     endif()
458
459     # Parallel mode
460     if(OPENCV_ENABLE_OPENMP)
461         set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} -D_GLIBCXX_PARALLEL -fopenmp")
462     endif()
463
464     set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -DNDEBUG")
465     set(EXTRA_C_FLAGS_DEBUG "${EXTRA_C_FLAGS_DEBUG} -O0 -DDEBUG -D_DEBUG")
466 endif()
467
468
469 # Add user supplied extra options (optimization, etc...)
470 # ==========================================================
471 set(OPENCV_EXTRA_C_FLAGS ${EXTRA_C_FLAGS} CACHE STRING "Extra compiler options")
472 set(OPENCV_EXTRA_C_FLAGS_RELEASE ${EXTRA_C_FLAGS_RELEASE} CACHE STRING "Extra compiler options for Release build")
473 set(OPENCV_EXTRA_C_FLAGS_DEBUG ${EXTRA_C_FLAGS_DEBUG} CACHE STRING "Extra compiler options for Debug build")
474 set(OPENCV_EXTRA_EXE_LINKER_FLAGS ${EXTRA_EXE_LINKER_FLAGS} CACHE STRING "Extra linker flags")
475 set(OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE ${EXTRA_EXE_LINKER_FLAGS_RELEASE} CACHE STRING "Extra linker flags for Release build")
476 set(OPENCV_EXTRA_EXE_LINKER_FLAGS_DEBUG ${EXTRA_EXE_LINKER_FLAGS_DEBUG} CACHE STRING "Extra linker flags for Debug build")
477
478 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OPENCV_EXTRA_C_FLAGS}")
479 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OPENCV_EXTRA_C_FLAGS}")
480 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${OPENCV_EXTRA_C_FLAGS_RELEASE}")
481 set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${OPENCV_EXTRA_C_FLAGS_RELEASE}")
482 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${OPENCV_EXTRA_C_FLAGS_DEBUG}")
483 set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${OPENCV_EXTRA_C_FLAGS_DEBUG}")
484 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OPENCV_EXTRA_EXE_LINKER_FLAGS}")
485 set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} ${OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE}")
486 set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} ${OPENCV_EXTRA_EXE_LINKER_FLAGS_DEBUG}")
487
488 if("${CMAKE_CONFIGURE_LDFLAGS}")
489     set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_CONFIGURE_LDFLAGS}")
490 endif("${CMAKE_CONFIGURE_LDFLAGS}")
491
492 # ----------------------------------------------------------------------------
493 #                                       PROCESS SUBDIRECTORIES:
494 # ----------------------------------------------------------------------------
495 # Save libs and executables in the same place
496 set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib CACHE PATH "Output directory for libraries" )
497 set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin CACHE PATH "Output directory for applications" )
498
499 if(WIN32)
500 set(OPENCV_DOC_INSTALL_PATH doc)
501 else()
502 set(OPENCV_DOC_INSTALL_PATH share/opencv/doc)
503 endif()
504
505 #-----------------------------------
506 # Subdirectories:
507 #-----------------------------------
508 add_subdirectory(src)
509 add_subdirectory(apps)
510 add_subdirectory(doc)
511 add_subdirectory(data)
512
513 if(BUILD_EXAMPLES)
514     add_subdirectory(samples)
515 endif()
516
517 if(BUILD_TESTS)
518     enable_testing()
519     add_subdirectory(tests)
520 endif()
521
522 add_subdirectory(interfaces)
523
524 if(WIN32)
525     add_subdirectory(3rdparty)
526 endif()
527
528 # --------------------------------------------------------------------------------------------
529 #   Installation for CMake Module:  OpenCVConfig.cmake
530 #  Part 1/2: ${BIN_DIR}/OpenCVConfig.cmake              -> For use *without* "make install"
531 #  Part 2/2: ${BIN_DIR}/unix-install/OpenCVConfig.cmake -> For use with "make install"
532 # -------------------------------------------------------------------------------------------
533
534 # -------------------------------------------------------------------------------------------
535 #  Part 1/2: ${BIN_DIR}/OpenCVConfig.cmake              -> For use *without* "make install"
536 # -------------------------------------------------------------------------------------------
537
538 # Name of libraries is: libcv.so.1.1.0, etc...
539 #  OPENCV_DLLVERSION must be set to "110", etc..
540 # Already done above.
541
542 # Set CMAKE_INCLUDE_DIRS_CONFIGCMAKE to the list of include directories:
543 set(CMAKE_INCLUDE_DIRS_CONFIGCMAKE)
544 list(APPEND CMAKE_INCLUDE_DIRS_CONFIGCMAKE "${OPENCV_CONFIG_FILE_INCLUDE_DIR}")
545 list(APPEND CMAKE_INCLUDE_DIRS_CONFIGCMAKE "${CMAKE_SOURCE_DIR}/include")
546 list(APPEND CMAKE_INCLUDE_DIRS_CONFIGCMAKE "${CMAKE_SOURCE_DIR}/include/opencv")
547
548 set(CMAKE_LIB_DIRS_CONFIGCMAKE ${LIBRARY_OUTPUT_PATH})
549
550 configure_file("${CMAKE_SOURCE_DIR}/OpenCVConfig.cmake.in" "${CMAKE_BINARY_DIR}/OpenCVConfig.cmake" IMMEDIATE)
551
552 # --------------------------------------------------------------------------------------------
553 #  Part 2/2: ${BIN_DIR}/unix-install/OpenCVConfig.cmake -> For use *with* "make install"
554 # -------------------------------------------------------------------------------------------
555 # Set CMAKE_INCLUDE_DIRS_CONFIGCMAKE to the list of include directories:
556
557 set(CMAKE_INCLUDE_DIRS_CONFIGCMAKE "${CMAKE_INSTALL_PREFIX}/include/opencv")
558 set(CMAKE_LIB_DIRS_CONFIGCMAKE "${CMAKE_INSTALL_PREFIX}/lib")
559
560 #exec_program(${CMAKE_COMMAND} ARGS "-E make_directory \"${CMAKE_BINARY_DIR}/unix-install/\"")
561 exec_program(mkdir ARGS "-p \"${CMAKE_BINARY_DIR}/unix-install/\"")
562 configure_file("${CMAKE_SOURCE_DIR}/OpenCVConfig.cmake.in" "${CMAKE_BINARY_DIR}/unix-install/OpenCVConfig.cmake" IMMEDIATE)
563
564 if(UNIX)
565     # For a command "FIND_PACKAGE(FOO)", CMake will look at the directory /usr/share|lib/FOO/FOOConfig.cmake, so:
566     install(FILES ${CMAKE_BINARY_DIR}/unix-install/OpenCVConfig.cmake DESTINATION ${CMAKE_INSTALL_PREFIX}/share/opencv/)
567 endif()
568
569
570 # --------------------------------------------------------------------------------------------
571 #  Part 2/2: ${BIN_DIR}/unix-install/opencv.pc -> For use *with* "make install"
572 # prefix=/usr
573 # exec_prefix=${prefix}
574 # libdir=${exec_prefix}/lib
575 # includedir=${prefix}/include/opencv
576 # -------------------------------------------------------------------------------------------
577 set(prefix              ${CMAKE_INSTALL_PREFIX})
578 set(exec_prefix         "\${prefix}")
579 set(libdir              "\${exec_prefix}/lib")
580 set(includedir          "\${prefix}/include")
581 set(VERSION             ${OPENCV_VERSION})
582
583 configure_file("${CMAKE_SOURCE_DIR}/opencv.pc.cmake.in" "${CMAKE_BINARY_DIR}/unix-install/opencv.pc" @ONLY IMMEDIATE)
584
585 if(UNIX)
586     install(FILES ${CMAKE_BINARY_DIR}/unix-install/opencv.pc DESTINATION lib/pkgconfig)
587 endif()
588
589
590 # ----------------------------------------------------------------------------
591 #   Uninstall target, for "make uninstall"
592 # ----------------------------------------------------------------------------
593 CONFIGURE_FILE(
594   "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"
595   "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
596   IMMEDIATE @ONLY)
597
598 ADD_CUSTOM_TARGET(uninstall
599   "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
600
601
602 # ----------------------------------------------------------------------------
603 #   CPack target
604 # ----------------------------------------------------------------------------
605
606 option(BUILD_PACKAGE "Build a installer with the SDK")
607
608 if(BUILD_PACKAGE)
609
610         configure_file(
611         Package.cmake.in
612         ${CMAKE_BINARY_DIR}/.cpack/Package.cmake
613         @ONLY
614         )
615         
616         install(FILES 
617                 AUTHORS
618                 ChangeLog
619                 COPYING
620                 INSTALL
621                 NEWS
622                 README
623                 THANKS
624                 TODO
625                 DESTINATION ${OPENCV_DOC_INSTALL_PATH}
626         COMPONENT doc
627                 )
628                 
629         include(${CMAKE_BINARY_DIR}/.cpack/Package.cmake)
630         
631 endif()
632
633 # ----------------------------------------------------------------------------
634 #   Sumary:
635 # ----------------------------------------------------------------------------
636 message(STATUS "")
637 message(STATUS "General configuration for opencv ${OPENCV_VERSION} =====================================")
638 message(STATUS "")
639 message(STATUS "    Compiler:                  ${CMAKE_COMPILER}")
640 message(STATUS "    C++ flags (Release):       ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE}")
641 message(STATUS "    C++ flags (Debug):         ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG}")
642 if(WIN32)
643 message(STATUS "    Linker flags (Release):    ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_RELEASE}")
644 message(STATUS "    Linker flags (Debug):      ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_DEBUG}")
645 else()
646 message(STATUS "    Linker flags (Release):    ${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS_RELEASE}")
647 message(STATUS "    Linker flags (Debug):      ${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS_DEBUG}")
648 endif()
649
650 if(UNIX)
651 if(NOT APPLE)
652 message(STATUS "")
653 message(STATUS "  GUI: ")
654 message(STATUS "    GTK+ 2.x:                  ${HAVE_GTK}")
655 message(STATUS "    GThread:                   ${HAVE_GTHREAD}")
656 message(STATUS "")
657 message(STATUS "  Image I/O: ")
658 message(STATUS "    JPEG:                      ${JPEG_FOUND}")
659 message(STATUS "    PNG:                       ${PNG_FOUND}")
660 message(STATUS "    TIFF:                      ${TIFF_FOUND}")
661 message(STATUS "    JASPER:                    ${JASPER_FOUND}")
662 endif()
663 message(STATUS "")
664 message(STATUS "  Video I/O: ")
665 message(STATUS "    DC1394 1.x:                ${HAVE_DC1394}")
666 message(STATUS "    DC1394 2.x:                ${HAVE_DC1394_2}")
667 message(STATUS "    FFMPEG:                    ${HAVE_FFMPEG}")
668 message(STATUS "    GStreamer:                 ${HAVE_GSTREAMER}")
669 message(STATUS "    UniCap:                    ${HAVE_UNICAP}")
670 message(STATUS "    V4L/V4L2:                  ${HAVE_CAMV4L}/${HAVE_CAMV4L2}")
671 message(STATUS "    Xine:                      ${HAVE_XINE}")
672 endif()
673 message(STATUS "")
674 message(STATUS "  Interfaces: ")
675 if(PYTHONLIBS_FOUND AND BUILD_PYTHON_SUPPORT)
676 message(STATUS "    Python:                    1")
677 else()
678 message(STATUS "    Python:                    0")
679 endif()
680 if(IPP_FOUND AND BUILD_CUSTOM_IPP_LIB)
681 message(STATUS "    Custom IPP Lib:            1")
682 else()
683 message(STATUS "    Custom IPP Lib:            0")
684 endif()
685 message(STATUS "")
686 message(STATUS "    Install path:              ${CMAKE_INSTALL_PREFIX}")
687 message(STATUS "")
688 message(STATUS "    cvconfig.h is in:          ${OPENCV_CONFIG_FILE_INCLUDE_DIR}")
689 message(STATUS "-----------------------------------------------------------------")
690 message(STATUS "")
691
692 #----------------------------------------------------------------------------
693 #   Generate the OpenCVConfig.cmake file for unix
694 #      installation in CMAKE_INSTALL_PREFIX
695 #----------------------------------------------------------------------------