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