]> rtime.felk.cvut.cz Git - opencv.git/blob - opencv/CMakeLists.txt
By default turn OpenMP off everywhere. On Windows many people use VS2008 Express...
[opencv.git] / opencv / CMakeLists.txt
1 # ----------------------------------------------------------------------------\r
2 #  Root CMake file for OpenCV\r
3 #\r
4 #    From the off-tree build directory, invoke:\r
5 #      $ cmake <PATH_TO_OPENCV_ROOT>\r
6 #\r
7 #\r
8 #   - OCT-2008: Initial version <joseluisblancoc@gmail.com>\r
9 #\r
10 # ----------------------------------------------------------------------------\r
11 \r
12 set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true)\r
13 \r
14 # it _must_ go before PROJECT(OpenCV) in order to work\r
15 if (NOT CMAKE_INSTALL_PREFIX)\r
16     if (WIN32)\r
17         set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR} CACHE INTERNAL "" FORCE)\r
18     elseif()\r
19         set(CMAKE_INSTALL_PREFIX "/usr" CACHE INTERNAL "" FORCE)\r
20     endif()\r
21 endif()\r
22 \r
23 set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Configs" FORCE)\r
24 set(CMAKE_C_FLAGS_MINSIZEREL "" CACHE INTERNAL "" FORCE)\r
25 set(CMAKE_C_FLAGS_RELWITHDEBINFO "" CACHE INTERNAL "" FORCE)\r
26 set(CMAKE_CXX_FLAGS_MINSIZEREL "" CACHE INTERNAL "" FORCE)\r
27 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "" CACHE INTERNAL "" FORCE)\r
28 set(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "" CACHE INTERNAL "" FORCE)\r
29 set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "" CACHE INTERNAL "" FORCE)\r
30 set(CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL "" CACHE INTERNAL "" FORCE)\r
31 set(CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO "" CACHE INTERNAL "" FORCE)\r
32 set(CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL "" CACHE INTERNAL "" FORCE)\r
33 set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "" CACHE INTERNAL "" FORCE)\r
34 \r
35 project(OpenCV)\r
36 \r
37 cmake_minimum_required(VERSION 2.4)\r
38 \r
39 if(MSVC)\r
40     set(CMAKE_USE_RELATIVE_PATHS ON CACHE INTERNAL "" FORCE)\r
41 endif()\r
42 \r
43 #set(CMAKE_C_COMPILER "/opt/BullseyeCoverage/bin/gcc")\r
44 #set(CMAKE_CXX_COMPILER "/opt/BullseyeCoverage/bin/g++")\r
45 #set(CMAKE_CXX_COMPILER_INIT "/opt/BullseyeCoverage/bin/gcc")\r
46 \r
47 # --------------------------------------------------------------\r
48 # Indicate CMake 2.7 and above that we don't want to mix relative\r
49 #  and absolute paths in linker lib lists.\r
50 # Run "cmake --help-policy CMP0003" for more information.\r
51 # --------------------------------------------------------------\r
52 if(COMMAND cmake_policy)\r
53     cmake_policy(SET CMP0003 NEW)\r
54 endif()\r
55 \r
56 # ----------------------------------------------------------------------------\r
57 #  Current version number:\r
58 # ----------------------------------------------------------------------------\r
59 set(OPENCV_VERSION "2.0.0")\r
60 \r
61 string(REGEX MATCHALL "[0-9]" OPENCV_VERSION_PARTS "${OPENCV_VERSION}")\r
62 \r
63 list(GET OPENCV_VERSION_PARTS 0 OPENCV_VERSION_MAJOR)\r
64 list(GET OPENCV_VERSION_PARTS 1 OPENCV_VERSION_MINOR)\r
65 list(GET OPENCV_VERSION_PARTS 2 OPENCV_VERSION_PATCH)\r
66 \r
67 set(OPENCV_SOVERSION "${OPENCV_VERSION_MAJOR}.${OPENCV_VERSION_MINOR}")\r
68 \r
69 if(WIN32)\r
70     # Postfix of DLLs:\r
71     set(OPENCV_DLLVERSION "${OPENCV_VERSION_MAJOR}${OPENCV_VERSION_MINOR}${OPENCV_VERSION_PATCH}")\r
72     set(OPENCV_DEBUG_POSTFIX d)\r
73 else()\r
74     # Postfix of so's:\r
75     #set(OPENCV_DLLVERSION "${OPENCV_VERSION_MAJOR}${OPENCV_VERSION_MINOR}${OPENCV_VERSION_PATCH}")\r
76     set(OPENCV_DLLVERSION "")\r
77     set(OPENCV_DEBUG_POSTFIX)\r
78 endif()\r
79 \r
80 \r
81 # ----------------------------------------------------------------------------\r
82 #  Variables for cvconfig.h.cmake\r
83 # ----------------------------------------------------------------------------\r
84 set(PACKAGE "opencv")\r
85 set(PACKAGE_BUGREPORT "opencvlibrary-devel@lists.sourceforge.net")\r
86 set(PACKAGE_NAME "opencv")\r
87 set(PACKAGE_STRING "${PACKAGE} ${OPENCV_VERSION}")\r
88 set(PACKAGE_TARNAME "${PACKAGE}")\r
89 set(PACKAGE_VERSION "${OPENCV_VERSION}")\r
90 \r
91 # ----------------------------------------------------------------------------\r
92 #  Autodetect if we are in a SVN repository\r
93 # ----------------------------------------------------------------------------\r
94 find_program(SVNVERSION_PATH svnversion)\r
95 mark_as_advanced(force SVNVERSION_PATH)\r
96 if(SVNVERSION_PATH)\r
97     message(STATUS "Extracting svn version, please wait...")\r
98     execute_process(COMMAND ${SVNVERSION_PATH} -n ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE SVNVERSION_RESULT)\r
99 \r
100     if(SVNVERSION_RESULT MATCHES "exported")\r
101        # This is NOT a svn repository:\r
102        set(OPENCV_SVNVERSION "")\r
103     else()\r
104         set(OPENCV_SVNVERSION " svn:${SVNVERSION_RESULT}")\r
105     endif()\r
106 \r
107     message(STATUS "SVNVERSION: ${OPENCV_SVNVERSION}")\r
108 else()\r
109     # We don't have svnversion:\r
110     set(OPENCV_SVNVERSION "")\r
111 endif()\r
112 \r
113 # ----------------------------------------------------------------------------\r
114 # Detect GNU version:\r
115 # ----------------------------------------------------------------------------\r
116 if(CMAKE_COMPILER_IS_GNUCXX)\r
117     execute_process(COMMAND ${CMAKE_CXX_COMPILER} --version\r
118                   OUTPUT_VARIABLE CMAKE_OPENCV_GCC_VERSION_FULL\r
119                   OUTPUT_STRIP_TRAILING_WHITESPACE)\r
120 \r
121     # Typical output in CMAKE_OPENCV_GCC_VERSION_FULL: "c+//0 (whatever) 4.2.3 (...)"\r
122     #  Look for the version number\r
123     string(REGEX MATCH "[0-9].[0-9].[0-9]" CMAKE_GCC_REGEX_VERSION "${CMAKE_OPENCV_GCC_VERSION_FULL}")\r
124 \r
125     # Split the three parts:\r
126     string(REGEX MATCHALL "[0-9]" CMAKE_OPENCV_GCC_VERSIONS "${CMAKE_GCC_REGEX_VERSION}")\r
127 \r
128     list(GET CMAKE_OPENCV_GCC_VERSIONS 0 CMAKE_OPENCV_GCC_VERSION_MAJOR)\r
129     list(GET CMAKE_OPENCV_GCC_VERSIONS 1 CMAKE_OPENCV_GCC_VERSION_MINOR)\r
130 \r
131     set(CMAKE_OPENCV_GCC_VERSION ${CMAKE_OPENCV_GCC_VERSION_MAJOR}${CMAKE_OPENCV_GCC_VERSION_MINOR})\r
132     message(STATUS "Detected version of GNU GCC: ${CMAKE_OPENCV_GCC_VERSION}")\r
133 endif()\r
134 \r
135 # ----------------------------------------------------------------------------\r
136 #       CHECK FOR SYSTEM LIBRARIES, OPTIONS, ETC..\r
137 # ----------------------------------------------------------------------------\r
138 \r
139 # Build/install (or not) some apps:\r
140 # ===================================================\r
141 set(BUILD_EXAMPLES OFF CACHE BOOL "Build all examples")\r
142 set(INSTALL_C_EXAMPLES OFF CACHE BOOL "Install C examples")\r
143 set(INSTALL_PYTHON_EXAMPLES OFF CACHE BOOL "Install Python examples")\r
144 set(INSTALL_OCTAVE_EXAMPLES OFF CACHE BOOL "Install Octave examples")\r
145 \r
146 # Build tests:\r
147 # ===================================================\r
148 set(BUILD_TESTS ON CACHE BOOL "Build tests")\r
149 \r
150 # Build 3rdparty libraries under unix\r
151 # ===================================================\r
152 if(WIN32 OR APPLE)\r
153     set(OPENCV_BUILD_3RDPARTY_LIBS TRUE  CACHE BOOL "Build 3rd party libraries")\r
154 else()\r
155     set(OPENCV_BUILD_3RDPARTY_LIBS FALSE CACHE BOOL "Build 3rd party libraries")\r
156 endif()\r
157 \r
158 include(OpenCVPCHSupport.cmake REQUIRED)\r
159 \r
160 if(UNIX)\r
161     include(OpenCVFindPkgConfig.cmake OPTIONAL)\r
162     include(CheckFunctionExists)\r
163     include(CheckIncludeFile)\r
164 endif()\r
165 \r
166 set(DEFAULT_ENABLE_OPENMP OFF)\r
167 set(ENABLE_OPENMP ${DEFAULT_ENABLE_OPENMP} CACHE BOOL "")\r
168 \r
169 if(CMAKE_COMPILER_IS_GNUCXX)\r
170     set(ENABLE_PROFILING OFF CACHE BOOL "Enable profiling in the GCC compiler (Add flags: -g -pg)")\r
171     set(USE_OMIT_FRAME_POINTER ON CACHE BOOL "Enable -fomit-frame-pointer for GCC")\r
172     if(${CMAKE_SYSTEM_PROCESSOR} MATCHES arm*)\r
173         # We can use only -O2 because the -O3 causes gcc crash\r
174         set(USE_O2 ON CACHE BOOL "Enable -O2 for GCC")\r
175         set(USE_FAST_MATH ON CACHE BOOL "Enable -ffast-math for GCC")\r
176     endif()\r
177     if(${CMAKE_SYSTEM_PROCESSOR} MATCHES amd64*)\r
178         set(USE_O3 ON CACHE BOOL "Enable -O3 for GCC")\r
179         set(USE_FAST_MATH ON CACHE BOOL "Enable -ffast-math for GCC")\r
180         set(USE_MMX ON CACHE BOOL "Enable MMX for GCC")\r
181         set(USE_SSE ON CACHE BOOL "Enable SSE for GCC")\r
182         set(USE_SSE2 ON CACHE BOOL "Enable SSE2 for GCC")\r
183         set(USE_SSE3 ON CACHE BOOL "Enable SSE3 for GCC")\r
184     endif()\r
185     if(${CMAKE_SYSTEM_PROCESSOR} MATCHES x86_64*)\r
186         set(USE_O3 ON CACHE BOOL "Enable -O3 for GCC")\r
187         set(USE_FAST_MATH ON CACHE BOOL "Enable -ffast-math for GCC")\r
188         set(USE_MMX ON CACHE BOOL "Enable MMX for GCC")\r
189         set(USE_SSE ON CACHE BOOL "Enable SSE for GCC")\r
190         set(USE_SSE2 ON CACHE BOOL "Enable SSE2 for GCC")\r
191         set(USE_SSE3 ON CACHE BOOL "Enable SSE3 for GCC")\r
192     endif()\r
193     if(${CMAKE_SYSTEM_PROCESSOR} MATCHES powerpc*)\r
194         set(USE_O3 ON CACHE BOOL "Enable -O3 for GCC")\r
195         set(USE_POWERPC ON CACHE BOOL "Enable PowerPC for GCC")\r
196     endif ()\r
197     if(${CMAKE_SYSTEM_PROCESSOR} MATCHES i686*)\r
198         set(USE_O3 ON CACHE BOOL "Enable -O3 for GCC")\r
199         set(USE_FAST_MATH ON CACHE BOOL "Enable -ffast-math for GCC")\r
200         set(USE_MMX ON CACHE BOOL "Enable MMX for GCC")\r
201         set(USE_SSE OFF CACHE BOOL "Enable SSE for GCC")\r
202         set(USE_SSE2 OFF CACHE BOOL "Enable SSE2 for GCC")\r
203         set(USE_SSE3 OFF CACHE BOOL "Enable SSE3 for GCC")\r
204     # SSE/SSE2 might probably be not available for some old AMD or VIA processors\r
205     endif ()\r
206     if(${CMAKE_SYSTEM_PROCESSOR} MATCHES x86)\r
207         set(USE_O3 ON CACHE BOOL "Enable -O3 for GCC")\r
208         set(USE_FAST_MATH ON CACHE BOOL "Enable -ffast-math for GCC")\r
209         set(USE_MMX ON CACHE BOOL "Enable MMX for GCC")\r
210         set(USE_SSE OFF CACHE BOOL "Enable SSE for GCC")\r
211         set(USE_SSE2 OFF CACHE BOOL "Enable SSE2 for GCC")\r
212         set(USE_SSE3 OFF CACHE BOOL "Enable SSE3 for GCC")\r
213     # SSE/SSE2 might probably be not available for some old AMD or VIA processors\r
214     endif ()\r
215 endif()\r
216 \r
217 # allow fine grained control over which libraries not to link, even if\r
218 # they are available on the system\r
219 # ====================================================================\r
220 if(UNIX)\r
221     set(WITH_PNG ON CACHE BOOL "Include PNG support")\r
222     set(WITH_JPEG ON CACHE BOOL "Include JPEG support")\r
223     set(WITH_JASPER ON CACHE BOOL "Include JPEG2K support")\r
224     set(WITH_TIFF ON CACHE BOOL "Include TIFF support")\r
225     set(WITH_FFMPEG ON CACHE BOOL "Include FFMPEG support")\r
226     set(WITH_UNICAP ON CACHE BOOL "Include Unicap support")\r
227     set(WITH_GTK ON CACHE BOOL "Include GTK support")\r
228     set(WITH_GSTREAMER ON CACHE BOOL "Include Gstreamer support")\r
229     set(WITH_1394 ON CACHE BOOL "Include IEEE1394 support")\r
230     set(WITH_V4L ON CACHE BOOL "Include Video 4 Linux support")\r
231     set(WITH_XINE ON CACHE BOOL "Include Xine support")\r
232 endif()\r
233 \r
234 # ===================================================\r
235 # Macros that checks if module have been installed.\r
236 # After it adds module to build and define\r
237 # constants passed as second arg\r
238 # ===================================================\r
239 \r
240 macro(CHECK_MODULE module_name define)\r
241     set(${define} 0)\r
242     if(PKG_CONFIG_FOUND)\r
243         set(ALIAS               ALIASOF_${module_name})\r
244         set(ALIAS_FOUND                 ${ALIAS}_FOUND)\r
245         set(ALIAS_INCLUDE_DIRS   ${ALIAS}_INCLUDE_DIRS)\r
246         set(ALIAS_LIBRARY_DIRS   ${ALIAS}_LIBRARY_DIRS)\r
247         set(ALIAS_LIBRARIES         ${ALIAS}_LIBRARIES)\r
248 \r
249         PKG_CHECK_MODULES(${ALIAS} ${module_name})\r
250 \r
251         if (${ALIAS_FOUND})\r
252             set(${define} 1)\r
253             foreach(P "${ALIAS_INCLUDE_DIRS}")\r
254                 if (${P})\r
255                     list(APPEND HIGHGUI_INCLUDE_DIRS ${${P}})\r
256                 endif()    \r
257             endforeach()\r
258 \r
259             foreach(P "${ALIAS_LIBRARY_DIRS}")\r
260                 if (${P})\r
261                     list(APPEND HIGHGUI_LIBRARY_DIRS ${${P}})\r
262                 endif()\r
263             endforeach()\r
264 \r
265             list(APPEND HIGHGUI_LIBRARIES ${${ALIAS_LIBRARIES}})\r
266         endif()\r
267     endif()\r
268 endmacro()\r
269 \r
270 if(UNIX)\r
271     if(NOT APPLE)\r
272       if(WITH_GTK)\r
273         CHECK_MODULE(gtk+-2.0 HAVE_GTK)\r
274         CHECK_MODULE(gthread-2.0 HAVE_GTHREAD)\r
275       else()\r
276         set(HAVE_GTK FALSE)\r
277         set(HAVE_GTHREAD FALSE)\r
278       endif()\r
279       if(WITH_GSTREAMER)\r
280         CHECK_MODULE(gstreamer-base-0.10 HAVE_GSTREAMER)\r
281       else()\r
282         set(HAVE_GSTREAMER FALSE)\r
283       endif()\r
284     endif()\r
285 \r
286     if(WITH_UNICAP)\r
287       CHECK_MODULE(libunicap HAVE_UNICAP_)\r
288       CHECK_MODULE(libucil HAVE_UNICAP_UCIL)\r
289       if(HAVE_UNICAP_ AND HAVE_UNICAP_UCIL)\r
290         set(HAVE_UNICAP 1)\r
291       endif()\r
292     else()\r
293       set(HAVE_UNICAP FALSE)\r
294     endif()\r
295 \r
296     set(HAVE_FFMPEG 0)\r
297     if(WITH_FFMPEG)\r
298       CHECK_MODULE(libavcodec HAVE_FFMPEG_CODEC)\r
299       CHECK_MODULE(libavformat HAVE_FFMPEG_FORMAT)\r
300       CHECK_MODULE(libavutil HAVE_FFMPEG_UTIL)\r
301       CHECK_MODULE(libswscale HAVE_FFMPEG_SWSCALE)\r
302       CHECK_INCLUDE_FILE(libavformat/avformat.h HAVE_GENTOO_FFMPEG)\r
303       CHECK_INCLUDE_FILE(ffmpeg/avformat.h HAVE_FFMPEG_FFMPEG)\r
304       if(NOT HAVE_GENTOO_FFMPEG AND NOT HAVE_FFMPEG_FFMPEG)\r
305         if(EXISTS /usr/include/ffmpeg/libavformat/avformat.h OR HAVE_FFMPEG_SWSCALE)\r
306           set(HAVE_GENTOO_FFMPEG 1)\r
307         endif()\r
308       endif()\r
309       if(HAVE_FFMPEG_CODEC AND HAVE_FFMPEG_FORMAT AND HAVE_FFMPEG_UTIL)\r
310         if(HAVE_FFMPEG_SWSCALE OR NOT HAVE_GENTOO_FFMPEG)\r
311             set(HAVE_FFMPEG 1)\r
312         endif()    \r
313       endif()\r
314     endif()\r
315 \r
316     if(WITH_1394)\r
317       CHECK_MODULE(libdc1394-2 HAVE_DC1394_2)\r
318       if(NOT HAVE_DC1394_2)\r
319         CHECK_MODULE(libdc1394 HAVE_DC1394)\r
320       endif()\r
321     else()\r
322       set(HAVE_DC1394_2 FALSE)\r
323       set(HAVE_DC1394 FALSE)\r
324     endif()\r
325 \r
326     if(NOT APPLE)\r
327         CHECK_INCLUDE_FILE(alloca.h HAVE_ALLOCA_H)\r
328         CHECK_FUNCTION_EXISTS(alloca HAVE_ALLOCA)\r
329         CHECK_INCLUDE_FILE(unistd.h HAVE_UNISTD_H)\r
330         CHECK_INCLUDE_FILE(pthread.h HAVE_LIBPTHREAD)\r
331 \r
332         if(WITH_XINE)\r
333             CHECK_MODULE(libxine HAVE_XINE)\r
334         else()\r
335             set(HAVE_XINE FALSE)\r
336         endif()\r
337         if(WITH_V4L)\r
338             CHECK_MODULE(libv4l1 HAVE_LIBV4L)\r
339             CHECK_INCLUDE_FILE(linux/videodev.h HAVE_CAMV4L)\r
340             CHECK_INCLUDE_FILE(linux/videodev2.h HAVE_CAMV4L2)\r
341         else()\r
342             set(HAVE_LIBV4L FALSE)\r
343             set(HAVE_CAMV4L FALSE)\r
344             set(HAVE_CAMV4L2 FALSE)\r
345         endif()\r
346 \r
347         if(NOT OPENCV_BUILD_3RDPARTY_LIBS)\r
348             if(WITH_PNG)\r
349                 include(FindPNG)\r
350                 if(PNG_FOUND)\r
351                     CHECK_INCLUDE_FILE(${PNG_PNG_INCLUDE_DIR}/png.h HAVE_PNG_H)\r
352                     CHECK_INCLUDE_FILE(${PNG_PNG_INCLUDE_DIR}/libpng/png.h HAVE_LIBPNG_PNG_H)\r
353                 endif()\r
354             else()\r
355                 set(PNG_FOUND FALSE)\r
356             endif()\r
357             if(WITH_TIFF)\r
358                 include(FindTIFF)\r
359             else()\r
360                 set(TIFF_FOUND FALSE)\r
361             endif()\r
362             if(WITH_JASPER)\r
363                 include(FindJasper)\r
364             else()\r
365                 set(JASPER_FOUND FALSE)\r
366             endif()          \r
367             if(WITH_JPEG)\r
368                 include(FindJPEG)\r
369             else()\r
370                 set(JPEG_FOUND FALSE)\r
371             endif()\r
372         endif()\r
373         \r
374         if(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")\r
375             set(OPENCV_LINKER_LIBS m pthread)\r
376         else()\r
377             set(OPENCV_LINKER_LIBS dl m pthread rt)\r
378         endif()\r
379     else()\r
380         add_definitions(-DHAVE_ALLOCA -DHAVE_ALLOCA_H -DHAVE_LIBPTHREAD -DHAVE_UNISTD_H)\r
381     endif()\r
382 endif()\r
383 \r
384 set(BUILD_NEW_PYTHON_SUPPORT ON CACHE BOOL "Build with Python support")\r
385 set(BUILD_SWIG_PYTHON_SUPPORT OFF CACHE BOOL "Build with older SWIG-based Python support")\r
386 set(BUILD_OCTAVE_SUPPORT OFF CACHE BOOL "Build with Octave support")\r
387 \r
388 if(BUILD_SWIG_PYTHON_SUPPORT OR BUILD_NEW_PYTHON_SUPPORT)\r
389     find_package(PythonInterp)\r
390     find_package(PythonLibs)\r
391 \r
392     # cmake 2.4 (at least on Ubuntu 8.04 (hardy)) don't define PYTHONLIBS_FOUND\r
393     if(NOT PYTHONLIBS_FOUND AND PYTHON_INCLUDE_PATH)\r
394         set(PYTHONLIBS_FOUND ON)\r
395     endif(NOT PYTHONLIBS_FOUND AND PYTHON_INCLUDE_PATH)\r
396         \r
397     execute_process(COMMAND ${PYTHON_EXECUTABLE} --version\r
398               ERROR_VARIABLE PYTHON_VERSION_FULL\r
399               OUTPUT_STRIP_TRAILING_WHITESPACE)\r
400 \r
401     string(REGEX MATCH "[0-9].[0-9]" PYTHON_VERSION_MAJOR_MINOR "${PYTHON_VERSION_FULL}")\r
402     if(UNIX)\r
403         set(PYTHON_PLUGIN_INSTALL_PATH lib/python${PYTHON_VERSION_MAJOR_MINOR}/site-packages/opencv)\r
404         set(PYTHON_PACKAGES_PATH lib/python${PYTHON_VERSION_MAJOR_MINOR}/site-packages)\r
405     endif()\r
406     if(WIN32)\r
407         get_filename_component(PYTHON_PATH "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${PYTHON_VERSION_MAJOR_MINOR}\\InstallPath]" ABSOLUTE CACHE)\r
408         set(PYTHON_PLUGIN_INSTALL_PATH "${PYTHON_PATH}/Lib/site-packages/opencv")\r
409         set(PYTHON_PACKAGES_PATH "${PYTHON_PATH}/Lib/site-packages")\r
410     endif()\r
411 endif()\r
412     \r
413 if(PYTHONLIBS_FOUND AND BUILD_SWIG_PYTHON_SUPPORT)\r
414     find_package(SWIG)\r
415 endif()\r
416 \r
417 \r
418 ############################### IPP ################################\r
419 set(IPP_FOUND)\r
420 set(OPENCV_LOADER_PATH)\r
421 \r
422 if(UNIX)\r
423 if(APPLE)\r
424     set(OPENCV_LOADER_PATH DYLD_LIBRARY_PATH)\r
425 else()\r
426     set(OPENCV_LOADER_PATH LD_LIBRARY_PATH)\r
427 endif()\r
428 endif()\r
429 \r
430 foreach(v "6.1" "6.0" "5.3" "5.2" "5.1")\r
431     if(NOT IPP_FOUND)\r
432         if(WIN32)\r
433             find_path(IPP_PATH "ippi-${v}.dll"\r
434                 PATHS ${CMAKE_PROGRAM_PATH} ${CMAKE_SYSTEM_PROGRAM_PATH}\r
435                 DOC "The path to IPP dynamic libraries")\r
436             if(NOT IPP_PATH)\r
437                 find_path(IPP_PATH "ippiem64t-${v}.dll"\r
438                     PATHS ${CMAKE_PROGRAM_PATH} ${CMAKE_SYSTEM_PROGRAM_PATH}\r
439                     DOC "The path to IPP dynamic libraries")\r
440             endif()\r
441         endif()\r
442         if(UNIX)\r
443             find_path(IPP_PATH "libippi${CMAKE_SHARED_LIBRARY_SUFFIX}.${v}"\r
444                 PATHS ${CMAKE_LIBRARY_PATH} ${CMAKE_SYSTEM_LIBRARY_PATH} ENV ${OPENCV_LOADER_PATH}\r
445                 DOC "The path to IPP dynamic libraries")\r
446             if(NOT IPP_PATH)\r
447                 find_path(IPP_PATH "libippiem64t${CMAKE_SHARED_LIBRARY_SUFFIX}.${v}"\r
448                     PATHS ${CMAKE_LIBRARY_PATH} ${CMAKE_SYSTEM_LIBRARY_PATH} ENV ${OPENCV_LOADER_PATH}\r
449                     DOC "The path to IPP dynamic libraries")\r
450             endif()\r
451         endif()\r
452         if(IPP_PATH)\r
453             file(GLOB IPP_HDRS "${IPP_PATH}/../include")\r
454             if(IPP_HDRS)\r
455                 set(IPP_FOUND TRUE)\r
456             endif()\r
457         endif()\r
458     endif()\r
459 endforeach()\r
460 \r
461 message(STATUS "IPP detected: ${IPP_FOUND}")\r
462 \r
463 if(WIN32 AND NOT MSVC)\r
464     set(IPP_FOUND)\r
465 endif()\r
466 \r
467 set(USE_IPP ${IPP_FOUND} CACHE BOOL "Use IPP when available")\r
468 \r
469 if(IPP_FOUND AND USE_IPP)\r
470     add_definitions(-DHAVE_IPP)\r
471     include_directories("${IPP_PATH}/../include")\r
472     link_directories("${IPP_PATH}/../lib")\r
473     \r
474     file(GLOB em64t_files "${IPP_PATH}/../lib/*em64t*")\r
475     set(IPP_ARCH)\r
476     if(em64t_files)\r
477         set(IPP_ARCH "em64t")\r
478     endif()\r
479     \r
480     set(A ${CMAKE_STATIC_LIBRARY_PREFIX})\r
481     set(B ${IPP_ARCH}${CMAKE_STATIC_LIBRARY_SUFFIX})\r
482     if(WIN32)\r
483         set(L l)\r
484     else()\r
485         set(L)\r
486     endif()\r
487     set(IPP_LIBS ${A}ippsmerged${B} ${A}ippsemerged${B}\r
488                  ${A}ippimerged${B} ${A}ippiemerged${B}\r
489                  ${A}ippvmmerged${B} ${A}ippvmemerged${B}\r
490                  ${A}ippccmerged${B} ${A}ippccemerged${B}\r
491                  ${A}ippcvmerged${B} ${A}ippcvemerged${B}\r
492                  ${A}ippcore${L}${B})\r
493 endif()\r
494 \r
495 \r
496 ################## LATEX ##################\r
497 set(BUILD_LATEX_DOCS OFF CACHE BOOL "Build LaTeX OpenCV Documentation")\r
498 \r
499 # ----------------------------------------------------------------------------\r
500 #                   UPDATE CONFIG FILES & SCRIPTS:\r
501 #\r
502 #  CONFIGURE_FILE(InputFile OutputFile [COPYONLY] [ESCAPE_QUOTES] [@ONLY])\r
503 # If @ONLY is specified, only variables of the form @VAR@ will be\r
504 #  replaces and ${VAR} will be ignored.\r
505 #\r
506 #  A directory will be created for each platform so the "cvconfig.h" file is\r
507 #   not overwritten if cmake generates code in the same path.\r
508 # ----------------------------------------------------------------------------\r
509 add_definitions(-DHAVE_CONFIG_H)\r
510 \r
511 set(OPENCV_CONFIG_FILE_INCLUDE_DIR "${CMAKE_BINARY_DIR}/" CACHE PATH "Where to create the platform-dependant cvconfig.h")\r
512 \r
513 message(STATUS "Parsing 'cvconfig.h.cmake'")\r
514 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cvconfig.h.cmake" "${OPENCV_CONFIG_FILE_INCLUDE_DIR}/cvconfig.h")\r
515 \r
516 # ---------------------------------------------------------------------------\r
517 # The C+//0 include & link directories:\r
518 # ---------------------------------------------------------------------------\r
519 include_directories("."\r
520     "${OPENCV_CONFIG_FILE_INCLUDE_DIR}"\r
521     "${CMAKE_CURRENT_SOURCE_DIR}/include"\r
522     "${CMAKE_CURRENT_SOURCE_DIR}/include/opencv"\r
523     )\r
524 \r
525 # ----------------------------------------------------------------------------\r
526 #           Set the maximum level of warnings:\r
527 # ----------------------------------------------------------------------------\r
528 # Should be set to true for development\r
529 set(OPENCV_WARNINGS_ARE_ERRORS OFF CACHE BOOL "Treat warnings as errors")\r
530 \r
531 # Whole program optimization?\r
532 set(OPENCV_WHOLE_PROGRAM_OPTIMIZATION OFF CACHE BOOL "Flags for whole program optimization.")\r
533 \r
534 set(EXTRA_C_FLAGS "")\r
535 set(EXTRA_C_FLAGS_RELEASE "")\r
536 set(EXTRA_C_FLAGS_DEBUG "")\r
537 set(EXTRA_EXE_LINKER_FLAGS "")\r
538 set(EXTRA_EXE_LINKER_FLAGS_RELEASE "")\r
539 set(EXTRA_EXE_LINKER_FLAGS_DEBUG "")\r
540 \r
541 if(MSVC)\r
542     set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS")\r
543     # 64-bit portability warnings, in MSVC8\r
544     if(MSVC80)\r
545         set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} /Wp64")\r
546     endif()\r
547     if(MSVC90)\r
548     set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} /D _BIND_TO_CURRENT_CRT_VERSION=1 /D _BIND_TO_CURRENT_VCLIBS_VERSION=1")\r
549     endif()\r
550 \r
551     set(EXTRA_EXE_LINKER_FLAGS_RELEASE "${EXTRA_EXE_LINKER_FLAGS_RELEASE} /debug")\r
552 \r
553     # Whole program optimization\r
554     if(OPENCV_WHOLE_PROGRAM_OPTIMIZATION AND MSVC_VERSION GREATER 1300)\r
555         set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} /GL")\r
556         set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG")\r
557         set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS_RELEASE} /LTCG")\r
558     endif()\r
559 \r
560     if(ENABLE_OPENMP)\r
561         set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} /openmp")\r
562     endif()\r
563 \r
564     # Remove unreferenced functions: function level linking\r
565     set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} /Gy")\r
566     set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} /Zi")\r
567 endif()\r
568 \r
569 if(CMAKE_COMPILER_IS_GNUCXX)\r
570     # High level of warnings.\r
571     set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} -Wall")\r
572 \r
573     # The -Wno-long-long is required in 64bit systems when including sytem headers.\r
574     if(${CMAKE_SYSTEM_PROCESSOR} MATCHES x86_64*)\r
575     set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} -Wno-long-long")\r
576     endif()\r
577     if(${CMAKE_SYSTEM_PROCESSOR} MATCHES amd64*)\r
578     set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} -Wno-long-long")\r
579     endif()\r
580 \r
581     # We need pthread's\r
582     if(UNIX)\r
583         set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} -pthread")\r
584     endif()\r
585 \r
586     if(OPENCV_WARNINGS_ARE_ERRORS)\r
587         set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} -Werror")\r
588     endif()\r
589 \r
590     # Whole program optimization\r
591     if(OPENCV_WHOLE_PROGRAM_OPTIMIZATION)\r
592         set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -fwhole-program --combine")\r
593     endif()\r
594 \r
595     # Other optimizations\r
596     if(USE_OMIT_FRAME_POINTER)\r
597        set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -fomit-frame-pointer")\r
598     endif()\r
599     if(USE_O2)\r
600        set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -O2")\r
601     endif()\r
602     if(USE_O3)\r
603        set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -O3")\r
604     endif()\r
605     if(USE_FAST_MATH)\r
606        set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -ffast-math")\r
607     endif()\r
608     if(USE_POWERPC)\r
609        set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -mcpu=G3 -mtune=G5")\r
610     endif()\r
611     if(USE_MMX)\r
612        set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -mmmx")\r
613     endif()\r
614     if(USE_SSE)\r
615        set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -msse")\r
616     endif()\r
617     if(USE_SSE2)\r
618        set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -msse2")\r
619     endif()\r
620     # SSE3 should be disabled under MingW because it generates compiler errors\r
621     if(USE_SSE3 AND NOT MINGW)\r
622        set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -msse3")\r
623     endif()\r
624 \r
625     # Profiling?\r
626     if(ENABLE_PROFILING)\r
627         set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -pg -g")\r
628     else()\r
629         # Remove unreferenced functions: function level linking\r
630         if(NOT APPLE)\r
631             set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} -ffunction-sections")\r
632         endif()\r
633     endif()\r
634 \r
635     # Parallel mode\r
636     if(ENABLE_OPENMP)\r
637         set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} -D_GLIBCXX_PARALLEL -fopenmp")\r
638         set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} gomp)\r
639     endif()\r
640 \r
641     set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -DNDEBUG")\r
642     set(EXTRA_C_FLAGS_DEBUG "${EXTRA_C_FLAGS_DEBUG} -O0 -DDEBUG -D_DEBUG")\r
643 endif()\r
644 \r
645 \r
646 # Add user supplied extra options (optimization, etc...)\r
647 # ==========================================================\r
648 set(OPENCV_EXTRA_C_FLAGS "" CACHE STRING "Extra compiler options")\r
649 set(OPENCV_EXTRA_C_FLAGS_RELEASE "" CACHE STRING "Extra compiler options for Release build")\r
650 set(OPENCV_EXTRA_C_FLAGS_DEBUG "" CACHE STRING "Extra compiler options for Debug build")\r
651 set(OPENCV_EXTRA_EXE_LINKER_FLAGS "" CACHE STRING "Extra linker flags" FORCE)\r
652 set(OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE "" CACHE STRING "Extra linker flags for Release build" FORCE)\r
653 set(OPENCV_EXTRA_EXE_LINKER_FLAGS_DEBUG "" CACHE STRING "Extra linker flags for Debug build" FORCE)\r
654 \r
655 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_C_FLAGS} ${OPENCV_EXTRA_C_FLAGS}")\r
656 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_C_FLAGS} ${OPENCV_EXTRA_C_FLAGS}")\r
657 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${EXTRA_C_FLAGS_RELEASE} ${OPENCV_EXTRA_C_FLAGS_RELEASE}")\r
658 set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${EXTRA_C_FLAGS_RELEASE} ${OPENCV_EXTRA_C_FLAGS_RELEASE}")\r
659 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${EXTRA_C_FLAGS_DEBUG} ${OPENCV_EXTRA_C_FLAGS_DEBUG}")\r
660 set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${EXTRA_C_FLAGS_DEBUG} ${OPENCV_EXTRA_C_FLAGS_DEBUG}")\r
661 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${EXTRA_EXE_LINKER_FLAGS} ${OPENCV_EXTRA_EXE_LINKER_FLAGS}")\r
662 set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} ${EXTRA_EXE_LINKER_FLAGS_RELEASE} ${OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE}")\r
663 set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} ${EXTRA_EXE_LINKER_FLAGS_DEBUG} ${OPENCV_EXTRA_EXE_LINKER_FLAGS_DEBUG}")\r
664 \r
665 # In case of Makefiles if the user does not setup CMAKE_BUILD_TYPE, assume it's Release:\r
666 if (${CMAKE_GENERATOR} MATCHES ".*Makefiles")\r
667     if("${CMAKE_BUILD_TYPE}" STREQUAL "")\r
668         set(CMAKE_BUILD_TYPE Release)\r
669     endif()\r
670 endif()\r
671 \r
672 if (WIN32 AND MSVC)\r
673     # avoid warnings from MSVC about overriding the /W* option\r
674     # we replace /W3 with /W4 only for C++ files,\r
675     # since all the 3rd-party libraries OpenCV uses are in C,\r
676     # and we do not care about their warnings.\r
677     string(REPLACE "/W3" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")\r
678     string(REPLACE "/W3" "/W4" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")\r
679     string(REPLACE "/W3" "/W4" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")\r
680 endif()\r
681 \r
682 if("${CMAKE_CONFIGURE_LDFLAGS}")\r
683     set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_CONFIGURE_LDFLAGS}")\r
684 endif("${CMAKE_CONFIGURE_LDFLAGS}")\r
685 \r
686 # ----------------------------------------------------------------------------\r
687 #                       PROCESS SUBDIRECTORIES:\r
688 # ----------------------------------------------------------------------------\r
689 # Save libs and executables in the same place\r
690 set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib CACHE PATH "Output directory for libraries" )\r
691 set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin CACHE PATH "Output directory for applications" )\r
692 \r
693 if(WIN32)\r
694 set(OPENCV_DOC_INSTALL_PATH doc)\r
695 else()\r
696 set(OPENCV_DOC_INSTALL_PATH share/opencv/doc)\r
697 endif()\r
698 \r
699 # --------------------------------------------------------------------------------------------\r
700 #   Installation for CMake Module:  OpenCVConfig.cmake\r
701 #  Part 1/3: ${BIN_DIR}/OpenCVConfig.cmake              -> For use *without* "make install"\r
702 #  Part 2/3: ${BIN_DIR}/unix-install/OpenCVConfig.cmake -> For use with "make install"\r
703 #  Part 3/3: ${BIN_DIR}/win-install/OpenCVConfig.cmake  -> For use within binary installers/packages\r
704 # -------------------------------------------------------------------------------------------\r
705 \r
706 # -------------------------------------------------------------------------------------------\r
707 #  Part 1/3: ${BIN_DIR}/OpenCVConfig.cmake              -> For use *without* "make install"\r
708 # -------------------------------------------------------------------------------------------\r
709 \r
710 # Name of libraries is: libcv.so.1.1.0, etc...\r
711 #  OPENCV_DLLVERSION must be set to "110", etc..\r
712 # Already done above.\r
713 \r
714 # Set CMAKE_INCLUDE_DIRS_CONFIGCMAKE to the list of include directories:\r
715 set(CMAKE_INCLUDE_DIRS_CONFIGCMAKE "\"${OPENCV_CONFIG_FILE_INCLUDE_DIR}\" \"${CMAKE_CURRENT_SOURCE_DIR}/include\" \"${CMAKE_CURRENT_SOURCE_DIR}/include/opencv\"")\r
716 \r
717 set(CMAKE_LIB_DIRS_CONFIGCMAKE "${LIBRARY_OUTPUT_PATH}")\r
718 \r
719 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/OpenCVConfig.cmake.in" "${CMAKE_BINARY_DIR}/OpenCVConfig.cmake" IMMEDIATE @ONLY)\r
720 \r
721 # --------------------------------------------------------------------------------------------\r
722 #  Part 2/3: ${BIN_DIR}/unix-install/OpenCVConfig.cmake -> For use *with* "make install"\r
723 # -------------------------------------------------------------------------------------------\r
724 # Set CMAKE_INCLUDE_DIRS_CONFIGCMAKE to the list of include directories:\r
725 \r
726 set(CMAKE_INCLUDE_DIRS_CONFIGCMAKE "${CMAKE_INSTALL_PREFIX}/include/opencv")\r
727 set(CMAKE_LIB_DIRS_CONFIGCMAKE "${CMAKE_INSTALL_PREFIX}/lib")\r
728 \r
729 #exec_program(${CMAKE_COMMAND} ARGS "-E make_directory \"${CMAKE_BINARY_DIR}/unix-install/\"")\r
730 exec_program(mkdir ARGS "-p \"${CMAKE_BINARY_DIR}/unix-install/\"")\r
731 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/OpenCVConfig.cmake.in" "${CMAKE_BINARY_DIR}/unix-install/OpenCVConfig.cmake" IMMEDIATE @ONLY)\r
732 \r
733 if(UNIX)\r
734     # For a command "FIND_PACKAGE(FOO)", CMake will look at the directory /usr/share|lib/FOO/FOOConfig.cmake, so:\r
735     install(FILES ${CMAKE_BINARY_DIR}/unix-install/OpenCVConfig.cmake DESTINATION ${CMAKE_INSTALL_PREFIX}/share/opencv/)\r
736 endif()\r
737 \r
738 # --------------------------------------------------------------------------------------------\r
739 #  Part 3/3: ${BIN_DIR}/win-install/OpenCVConfig.cmake  -> For use within binary installers/packages\r
740 # -------------------------------------------------------------------------------------------\r
741 if(WIN32)\r
742     # Set CMAKE_INCLUDE_DIRS_CONFIGCMAKE to the list of include directories:\r
743     \r
744     # This will expand to, for example, <program files>/OpenCV 1.1.0/include\r
745     set(CMAKE_INCLUDE_DIRS_CONFIGCMAKE "\"\${THIS_OPENCV_CONFIG_PATH}/include\" \"\${THIS_OPENCV_CONFIG_PATH}/include/opencv\"")\r
746 \r
747     # This will expand to, for example, <program files>/OpenCV 1.1.0/lib\r
748     set(CMAKE_LIB_DIRS_CONFIGCMAKE "\"\${THIS_OPENCV_CONFIG_PATH}/lib\"")\r
749 \r
750     #exec_program(${CMAKE_COMMAND} ARGS "-E make_directory \"${CMAKE_BINARY_DIR}/win-install/\"")\r
751     exec_program(mkdir ARGS "-p \"${CMAKE_BINARY_DIR}/win-install/\"")\r
752     configure_file("${CMAKE_CURRENT_SOURCE_DIR}/OpenCVConfig.cmake.in" "${CMAKE_BINARY_DIR}/win-install/OpenCVConfig.cmake" IMMEDIATE @ONLY)\r
753 endif()\r
754 \r
755 \r
756 # --------------------------------------------------------------------------------------------\r
757 #  Part 2/2: ${BIN_DIR}/unix-install/opencv.pc -> For use *with* "make install"\r
758 # prefix=/usr\r
759 # exec_prefix=${prefix}\r
760 # libdir=${exec_prefix}/lib\r
761 # includedir=${prefix}/include/opencv\r
762 # -------------------------------------------------------------------------------------------\r
763 set(prefix      ${CMAKE_INSTALL_PREFIX})\r
764 set(exec_prefix     "\${prefix}")\r
765 set(libdir      "\${exec_prefix}/lib")\r
766 set(includedir      "\${prefix}/include")\r
767 set(VERSION             ${OPENCV_VERSION})\r
768 \r
769 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/opencv.pc.cmake.in" "${CMAKE_BINARY_DIR}/unix-install/opencv.pc" @ONLY IMMEDIATE)\r
770 \r
771 if(UNIX)\r
772     install(FILES ${CMAKE_BINARY_DIR}/unix-install/opencv.pc DESTINATION lib/pkgconfig)\r
773 endif()\r
774 \r
775 \r
776 # ----------------------------------------------------------------------------\r
777 #   Uninstall target, for "make uninstall"\r
778 # ----------------------------------------------------------------------------\r
779 CONFIGURE_FILE(\r
780   "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"\r
781   "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"\r
782   IMMEDIATE @ONLY)\r
783 \r
784 ADD_CUSTOM_TARGET(uninstall\r
785   "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")\r
786 \r
787 \r
788 # ----------------------------------------------------------------------------\r
789 #   CPack target\r
790 # ----------------------------------------------------------------------------\r
791 \r
792 set(BUILD_PACKAGE OFF CACHE BOOL "Build a installer with the SDK")\r
793 \r
794 if(BUILD_PACKAGE)\r
795 \r
796     configure_file(\r
797     Package.cmake.in\r
798     ${CMAKE_BINARY_DIR}/.cpack/Package.cmake\r
799     @ONLY\r
800     )\r
801     \r
802     include(${CMAKE_BINARY_DIR}/.cpack/Package.cmake)\r
803 \r
804     set(root_files README ChangeLog configure)\r
805 \r
806     file(GLOB root_src_files *.in *.sh *.cmake CMakeLists.txt)\r
807 \r
808     if (NOT WIN32)\r
809         install(FILES ${root_files}\r
810                 DESTINATION ${OPENCV_DOC_INSTALL_PATH}\r
811                 COMPONENT main)\r
812     else()\r
813         install(FILES ${root_files}\r
814                 DESTINATION "."\r
815                 COMPONENT main)\r
816         install(FILES ${root_src_files}\r
817                 DESTINATION "."\r
818                 COMPONENT src)\r
819         # Add the "win-install/OpenCVConfig.cmake" file to the "main" install component \r
820         install(FILES \r
821             "${CMAKE_BINARY_DIR}/win-install/OpenCVConfig.cmake"\r
822             DESTINATION "."\r
823             COMPONENT main\r
824             )\r
825 \r
826         if(CMAKE_INSTALL_DEBUG_LIBRARIES)\r
827             foreach(m cxcore cv cvaux ml highgui opencv_ffmpeg)\r
828                 install(FILES ${CMAKE_BINARY_DIR}/bin/Debug/${m}${OPENCV_DLLVERSION}d.dll\r
829             DESTINATION bin COMPONENT main)\r
830                 install(FILES ${CMAKE_BINARY_DIR}/lib/Debug/${m}${OPENCV_DLLVERSION}d.lib\r
831             DESTINATION lib COMPONENT main)\r
832             endforeach()     \r
833         endif()\r
834 \r
835         install(DIRECTORY data samples DESTINATION "." COMPONENT main PATTERN ".svn" EXCLUDE)\r
836         install(DIRECTORY 3rdparty apps interfaces src tests utils DESTINATION "." COMPONENT src PATTERN ".svn" EXCLUDE)\r
837         install(DIRECTORY doc/ DESTINATION doc COMPONENT src FILES_MATCHING PATTERN "*.tex")\r
838         install(DIRECTORY doc/pics DESTINATION doc COMPONENT src PATTERN ".svn" EXCLUDE)\r
839         install(DIRECTORY doc/plastex DESTINATION doc COMPONENT src PATTERN ".svn" EXCLUDE)\r
840     \r
841     endif()\r
842 endif()\r
843 \r
844 \r
845 #-----------------------------------\r
846 # Subdirectories:\r
847 #-----------------------------------\r
848 add_subdirectory(src)\r
849 add_subdirectory(apps)\r
850 \r
851 if(BUILD_LATEX_DOCS)\r
852   include(OpenCVFindLATEX.cmake REQUIRED)\r
853     \r
854   if(PDFLATEX_COMPILER)\r
855     message(STATUS "PDF LaTeX found!")\r
856   endif()\r
857 endif()\r
858 \r
859 add_subdirectory(doc)\r
860 add_subdirectory(data)\r
861 \r
862 if(BUILD_EXAMPLES OR INSTALL_PYTHON_EXAMPLES OR INSTALL_OCTAVE_EXAMPLES)\r
863     add_subdirectory(samples)\r
864 endif()\r
865 \r
866 if(BUILD_TESTS)\r
867     enable_testing()\r
868     add_subdirectory(tests)\r
869 endif()\r
870 \r
871 add_subdirectory(interfaces)\r
872 add_subdirectory(3rdparty)\r
873 \r
874 \r
875 # ----------------------------------------------------------------------------\r
876 #   Sumary:\r
877 # ----------------------------------------------------------------------------\r
878 message(STATUS "")\r
879 message(STATUS "General configuration for opencv ${OPENCV_VERSION} =====================================")\r
880 message(STATUS "")\r
881 message(STATUS "    Compiler:                  ${CMAKE_COMPILER}")\r
882 message(STATUS "    C++ flags (Release):       ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE}")\r
883 message(STATUS "    C++ flags (Debug):         ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG}")\r
884 if(WIN32)\r
885 message(STATUS "    Linker flags (Release):    ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_RELEASE}")\r
886 message(STATUS "    Linker flags (Debug):      ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_DEBUG}")\r
887 else()\r
888 message(STATUS "    Linker flags (Release):    ${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS_RELEASE}")\r
889 message(STATUS "    Linker flags (Debug):      ${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS_DEBUG}")\r
890 endif()\r
891 \r
892 if(UNIX)\r
893 if(NOT APPLE)\r
894 message(STATUS "")\r
895 message(STATUS "  GUI: ")\r
896 message(STATUS "    GTK+ 2.x:                  ${HAVE_GTK}")\r
897 message(STATUS "    GThread:                   ${HAVE_GTHREAD}")\r
898 message(STATUS "")\r
899 if(NOT OPENCV_BUILD_3RDPARTY_LIBS)\r
900 message(STATUS "  Image I/O: ")\r
901 message(STATUS "    JPEG:                      ${JPEG_FOUND}")\r
902 message(STATUS "    PNG:                       ${PNG_FOUND}")\r
903 message(STATUS "    TIFF:                      ${TIFF_FOUND}")\r
904 message(STATUS "    JASPER:                    ${JASPER_FOUND}")\r
905 else()\r
906 message(STATUS "  Image I/O: ")\r
907 message(STATUS "    JPEG:                      build")\r
908 message(STATUS "    PNG:                       build")\r
909 message(STATUS "    TIFF:                      build")\r
910 message(STATUS "    JASPER:                    build")\r
911 endif()\r
912 endif()\r
913 message(STATUS "")\r
914 message(STATUS "  Video I/O: ")\r
915 message(STATUS "    DC1394 1.x:                ${HAVE_DC1394}")\r
916 message(STATUS "    DC1394 2.x:                ${HAVE_DC1394_2}")\r
917 message(STATUS "    FFMPEG:                    ${HAVE_FFMPEG}")\r
918 message(STATUS "      codec:                   ${HAVE_FFMPEG_CODEC}")\r
919 message(STATUS "      format:                  ${HAVE_FFMPEG_FORMAT}")\r
920 message(STATUS "      util:                    ${HAVE_FFMPEG_UTIL}")\r
921 message(STATUS "      swscale:                 ${HAVE_FFMPEG_SWSCALE}")\r
922 message(STATUS "      gentoo-style:            ${HAVE_GENTOO_FFMPEG}")\r
923 message(STATUS "    GStreamer:                 ${HAVE_GSTREAMER}")\r
924 message(STATUS "    UniCap:                    ${HAVE_UNICAP}")\r
925 if(HAVE_LIBV4L)\r
926 message(STATUS "    V4L/V4L2:                  Using libv4l")\r
927 else()\r
928 message(STATUS "    V4L/V4L2:                  ${HAVE_CAMV4L}/${HAVE_CAMV4L2}")\r
929 endif()\r
930 message(STATUS "    Xine:                      ${HAVE_XINE}")\r
931 endif()\r
932 message(STATUS "")\r
933 message(STATUS "  Interfaces: ")\r
934 if(PYTHONLIBS_FOUND AND BUILD_SWIG_PYTHON_SUPPORT)\r
935 message(STATUS "    Old Python:                1")\r
936 else()\r
937 message(STATUS "    Old Python:                0")\r
938 endif()\r
939 message(STATUS "    Python:                    ${BUILD_NEW_PYTHON_SUPPORT}")\r
940 if(IPP_FOUND AND USE_IPP)\r
941 message(STATUS "    Use IPP:                   ${IPP_PATH}")\r
942 else()\r
943 message(STATUS "    Use IPP:                   NO")\r
944 endif()\r
945 if(BUILD_LATEX_DOCS AND PDFLATEX_COMPILER)\r
946 message(STATUS "    Build Documentation        1")\r
947 else()\r
948 message(STATUS "    Build Documentation        0")\r
949 endif()\r
950 message(STATUS "")\r
951 message(STATUS "    Install path:              ${CMAKE_INSTALL_PREFIX}")\r
952 message(STATUS "")\r
953 message(STATUS "    cvconfig.h is in:          ${OPENCV_CONFIG_FILE_INCLUDE_DIR}")\r
954 message(STATUS "-----------------------------------------------------------------")\r
955 message(STATUS "")\r
956 \r
957 #----------------------------------------------------------------------------\r
958 #   Generate the OpenCVConfig.cmake file for unix\r
959 #      installation in CMAKE_INSTALL_PREFIX\r
960 #----------------------------------------------------------------------------\r