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