From 8cab65c17325554bfb2411f2a12a99180007127b Mon Sep 17 00:00:00 2001 From: Andrey Kamaev Date: Tue, 3 Jan 2012 13:48:12 +0000 Subject: [PATCH] Started top-level CMakeLists.txt file reorganization: cmake scripts are moved to separate folder; refactored BUILD_*, INSTALL_*, ENABLE_*, USE_*, WITH_* options. --- CMakeLists.txt | 629 ++++++----------- android/CMakeCache.android.initial.cmake | 66 -- .../OpenCVAndroidProject.cmake | 286 ++++---- .../OpenCVFindIPP.cmake | 642 +++++++++--------- .../OpenCVFindLATEX.cmake | 6 +- .../OpenCVFindOpenEXR.cmake | 10 +- .../OpenCVFindOpenNI.cmake | 2 +- .../OpenCVFindPkgConfig.cmake | 20 +- .../OpenCVFindXimea.cmake | 32 +- .../OpenCVModule.cmake | 28 +- .../OpenCVPCHSupport.cmake | 10 +- cmake/OpenCVUtils.cmake | 118 ++++ OpenCV.mk.in => cmake/templates/OpenCV.mk.in | 0 .../templates/OpenCVConfig-version.cmake.in | 28 +- .../templates/OpenCVConfig.cmake.in | 396 +++++------ .../templates/cmake_uninstall.cmake.in | 0 .../templates/cvconfig.h.cmake | 3 - .../templates/opencv-XXX.pc.cmake.in | 0 .../templates/opencv.pc.cmake.in | 0 .../core/include/opencv2/core/internal.hpp | 14 - modules/objdetect/src/cascadedetect.cpp | 2 +- modules/python/CMakeLists.txt | 4 + 22 files changed, 1068 insertions(+), 1228 deletions(-) rename OpenCVAndroidProject.cmake => cmake/OpenCVAndroidProject.cmake (97%) rename OpenCVFindIPP.cmake => cmake/OpenCVFindIPP.cmake (93%) rename OpenCVFindLATEX.cmake => cmake/OpenCVFindLATEX.cmake (97%) rename OpenCVFindOpenEXR.cmake => cmake/OpenCVFindOpenEXR.cmake (93%) rename OpenCVFindOpenNI.cmake => cmake/OpenCVFindOpenNI.cmake (99%) rename OpenCVFindPkgConfig.cmake => cmake/OpenCVFindPkgConfig.cmake (99%) rename OpenCVFindXimea.cmake => cmake/OpenCVFindXimea.cmake (53%) rename OpenCVModule.cmake => cmake/OpenCVModule.cmake (95%) rename OpenCVPCHSupport.cmake => cmake/OpenCVPCHSupport.cmake (99%) create mode 100644 cmake/OpenCVUtils.cmake rename OpenCV.mk.in => cmake/templates/OpenCV.mk.in (100%) rename OpenCVConfig-version.cmake.in => cmake/templates/OpenCVConfig-version.cmake.in (96%) rename OpenCVConfig.cmake.in => cmake/templates/OpenCVConfig.cmake.in (97%) rename cmake_uninstall.cmake.in => cmake/templates/cmake_uninstall.cmake.in (100%) rename cvconfig.h.cmake => cmake/templates/cvconfig.h.cmake (97%) rename opencv-XXX.pc.cmake.in => cmake/templates/opencv-XXX.pc.cmake.in (100%) rename opencv.pc.cmake.in => cmake/templates/opencv.pc.cmake.in (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index f61f8082fa..38556c11f0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,6 +11,15 @@ set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true) +# -------------------------------------------------------------- +# Indicate CMake 2.7 and above that we don't want to mix relative +# and absolute paths in linker lib lists. +# Run "cmake --help-policy CMP0003" for more information. +# -------------------------------------------------------------- +if(COMMAND cmake_policy) + cmake_policy(SET CMP0003 NEW) +endif() + # Following block can broke build in case of cross-compilng # but CMAKE_CROSSCOMPILING variable will be set only on project(OpenCV) command # so we will try to detect crosscompiling by presense of CMAKE_TOOLCHAIN_FILE @@ -63,29 +72,162 @@ if(CMAKE_VERBOSE) set(CMAKE_VERBOSE_MAKEFILE 1) endif() -# -------------------------------------------------------------- -# Indicate CMake 2.7 and above that we don't want to mix relative -# and absolute paths in linker lib lists. -# Run "cmake --help-policy CMP0003" for more information. -# -------------------------------------------------------------- -if(COMMAND cmake_policy) - cmake_policy(SET CMP0003 NEW) +include(cmake/OpenCVUtils.cmake REQUIRED) + +# ---------------------------------------------------------------------------- +# Detect Microsoft compiler: +# ---------------------------------------------------------------------------- +if(CMAKE_CL_64) + set(MSVC64 1) endif() # ---------------------------------------------------------------------------- -# Build static or dynamic libs? -# Default: dynamic libraries +# Detect Intel ICC compiler -- for -fPIC in 3rdparty ( UNIX ONLY ): +# see include/opencv/cxtypes.h file for related ICC & CV_ICC defines. +# NOTE: The system needs to determine if the '-fPIC' option needs to be added +# for the 3rdparty static libs being compiled. The CMakeLists.txt files +# in 3rdparty use the CV_ICC definition being set here to determine if +# the -fPIC flag should be used. # ---------------------------------------------------------------------------- -if(NOT IOS) - set(BUILD_SHARED_LIBS ON CACHE BOOL "Build shared libraries (.dll/.so) instead of static ones (.lib/.a)") -else() - set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build shared libraries (.dll/.so) instead of static ones (.lib/.a)") +if(UNIX) + if (__ICL) + set(CV_ICC __ICL) + elseif(__ICC) + set(CV_ICC __ICC) + elseif(__ECL) + set(CV_ICC __ECL) + elseif(__ECC) + set(CV_ICC __ECC) + elseif(__INTEL_COMPILER) + set(CV_ICC __INTEL_COMPILER) + elseif(CMAKE_C_COMPILER MATCHES "icc") + set(CV_ICC icc_matches_c_compiler) + endif() +endif() + +if(MSVC AND CMAKE_C_COMPILER MATCHES "icc") + set(CV_ICC __INTEL_COMPILER_FOR_WINDOWS) endif() + # ---------------------------------------------------------------------------- -# Include debug info into debug libs? -# Default: yes +# Detect GNU version: # ---------------------------------------------------------------------------- -set(BUILD_WITH_DEBUG_INFO ON CACHE BOOL "Include debug info into debug libs") +if(CMAKE_COMPILER_IS_GNUCXX) + execute_process(COMMAND ${CMAKE_CXX_COMPILER} --version + OUTPUT_VARIABLE CMAKE_OPENCV_GCC_VERSION_FULL + OUTPUT_STRIP_TRAILING_WHITESPACE) + + execute_process(COMMAND ${CMAKE_CXX_COMPILER} -v + ERROR_VARIABLE CMAKE_OPENCV_GCC_INFO_FULL + OUTPUT_STRIP_TRAILING_WHITESPACE) + + # Typical output in CMAKE_OPENCV_GCC_VERSION_FULL: "c+//0 (whatever) 4.2.3 (...)" + # Look for the version number + string(REGEX MATCH "[0-9]+.[0-9]+.[0-9]+" CMAKE_GCC_REGEX_VERSION "${CMAKE_OPENCV_GCC_VERSION_FULL}") + + # Split the three parts: + string(REGEX MATCHALL "[0-9]+" CMAKE_OPENCV_GCC_VERSIONS "${CMAKE_GCC_REGEX_VERSION}") + + list(GET CMAKE_OPENCV_GCC_VERSIONS 0 CMAKE_OPENCV_GCC_VERSION_MAJOR) + list(GET CMAKE_OPENCV_GCC_VERSIONS 1 CMAKE_OPENCV_GCC_VERSION_MINOR) + + set(CMAKE_OPENCV_GCC_VERSION ${CMAKE_OPENCV_GCC_VERSION_MAJOR}${CMAKE_OPENCV_GCC_VERSION_MINOR}) + math(EXPR CMAKE_OPENCV_GCC_VERSION_NUM "${CMAKE_OPENCV_GCC_VERSION_MAJOR}*100 + ${CMAKE_OPENCV_GCC_VERSION_MINOR}") + message(STATUS "Detected version of GNU GCC: ${CMAKE_OPENCV_GCC_VERSION} (${CMAKE_OPENCV_GCC_VERSION_NUM})") + + if(WIN32) + execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpmachine + OUTPUT_VARIABLE CMAKE_OPENCV_GCC_TARGET_MACHINE + OUTPUT_STRIP_TRAILING_WHITESPACE) + if(CMAKE_OPENCV_GCC_TARGET_MACHINE MATCHES "64") + set(MINGW64 1) + endif() + endif() +endif() + +if(CMAKE_SYSTEM_PROCESSOR MATCHES amd64.*|x86_64.*) + set(X86_64 1) +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES i686.*|i386.*|x86.*) + set(X86 1) +endif() + +# Optional 3rd party components +# =================================================== +OCV_OPTION(WITH_1394 "Include IEEE1394 support" ON IF (UNIX AND NOT ANDROID AND NOT IOS) ) +OCV_OPTION(WITH_ANDROID_CAMERA "Build with native Android camera support" ON IF (ANDROID AND ANDROID_NATIVE_API_LEVEL GREATER 7) ) +OCV_OPTION(WITH_AVFOUNDATION "Use AVFoundation for Video I/O" ON IF IOS) +OCV_OPTION(WITH_CARBON "Use Carbon for UI instead of Cocoa" OFF IF APPLE ) +OCV_OPTION(WITH_CUBLAS "Include NVidia Cuda Basic Linear Algebra Subprograms (BLAS) library support" OFF IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT ANDROID AND NOT IOS) ) +OCV_OPTION(WITH_CUDA "Include NVidia Cuda Runtime support" ON IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT ANDROID AND NOT IOS) ) +OCV_OPTION(WITH_CUFFT "Include NVidia Cuda Fast Fourier Transform (FFT) library support" ON IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT ANDROID AND NOT IOS) ) +OCV_OPTION(WITH_EIGEN "Include Eigen2/Eigen3 support" ON) +OCV_OPTION(WITH_FFMPEG "Include FFMPEG support" ON IF (UNIX AND NOT ANDROID AND NOT IOS) ) +OCV_OPTION(WITH_GSTREAMER "Include Gstreamer support" ON IF (UNIX AND NOT APPLE AND NOT ANDROID AND NOT IOS) ) +OCV_OPTION(WITH_GTK "Include GTK support" ON IF (UNIX AND NOT APPLE AND NOT ANDROID AND NOT IOS) ) +OCV_OPTION(WITH_IPP "Include Intel IPP support" OFF IF (MSVC OR X86 OR X86_64) ) +OCV_OPTION(WITH_JASPER "Include JPEG2K support" ON IF (NOT IOS) ) +OCV_OPTION(WITH_JPEG "Include JPEG support" ON IF (NOT IOS) ) +OCV_OPTION(WITH_OPENEXR "Include ILM support via OpenEXR" ON IF (NOT IOS) ) +OCV_OPTION(WITH_OPENGL "Include OpenGL support" OFF IF (NOT ANDROID AND NOT IOS) ) +OCV_OPTION(WITH_OPENNI "Include OpenNI support" OFF IF (NOT ANDROID AND NOT IOS) ) +OCV_OPTION(WITH_PNG "Include PNG support" ON IF (NOT IOS) ) +OCV_OPTION(WITH_PVAPI "Include Prosilica GigE support" ON IF (UNIX AND NOT ANDROID AND NOT IOS) ) +OCV_OPTION(WITH_QT "Build with Qt Backend support" OFF IF (NOT ANDROID AND NOT IOS) ) +OCV_OPTION(WITH_QUICKTIME "Use QuickTime for Video I/O insted of QTKit" OFF IF APPLE ) +OCV_OPTION(WITH_TBB "Include Intel TBB support" OFF IF (NOT IOS) ) +OCV_OPTION(WITH_TIFF "Include TIFF support" ON IF (NOT IOS) ) +OCV_OPTION(WITH_UNICAP "Include Unicap support (GPL)" OFF IF (UNIX AND NOT APPLE AND NOT ANDROID AND NOT IOS) ) +OCV_OPTION(WITH_V4L "Include Video 4 Linux support" ON IF (UNIX AND NOT APPLE AND NOT ANDROID AND NOT IOS) ) +OCV_OPTION(WITH_VIDEOINPUT "Build HighGUI with DirectShow support" ON IF WIN32 ) +OCV_OPTION(WITH_XIMEA "Include XIMEA cameras support" OFF IF WIN32 ) +OCV_OPTION(WITH_XINE "Include Xine support (GPL)" OFF IF (UNIX AND NOT APPLE AND NOT ANDROID AND NOT IOS) ) + +# OpenCV build components +# =================================================== +if(ANDROID OR IOS) + OCV_OPTION(BUILD_SHARED_LIBS "Build shared libraries (.dll/.so) instead of static ones (.lib/.a)" OFF ) +else() + OCV_OPTION(BUILD_SHARED_LIBS "Build shared libraries (.dll/.so) instead of static ones (.lib/.a)" ON ) +endif() +OCV_OPTION(BUILD_ANDROID_EXAMPLES "Build examples for Android platform" ON IF ANDROID ) +OCV_OPTION(BUILD_DOCS "Create build rules for OpenCV Documentation" ON ) +OCV_OPTION(BUILD_JAVA_SUPPORT "Build with Java support" ON IF (ANDROID AND ANDROID_NATIVE_API_LEVEL GREATER 7) ) +OCV_OPTION(BUILD_EXAMPLES "Build all examples" OFF ) +OCV_OPTION(BUILD_NEW_PYTHON_SUPPORT "Build with Python support" ON IF (NOT ANDROID AND NOT IOS) ) +OCV_OPTION(BUILD_PACKAGE "Enables 'make package_source' command" ON ) +OCV_OPTION(BUILD_PERF_TESTS "Build performance tests" ON IF (NOT IOS) ) +OCV_OPTION(BUILD_TESTS "Build accuracy & regression tests" ON IF (NOT IOS) ) +OCV_OPTION(BUILD_WITH_DEBUG_INFO "Include debug info into debug libs" ON ) +OCV_OPTION(BUILD_WITH_STATIC_CRT "Enables use of staticaly linked CRT for staticaly linked OpenCV" ON IF MSVC ) + +if(WIN32 OR ANDROID) + set(OPENCV_BUILD_3RDPARTY_LIBS TRUE CACHE INTERNAL "Build 3rd party libraries") +else() + # Build 3rdparty libraries under unix + set(OPENCV_BUILD_3RDPARTY_LIBS FALSE CACHE BOOL "Build 3rd party libraries") +endif() + +# OpenCV installation options +# =================================================== +OCV_OPTION(INSTALL_C_EXAMPLES "Install C examples" OFF ) +OCV_OPTION(INSTALL_PYTHON_EXAMPLES "Install Python examples" OFF ) +OCV_OPTION(INSTALL_ANDROID_EXAMPLES "Install Android examples" OFF IF ANDROID ) +OCV_OPTION(INSTALL_TO_MANGLED_PATHS "Enables mangled install paths, that help with side by side installs." OFF IF (UNIX AND NOT ANDROID AND NOT IOS) ) + +# OpenCV build options +# =================================================== +OCV_OPTION(ENABLE_PRECOMPILED_HEADERS "Use precompiled headers" ON IF (NOT IOS) ) +OCV_OPTION(ENABLE_SOLUTION_FOLDERS "Solution folder in Visual Studio or in other IDEs" OFF IF (CMAKE_VERSION VERSION_GREATER "2.8.0") ) +OCV_OPTION(ENABLE_PROFILING "Enable profiling in the GCC compiler (Add flags: -g -pg)" OFF IF CMAKE_COMPILER_IS_GNUCXX ) +OCV_OPTION(ENABLE_OMIT_FRAME_POINTER "Enable -fomit-frame-pointer for GCC" ON IF CMAKE_COMPILER_IS_GNUCXX ) +OCV_OPTION(ENABLE_POWERPC "Enable PowerPC for GCC" ON IF (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_SYSTEM_PROCESSOR MATCHES powerpc.*) ) +OCV_OPTION(ENABLE_FAST_MATH "Enable -ffast-math (not recommended for GCC 4.6.x)" OFF IF (CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) ) +OCV_OPTION(ENABLE_SSE "Enable SSE instructions" ON IF (MSVC OR CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) ) +OCV_OPTION(ENABLE_SSE2 "Enable SSE2 instructions" ON IF (MSVC OR CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) ) +OCV_OPTION(ENABLE_SSE3 "Enable SSE3 instructions" OFF IF (CV_ICC OR CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) ) +OCV_OPTION(ENABLE_SSSE3 "Enable SSSE3 instructions" OFF IF (CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) ) +OCV_OPTION(ENABLE_SSE41 "Enable SSE4.1 instructions" OFF IF (CV_ICC OR CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) ) +OCV_OPTION(ENABLE_SSE42 "Enable SSE4.2 instructions" OFF IF (CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) ) # ---------------------------------------------------------------------------- # Get actual OpenCV version number from sources @@ -100,7 +242,7 @@ set(OPENCV_VERSION "${OPENCV_VERSION_MAJOR}.${OPENCV_VERSION_MINOR}.${OPENCV_VER set(OPENCV_SOVERSION "${OPENCV_VERSION_MAJOR}.${OPENCV_VERSION_MINOR}") # create a dependency on version file -# we will never use output of the following command but cmake will rerun if version file changes +# we never use output of the following command but cmake will rerun if version file changes configure_file("${OPENCV_VERSION_FILE}" "${CMAKE_BINARY_DIR}/junk/version.junk" COPYONLY) if(WIN32) @@ -115,8 +257,8 @@ endif() #name mangling set(OPENCV_INCLUDE_PREFIX include) -if(UNIX AND NOT ANDROID AND BUILD_SHARED_LIBS) - option(OPENCV_MANGLED_INSTALL_PATHS "Enables mangled install paths, that help with side by side installs." False) +if(INSTALL_TO_MANGLED_PATHS AND BUILD_SHARED_LIBS) + SET(OPENCV_MANGLED_INSTALL_PATHS ${INSTALL_TO_MANGLED_PATHS} ) if(OPENCV_MANGLED_INSTALL_PATHS) set(OPENCV_INCLUDE_PREFIX include/opencv-${OPENCV_VERSION}) endif() @@ -144,29 +286,12 @@ endif() set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${OPENCV_LIB_INSTALL_PATH}") set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) -# search packages for host system instead of packages for target system -# in case of cross compilation thess macro should be defined by toolchain file -if(NOT COMMAND find_host_package) - macro(find_host_package) - find_package(${ARGN}) - endmacro() -endif() -if(NOT COMMAND find_host_program) - macro(find_host_program) - find_program(${ARGN}) - endmacro() -endif() - # ---------------------------------------------------------------------------- # Use statically or dynamically linked CRT? # Default: dynamic # ---------------------------------------------------------------------------- -if(WIN32 AND NOT BUILD_SHARED_LIBS) - option (BUILD_WITH_STATIC_CRT "Enables use of staticaly linked CRT" ON) -endif() - if(MSVC) - if(BUILD_WITH_STATIC_CRT) + if(NOT BUILD_SHARED_LIBS AND BUILD_WITH_STATIC_CRT) foreach(flag_var CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO @@ -183,7 +308,7 @@ if(MSVC) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:atlthunk.lib /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:msvcrtd.lib") set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /NODEFAULTLIB:libcmt.lib") set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /NODEFAULTLIB:libcmtd.lib") - else(BUILD_WITH_STATIC_CRT) + else() foreach(flag_var CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO @@ -196,7 +321,7 @@ if(MSVC) string(REGEX REPLACE "/MTd" "/MDd" ${flag_var} "${${flag_var}}") endif() endforeach(flag_var) - endif(BUILD_WITH_STATIC_CRT) + endif() if(NOT ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} LESS 2.8 AND NOT ${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION} LESS 8.6) include(ProcessorCount) @@ -261,256 +386,25 @@ else() set(OPENCV_SVNVERSION "") endif() -# ---------------------------------------------------------------------------- -# Detect Microsoft compiler: -# ---------------------------------------------------------------------------- -if(CMAKE_CL_64) - set(MSVC64 1) -endif() - -# ---------------------------------------------------------------------------- -# Detect GNU version: -# ---------------------------------------------------------------------------- -if(CMAKE_COMPILER_IS_GNUCXX) - execute_process(COMMAND ${CMAKE_CXX_COMPILER} --version - OUTPUT_VARIABLE CMAKE_OPENCV_GCC_VERSION_FULL - OUTPUT_STRIP_TRAILING_WHITESPACE) - - execute_process(COMMAND ${CMAKE_CXX_COMPILER} -v - ERROR_VARIABLE CMAKE_OPENCV_GCC_INFO_FULL - OUTPUT_STRIP_TRAILING_WHITESPACE) - - # Typical output in CMAKE_OPENCV_GCC_VERSION_FULL: "c+//0 (whatever) 4.2.3 (...)" - # Look for the version number - string(REGEX MATCH "[0-9]+.[0-9]+.[0-9]+" CMAKE_GCC_REGEX_VERSION "${CMAKE_OPENCV_GCC_VERSION_FULL}") - - # Split the three parts: - string(REGEX MATCHALL "[0-9]+" CMAKE_OPENCV_GCC_VERSIONS "${CMAKE_GCC_REGEX_VERSION}") - - list(GET CMAKE_OPENCV_GCC_VERSIONS 0 CMAKE_OPENCV_GCC_VERSION_MAJOR) - list(GET CMAKE_OPENCV_GCC_VERSIONS 1 CMAKE_OPENCV_GCC_VERSION_MINOR) - - set(CMAKE_OPENCV_GCC_VERSION ${CMAKE_OPENCV_GCC_VERSION_MAJOR}${CMAKE_OPENCV_GCC_VERSION_MINOR}) - math(EXPR CMAKE_OPENCV_GCC_VERSION_NUM "${CMAKE_OPENCV_GCC_VERSION_MAJOR}*100 + ${CMAKE_OPENCV_GCC_VERSION_MINOR}") - message(STATUS "Detected version of GNU GCC: ${CMAKE_OPENCV_GCC_VERSION} (${CMAKE_OPENCV_GCC_VERSION_NUM})") - - if(WIN32) - execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpmachine - OUTPUT_VARIABLE CMAKE_OPENCV_GCC_TARGET_MACHINE - OUTPUT_STRIP_TRAILING_WHITESPACE) - if(CMAKE_OPENCV_GCC_TARGET_MACHINE MATCHES "64") - set(MINGW64 1) - endif() - endif() -endif() - -# ---------------------------------------------------------------------------- -# Detect Intel ICC compiler -- for -fPIC in 3rdparty ( UNIX ONLY ): -# see include/opencv/cxtypes.h file for related ICC & CV_ICC defines. -# NOTE: The system needs to determine if the '-fPIC' option needs to be added -# for the 3rdparty static libs being compiled. The CMakeLists.txt files -# in 3rdparty use the CV_ICC definition being set here to determine if -# the -fPIC flag should be used. -# ---------------------------------------------------------------------------- -if(UNIX) - if (__ICL) - set(CV_ICC __ICL) - elseif(__ICC) - set(CV_ICC __ICC) - elseif(__ECL) - set(CV_ICC __ECL) - elseif(__ECC) - set(CV_ICC __ECC) - elseif(__INTEL_COMPILER) - set(CV_ICC __INTEL_COMPILER) - elseif(CMAKE_C_COMPILER MATCHES "icc") - set(CV_ICC icc_matches_c_compiler) - endif() -endif() - # ---------------------------------------------------------------------------- # CHECK FOR SYSTEM LIBRARIES, OPTIONS, ETC.. # ---------------------------------------------------------------------------- -# Build/install (or not) some apps: -# =================================================== -set(BUILD_EXAMPLES OFF CACHE BOOL "Build all examples") -set(INSTALL_C_EXAMPLES OFF CACHE BOOL "Install C examples") -set(INSTALL_PYTHON_EXAMPLES OFF CACHE BOOL "Install Python examples") -if(ANDROID) - set(INSTALL_ANDROID_EXAMPLES OFF CACHE BOOL "Install Android examples") -endif() - -# Build tests: -# =================================================== -if(NOT IOS) - set(BUILD_TESTS ON CACHE BOOL "Build tests") -else() - set(BUILD_TESTS OFF CACHE BOOL "Build tests") -endif() -set(BUILD_PERF_TESTS ON CACHE BOOL "Build performance tests") +include(cmake/OpenCVPCHSupport.cmake REQUIRED) +include(cmake/OpenCVModule.cmake REQUIRED) -# Build 3rdparty libraries under unix -# =================================================== -if(WIN32) - set(OPENCV_BUILD_3RDPARTY_LIBS TRUE CACHE INTERNAL "Build 3rd party libraries") -else() - set(OPENCV_BUILD_3RDPARTY_LIBS FALSE CACHE BOOL "Build 3rd party libraries") -endif() - -if(NOT IOS) -include(OpenCVPCHSupport.cmake REQUIRED) -endif() - -include(OpenCVModule.cmake REQUIRED) if(ANDROID) - include(OpenCVAndroidProject.cmake REQUIRED) -endif() - -if(PCHSupport_FOUND) - SET(USE_PRECOMPILED_HEADERS ON CACHE BOOL "Use precompiled headers") -else() - SET(USE_PRECOMPILED_HEADERS OFF CACHE BOOL "Use precompiled headers" FORCE) + include(cmake/OpenCVAndroidProject.cmake REQUIRED) endif() if(UNIX) - include(OpenCVFindPkgConfig.cmake OPTIONAL) + include(cmake/OpenCVFindPkgConfig.cmake OPTIONAL) include(CheckFunctionExists) include(CheckIncludeFile) endif() -if(CMAKE_COMPILER_IS_GNUCXX) - set(ENABLE_PROFILING OFF CACHE BOOL "Enable profiling in the GCC compiler (Add flags: -g -pg)") - set(USE_OMIT_FRAME_POINTER ON CACHE BOOL "Enable -fomit-frame-pointer for GCC") - - if(${CMAKE_SYSTEM_PROCESSOR} MATCHES amd64.*|x86_64.*) - set(X86_64 1) - endif() - if(${CMAKE_SYSTEM_PROCESSOR} MATCHES i686.*|i386.*|x86.*) - set(X86 1) - endif() - if(${CMAKE_SYSTEM_PROCESSOR} MATCHES powerpc.*) - set(ENABLE_POWERPC ON CACHE BOOL "Enable PowerPC for GCC") - endif () - - if(X86 OR X86_64) - # enable everything, since the available set of instructions is checked at runtime - #IF ("${CMAKE_GCC_REGEX_VERSION}" VERSION_GREATER 4.5) - SET(_USE_FAST_MATH OFF) - #ELSE() - # SET(_USE_FAST_MATH ON) - #ENDIF() - set(USE_FAST_MATH ${_USE_FAST_MATH} CACHE BOOL "Enable -ffast-math (not recommended for GCC 4.6.x)") - set(ENABLE_SSE ON CACHE BOOL "Enable SSE instructions") - set(ENABLE_SSE2 ON CACHE BOOL "Enable SSE2 instructions") - set(ENABLE_SSE3 OFF CACHE BOOL "Enable SSE3 instructions") - set(ENABLE_SSSE3 OFF CACHE BOOL "Enable SSSE3 instructions") - set(ENABLE_SSE41 OFF CACHE BOOL "Enable SSE4.1 instructions") - set(ENABLE_SSE42 OFF CACHE BOOL "Enable SSE4.2 instructions") - endif() -endif() - -if(MSVC) - set(ENABLE_SSE ON CACHE BOOL "Enable SSE instructions for MSVC") - set(ENABLE_SSE2 ON CACHE BOOL "Enable SSE2 instructions for MSVC") - if(CMAKE_C_COMPILER MATCHES "icc") - set(ENABLE_SSE3 OFF CACHE BOOL "Enable SSE3 instructions for ICC") - set(ENABLE_SSE4_1 OFF CACHE BOOL "Enable SSE4.1 instructions for ICC") - endif() -endif() - -# allow fine grained control over which libraries not to link, even if -# they are available on the system -# ==================================================================== -if(NOT IOS) -set(WITH_PNG ON CACHE BOOL "Include PNG support") -set(WITH_JPEG ON CACHE BOOL "Include JPEG support") -set(WITH_JASPER ON CACHE BOOL "Include JPEG2K support") -set(WITH_TIFF ON CACHE BOOL "Include TIFF support") -set(WITH_OPENEXR ON CACHE BOOL "Include ILM support via OpenEXR") - - -if(UNIX) - set(WITH_FFMPEG ON CACHE BOOL "Include FFMPEG support") - if(NOT APPLE) - set(WITH_UNICAP OFF CACHE BOOL "Include Unicap support (GPL)") - set(WITH_GTK ON CACHE BOOL "Include GTK support") - set(WITH_GSTREAMER ON CACHE BOOL "Include Gstreamer support") - set(WITH_V4L ON CACHE BOOL "Include Video 4 Linux support") - set(WITH_XINE OFF CACHE BOOL "Include Xine support (GPL)") - endif() - set(WITH_PVAPI ON CACHE BOOL "Include Prosilica GigE support") - set(WITH_1394 ON CACHE BOOL "Include IEEE1394 support") -endif() - -endif() - -if(APPLE) - set(WITH_CARBON OFF CACHE BOOL "Use Carbon for UI instead of Cocoa") - set(WITH_QUICKTIME OFF CACHE BOOL "Use QuickTime for Video I/O insted of QTKit") -endif() - -if(IOS) - set(WITH_AVFOUNDATION ON CACHE BOOL "Use AVFoundation for Video I/O") -endif() - -set(WITH_TBB OFF CACHE BOOL "Include Intel TBB support") -set(WITH_THREADING_FRAMEWORK OFF CACHE BOOL "Include Threading Framework support (lightweight analogue of TBB for ARM-s)") -set(WITH_IPP OFF CACHE BOOL "Include Intel IPP support") -set(WITH_EIGEN ON CACHE BOOL "Include Eigen2/Eigen3 support") - -if( CMAKE_VERSION VERSION_GREATER "2.8") - set(WITH_CUDA ON CACHE BOOL "Include NVidia Cuda Runtime support") - set(WITH_CUFFT ON CACHE BOOL "Include NVidia Cuda Fast Fourier Transform (FFT) library support") - set(WITH_CUBLAS OFF CACHE BOOL "Include NVidia Cuda Basic Linear Algebra Subprograms (BLAS) library support") -else() - set(WITH_CUDA OFF CACHE BOOL "Include NVidia Cuda Runtime support") - set(WITH_CUFFT OFF CACHE BOOL "Include NVidia Cuda Fast Fourier Transform (FFT) library support") - set(WITH_CUBLAS OFF CACHE BOOL "Include NVidia Cuda Basic Linear Algebra Subprograms (BLAS) library support") -endif() - -set(WITH_OPENNI OFF CACHE BOOL "Include OpenNI support") -set(WITH_XIMEA OFF CACHE BOOL "Include XIMEA cameras support") -set(WITH_OPENGL OFF CACHE BOOL "Include OpenGL support") - set(HAVE_OPENGL 0) -# =================================================== -# Macros that checks if module have been installed. -# After it adds module to build and define -# constants passed as second arg -# =================================================== - -macro(CHECK_MODULE module_name define) - set(${define} 0) - if(PKG_CONFIG_FOUND) - set(ALIAS ALIASOF_${module_name}) - set(ALIAS_FOUND ${ALIAS}_FOUND) - set(ALIAS_INCLUDE_DIRS ${ALIAS}_INCLUDE_DIRS) - set(ALIAS_LIBRARY_DIRS ${ALIAS}_LIBRARY_DIRS) - set(ALIAS_LIBRARIES ${ALIAS}_LIBRARIES) - - PKG_CHECK_MODULES(${ALIAS} ${module_name}) - - if (${ALIAS_FOUND}) - set(${define} 1) - foreach(P "${ALIAS_INCLUDE_DIRS}") - if (${P}) - list(APPEND HIGHGUI_INCLUDE_DIRS ${${P}}) - endif() - endforeach() - - foreach(P "${ALIAS_LIBRARY_DIRS}") - if (${P}) - list(APPEND HIGHGUI_LIBRARY_DIRS ${${P}}) - endif() - endforeach() - - list(APPEND HIGHGUI_LIBRARIES ${${ALIAS_LIBRARIES}}) - endif() - endif() -endmacro() - if(UNIX) if(NOT APPLE) if(WITH_GTK) @@ -681,25 +575,11 @@ endif() #message(STATUS "Graphic libraries: ${PNG_LIBRARIES} ${JPEG_LIBRARIES} ${TIFF_LIBRARIES} ${JASPER_LIBRARIES}") if(WITH_OPENEXR) - include(OpenCVFindOpenEXR.cmake) + include(cmake/OpenCVFindOpenEXR.cmake) endif() -set(BUILD_DOCS ON CACHE BOOL "Build OpenCV Documentation") - if(BUILD_DOCS) - include(OpenCVFindLATEX.cmake REQUIRED) -endif() - -set(BUILD_NEW_PYTHON_SUPPORT ON CACHE BOOL "Build with Python support") - -if (WIN32) - if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") - set(BUILD_NEW_PYTHON_SUPPORT OFF) - endif() -endif() - -if(ANDROID) - set(BUILD_NEW_PYTHON_SUPPORT OFF) + include(cmake/OpenCVFindLATEX.cmake REQUIRED) endif() # Always try to find python @@ -768,11 +648,7 @@ endif() # Java support # =================================================== -if (PYTHON_EXECUTABLE AND ANDROID AND ANDROID_NATIVE_API_LEVEL GREATER 7) - option(BUILD_JAVA_SUPPORT "Build with Java support" TRUE) -endif() - -if (BUILD_JAVA_SUPPORT) +if (BUILD_JAVA_SUPPORT AND PYTHON_EXECUTABLE) file(TO_CMAKE_PATH "$ENV{ANT_DIR}" ANT_DIR_ENV_PATH) file(TO_CMAKE_PATH "$ENV{ProgramFiles}" ProgramFiles_ENV_PATH) @@ -792,9 +668,7 @@ if (BUILD_JAVA_SUPPORT) ) if(ANDROID_EXECUTABLE) message(STATUS " Found android tool: ${ANDROID_EXECUTABLE}") - get_filename_component(ANDROID_SDK_TOOLS_PATH "${ANDROID_EXECUTABLE}" PATH) - #read source.properties if (EXISTS "${ANDROID_SDK_TOOLS_PATH}/source.properties") file(STRINGS "${ANDROID_SDK_TOOLS_PATH}/source.properties" ANDROID_SDK_TOOLS_SOURCE_PROPERTIES_LINES REGEX "^[ ]*[^#].*$") @@ -887,15 +761,13 @@ if (BUILD_JAVA_SUPPORT) endif() endif() -if(CAN_BUILD_ANDROID_PROJECTS) - SET(BUILD_ANDROID_EXAMPLES TRUE CACHE BOOL "Build examples for Android platform") +if(NOT CAN_BUILD_ANDROID_PROJECTS) + UNSET(BUILD_ANDROID_EXAMPLES CACHE) endif() #YV ############################### QT ################################ -set(WITH_QT OFF CACHE BOOL "Build with Qt Backend support") - set(HAVE_QT 0) set(HAVE_QT_OPENGL 0) @@ -983,25 +855,11 @@ if (WITH_TBB) endif() endif(WITH_TBB) -#Threading Framework -- temporary decision for ARM-s instead of TBB -set(HAVE_THREADING_FRAMEWORK) -if (NOT HAVE_TBB AND WITH_THREADING_FRAMEWORK) - file(GLOB THREADING_FRAMEWORK_HEADER "${OpenCV_SOURCE_DIR}/modules/core/include/opencv2/core/threading_framework.hpp") - file(GLOB THREADING_FRAMEWORK_SOURCE "${OpenCV_SOURCE_DIR}/modules/core/src/threading_framework.cpp") - - if(THREADING_FRAMEWORK_HEADER AND THREADING_FRAMEWORK_SOURCE) - set(HAVE_THREADING_FRAMEWORK 1) - endif() - if (TEGRA_DIR) - set(HAVE_THREADING_FRAMEWORK 1) - endif() -endif() - ############################ Intel IPP ############################# set(IPP_FOUND) if(WITH_IPP) - include(OpenCVFindIPP.cmake) + include(cmake/OpenCVFindIPP.cmake) endif() if(IPP_FOUND) @@ -1092,14 +950,14 @@ set(HAVE_OPENNI FALSE) set(HAVE_OPENNI_PRIME_SENSOR_MODULE FALSE) if(WITH_OPENNI) - include(OpenCVFindOpenNI.cmake) + include(cmake/OpenCVFindOpenNI.cmake) endif() ############################### XIMEA ################################ set(HAVE_XIMEA FALSE) if(WITH_XIMEA) - include(OpenCVFindXimea.cmake) + include(cmake/OpenCVFindXimea.cmake) endif() if(XIMEA_FOUND) @@ -1123,7 +981,6 @@ endif() ################## Extra HighGUI libs on Windows ################### if(WIN32) - set(WITH_VIDEOINPUT ON CACHE BOOL "Build HighGUI with DirectShow support") set(HIGHGUI_LIBRARIES ${HIGHGUI_LIBRARIES} comctl32 gdi32 ole32) if(WITH_VIDEOINPUT) @@ -1155,8 +1012,6 @@ endif() ############## Android source tree for native camera ############### if(ANDROID AND ANDROID_NATIVE_API_LEVEL GREATER 7) - option(WITH_ANDROID_CAMERA "Build with native Android camera support" TRUE) - SET (ANDROID_SOURCE_TREE "ANDROID_SOURCE_TREE-NOTFOUND" CACHE PATH "Path to Android source tree. Set this variable to path to your Android sources to compile @@ -1190,7 +1045,7 @@ add_definitions(-DHAVE_CVCONFIG_H) set(OPENCV_CONFIG_FILE_INCLUDE_DIR "${CMAKE_BINARY_DIR}/" CACHE PATH "Where to create the platform-dependant cvconfig.h") message(STATUS "Parsing 'cvconfig.h.cmake'") -configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cvconfig.h.cmake" "${OPENCV_CONFIG_FILE_INCLUDE_DIR}/cvconfig.h") +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/cvconfig.h.cmake" "${OPENCV_CONFIG_FILE_INCLUDE_DIR}/cvconfig.h") # --------------------------------------------------------------------------- # The C+//0 include & link directories: @@ -1261,10 +1116,12 @@ if(CMAKE_COMPILER_IS_GNUCXX) endif() # Other optimizations - if(USE_OMIT_FRAME_POINTER) + if(ENABLE_OMIT_FRAME_POINTER) set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -fomit-frame-pointer") + else() + set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -fno-omit-frame-pointer") endif() - if(USE_FAST_MATH) + if(ENABLE_FAST_MATH) set(EXTRA_C_FLAGS_RELEASE "${EXTRA_C_FLAGS_RELEASE} -ffast-math") endif() if(ENABLE_POWERPC) @@ -1374,7 +1231,7 @@ set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} ${EXTRA_EX set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} ${EXTRA_EXE_LINKER_FLAGS_DEBUG} ${OPENCV_EXTRA_EXE_LINKER_FLAGS_DEBUG}") # In case of Makefiles if the user does not setup CMAKE_BUILD_TYPE, assume it's Release: -if (${CMAKE_GENERATOR} MATCHES ".*Makefiles" AND "${CMAKE_BUILD_TYPE}" STREQUAL "") +if (CMAKE_GENERATOR MATCHES ".*Makefiles" AND "${CMAKE_BUILD_TYPE}" STREQUAL "") set(CMAKE_BUILD_TYPE Release) endif() @@ -1418,9 +1275,9 @@ set(CMAKE_OPENCV2_INCLUDE_DIRS_CONFIGCMAKE "${CMAKE_CURRENT_SOURCE_DIR}") set(CMAKE_LIB_DIRS_CONFIGCMAKE "${LIBRARY_OUTPUT_PATH}") set(CMAKE_3RDPARTY_LIB_DIRS_CONFIGCMAKE "\"${CMAKE_BINARY_DIR}/3rdparty/${OPENCV_LIB_INSTALL_PATH}\"") -configure_file("${CMAKE_CURRENT_SOURCE_DIR}/OpenCVConfig.cmake.in" "${CMAKE_BINARY_DIR}/OpenCVConfig.cmake" IMMEDIATE @ONLY) +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/OpenCVConfig.cmake.in" "${CMAKE_BINARY_DIR}/OpenCVConfig.cmake" IMMEDIATE @ONLY) #support for version checking when finding opencv. find_package(OpenCV 2.3.1 EXACT) should now work. -configure_file("${CMAKE_CURRENT_SOURCE_DIR}/OpenCVConfig-version.cmake.in" "${CMAKE_BINARY_DIR}/OpenCVConfig-version.cmake" IMMEDIATE @ONLY) +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/OpenCVConfig-version.cmake.in" "${CMAKE_BINARY_DIR}/OpenCVConfig-version.cmake" IMMEDIATE @ONLY) # -------------------------------------------------------------------------------------------- # Part 2/3: ${BIN_DIR}/unix-install/OpenCVConfig.cmake -> For use *with* "make install" # ------------------------------------------------------------------------------------------- @@ -1438,8 +1295,8 @@ else() endif() endif() -configure_file("${CMAKE_CURRENT_SOURCE_DIR}/OpenCVConfig.cmake.in" "${CMAKE_BINARY_DIR}/unix-install/OpenCVConfig.cmake" IMMEDIATE @ONLY) -configure_file("${CMAKE_CURRENT_SOURCE_DIR}/OpenCVConfig-version.cmake.in" "${CMAKE_BINARY_DIR}/unix-install/OpenCVConfig-version.cmake" IMMEDIATE @ONLY) +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/OpenCVConfig.cmake.in" "${CMAKE_BINARY_DIR}/unix-install/OpenCVConfig.cmake" IMMEDIATE @ONLY) +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/OpenCVConfig-version.cmake.in" "${CMAKE_BINARY_DIR}/unix-install/OpenCVConfig-version.cmake" IMMEDIATE @ONLY) if(UNIX) #http://www.vtk.org/Wiki/CMake/Tutorials/Packaging reference @@ -1471,7 +1328,7 @@ if(WIN32) set(CMAKE_3RDPARTY_LIB_DIRS_CONFIGCMAKE "\"\${OpenCV_CONFIG_PATH}/share/OpenCV/3rdparty/${OPENCV_LIB_INSTALL_PATH}\"") exec_program(mkdir ARGS "-p \"${CMAKE_BINARY_DIR}/win-install/\"" OUTPUT_VARIABLE RET_VAL) - configure_file("${CMAKE_CURRENT_SOURCE_DIR}/OpenCVConfig.cmake.in" "${CMAKE_BINARY_DIR}/win-install/OpenCVConfig.cmake" IMMEDIATE @ONLY) + configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/OpenCVConfig.cmake.in" "${CMAKE_BINARY_DIR}/win-install/OpenCVConfig.cmake" IMMEDIATE @ONLY) # Install the OpenCVConfig.cmake file which has the right paths pointing to the install directory install(FILES "${CMAKE_BINARY_DIR}/win-install/OpenCVConfig.cmake" DESTINATION "${CMAKE_INSTALL_PREFIX}/") @@ -1509,7 +1366,7 @@ if(ANDROID) set(CMAKE_BASE_INCLUDE_DIR_CONFIGCMAKE "\"${CMAKE_CURRENT_SOURCE_DIR}\"") set(CMAKE_LIBS_DIR_CONFIGCMAKE "\$(OPENCV_THIS_DIR)") - configure_file("${CMAKE_CURRENT_SOURCE_DIR}/OpenCV.mk.in" "${CMAKE_BINARY_DIR}/OpenCV.mk" IMMEDIATE @ONLY) + configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/OpenCV.mk.in" "${CMAKE_BINARY_DIR}/OpenCV.mk" IMMEDIATE @ONLY) endif(ANDROID) # ------------------------------------------------------------------------------------------- @@ -1520,7 +1377,7 @@ if(ANDROID) set(CMAKE_BASE_INCLUDE_DIR_CONFIGCMAKE "") set(CMAKE_LIBS_DIR_CONFIGCMAKE "\$(OPENCV_THIS_DIR)/../..") - configure_file("${CMAKE_CURRENT_SOURCE_DIR}/OpenCV.mk.in" "${CMAKE_BINARY_DIR}/unix-install/OpenCV.mk" IMMEDIATE @ONLY) + configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/OpenCV.mk.in" "${CMAKE_BINARY_DIR}/unix-install/OpenCV.mk" IMMEDIATE @ONLY) install(FILES ${CMAKE_BINARY_DIR}/unix-install/OpenCV.mk DESTINATION share/OpenCV/) endif(ANDROID) @@ -1554,9 +1411,9 @@ if(OPENCV_MANGLED_INSTALL_PATHS) endforeach() set(OpenCV_LIB_COMPONENTS ${OpenCV_LIB_COMPONENTS_}) set(OPENCV_PC_FILE_NAME "opencv-${OPENCV_VERSION}.pc") - configure_file("${CMAKE_CURRENT_SOURCE_DIR}/opencv-XXX.pc.cmake.in" "${CMAKE_BINARY_DIR}/unix-install/${OPENCV_PC_FILE_NAME}" @ONLY IMMEDIATE) + configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/opencv-XXX.pc.cmake.in" "${CMAKE_BINARY_DIR}/unix-install/${OPENCV_PC_FILE_NAME}" @ONLY IMMEDIATE) else() - configure_file("${CMAKE_CURRENT_SOURCE_DIR}/opencv.pc.cmake.in" "${CMAKE_BINARY_DIR}/unix-install/${OPENCV_PC_FILE_NAME}" @ONLY IMMEDIATE) + configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/opencv.pc.cmake.in" "${CMAKE_BINARY_DIR}/unix-install/${OPENCV_PC_FILE_NAME}" @ONLY IMMEDIATE) endif() if(UNIX AND NOT ANDROID) @@ -1567,7 +1424,7 @@ endif() # Uninstall target, for "make uninstall" # ---------------------------------------------------------------------------- CONFIGURE_FILE( - "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in" + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY) @@ -1576,8 +1433,6 @@ ADD_CUSTOM_TARGET(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/c #----------------------------------- # Source package: #----------------------------------- -set(BUILD_PACKAGE ON CACHE BOOL "Enables 'make package_source' command") - if(BUILD_PACKAGE) set(TARBALL_NAME "${CMAKE_PROJECT_NAME}-${OPENCV_VERSION_MAJOR}.${OPENCV_VERSION_MINOR}.${OPENCV_VERSION_PATCH}") if (NOT WIN32) @@ -1602,11 +1457,6 @@ endif() #----------------------------------- # Solution folders: #----------------------------------- - -if(${CMAKE_VERSION} VERSION_GREATER "2.8.0") - set(ENABLE_SOLUTION_FOLDERS OFF CACHE BOOL "Solution folder in Visual Studio or in other IDEs") -endif() - if(ENABLE_SOLUTION_FOLDERS) set_property(GLOBAL PROPERTY USE_FOLDERS ON) set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "CMakeTargets") @@ -1647,57 +1497,11 @@ endif() # ---------------------------------------------------------------------------- # Summary: # ---------------------------------------------------------------------------- -macro(status text) - SET(status_cond) - SET(status_then) - SET(status_else) - - SET(status_current_name "cond") - foreach(arg ${ARGN}) - if(arg STREQUAL "THEN") - SET(status_current_name "then") - elseif(arg STREQUAL "ELSE") - SET(status_current_name "else") - else() - LIST(APPEND status_${status_current_name} ${arg}) - endif() - endforeach() - - if(DEFINED status_cond) - SET(status_placeholder_length 32) - string(RANDOM LENGTH ${status_placeholder_length} ALPHABET " " status_placeholder) - string(LENGTH "${text}" status_text_length) - if (status_text_length LESS status_placeholder_length) - string(SUBSTRING "${text}${status_placeholder}" 0 ${status_placeholder_length} status_text) - elseif (DEFINED status_then OR DEFINED status_else) - message(STATUS "${text}") - SET(status_text "${status_placeholder}") - else() - SET(status_text "${text}") - endif() - - if (DEFINED status_then OR DEFINED status_else) - if(${status_cond}) - string(REPLACE ";" " " status_then "${status_then}") - message(STATUS "${status_text}" "${status_then}") - else() - string(REPLACE ";" " " status_else "${status_else}") - message(STATUS "${status_text}" "${status_else}") - endif() - else() - string(REPLACE ";" " " status_cond "${status_cond}") - message(STATUS "${status_text}" "${status_cond}") - endif() - else() - message(STATUS "${text}") - endif() -endmacro() - status("") status("General configuration for opencv ${OPENCV_VERSION} =====================================") status("") status(" Built as dynamic libs?:" BUILD_SHARED_LIBS THEN YES ELSE NO) -status(" Compiler:" CMAKE_COMPILER THEN "${CMAKE_COMPILER}" ELSE "${CMAKE_CXX_COMPILER}") +status(" C++ Compiler:" CMAKE_COMPILER THEN "${CMAKE_COMPILER}" ELSE "${CMAKE_CXX_COMPILER}") status(" C++ flags (Release):" ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE}) status(" C++ flags (Debug):" ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG}) if(WIN32) @@ -1719,8 +1523,8 @@ if(ANDROID) elseif(BUILD_WITH_STANDALONE_TOOLCHAIN) status(" Android toolchain:" "${ANDROID_STANDALONE_TOOLCHAIN}") endif() - status(" android tool:" ANDROID_EXECUTABLE THEN "${ANDROID_EXECUTABLE} (${ANDROID_TOOLS_Pkg_Desc})" ELSE NO) - status(" ant:" ANT_EXECUTABLE THEN "${ANT_EXECUTABLE} (ver ${ANT_VERSION})" ELSE NO) + status(" android tool:" ANDROID_EXECUTABLE THEN "${ANDROID_EXECUTABLE} (${ANDROID_TOOLS_Pkg_Desc})" ELSE NO) + status(" ant:" ANT_EXECUTABLE THEN "${ANT_EXECUTABLE} (ver ${ANT_VERSION})" ELSE NO) endif() #YV @@ -1741,8 +1545,8 @@ else() status(" Cocoa:" YES) endif() else() - status(" GTK+ 2.x:" HAVE_GTK THEN YES ELSE NO) - status(" GThread :" HAVE_GTHREAD THEN YES ELSE NO) + status(" GTK+ 2.x:" HAVE_GTK THEN YES ELSE NO) + status(" GThread :" HAVE_GTHREAD THEN YES ELSE NO) status(" GtkGlExt:" HAVE_GTKGLEXT THEN YES ELSE NO) endif() endif() @@ -1753,7 +1557,7 @@ status(" OpenGL support:" HAVE_OPENGL THEN YES ELSE NO) # media status("") status(" Media I/O: ") -status(" ZLib:" ZLIB_FOUND THEN ${ZLIB_FOUND} ELSE build) +status(" ZLib:" ZLIB_FOUND THEN ${ZLIB_FOUND} ELSE build) status(" JPEG:" NOT WITH_JPEG OR JPEG_FOUND THEN ${JPEG_FOUND} ELSE build) status(" PNG:" NOT WITH_PNG OR PNG_FOUND THEN ${PNG_FOUND} ELSE build) status(" TIFF:" NOT WITH_TIFF OR TIFF_FOUND THEN ${TIFF_FOUND} ELSE build) @@ -1763,7 +1567,9 @@ status(" OpenEXR:" WITH_OPENEXR AND OPENEXR_FOUND THEN YES status(" OpenNI:" HAVE_OPENNI THEN YES ELSE NO) status(" OpenNI PrimeSensor Modules:" HAVE_OPENNI_PRIME_SENSOR_MODULE THEN YES ELSE NO) -status(" XIMEA:" HAVE_XIMEA THEN YES ELSE NO) +if(WIN32) + status(" XIMEA:" HAVE_XIMEA THEN YES ELSE NO) +endif() # video status("") @@ -1780,7 +1586,7 @@ if(UNIX AND NOT APPLE) status(" GStreamer:" HAVE_GSTREAMER THEN YES ELSE NO) status(" UniCap:" HAVE_UNICAP THEN YES ELSE NO) status(" PvAPI:" HAVE_PVAPI THEN YES ELSE NO) - status(" V4L/V4L2:" HAVE_LIBV4L THEN Using libv4l ELSE ${HAVE_CAMV4L}/${HAVE_CAMV4L2}) + status(" V4L/V4L2:" HAVE_LIBV4L THEN "Using libv4l" ELSE ${HAVE_CAMV4L}/${HAVE_CAMV4L2}) status(" Xine:" HAVE_XINE THEN YES ELSE NO) if(ANDROID) @@ -1792,7 +1598,7 @@ if(UNIX AND NOT APPLE) endif() elseif(APPLE) if(NOT IOS) - status(" Video I/O:" WITH_QUICKTIME THEN QuickTime ELSE QTKit) + status(" Video I/O:" WITH_QUICKTIME THEN QuickTime ELSE QTKit) else() status(" Video I/O: AVFoundation") endif() @@ -1808,15 +1614,10 @@ if(WITH_IPP AND IPP_FOUND) status(" Use IPP:" "${IPP_LATEST_VERSION_STR} [${IPP_LATEST_VERSION_MAJOR}.${IPP_LATEST_VERSION_MINOR}.${IPP_LATEST_VERSION_BUILD}]") status(" at:" "${IPP_ROOT_DIR}") else() - status(" Use IPP:" WITH_IPP AND NOT IPP_FOUND THEN IPP not found ELSE NO) -endif() - -status(" Use TBB:" HAVE_TBB THEN YES ELSE NO) - -if(UNIX) - status(" Use ThreadingFramework:" HAVE_THREADING_FRAMEWORK THEN YES ELSE NO) + status(" Use IPP:" WITH_IPP AND NOT IPP_FOUND THEN "IPP not found" ELSE NO) endif() +status(" Use TBB:" HAVE_TBB THEN YES ELSE NO) status(" Use Cuda:" HAVE_CUDA THEN YES ELSE NO) status(" Use Eigen:" HAVE_EIGEN THEN YES ELSE NO) @@ -1825,12 +1626,10 @@ status(" Python interpreter:" PYTHON_EXECUTABLE THEN "${PYTHON_EXECUTAB # interfaces to other languages status("") status(" Interfaces:") -status(" Python:" BUILD_NEW_PYTHON_SUPPORT THEN YES ELSE NO) -status(" Python numpy:" PYTHON_USE_NUMPY AND BUILD_NEW_PYTHON_SUPPORT THEN YES ELSE "NO (Python wrappers will not be generated)") -if(ANDROID AND ANDROID_NATIVE_API_LEVEL LESS 8) - status(" Java:" "NO (Java API requires Android API level 8 or higher)") -else() - status(" Java:" BUILD_JAVA_SUPPORT THEN YES ELSE NO) +status(" Python:" BUILD_NEW_PYTHON_SUPPORT AND PYTHON_EXECUTABLE THEN YES ELSE NO) +status(" Python numpy:" PYTHON_USE_NUMPY AND BUILD_NEW_PYTHON_SUPPORT THEN YES ELSE "NO (Python wrappers will not be generated)") +if(ANDROID) + status(" Java:" BUILD_JAVA_SUPPORT AND PYTHON_EXECUTABLE THEN YES ELSE NO) endif() # documentation @@ -1838,8 +1637,8 @@ status("") status(" Documentation:") status(" Sphinx:" HAVE_SPHINX THEN "${SPHINX_BUILD} (ver ${SPHINX_VERSION})" ELSE NO) status(" PdfLaTeX compiler:" PDFLATEX_COMPILER THEN "${PDFLATEX_COMPILER}" ELSE NO) -if (BUILD_DOCS AND HAVE_SPHINX) - status(" Build Documentation:" PDFLATEX_COMPILER THEN YES ELSE "YES (only HTML without math formulas)") +if(BUILD_DOCS AND HAVE_SPHINX) + status(" Build Documentation:" PDFLATEX_COMPILER THEN YES ELSE "YES (only HTML without math expressions)") else() status(" Build Documentation:" NO) endif() @@ -1852,11 +1651,11 @@ status(" Performance tests:" BUILD_PERF_TESTS THEN YES ELSE NO) status(" Examples:" BUILD_EXAMPLES THEN YES ELSE NO) if(ANDROID) - status(" Android tests:" BUILD_TESTS AND CAN_BUILD_ANDROID_PROJECTS THEN YES ELSE NO) - status(" Android examples:" BUILD_ANDROID_EXAMPLES THEN YES ELSE NO) + status(" Android tests:" BUILD_TESTS AND CAN_BUILD_ANDROID_PROJECTS THEN YES ELSE NO) + status(" Android examples:" BUILD_ANDROID_EXAMPLES THEN YES ELSE NO) endif() -# auxiliary +#auxiliary status("") status(" Install path:" "${CMAKE_INSTALL_PREFIX}") status("") diff --git a/android/CMakeCache.android.initial.cmake b/android/CMakeCache.android.initial.cmake index ac9391931e..fd7e11713c 100644 --- a/android/CMakeCache.android.initial.cmake +++ b/android/CMakeCache.android.initial.cmake @@ -4,75 +4,9 @@ # cmake -C ######################## -#Build shared libraries (.dll/.so CACHE BOOL "" ) instead of static ones (.lib/.a CACHE BOOL "" ) -set(BUILD_SHARED_LIBS OFF CACHE BOOL "" ) - -#Build 3rd party libraries -set(OPENCV_BUILD_3RDPARTY_LIBS ON CACHE BOOL "" ) - #Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel. set(CMAKE_BUILD_TYPE "Release" CACHE STRING "" ) -#Include IEEE1394 support -set(WITH_1394 OFF CACHE BOOL "" ) - -#Include NVidia Cuda Runtime support -set(WITH_CUDA OFF CACHE BOOL "" ) - -#Include Eigen2/Eigen3 support -set(WITH_EIGEN2 OFF CACHE BOOL "" ) - -#Include FFMPEG support -set(WITH_FFMPEG OFF CACHE BOOL "" ) - -#Include Gstreamer support -set(WITH_GSTREAMER OFF CACHE BOOL "" ) - -#Include GTK support -set(WITH_GTK OFF CACHE BOOL "" ) - -#Include Intel IPP support -set(WITH_IPP OFF CACHE BOOL "" ) - -#Include JPEG2K support -set(WITH_JASPER ON CACHE BOOL "" ) - -#Include JPEG support -set(WITH_JPEG ON CACHE BOOL "" ) - -#Include ILM support via OpenEXR -set(WITH_OPENEXR OFF CACHE BOOL "" ) - -#Include OpenNI support -set(WITH_OPENNI OFF CACHE BOOL "" ) - -#Include PNG support -set(WITH_PNG ON CACHE BOOL "" ) - -#Include Prosilica GigE support -set(WITH_PVAPI OFF CACHE BOOL "" ) - -#Build with Qt Backend support -set(WITH_QT OFF CACHE BOOL "" ) - -#Add OpenGL support -set(WITH_OPENGL OFF CACHE BOOL "" ) - -#Include Intel TBB support -set(WITH_TBB OFF CACHE BOOL "" ) - -#Include TIFF support -set(WITH_TIFF ON CACHE BOOL "" ) - -#Include Unicap support (GPL CACHE BOOL "" ) -set(WITH_UNICAP OFF CACHE BOOL "" ) - -#Include Video 4 Linux support -set(WITH_V4L OFF CACHE BOOL "" ) - -#Include Xine support (GPL CACHE BOOL "" ) -set(WITH_XINE OFF CACHE BOOL "" ) - #no python available on Android set(BUILD_NEW_PYTHON_SUPPORT OFF CACHE INTERNAL "" FORCE) diff --git a/OpenCVAndroidProject.cmake b/cmake/OpenCVAndroidProject.cmake similarity index 97% rename from OpenCVAndroidProject.cmake rename to cmake/OpenCVAndroidProject.cmake index 5fc454b7a8..59c547db94 100644 --- a/OpenCVAndroidProject.cmake +++ b/cmake/OpenCVAndroidProject.cmake @@ -1,143 +1,143 @@ -# creates target "${_target}_android_project" for building standard Android project -macro(add_android_project _target _path) - SET (android_dependencies opencv_contrib opencv_legacy opencv_objdetect opencv_calib3d opencv_features2d opencv_video opencv_highgui opencv_ml opencv_imgproc opencv_flann opencv_core) - if(NOT BUILD_SHARED_LIBS) - LIST(APPEND android_dependencies opencv_androidcamera) - endif() - - if (ANDROID AND CAN_BUILD_ANDROID_PROJECTS) - file(GLOB_RECURSE res_files_all RELATIVE "${_path}" "${_path}/res/*") - file(GLOB_RECURSE jni_files_all RELATIVE "${_path}" "${_path}/jni/*.c*" "${_path}/jni/*.h*") - file(GLOB_RECURSE src_files_all RELATIVE "${_path}" "${_path}/src/*.java") - - #remove .svn - set(res_files) - foreach(f ${res_files_all}) - if(NOT f MATCHES "\\.svn") - list(APPEND res_files "${f}") - endif() - endforeach() - set(jni_files) - foreach(f ${jni_files_all}) - if(NOT f MATCHES "\\.svn") - list(APPEND jni_files "${f}") - endif() - endforeach() - set(src_files) - foreach(f ${src_files_all}) - if(NOT f MATCHES "\\.svn") - list(APPEND src_files "${f}") - endif() - endforeach() - - # get temporary location for the project - file(RELATIVE_PATH build_path "${OpenCV_SOURCE_DIR}" "${_path}") - SET(build_path "${CMAKE_BINARY_DIR}/${build_path}") - - # copy project to temporary location - SET(${_target}_project_files) - foreach(f ${res_files} ${src_files} "AndroidManifest.xml") - if(NOT "${build_path}" STREQUAL "${_path}") - #this is not needed in case of in-source build - add_custom_command( - OUTPUT "${build_path}/${f}" - COMMAND ${CMAKE_COMMAND} -E copy "${_path}/${f}" "${build_path}/${f}" - DEPENDS "${_path}/${f}" - COMMENT "" - ) - endif() - list(APPEND ${_target}_project_files "${build_path}/${f}") - endforeach() - - # process default.properties - file(STRINGS "${_path}/default.properties" default_properties REGEX "^android\\.library\\.reference\\.1=.+$") - if (default_properties) - # has opencv dependency - file(RELATIVE_PATH OPENCV_REFERENCE_PATH "${build_path}" "${CMAKE_BINARY_DIR}") - add_custom_command( - OUTPUT "${build_path}/default.properties" - OUTPUT "${build_path}/build.xml" - OUTPUT "${build_path}/local.properties" - OUTPUT "${build_path}/proguard.cfg" - COMMAND ${CMAKE_COMMAND} -E echo "" > "default.properties" - COMMAND ${ANDROID_EXECUTABLE} update project --name "${_target}" --target "${ANDROID_SDK_TARGET}" --library "${OPENCV_REFERENCE_PATH}" --path . - WORKING_DIRECTORY ${build_path} - DEPENDS ${${_target}_project_files} - DEPENDS "${CMAKE_BINARY_DIR}/default.properties" - DEPENDS "${CMAKE_BINARY_DIR}/AndroidManifest.xml" - COMMENT "Updating android project - ${_target}" - ) - else() - # has no opencv dependency - add_custom_command( - OUTPUT "${build_path}/default.properties" - OUTPUT "${build_path}/build.xml" - OUTPUT "${build_path}/local.properties" - OUTPUT "${build_path}/proguard.cfg" - COMMAND ${CMAKE_COMMAND} -E echo "" > "default.properties" - COMMAND ${ANDROID_EXECUTABLE} update project --name "${_target}" --target "${ANDROID_SDK_TARGET}" --path . - WORKING_DIRECTORY ${build_path} - DEPENDS ${${_target}_project_files} - COMMENT "Updating android project - ${_target}" - ) - endif() - - if("${build_path}" STREQUAL "${_path}") - #in case of in-source build default.properties file is not generated (it is just overwritten :) - SET_SOURCE_FILES_PROPERTIES("${build_path}/default.properties" PROPERTIES GENERATED FALSE) - endif() - - list(APPEND ${_target}_project_files "${build_path}/default.properties" "${build_path}/build.xml" "${build_path}/local.properties" "${build_path}/proguard.cfg") - - # build native part of android project - if(jni_files) - INCLUDE_DIRECTORIES("${_path}/jni") - - FILE(STRINGS "${_path}/jni/Android.mk" JNI_LIB_NAME REGEX "LOCAL_MODULE[ ]*:=[ ]*.*" ) - string(REGEX REPLACE "LOCAL_MODULE[ ]*:=[ ]*([a-zA-Z_][a-zA-Z_0-9]*)[ ]*" "\\1" JNI_LIB_NAME "${JNI_LIB_NAME}") - - SET(jni_sources) - foreach(src ${jni_files}) - list(APPEND jni_sources "${_path}/${src}") - endforeach() - - ADD_LIBRARY(${JNI_LIB_NAME} MODULE ${jni_sources}) - TARGET_LINK_LIBRARIES(${JNI_LIB_NAME} ${OPENCV_LINKER_LIBS} ${android_dependencies}) - - set_target_properties(${JNI_LIB_NAME} PROPERTIES - OUTPUT_NAME "${JNI_LIB_NAME}" - LIBRARY_OUTPUT_DIRECTORY "${build_path}/libs/${ANDROID_NDK_ABI_NAME}" - ) - - ADD_CUSTOM_COMMAND( - TARGET ${JNI_LIB_NAME} - POST_BUILD - COMMAND ${CMAKE_STRIP} "${build_path}/libs/${ANDROID_NDK_ABI_NAME}/*.so" - ) - else() - SET(JNI_LIB_NAME) - endif() - - add_custom_command( - OUTPUT "${build_path}/bin/${_target}-debug.apk" - OUTPUT "${CMAKE_BINARY_DIR}/bin/${_target}.apk" - COMMAND ${ANT_EXECUTABLE} -q -noinput -k debug - COMMAND ${CMAKE_COMMAND} -E copy "${build_path}/bin/${_target}-debug.apk" "${CMAKE_BINARY_DIR}/bin/${_target}.apk" - WORKING_DIRECTORY ${build_path} - DEPENDS ${${_target}_project_files} - DEPENDS "${LIBRARY_OUTPUT_PATH}/libopencv_java.so" - COMMENT "Generating bin/${_target}.apk" - ) - - ADD_CUSTOM_TARGET(${_target}_android_project ALL - DEPENDS "${build_path}/bin/${_target}-debug.apk" - DEPENDS "${CMAKE_BINARY_DIR}/bin/${_target}.apk" - ) - - add_dependencies(${_target}_android_project opencv_java ${JNI_LIB_NAME}) - - if("${ARGN}" STREQUAL "INSTALL" AND INSTALL_ANDROID_EXAMPLES) - install(FILES "${CMAKE_BINARY_DIR}/bin/${_target}.apk" DESTINATION "bin" COMPONENT main) - endif() - endif() -endmacro() +# creates target "${_target}_android_project" for building standard Android project +macro(add_android_project _target _path) + SET (android_dependencies opencv_contrib opencv_legacy opencv_objdetect opencv_calib3d opencv_features2d opencv_video opencv_highgui opencv_ml opencv_imgproc opencv_flann opencv_core) + if(NOT BUILD_SHARED_LIBS) + LIST(APPEND android_dependencies opencv_androidcamera) + endif() + + if (ANDROID AND CAN_BUILD_ANDROID_PROJECTS) + file(GLOB_RECURSE res_files_all RELATIVE "${_path}" "${_path}/res/*") + file(GLOB_RECURSE jni_files_all RELATIVE "${_path}" "${_path}/jni/*.c*" "${_path}/jni/*.h*") + file(GLOB_RECURSE src_files_all RELATIVE "${_path}" "${_path}/src/*.java") + + #remove .svn + set(res_files) + foreach(f ${res_files_all}) + if(NOT f MATCHES "\\.svn") + list(APPEND res_files "${f}") + endif() + endforeach() + set(jni_files) + foreach(f ${jni_files_all}) + if(NOT f MATCHES "\\.svn") + list(APPEND jni_files "${f}") + endif() + endforeach() + set(src_files) + foreach(f ${src_files_all}) + if(NOT f MATCHES "\\.svn") + list(APPEND src_files "${f}") + endif() + endforeach() + + # get temporary location for the project + file(RELATIVE_PATH build_path "${OpenCV_SOURCE_DIR}" "${_path}") + SET(build_path "${CMAKE_BINARY_DIR}/${build_path}") + + # copy project to temporary location + SET(${_target}_project_files) + foreach(f ${res_files} ${src_files} "AndroidManifest.xml") + if(NOT "${build_path}" STREQUAL "${_path}") + #this is not needed in case of in-source build + add_custom_command( + OUTPUT "${build_path}/${f}" + COMMAND ${CMAKE_COMMAND} -E copy "${_path}/${f}" "${build_path}/${f}" + DEPENDS "${_path}/${f}" + COMMENT "" + ) + endif() + list(APPEND ${_target}_project_files "${build_path}/${f}") + endforeach() + + # process default.properties + file(STRINGS "${_path}/default.properties" default_properties REGEX "^android\\.library\\.reference\\.1=.+$") + if (default_properties) + # has opencv dependency + file(RELATIVE_PATH OPENCV_REFERENCE_PATH "${build_path}" "${CMAKE_BINARY_DIR}") + add_custom_command( + OUTPUT "${build_path}/default.properties" + OUTPUT "${build_path}/build.xml" + OUTPUT "${build_path}/local.properties" + OUTPUT "${build_path}/proguard.cfg" + COMMAND ${CMAKE_COMMAND} -E echo "" > "default.properties" + COMMAND ${ANDROID_EXECUTABLE} update project --name "${_target}" --target "${ANDROID_SDK_TARGET}" --library "${OPENCV_REFERENCE_PATH}" --path . + WORKING_DIRECTORY ${build_path} + DEPENDS ${${_target}_project_files} + DEPENDS "${CMAKE_BINARY_DIR}/default.properties" + DEPENDS "${CMAKE_BINARY_DIR}/AndroidManifest.xml" + COMMENT "Updating android project - ${_target}" + ) + else() + # has no opencv dependency + add_custom_command( + OUTPUT "${build_path}/default.properties" + OUTPUT "${build_path}/build.xml" + OUTPUT "${build_path}/local.properties" + OUTPUT "${build_path}/proguard.cfg" + COMMAND ${CMAKE_COMMAND} -E echo "" > "default.properties" + COMMAND ${ANDROID_EXECUTABLE} update project --name "${_target}" --target "${ANDROID_SDK_TARGET}" --path . + WORKING_DIRECTORY ${build_path} + DEPENDS ${${_target}_project_files} + COMMENT "Updating android project - ${_target}" + ) + endif() + + if("${build_path}" STREQUAL "${_path}") + #in case of in-source build default.properties file is not generated (it is just overwritten :) + SET_SOURCE_FILES_PROPERTIES("${build_path}/default.properties" PROPERTIES GENERATED FALSE) + endif() + + list(APPEND ${_target}_project_files "${build_path}/default.properties" "${build_path}/build.xml" "${build_path}/local.properties" "${build_path}/proguard.cfg") + + # build native part of android project + if(jni_files) + INCLUDE_DIRECTORIES("${_path}/jni") + + FILE(STRINGS "${_path}/jni/Android.mk" JNI_LIB_NAME REGEX "LOCAL_MODULE[ ]*:=[ ]*.*" ) + string(REGEX REPLACE "LOCAL_MODULE[ ]*:=[ ]*([a-zA-Z_][a-zA-Z_0-9]*)[ ]*" "\\1" JNI_LIB_NAME "${JNI_LIB_NAME}") + + SET(jni_sources) + foreach(src ${jni_files}) + list(APPEND jni_sources "${_path}/${src}") + endforeach() + + ADD_LIBRARY(${JNI_LIB_NAME} MODULE ${jni_sources}) + TARGET_LINK_LIBRARIES(${JNI_LIB_NAME} ${OPENCV_LINKER_LIBS} ${android_dependencies}) + + set_target_properties(${JNI_LIB_NAME} PROPERTIES + OUTPUT_NAME "${JNI_LIB_NAME}" + LIBRARY_OUTPUT_DIRECTORY "${build_path}/libs/${ANDROID_NDK_ABI_NAME}" + ) + + ADD_CUSTOM_COMMAND( + TARGET ${JNI_LIB_NAME} + POST_BUILD + COMMAND ${CMAKE_STRIP} "${build_path}/libs/${ANDROID_NDK_ABI_NAME}/*.so" + ) + else() + SET(JNI_LIB_NAME) + endif() + + add_custom_command( + OUTPUT "${build_path}/bin/${_target}-debug.apk" + OUTPUT "${CMAKE_BINARY_DIR}/bin/${_target}.apk" + COMMAND ${ANT_EXECUTABLE} -q -noinput -k debug + COMMAND ${CMAKE_COMMAND} -E copy "${build_path}/bin/${_target}-debug.apk" "${CMAKE_BINARY_DIR}/bin/${_target}.apk" + WORKING_DIRECTORY ${build_path} + DEPENDS ${${_target}_project_files} + DEPENDS "${LIBRARY_OUTPUT_PATH}/libopencv_java.so" + COMMENT "Generating bin/${_target}.apk" + ) + + ADD_CUSTOM_TARGET(${_target}_android_project ALL + DEPENDS "${build_path}/bin/${_target}-debug.apk" + DEPENDS "${CMAKE_BINARY_DIR}/bin/${_target}.apk" + ) + + add_dependencies(${_target}_android_project opencv_java ${JNI_LIB_NAME}) + + if("${ARGN}" STREQUAL "INSTALL" AND INSTALL_ANDROID_EXAMPLES) + install(FILES "${CMAKE_BINARY_DIR}/bin/${_target}.apk" DESTINATION "bin" COMPONENT main) + endif() + endif() +endmacro() diff --git a/OpenCVFindIPP.cmake b/cmake/OpenCVFindIPP.cmake similarity index 93% rename from OpenCVFindIPP.cmake rename to cmake/OpenCVFindIPP.cmake index 69f7f2e256..0bf0970105 100644 --- a/OpenCVFindIPP.cmake +++ b/cmake/OpenCVFindIPP.cmake @@ -1,320 +1,322 @@ -# -# The script to detect Intel(R) Integrated Performance Primitives (IPP) -# installation/package -# -# This will try to find Intel IPP libraries, and include path by automatic -# search through typical install locations and if failed it will -# examine IPPROOT environment variable. -# Note, IPPROOT is not set by IPP installer, it should be set manually. -# -# On return this will define: -# -# IPP_FOUND - True if Intel IPP found -# IPP_ROOT_DIR - root of IPP installation -# IPP_INCLUDE_DIRS - IPP include folder -# IPP_LIBRARY_DIRS - IPP libraries folder -# IPP_LIBRARIES - IPP libraries names that are used by OpenCV -# IPP_LATEST_VERSION_STR - string with the newest detected IPP version -# IPP_LATEST_VERSION_MAJOR - numbers of IPP version (MAJOR.MINOR.BUILD) -# IPP_LATEST_VERSION_MINOR -# IPP_LATEST_VERSION_BUILD -# -# Created: 30 Dec 2010 by Vladimir Dudnik (vladimir.dudnik@intel.com) -# - -set(IPP_FOUND) -set(IPP_VERSION_STR "5.3.0.0") # will not detect earlier versions -set(IPP_VERSION_MAJOR 0) -set(IPP_VERSION_MINOR 0) -set(IPP_VERSION_BUILD 0) -set(IPP_ROOT_DIR) -set(IPP_INCLUDE_DIRS) -set(IPP_LIBRARY_DIRS) -set(IPP_LIBRARIES) -set(LIB_PREFIX ${CMAKE_STATIC_LIBRARY_PREFIX}) -set(LIB_SUFFIX ${CMAKE_STATIC_LIBRARY_SUFFIX}) -set(IPP_PREFIX "ipp") -set(IPP_SUFFIX "_l") -set(IPPCORE "core") # core functionality -set(IPPS "s") # signal processing -set(IPPI "i") # image processing -set(IPPCC "cc") # color conversion -set(IPPCV "cv") # computer vision -set(IPPVM "vm") # vector math - - -set(IPP_X64 0) -if (CMAKE_CXX_SIZEOF_DATA_PTR EQUAL 8) - set(IPP_X64 1) -endif() -if (CMAKE_CL_64) - set(IPP_X64 1) -endif() - -# ------------------------------------------------------------------------ -# This function detect IPP version by analyzing ippversion.h file -# Note, ippversion.h file was inroduced since IPP 5.3 -# ------------------------------------------------------------------------ -function(get_ipp_version _ROOT_DIR) - set(_VERSION_STR) - set(_MAJOR) - set(_MINOR) - set(_BUILD) - - # read IPP version info from file - file(STRINGS ${_ROOT_DIR}/include/ippversion.h STR1 REGEX "IPP_VERSION_MAJOR") - file(STRINGS ${_ROOT_DIR}/include/ippversion.h STR2 REGEX "IPP_VERSION_MINOR") - file(STRINGS ${_ROOT_DIR}/include/ippversion.h STR3 REGEX "IPP_VERSION_BUILD") - file(STRINGS ${_ROOT_DIR}/include/ippversion.h STR4 REGEX "IPP_VERSION_STR") - - # extract info and assign to variables - string(REGEX MATCHALL "[0-9]+" _MAJOR ${STR1}) - string(REGEX MATCHALL "[0-9]+" _MINOR ${STR2}) - string(REGEX MATCHALL "[0-9]+" _BUILD ${STR3}) - string(REGEX MATCHALL "[0-9]+[.]+[0-9]+[^\"]+|[0-9]+[.]+[0-9]+" _VERSION_STR ${STR4}) - - # export info to parent scope - set(IPP_VERSION_STR ${_VERSION_STR} PARENT_SCOPE) - set(IPP_VERSION_MAJOR ${_MAJOR} PARENT_SCOPE) - set(IPP_VERSION_MINOR ${_MINOR} PARENT_SCOPE) - set(IPP_VERSION_BUILD ${_BUILD} PARENT_SCOPE) - - message(STATUS "found IPP: ${_MAJOR}.${_MINOR}.${_BUILD} [${_VERSION_STR}]") - message(STATUS "at: ${_ROOT_DIR}") - - return() - -endfunction() - - -# ------------------------------------------------------------------------ -# This is auxiliary function called from set_ipp_variables() -# to set IPP_LIBRARIES variable in IPP 6.x style (IPP 5.3 should also work) -# ------------------------------------------------------------------------ -function(set_ipp_old_libraries) - set(IPP_PREFIX "ipp") - set(IPP_SUFFIX) # old style static core libs suffix - set(IPP_ARCH) # architecture suffix - set(IPP_DISP "emerged") # old style dipatcher and cpu-specific - set(IPP_MRGD "merged") # static libraries - set(IPPCORE "core") # core functionality - set(IPPSP "s") # signal processing - set(IPPIP "i") # image processing - set(IPPCC "cc") # color conversion - set(IPPCV "cv") # computer vision - set(IPPVM "vm") # vector math - - if (IPP_X64) - set(IPP_ARCH "em64t") - endif() - - if(WIN32) - set(IPP_SUFFIX "l") - endif() - - set(IPP_LIBRARIES - ${LIB_PREFIX}${IPP_PREFIX}${IPPVM}${IPP_MRGD}${IPP_ARCH}${LIB_SUFFIX} - ${LIB_PREFIX}${IPP_PREFIX}${IPPVM}${IPP_DISP}${IPP_ARCH}${LIB_SUFFIX} - ${LIB_PREFIX}${IPP_PREFIX}${IPPCC}${IPP_MRGD}${IPP_ARCH}${LIB_SUFFIX} - ${LIB_PREFIX}${IPP_PREFIX}${IPPCC}${IPP_DISP}${IPP_ARCH}${LIB_SUFFIX} - ${LIB_PREFIX}${IPP_PREFIX}${IPPCV}${IPP_MRGD}${IPP_ARCH}${LIB_SUFFIX} - ${LIB_PREFIX}${IPP_PREFIX}${IPPCV}${IPP_DISP}${IPP_ARCH}${LIB_SUFFIX} - ${LIB_PREFIX}${IPP_PREFIX}${IPPIP}${IPP_MRGD}${IPP_ARCH}${LIB_SUFFIX} - ${LIB_PREFIX}${IPP_PREFIX}${IPPIP}${IPP_DISP}${IPP_ARCH}${LIB_SUFFIX} - ${LIB_PREFIX}${IPP_PREFIX}${IPPSP}${IPP_MRGD}${IPP_ARCH}${LIB_SUFFIX} - ${LIB_PREFIX}${IPP_PREFIX}${IPPSP}${IPP_DISP}${IPP_ARCH}${LIB_SUFFIX} - ${LIB_PREFIX}${IPP_PREFIX}${IPPCORE}${IPP_ARCH}${IPP_SUFFIX}${LIB_SUFFIX} - PARENT_SCOPE) - - return() - -endfunction() - - -# ------------------------------------------------------------------------ -# This is auxiliary function called from set_ipp_variables() -# to set IPP_LIBRARIES variable in IPP 7.x style -# ------------------------------------------------------------------------ -function(set_ipp_new_libraries) - set(IPP_PREFIX "ipp") - set(IPP_SUFFIX "_l") # static not threaded libs suffix - set(IPP_THRD "_t") # static threaded libs suffix - set(IPPCORE "core") # core functionality - set(IPPSP "s") # signal processing - set(IPPIP "i") # image processing - set(IPPCC "cc") # color conversion - set(IPPCV "cv") # computer vision - set(IPPVM "vm") # vector math - - set(IPP_LIBRARIES - ${LIB_PREFIX}${IPP_PREFIX}${IPPVM}${IPP_SUFFIX}${LIB_SUFFIX} - ${LIB_PREFIX}${IPP_PREFIX}${IPPCC}${IPP_SUFFIX}${LIB_SUFFIX} - ${LIB_PREFIX}${IPP_PREFIX}${IPPCV}${IPP_SUFFIX}${LIB_SUFFIX} - ${LIB_PREFIX}${IPP_PREFIX}${IPPI}${IPP_SUFFIX}${LIB_SUFFIX} - ${LIB_PREFIX}${IPP_PREFIX}${IPPS}${IPP_SUFFIX}${LIB_SUFFIX} - ${LIB_PREFIX}${IPP_PREFIX}${IPPCORE}${IPP_SUFFIX}${LIB_SUFFIX} - PARENT_SCOPE) - - return() - -endfunction() - - -# ------------------------------------------------------------------------ -# This function will set -# IPP_INCLUDE_DIRS, IPP_LIBRARY_DIRS and IPP_LIBRARIES variables depending -# on IPP version parameter. -# Since IPP 7.0 version library names and install folder structure -# was changed -# ------------------------------------------------------------------------ -function(set_ipp_variables _LATEST_VERSION) - if(${_LATEST_VERSION} VERSION_LESS "7.0") -# message(STATUS "old") - - # set INCLUDE and LIB folders - set(IPP_INCLUDE_DIRS ${IPP_ROOT_DIR}/include PARENT_SCOPE) - set(IPP_LIBRARY_DIRS ${IPP_ROOT_DIR}/lib PARENT_SCOPE) - - if (IPP_X64) - if(NOT EXISTS ${IPP_ROOT_DIR}/../em64t) - message(SEND_ERROR "IPP EM64T libraries not found") - endif() - else() - if(NOT EXISTS ${IPP_ROOT_DIR}/../ia32) - message(SEND_ERROR "IPP IA32 libraries not found") - endif() - endif() - - # set IPP_LIBRARIES variable (6.x lib names) - set_ipp_old_libraries() - set(IPP_LIBRARIES ${IPP_LIBRARIES} PARENT_SCOPE) - message(STATUS "IPP libs: ${IPP_LIBRARIES}") - - else() -# message(STATUS "new") - - # set INCLUDE and LIB folders - set(IPP_INCLUDE_DIRS ${IPP_ROOT_DIR}/include PARENT_SCOPE) - - if (IPP_X64) - if(NOT EXISTS ${IPP_ROOT_DIR}/lib/intel64) - message(SEND_ERROR "IPP EM64T libraries not found") - endif() - set(IPP_LIBRARY_DIRS ${IPP_ROOT_DIR}/lib/intel64 PARENT_SCOPE) - else() - if(NOT EXISTS ${IPP_ROOT_DIR}/lib/ia32) - message(SEND_ERROR "IPP IA32 libraries not found") - endif() - set(IPP_LIBRARY_DIRS ${IPP_ROOT_DIR}/lib/ia32 PARENT_SCOPE) - endif() - - # set IPP_LIBRARIES variable (7.x lib names) - set_ipp_new_libraries() - set(IPP_LIBRARIES ${IPP_LIBRARIES} PARENT_SCOPE) - message(STATUS "IPP libs: ${IPP_LIBRARIES}") - - endif() - - return() - -endfunction() - - - # ------------------------------------------------------------------------ - # This section will look for IPP through IPPROOT env variable - # Note, IPPROOT is not set by IPP installer, you may need to set it manually - # ------------------------------------------------------------------------ - find_path( - IPP_H_PATH - NAMES ippversion.h - PATHS $ENV{IPPROOT} - PATH_SUFFIXES include - DOC "The path to Intel(R) IPP header files" - NO_DEFAULT_PATH - NO_CMAKE_PATH) - - if(IPP_H_PATH) - - set(IPP_FOUND 1) - - # traverse up to IPPROOT level - get_filename_component(IPP_ROOT_DIR ${IPP_H_PATH} PATH) - - # extract IPP version info - get_ipp_version(${IPP_ROOT_DIR}) - - # keep info in the same vars for auto search and search by IPPROOT - set(IPP_LATEST_VERSION_STR ${IPP_VERSION_STR}) - set(IPP_LATEST_VERSION_MAJOR ${IPP_VERSION_MAJOR}) - set(IPP_LATEST_VERSION_MINOR ${IPP_VERSION_MINOR}) - set(IPP_LATEST_VERSION_BUILD ${IPP_VERSION_BUILD}) - - # set IPP INCLUDE, LIB dirs and library names - set_ipp_variables(${IPP_LATEST_VERSION_STR}) - - endif() - - - if(IPP_FOUND) - return() - endif() - - # reset var from previous search - set(IPP_H_PATH) - - - # ------------------------------------------------------------------------ - # This section will look for IPP through system program folders - # Note, if several IPP installations found the newest version will be - # selected - # ------------------------------------------------------------------------ - foreach(curdir ${CMAKE_SYSTEM_PREFIX_PATH}) - set(curdir ${curdir}/intel) - file(TO_CMAKE_PATH ${curdir} CURDIR) - - if(EXISTS ${curdir}) - file(GLOB_RECURSE IPP_H_DIR ${curdir}/ippversion.h) - - if(IPP_H_DIR) - set(IPP_FOUND 1) - endif() - - # init IPP_LATEST_VERSION version with oldest detectable version (5.3.0.0) - # IPP prior 5.3 did not have ippversion.h file - set(IPP_LATEST_VERSION_STR ${IPP_VERSION_STR}) - - # look through all dirs where ippversion.h was found - foreach(item ${IPP_H_DIR}) - - # traverse up to IPPROOT level - get_filename_component(_FILE_PATH ${item} PATH) - get_filename_component(_ROOT_DIR ${_FILE_PATH} PATH) - - # extract IPP version info - get_ipp_version(${_ROOT_DIR}) - - # remember the latest version (if many found) - if(${IPP_LATEST_VERSION_STR} VERSION_LESS ${IPP_VERSION_STR}) - set(IPP_LATEST_VERSION_STR ${IPP_VERSION_STR}) - set(IPP_LATEST_VERSION_MAJOR ${IPP_VERSION_MAJOR}) - set(IPP_LATEST_VERSION_MINOR ${IPP_VERSION_MINOR}) - set(IPP_LATEST_VERSION_BUILD ${IPP_VERSION_BUILD}) - set(IPP_ROOT_DIR ${_ROOT_DIR}) - endif() - endforeach() - endif() - endforeach() - - # set IPP INCLUDE, LIB dirs and library names - set_ipp_variables(${IPP_LATEST_VERSION_STR}) - - # set CACHE variable IPP_H_PATH, - # path to IPP header files for the latest version - find_path( - IPP_H_PATH - NAMES ippversion.h - PATHS ${IPP_ROOT_DIR} - PATH_SUFFIXES include - DOC "The path to Intel(R) IPP header files" - NO_DEFAULT_PATH - NO_CMAKE_PATH) +# +# The script to detect Intel(R) Integrated Performance Primitives (IPP) +# installation/package +# +# This will try to find Intel IPP libraries, and include path by automatic +# search through typical install locations and if failed it will +# examine IPPROOT environment variable. +# Note, IPPROOT is not set by IPP installer, it should be set manually. +# +# On return this will define: +# +# IPP_FOUND - True if Intel IPP found +# IPP_ROOT_DIR - root of IPP installation +# IPP_INCLUDE_DIRS - IPP include folder +# IPP_LIBRARY_DIRS - IPP libraries folder +# IPP_LIBRARIES - IPP libraries names that are used by OpenCV +# IPP_LATEST_VERSION_STR - string with the newest detected IPP version +# IPP_LATEST_VERSION_MAJOR - numbers of IPP version (MAJOR.MINOR.BUILD) +# IPP_LATEST_VERSION_MINOR +# IPP_LATEST_VERSION_BUILD +# +# Created: 30 Dec 2010 by Vladimir Dudnik (vladimir.dudnik@intel.com) +# + +set(IPP_FOUND) +set(IPP_VERSION_STR "5.3.0.0") # will not detect earlier versions +set(IPP_VERSION_MAJOR 0) +set(IPP_VERSION_MINOR 0) +set(IPP_VERSION_BUILD 0) +set(IPP_ROOT_DIR) +set(IPP_INCLUDE_DIRS) +set(IPP_LIBRARY_DIRS) +set(IPP_LIBRARIES) +set(LIB_PREFIX ${CMAKE_STATIC_LIBRARY_PREFIX}) +set(LIB_SUFFIX ${CMAKE_STATIC_LIBRARY_SUFFIX}) +set(IPP_PREFIX "ipp") +set(IPP_SUFFIX "_l") +set(IPPCORE "core") # core functionality +set(IPPS "s") # signal processing +set(IPPI "i") # image processing +set(IPPCC "cc") # color conversion +set(IPPCV "cv") # computer vision +set(IPPVM "vm") # vector math + + +set(IPP_X64 0) +if (CMAKE_CXX_SIZEOF_DATA_PTR EQUAL 8) + set(IPP_X64 1) +endif() +if (CMAKE_CL_64) + set(IPP_X64 1) +endif() + +# ------------------------------------------------------------------------ +# This function detect IPP version by analyzing ippversion.h file +# Note, ippversion.h file was inroduced since IPP 5.3 +# ------------------------------------------------------------------------ +function(get_ipp_version _ROOT_DIR) + set(_VERSION_STR) + set(_MAJOR) + set(_MINOR) + set(_BUILD) + + # read IPP version info from file + file(STRINGS ${_ROOT_DIR}/include/ippversion.h STR1 REGEX "IPP_VERSION_MAJOR") + file(STRINGS ${_ROOT_DIR}/include/ippversion.h STR2 REGEX "IPP_VERSION_MINOR") + file(STRINGS ${_ROOT_DIR}/include/ippversion.h STR3 REGEX "IPP_VERSION_BUILD") + file(STRINGS ${_ROOT_DIR}/include/ippversion.h STR4 REGEX "IPP_VERSION_STR") + + # extract info and assign to variables + string(REGEX MATCHALL "[0-9]+" _MAJOR ${STR1}) + string(REGEX MATCHALL "[0-9]+" _MINOR ${STR2}) + string(REGEX MATCHALL "[0-9]+" _BUILD ${STR3}) + string(REGEX MATCHALL "[0-9]+[.]+[0-9]+[^\"]+|[0-9]+[.]+[0-9]+" _VERSION_STR ${STR4}) + + # export info to parent scope + set(IPP_VERSION_STR ${_VERSION_STR} PARENT_SCOPE) + set(IPP_VERSION_MAJOR ${_MAJOR} PARENT_SCOPE) + set(IPP_VERSION_MINOR ${_MINOR} PARENT_SCOPE) + set(IPP_VERSION_BUILD ${_BUILD} PARENT_SCOPE) + + message(STATUS "found IPP: ${_MAJOR}.${_MINOR}.${_BUILD} [${_VERSION_STR}]") + message(STATUS "at: ${_ROOT_DIR}") + + return() + +endfunction() + + +# ------------------------------------------------------------------------ +# This is auxiliary function called from set_ipp_variables() +# to set IPP_LIBRARIES variable in IPP 6.x style (IPP 5.3 should also work) +# ------------------------------------------------------------------------ +function(set_ipp_old_libraries) + set(IPP_PREFIX "ipp") + set(IPP_SUFFIX) # old style static core libs suffix + set(IPP_ARCH) # architecture suffix + set(IPP_DISP "emerged") # old style dipatcher and cpu-specific + set(IPP_MRGD "merged") # static libraries + set(IPPCORE "core") # core functionality + set(IPPSP "s") # signal processing + set(IPPIP "i") # image processing + set(IPPCC "cc") # color conversion + set(IPPCV "cv") # computer vision + set(IPPVM "vm") # vector math + + if (IPP_X64) + set(IPP_ARCH "em64t") + endif() + + if(WIN32) + set(IPP_SUFFIX "l") + endif() + + set(IPP_LIBRARIES + ${LIB_PREFIX}${IPP_PREFIX}${IPPVM}${IPP_MRGD}${IPP_ARCH}${LIB_SUFFIX} + ${LIB_PREFIX}${IPP_PREFIX}${IPPVM}${IPP_DISP}${IPP_ARCH}${LIB_SUFFIX} + ${LIB_PREFIX}${IPP_PREFIX}${IPPCC}${IPP_MRGD}${IPP_ARCH}${LIB_SUFFIX} + ${LIB_PREFIX}${IPP_PREFIX}${IPPCC}${IPP_DISP}${IPP_ARCH}${LIB_SUFFIX} + ${LIB_PREFIX}${IPP_PREFIX}${IPPCV}${IPP_MRGD}${IPP_ARCH}${LIB_SUFFIX} + ${LIB_PREFIX}${IPP_PREFIX}${IPPCV}${IPP_DISP}${IPP_ARCH}${LIB_SUFFIX} + ${LIB_PREFIX}${IPP_PREFIX}${IPPIP}${IPP_MRGD}${IPP_ARCH}${LIB_SUFFIX} + ${LIB_PREFIX}${IPP_PREFIX}${IPPIP}${IPP_DISP}${IPP_ARCH}${LIB_SUFFIX} + ${LIB_PREFIX}${IPP_PREFIX}${IPPSP}${IPP_MRGD}${IPP_ARCH}${LIB_SUFFIX} + ${LIB_PREFIX}${IPP_PREFIX}${IPPSP}${IPP_DISP}${IPP_ARCH}${LIB_SUFFIX} + ${LIB_PREFIX}${IPP_PREFIX}${IPPCORE}${IPP_ARCH}${IPP_SUFFIX}${LIB_SUFFIX} + PARENT_SCOPE) + + return() + +endfunction() + + +# ------------------------------------------------------------------------ +# This is auxiliary function called from set_ipp_variables() +# to set IPP_LIBRARIES variable in IPP 7.x style +# ------------------------------------------------------------------------ +function(set_ipp_new_libraries) + set(IPP_PREFIX "ipp") + set(IPP_SUFFIX "_l") # static not threaded libs suffix + set(IPP_THRD "_t") # static threaded libs suffix + set(IPPCORE "core") # core functionality + set(IPPSP "s") # signal processing + set(IPPIP "i") # image processing + set(IPPCC "cc") # color conversion + set(IPPCV "cv") # computer vision + set(IPPVM "vm") # vector math + + set(IPP_LIBRARIES + ${LIB_PREFIX}${IPP_PREFIX}${IPPVM}${IPP_SUFFIX}${LIB_SUFFIX} + ${LIB_PREFIX}${IPP_PREFIX}${IPPCC}${IPP_SUFFIX}${LIB_SUFFIX} + ${LIB_PREFIX}${IPP_PREFIX}${IPPCV}${IPP_SUFFIX}${LIB_SUFFIX} + ${LIB_PREFIX}${IPP_PREFIX}${IPPI}${IPP_SUFFIX}${LIB_SUFFIX} + ${LIB_PREFIX}${IPP_PREFIX}${IPPS}${IPP_SUFFIX}${LIB_SUFFIX} + ${LIB_PREFIX}${IPP_PREFIX}${IPPCORE}${IPP_SUFFIX}${LIB_SUFFIX} + PARENT_SCOPE) + + return() + +endfunction() + + +# ------------------------------------------------------------------------ +# This function will set +# IPP_INCLUDE_DIRS, IPP_LIBRARY_DIRS and IPP_LIBRARIES variables depending +# on IPP version parameter. +# Since IPP 7.0 version library names and install folder structure +# was changed +# ------------------------------------------------------------------------ +function(set_ipp_variables _LATEST_VERSION) + if(${_LATEST_VERSION} VERSION_LESS "7.0") +# message(STATUS "old") + + # set INCLUDE and LIB folders + set(IPP_INCLUDE_DIRS ${IPP_ROOT_DIR}/include PARENT_SCOPE) + set(IPP_LIBRARY_DIRS ${IPP_ROOT_DIR}/lib PARENT_SCOPE) + + if (IPP_X64) + if(NOT EXISTS ${IPP_ROOT_DIR}/../em64t) + message(SEND_ERROR "IPP EM64T libraries not found") + endif() + else() + if(NOT EXISTS ${IPP_ROOT_DIR}/../ia32) + message(SEND_ERROR "IPP IA32 libraries not found") + endif() + endif() + + # set IPP_LIBRARIES variable (6.x lib names) + set_ipp_old_libraries() + set(IPP_LIBRARIES ${IPP_LIBRARIES} PARENT_SCOPE) + message(STATUS "IPP libs: ${IPP_LIBRARIES}") + + else() +# message(STATUS "new") + + # set INCLUDE and LIB folders + set(IPP_INCLUDE_DIRS ${IPP_ROOT_DIR}/include PARENT_SCOPE) + + if (IPP_X64) + if(NOT EXISTS ${IPP_ROOT_DIR}/lib/intel64) + message(SEND_ERROR "IPP EM64T libraries not found") + endif() + set(IPP_LIBRARY_DIRS ${IPP_ROOT_DIR}/lib/intel64 PARENT_SCOPE) + else() + if(NOT EXISTS ${IPP_ROOT_DIR}/lib/ia32) + message(SEND_ERROR "IPP IA32 libraries not found") + endif() + set(IPP_LIBRARY_DIRS ${IPP_ROOT_DIR}/lib/ia32 PARENT_SCOPE) + endif() + + # set IPP_LIBRARIES variable (7.x lib names) + set_ipp_new_libraries() + set(IPP_LIBRARIES ${IPP_LIBRARIES} PARENT_SCOPE) + message(STATUS "IPP libs: ${IPP_LIBRARIES}") + + endif() + + return() + +endfunction() + + + # ------------------------------------------------------------------------ + # This section will look for IPP through IPPROOT env variable + # Note, IPPROOT is not set by IPP installer, you may need to set it manually + # ------------------------------------------------------------------------ + find_path( + IPP_H_PATH + NAMES ippversion.h + PATHS $ENV{IPPROOT} + PATH_SUFFIXES include + DOC "The path to Intel(R) IPP header files" + NO_DEFAULT_PATH + NO_CMAKE_PATH) + + if(IPP_H_PATH) + + set(IPP_FOUND 1) + + # traverse up to IPPROOT level + get_filename_component(IPP_ROOT_DIR ${IPP_H_PATH} PATH) + + # extract IPP version info + get_ipp_version(${IPP_ROOT_DIR}) + + # keep info in the same vars for auto search and search by IPPROOT + set(IPP_LATEST_VERSION_STR ${IPP_VERSION_STR}) + set(IPP_LATEST_VERSION_MAJOR ${IPP_VERSION_MAJOR}) + set(IPP_LATEST_VERSION_MINOR ${IPP_VERSION_MINOR}) + set(IPP_LATEST_VERSION_BUILD ${IPP_VERSION_BUILD}) + + # set IPP INCLUDE, LIB dirs and library names + set_ipp_variables(${IPP_LATEST_VERSION_STR}) + + endif() + + + if(IPP_FOUND) + return() + endif() + + # reset var from previous search + set(IPP_H_PATH) + + + # ------------------------------------------------------------------------ + # This section will look for IPP through system program folders + # Note, if several IPP installations found the newest version will be + # selected + # ------------------------------------------------------------------------ + foreach(curdir ${CMAKE_SYSTEM_PREFIX_PATH}) + set(curdir ${curdir}/intel) + file(TO_CMAKE_PATH ${curdir} CURDIR) + + if(EXISTS ${curdir}) + file(GLOB_RECURSE IPP_H_DIR ${curdir}/ippversion.h) + + if(IPP_H_DIR) + set(IPP_FOUND 1) + endif() + + # init IPP_LATEST_VERSION version with oldest detectable version (5.3.0.0) + # IPP prior 5.3 did not have ippversion.h file + set(IPP_LATEST_VERSION_STR ${IPP_VERSION_STR}) + + # look through all dirs where ippversion.h was found + foreach(item ${IPP_H_DIR}) + + # traverse up to IPPROOT level + get_filename_component(_FILE_PATH ${item} PATH) + get_filename_component(_ROOT_DIR ${_FILE_PATH} PATH) + + # extract IPP version info + get_ipp_version(${_ROOT_DIR}) + + # remember the latest version (if many found) + if(${IPP_LATEST_VERSION_STR} VERSION_LESS ${IPP_VERSION_STR}) + set(IPP_LATEST_VERSION_STR ${IPP_VERSION_STR}) + set(IPP_LATEST_VERSION_MAJOR ${IPP_VERSION_MAJOR}) + set(IPP_LATEST_VERSION_MINOR ${IPP_VERSION_MINOR}) + set(IPP_LATEST_VERSION_BUILD ${IPP_VERSION_BUILD}) + set(IPP_ROOT_DIR ${_ROOT_DIR}) + endif() + endforeach() + endif() + endforeach() + + if(IPP_FOUND) + # set IPP INCLUDE, LIB dirs and library names + set_ipp_variables(${IPP_LATEST_VERSION_STR}) + + # set CACHE variable IPP_H_PATH, + # path to IPP header files for the latest version + find_path( + IPP_H_PATH + NAMES ippversion.h + PATHS ${IPP_ROOT_DIR} + PATH_SUFFIXES include + DOC "The path to Intel(R) IPP header files" + NO_DEFAULT_PATH + NO_CMAKE_PATH) + endif() diff --git a/OpenCVFindLATEX.cmake b/cmake/OpenCVFindLATEX.cmake similarity index 97% rename from OpenCVFindLATEX.cmake rename to cmake/OpenCVFindLATEX.cmake index 081f47853d..fb324ce9b2 100644 --- a/OpenCVFindLATEX.cmake +++ b/cmake/OpenCVFindLATEX.cmake @@ -1,14 +1,14 @@ # - Find Latex # This module finds if Latex is installed and determines where the # executables are. This code sets the following variables: -# +# # LATEX_COMPILER: path to the LaTeX compiler # PDFLATEX_COMPILER: path to the PdfLaTeX compiler # BIBTEX_COMPILER: path to the BibTeX compiler # MAKEINDEX_COMPILER: path to the MakeIndex compiler # DVIPS_CONVERTER: path to the DVIPS converter # PS2PDF_CONVERTER: path to the PS2PDF converter -# LATEX2HTML_CONVERTER: path to the LaTeX2Html converter +# LATEX2HTML_CONVERTER: path to the LaTeX2Html converter # IF (WIN32) @@ -17,7 +17,7 @@ IF (WIN32) FIND_PATH(MIKTEX_BINARY_PATH mpm.exe "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MiK\\MiKTeX\\CurrentVersion\\MiKTeX;Install Root]/miktex/bin" - DOC + DOC "Path to the MikTex binary directory." ) MARK_AS_ADVANCED(MIKTEX_BINARY_PATH) diff --git a/OpenCVFindOpenEXR.cmake b/cmake/OpenCVFindOpenEXR.cmake similarity index 93% rename from OpenCVFindOpenEXR.cmake rename to cmake/OpenCVFindOpenEXR.cmake index 6f7a595d07..ad93d6df2f 100644 --- a/OpenCVFindOpenEXR.cmake +++ b/cmake/OpenCVFindOpenEXR.cmake @@ -4,14 +4,14 @@ # Try to find OpenEXR's libraries, and include path. # Once done this will define: # -# OPENEXR_FOUND = OpenEXR found. +# OPENEXR_FOUND = OpenEXR found. # OPENEXR_INCLUDE_PATHS = OpenEXR include directories. # OPENEXR_LIBRARIES = libraries that are needed to use OpenEXR. -# +# SET(OPENEXR_LIBRARIES) -SET(LIBRARY_PATHS +SET(LIBRARY_PATHS /usr/lib /usr/local/lib /sw/lib @@ -25,11 +25,11 @@ FIND_PATH(OPENEXR_INCLUDE_PATH ImfRgbaFile.h /sw/include /opt/local/include) -FIND_LIBRARY(OPENEXR_HALF_LIBRARY +FIND_LIBRARY(OPENEXR_HALF_LIBRARY NAMES Half PATHS ${LIBRARY_PATHS}) -FIND_LIBRARY(OPENEXR_IEX_LIBRARY +FIND_LIBRARY(OPENEXR_IEX_LIBRARY NAMES Iex PATHS ${LIBRARY_PATHS}) diff --git a/OpenCVFindOpenNI.cmake b/cmake/OpenCVFindOpenNI.cmake similarity index 99% rename from OpenCVFindOpenNI.cmake rename to cmake/OpenCVFindOpenNI.cmake index 2bfd074daa..2fbd69818b 100644 --- a/OpenCVFindOpenNI.cmake +++ b/cmake/OpenCVFindOpenNI.cmake @@ -28,7 +28,7 @@ if(OPENNI_LIBRARY AND OPENNI_INCLUDES) elseif(UNIX OR APPLE) find_library(OPENNI_PRIME_SENSOR_MODULE "XnCore" PATHS "/usr/lib" DOC "Core library of PrimeSensor Modules for OpenNI") endif() - + if(OPENNI_PRIME_SENSOR_MODULE) set(HAVE_OPENNI_PRIME_SENSOR_MODULE TRUE) endif() diff --git a/OpenCVFindPkgConfig.cmake b/cmake/OpenCVFindPkgConfig.cmake similarity index 99% rename from OpenCVFindPkgConfig.cmake rename to cmake/OpenCVFindPkgConfig.cmake index 0f6fcbd45c..7e439fd8dc 100644 --- a/OpenCVFindPkgConfig.cmake +++ b/cmake/OpenCVFindPkgConfig.cmake @@ -77,13 +77,13 @@ # # Redistribution and use, with or without modification, are permitted # provided that the following conditions are met: -# +# # 1. Redistributions must retain the above copyright notice, this # list of conditions and the following disclaimer. # 2. The name of the author may not be used to endorse or promote # products derived from this software without specific prior # written permission. -# +# # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -156,7 +156,7 @@ endmacro(_pkgconfig_invoke_dyn) # Splits given arguments into options and a package list macro(_pkgconfig_parse_options _result _is_req) set(${_is_req} 0) - + foreach(_pkg ${ARGN}) if (_pkg STREQUAL "REQUIRED") set(${_is_req} 1) @@ -203,7 +203,7 @@ macro(_pkg_check_modules_internal _is_required _is_silent _prefix) message(STATUS "checking for modules '${_pkg_check_modules_list}'") endif(_pkg_check_modules_cnt EQUAL 1) endif(NOT ${_is_silent}) - + set(_pkg_check_modules_packages) set(_pkg_check_modules_failed) @@ -230,14 +230,14 @@ macro(_pkg_check_modules_internal _is_required _is_silent _prefix) if (_pkg_check_modules_pkg_op STREQUAL "=") list(APPEND _pkg_check_modules_exist_query --exact-version) endif(_pkg_check_modules_pkg_op STREQUAL "=") - + if (_pkg_check_modules_pkg_op STREQUAL "<=") list(APPEND _pkg_check_modules_exist_query --max-version) endif(_pkg_check_modules_pkg_op STREQUAL "<=") # create the final query which is of the format: # * --atleast-version - # * --exact-version + # * --exact-version # * --max-version # * --exists if (_pkg_check_modules_pkg_op) @@ -277,7 +277,7 @@ macro(_pkg_check_modules_internal _is_required _is_silent _prefix) else(_pkg_check_modules_failed) # when we are here, we checked whether requested modules # exist. Now, go through them and set variables - + _pkgconfig_set(${_prefix}_FOUND 1) list(LENGTH _pkg_check_modules_packages pkg_count) @@ -289,7 +289,7 @@ macro(_pkg_check_modules_internal _is_required _is_silent _prefix) else(pkg_count EQUAL 1) set(_pkg_check_prefix "${_prefix}_${_pkg_check_modules_pkg}") endif(pkg_count EQUAL 1) - + _pkgconfig_invoke(${_pkg_check_modules_pkg} "${_pkg_check_prefix}" VERSION "" --modversion ) _pkgconfig_invoke(${_pkg_check_modules_pkg} "${_pkg_check_prefix}" PREFIX "" --variable=prefix ) _pkgconfig_invoke(${_pkg_check_modules_pkg} "${_pkg_check_prefix}" INCLUDEDIR "" --variable=includedir ) @@ -355,9 +355,9 @@ macro(pkg_search_module _prefix _module0) message(SEND_ERROR "None of the required '${_pkg_modules_alt}' found") endif(${_pkg_is_required}) endif(NOT ${_prefix}_FOUND) - + _pkgconfig_set(__pkg_config_checked_${_prefix} ${PKG_CONFIG_VERSION}) - endif(NOT DEFINED __pkg_config_checked_${_prefix} OR __pkg_config_checked_${_prefix} LESS ${PKG_CONFIG_VERSION} OR NOT ${_prefix}_FOUND) + endif(NOT DEFINED __pkg_config_checked_${_prefix} OR __pkg_config_checked_${_prefix} LESS ${PKG_CONFIG_VERSION} OR NOT ${_prefix}_FOUND) endmacro(pkg_search_module) ### Local Variables: diff --git a/OpenCVFindXimea.cmake b/cmake/OpenCVFindXimea.cmake similarity index 53% rename from OpenCVFindXimea.cmake rename to cmake/OpenCVFindXimea.cmake index afc73e09f7..23284e65b8 100755 --- a/OpenCVFindXimea.cmake +++ b/cmake/OpenCVFindXimea.cmake @@ -2,10 +2,10 @@ # This module finds if XIMEA Software package is installed # and determines where the binaries and header files are. # This code sets the following variables: -# +# # XIMEA_FOUND - True if XIMEA API found # XIMEA_PATH: - Path to the XIMEA API folder -# XIMEA_LIBRARY_DIRS - XIMEA libraries folder +# XIMEA_LIBRARY_DIR - XIMEA libraries folder # # Created: 5 Aug 2011 by Marian Zajko (marian.zajko@ximea.com) # @@ -14,22 +14,22 @@ set(XIMEA_FOUND) set(XIMEA_PATH) set(XIMEA_LIBRARY_DIR) -# Try to find the XIMEA API path in registry. -GET_FILENAME_COMPONENT(XIMEA_PATH "[HKEY_CURRENT_USER\\Software\\XIMEA\\CamSupport\\API;Path]" ABSOLUTE) +if(WIN32) + # Try to find the XIMEA API path in registry. + GET_FILENAME_COMPONENT(XIMEA_PATH "[HKEY_CURRENT_USER\\Software\\XIMEA\\CamSupport\\API;Path]" ABSOLUTE) + + if(XIMEA_PATH) + set(XIMEA_FOUND 1) -if(XIMEA_PATH) - set(XIMEA_FOUND 1) - - # set LIB folders - set(XIMEA_LIBRARY_DIR "${XIMEA_PATH}\\x86") - -else() - set(XIMEA_FOUND 0) -endif() + # set LIB folders + set(XIMEA_LIBRARY_DIR "${XIMEA_PATH}\\x86") + + else() + set(XIMEA_FOUND 0) + endif() +endif() mark_as_advanced(FORCE XIMEA_FOUND) mark_as_advanced(FORCE XIMEA_PATH) mark_as_advanced(FORCE XIMEA_LIBRARY_DIR) - - - \ No newline at end of file + diff --git a/OpenCVModule.cmake b/cmake/OpenCVModule.cmake similarity index 95% rename from OpenCVModule.cmake rename to cmake/OpenCVModule.cmake index 48e6dee690..dde6e81714 100644 --- a/OpenCVModule.cmake +++ b/cmake/OpenCVModule.cmake @@ -9,7 +9,7 @@ macro(add_opencv_precompiled_headers the_target) SET(pch_name "src/precomp") endif() set(pch_header "${CMAKE_CURRENT_SOURCE_DIR}/${pch_name}.hpp") - if(PCHSupport_FOUND AND USE_PRECOMPILED_HEADERS AND EXISTS "${pch_header}") + if(PCHSupport_FOUND AND ENABLE_PRECOMPILED_HEADERS AND EXISTS "${pch_header}") if(CMAKE_GENERATOR MATCHES Visual) set(${the_target}_pch "${CMAKE_CURRENT_SOURCE_DIR}/${pch_name}.cpp") add_native_precompiled_header(${the_target} ${pch_header}) @@ -43,7 +43,7 @@ macro(define_opencv_perf_test name) file(GLOB perf_srcs "${perf_path}/*.cpp") file(GLOB perf_hdrs "${perf_path}/*.h*") - + source_group("Src" FILES ${perf_srcs}) source_group("Include" FILES ${perf_hdrs}) @@ -58,7 +58,7 @@ macro(define_opencv_perf_test name) if(ENABLE_SOLUTION_FOLDERS) set_target_properties(${the_target} PROPERTIES FOLDER "performance tests") - endif() + endif() add_dependencies(${the_target} ${perf_deps}) target_link_libraries(${the_target} ${OPENCV_LINKER_LIBS} ${perf_deps}) @@ -68,7 +68,7 @@ macro(define_opencv_perf_test name) if (PYTHON_EXECUTABLE) add_dependencies(perf ${the_target}) endif() - endif() + endif() endmacro() # this is a template for a OpenCV regression tests @@ -92,7 +92,7 @@ macro(define_opencv_test name) file(GLOB test_srcs "${test_path}/*.cpp") file(GLOB test_hdrs "${test_path}/*.h*") - + source_group("Src" FILES ${test_srcs}) source_group("Include" FILES ${test_hdrs}) @@ -107,7 +107,7 @@ macro(define_opencv_test name) if(ENABLE_SOLUTION_FOLDERS) set_target_properties(${the_target} PROPERTIES FOLDER "tests") - endif() + endif() add_dependencies(${the_target} ${test_deps}) target_link_libraries(${the_target} ${OPENCV_LINKER_LIBS} ${test_deps}) @@ -126,13 +126,13 @@ endmacro() # this is a template for a OpenCV module # define_opencv_module( ) macro(define_opencv_module name) - + project(opencv_${name}) include_directories("${CMAKE_CURRENT_SOURCE_DIR}/include" "${CMAKE_CURRENT_SOURCE_DIR}/src" "${CMAKE_CURRENT_BINARY_DIR}") - + foreach(d ${ARGN}) if(d MATCHES "opencv_") string(REPLACE "opencv_" "${OpenCV_SOURCE_DIR}/modules/" d_dir ${d}) @@ -153,7 +153,7 @@ macro(define_opencv_module name) source_group("Src" FILES ${lib_srcs} ${lib_int_hdrs}) source_group("Include" FILES ${lib_hdrs}) - source_group("Include\\detail" FILES ${lib_hdrs_detail}) + source_group("Include\\detail" FILES ${lib_hdrs_detail}) list(APPEND lib_hdrs ${lib_hdrs_detail}) set(the_target "opencv_${name}") @@ -173,17 +173,17 @@ macro(define_opencv_module name) ) endif() - set_target_properties(${the_target} PROPERTIES OUTPUT_NAME "${the_target}${OPENCV_DLLVERSION}" ) + set_target_properties(${the_target} PROPERTIES OUTPUT_NAME "${the_target}${OPENCV_DLLVERSION}" ) if(ENABLE_SOLUTION_FOLDERS) set_target_properties(${the_target} PROPERTIES FOLDER "modules") - endif() - + endif() + if (BUILD_SHARED_LIBS) if(MSVC) set_target_properties(${the_target} PROPERTIES DEFINE_SYMBOL CVAPI_EXPORTS) else() - add_definitions(-DCVAPI_EXPORTS) + add_definitions(-DCVAPI_EXPORTS) endif() endif() @@ -222,7 +222,7 @@ macro(define_opencv_module name) install(FILES ${lib_hdrs} DESTINATION ${OPENCV_INCLUDE_PREFIX}/opencv2/${name} COMPONENT main) - + add_opencv_precompiled_headers(${the_target}) define_opencv_test(${name}) diff --git a/OpenCVPCHSupport.cmake b/cmake/OpenCVPCHSupport.cmake similarity index 99% rename from OpenCVPCHSupport.cmake rename to cmake/OpenCVPCHSupport.cmake index 0955255dad..7e7ef15570 100644 --- a/OpenCVPCHSupport.cmake +++ b/cmake/OpenCVPCHSupport.cmake @@ -211,7 +211,7 @@ MACRO(ADD_PRECOMPILED_HEADER _targetName _input) _PCH_WRITE_PCHDEP_CXX(${_targetName} "${_input}" _pch_dephelp_cxx) ADD_LIBRARY(${_targetName}_pch_dephelp STATIC "${_pch_dephelp_cxx}" "${_input}" ) - + set_target_properties(${_targetName}_pch_dephelp PROPERTIES DEBUG_POSTFIX "${OPENCV_DEBUG_POSTFIX}" ARCHIVE_OUTPUT_DIRECTORY "${LIBRARY_OUTPUT_PATH}" @@ -221,7 +221,7 @@ MACRO(ADD_PRECOMPILED_HEADER _targetName _input) #MESSAGE("_compile_FLAGS: ${_compile_FLAGS}") #message("COMMAND ${CMAKE_CXX_COMPILER} ${_compile_FLAGS} -x c++-header -o ${_output} ${_input}") - + ADD_CUSTOM_COMMAND( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${_name}" COMMAND ${CMAKE_COMMAND} -E copy "${_input}" "${CMAKE_CURRENT_BINARY_DIR}/${_name}" # ensure same directory! Required by gcc @@ -242,7 +242,7 @@ MACRO(ADD_PRECOMPILED_HEADER _targetName _input) ) ADD_PRECOMPILED_HEADER_TO_TARGET(${_targetName} ${_input} ${_output} ${_dowarn}) - + ENDMACRO(ADD_PRECOMPILED_HEADER) @@ -280,7 +280,7 @@ MACRO(ADD_NATIVE_PRECOMPILED_HEADER _targetName _input) ENDIF() if(CMAKE_GENERATOR MATCHES "^Visual.*$") - + # Auto include the precompile (useful for moc processing, since the use of # precompiled is specified at the target level # and I don't want to specifiy /F- for each moc/res/ui generated files (using Qt) @@ -297,7 +297,7 @@ MACRO(ADD_NATIVE_PRECOMPILED_HEADER _targetName _input) SET_SOURCE_FILES_PROPERTIES(${${_targetName}_pch} PROPERTIES COMPILE_FLAGS "${oldProps} /Yc\"${_input}\"") elseif (CMAKE_GENERATOR MATCHES Xcode) - + # For Xcode, cmake needs my patch to process # GCC_PREFIX_HEADER and GCC_PRECOMPILE_PREFIX_HEADER as target properties diff --git a/cmake/OpenCVUtils.cmake b/cmake/OpenCVUtils.cmake new file mode 100644 index 0000000000..fbac99b7af --- /dev/null +++ b/cmake/OpenCVUtils.cmake @@ -0,0 +1,118 @@ +# Search packages for host system instead of packages for target system +# in case of cross compilation thess macro should be defined by toolchain file +if(NOT COMMAND find_host_package) + macro(find_host_package) + find_package(${ARGN}) + endmacro() +endif() +if(NOT COMMAND find_host_program) + macro(find_host_program) + find_program(${ARGN}) + endmacro() +endif() + + +# Provides an option that the user can optionally select. +# Can accept condition to control when option is available for user. +# Usage: +# option( "help string describing option" [IF ]) +macro(OCV_OPTION variable description value) + SET(__condition ${ARGN}) + if("${__condition}" STREQUAL "") + SET(__condition 1) + endif() + list(REMOVE_ITEM __condition "IF" "if") + if(${__condition}) + OPTION(${variable} "${description}" ${value}) + else() + UNSET(${variable} CACHE) + endif() + UNSET(__condition) +endmacro() + + +# Macros that checks if module have been installed. +# After it adds module to build and define +# constants passed as second arg +macro(CHECK_MODULE module_name define) + set(${define} 0) + if(PKG_CONFIG_FOUND) + set(ALIAS ALIASOF_${module_name}) + set(ALIAS_FOUND ${ALIAS}_FOUND) + set(ALIAS_INCLUDE_DIRS ${ALIAS}_INCLUDE_DIRS) + set(ALIAS_LIBRARY_DIRS ${ALIAS}_LIBRARY_DIRS) + set(ALIAS_LIBRARIES ${ALIAS}_LIBRARIES) + + PKG_CHECK_MODULES(${ALIAS} ${module_name}) + + if (${ALIAS_FOUND}) + set(${define} 1) + foreach(P "${ALIAS_INCLUDE_DIRS}") + if (${P}) + list(APPEND HIGHGUI_INCLUDE_DIRS ${${P}}) + endif() + endforeach() + + foreach(P "${ALIAS_LIBRARY_DIRS}") + if (${P}) + list(APPEND HIGHGUI_LIBRARY_DIRS ${${P}}) + endif() + endforeach() + + list(APPEND HIGHGUI_LIBRARIES ${${ALIAS_LIBRARIES}}) + endif() + endif() +endmacro() + +# Status report macro. +# Automatically align right column and selects text based on condition. +# Usage: +# status() +# status( [ ...]) +# status( THEN ELSE ) +macro(status text) + SET(status_cond) + SET(status_then) + SET(status_else) + + SET(status_current_name "cond") + foreach(arg ${ARGN}) + if(arg STREQUAL "THEN") + SET(status_current_name "then") + elseif(arg STREQUAL "ELSE") + SET(status_current_name "else") + else() + LIST(APPEND status_${status_current_name} ${arg}) + endif() + endforeach() + + if(DEFINED status_cond) + SET(status_placeholder_length 32) + string(RANDOM LENGTH ${status_placeholder_length} ALPHABET " " status_placeholder) + string(LENGTH "${text}" status_text_length) + if (status_text_length LESS status_placeholder_length) + string(SUBSTRING "${text}${status_placeholder}" 0 ${status_placeholder_length} status_text) + elseif (DEFINED status_then OR DEFINED status_else) + message(STATUS "${text}") + SET(status_text "${status_placeholder}") + else() + SET(status_text "${text}") + endif() + + if (DEFINED status_then OR DEFINED status_else) + if(${status_cond}) + string(REPLACE ";" " " status_then "${status_then}") + message(STATUS "${status_text}" "${status_then}") + else() + string(REPLACE ";" " " status_else "${status_else}") + message(STATUS "${status_text}" "${status_else}") + endif() + else() + string(REPLACE ";" " " status_cond "${status_cond}") + message(STATUS "${status_text}" "${status_cond}") + endif() + else() + message(STATUS "${text}") + endif() +endmacro() + diff --git a/OpenCV.mk.in b/cmake/templates/OpenCV.mk.in similarity index 100% rename from OpenCV.mk.in rename to cmake/templates/OpenCV.mk.in diff --git a/OpenCVConfig-version.cmake.in b/cmake/templates/OpenCVConfig-version.cmake.in similarity index 96% rename from OpenCVConfig-version.cmake.in rename to cmake/templates/OpenCVConfig-version.cmake.in index ab11e3927c..0b432a074c 100644 --- a/OpenCVConfig-version.cmake.in +++ b/cmake/templates/OpenCVConfig-version.cmake.in @@ -1,14 +1,14 @@ -set(OpenCV_VERSION @OPENCV_VERSION@) -set(PACKAGE_VERSION ${OpenCV_VERSION}) - -set(PACKAGE_VERSION_EXACT False) -set(PACKAGE_VERSION_COMPATIBLE False) - -if(PACKAGE_FIND_VERSION VERSION_EQUAL PACKAGE_VERSION) - set(PACKAGE_VERSION_EXACT True) - set(PACKAGE_VERSION_COMPATIBLE True) -endif() - -if(PACKAGE_FIND_VERSION VERSION_LESS PACKAGE_VERSION) - set(PACKAGE_VERSION_COMPATIBLE True) -endif() +set(OpenCV_VERSION @OPENCV_VERSION@) +set(PACKAGE_VERSION ${OpenCV_VERSION}) + +set(PACKAGE_VERSION_EXACT False) +set(PACKAGE_VERSION_COMPATIBLE False) + +if(PACKAGE_FIND_VERSION VERSION_EQUAL PACKAGE_VERSION) + set(PACKAGE_VERSION_EXACT True) + set(PACKAGE_VERSION_COMPATIBLE True) +endif() + +if(PACKAGE_FIND_VERSION VERSION_LESS PACKAGE_VERSION) + set(PACKAGE_VERSION_COMPATIBLE True) +endif() diff --git a/OpenCVConfig.cmake.in b/cmake/templates/OpenCVConfig.cmake.in similarity index 97% rename from OpenCVConfig.cmake.in rename to cmake/templates/OpenCVConfig.cmake.in index 8dc7d6ee12..468ea327f7 100644 --- a/OpenCVConfig.cmake.in +++ b/cmake/templates/OpenCVConfig.cmake.in @@ -1,198 +1,198 @@ -# =================================================================================== -# The OpenCV CMake configuration file -# -# ** File generated automatically, do not modify ** -# -# Usage from an external project: -# In your CMakeLists.txt, add these lines: -# -# FIND_PACKAGE(OpenCV REQUIRED ) -# TARGET_LINK_LIBRARIES(MY_TARGET_NAME ${OpenCV_LIBS}) -# -# This file will define the following variables: -# - OpenCV_LIBS : The list of libraries to links against. -# - OpenCV_LIB_DIR : The directory where lib files are. Calling LINK_DIRECTORIES -# with this path is NOT needed. -# - OpenCV_INCLUDE_DIRS : The OpenCV include directories. -# - OpenCV_COMPUTE_CAPABILITIES : The version of compute capability -# - OpenCV_VERSION : The version of this OpenCV build. Example: "@OPENCV_VERSION@" -# - OpenCV_VERSION_MAJOR : Major version part of OpenCV_VERSION. Example: "@OPENCV_VERSION_MAJOR@" -# - OpenCV_VERSION_MINOR : Minor version part of OpenCV_VERSION. Example: "@OPENCV_VERSION_MINOR@" -# - OpenCV_VERSION_PATCH : Patch version part of OpenCV_VERSION. Example: "@OPENCV_VERSION_PATCH@" -# -# Advanced variables: -# - OpenCV_SHARED -# - OpenCV_CONFIG_PATH -# - OpenCV_INSTALL_PATH -# - OpenCV_LIB_COMPONENTS -# - OpenCV_EXTRA_COMPONENTS -# - OpenCV_USE_MANGLED_PATHS -# - OpenCV_HAVE_ANDROID_CAMERA -# - OpenCV_SOURCE_PATH -# -# ================================================================================================= - -# ====================================================== -# Version Compute Capability from which library OpenCV -# has been compiled is remembered -# ====================================================== -SET(OpenCV_COMPUTE_CAPABILITIES @OpenCV_CUDA_CC@) - -# Some additional settings are required if OpenCV is built as static libs -set(OpenCV_SHARED @BUILD_SHARED_LIBS@) - -# Enables mangled install paths, that help with side by side installs -set(OpenCV_USE_MANGLED_PATHS @OPENCV_MANGLED_INSTALL_PATHS@) - -# Extract the directory where *this* file has been installed (determined at cmake run-time) -get_filename_component(OpenCV_CONFIG_PATH "${CMAKE_CURRENT_LIST_FILE}" PATH) - -# Get the absolute path with no ../.. relative marks, to eliminate implicit linker warnings -get_filename_component(OpenCV_INSTALL_PATH "${OpenCV_CONFIG_PATH}/../.." REALPATH) - -# Presence of Android native camera support -set (OpenCV_HAVE_ANDROID_CAMERA @WITH_ANDROID_CAMERA@) - -# ====================================================== -# Include directories to add to the user project: -# ====================================================== - -# Provide the include directories to the caller -SET(OpenCV_INCLUDE_DIRS @CMAKE_INCLUDE_DIRS_CONFIGCMAKE@) -INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIRS}) - -# ====================================================== -# Link directories to add to the user project: -# ====================================================== - -# Provide the libs directory anyway, it may be needed in some cases. -SET(OpenCV_LIB_DIR @CMAKE_LIB_DIRS_CONFIGCMAKE@) -LINK_DIRECTORIES(${OpenCV_LIB_DIR}) - -# ==================================================================== -# Link libraries: e.g. libopencv_core.so, opencv_imgproc220d.lib, etc... -# ==================================================================== - -# OpenCV internal dependencies: -# opencv_androidcamera -> {} -# opencv_core -> {} -# opencv_flann -> {opencv_core} -# opencv_imgproc -> {opencv_core} -# opencv_ml -> {opencv_core} -# opencv_highgui -> {opencv_core, opencv_imgproc, opencv_androidcamera} -# opencv_video -> {opencv_core, opencv_imgproc} -# opencv_features2d -> {opencv_core, opencv_imgproc, opencv_flann, opencv_highgui} -# opencv_calib3d -> {opencv_core, opencv_imgproc, opencv_flann, opencv_features2d} -# opencv_objdetect -> {opencv_core, opencv_imgproc, opencv_flann, opencv_highgui, opencv_features2d, opencv_calib3d} -# opencv_gpu -> {opencv_core, opencv_imgproc, opencv_flann, opencv_features2d, opencv_calib3d, opencv_objdetect} -# opencv_stitching -> {opencv_core, opencv_imgproc, opencv_flann, opencv_features2d, opencv_calib3d, opencv_objdetect, opencv_gpu} -# opencv_legacy -> {opencv_core, opencv_imgproc, opencv_flann, opencv_highgui, opencv_features2d, opencv_calib3d, opencv_video} -# opencv_contrib -> {opencv_core, opencv_imgproc, opencv_flann, opencv_highgui, opencv_features2d, opencv_calib3d, opencv_objdetect, opencv_video, opencv_ml} - -SET(OpenCV_LIB_COMPONENTS opencv_contrib opencv_legacy opencv_stitching opencv_gpu opencv_objdetect opencv_calib3d opencv_features2d opencv_video opencv_highgui opencv_ml opencv_imgproc opencv_flann opencv_core opencv_androidcamera) - -# remove modules unavailable on current platform: -if(ANDROID) - LIST(REMOVE_ITEM OpenCV_LIB_COMPONENTS opencv_gpu) - SET(OpenCV_LIB_ANDROID @OpenCV_LIB_ANDROID@) - IF(OpenCV_LIB_ANDROID) - SET(OpenCV_LIB_COMPONENTS ${OpenCV_LIB_COMPONENTS} ${OpenCV_LIB_ANDROID}) - SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--allow-shlib-undefined") - SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--allow-shlib-undefined") - ENDIF() -endif() -if(NOT ANDROID OR OpenCV_SHARED OR NOT OpenCV_HAVE_ANDROID_CAMERA) - LIST(REMOVE_ITEM OpenCV_LIB_COMPONENTS opencv_androidcamera) -endif() - -if(OpenCV_USE_MANGLED_PATHS) - #be explicit about the library names. - set(OpenCV_LIB_COMPONENTS_ ) - foreach( CVLib ${OpenCV_LIB_COMPONENTS}) - list(APPEND OpenCV_LIB_COMPONENTS_ ${OpenCV_LIB_DIR}/lib${CVLib}.so.@OPENCV_VERSION@ ) - endforeach() - set(OpenCV_LIB_COMPONENTS ${OpenCV_LIB_COMPONENTS_}) -endif() - -SET(OpenCV_LIBS "") -if(WIN32) - foreach(__CVLIB ${OpenCV_LIB_COMPONENTS}) - # CMake>=2.6 supports the notation "debug XXd optimized XX" - if (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} VERSION_GREATER 2.4) - # Modern CMake: - SET(OpenCV_LIBS ${OpenCV_LIBS} debug ${__CVLIB}@OPENCV_DLLVERSION@@OPENCV_DEBUG_POSTFIX@ optimized ${__CVLIB}@OPENCV_DLLVERSION@) - else() - # Old CMake: - SET(OpenCV_LIBS ${OpenCV_LIBS} ${__CVLIB}@OPENCV_DLLVERSION@) - endif() - endforeach() -else() - foreach(__CVLIB ${OpenCV_LIB_COMPONENTS}) - SET(OpenCV_LIBS ${OpenCV_LIBS} ${__CVLIB}) - endforeach() -endif() - -# ============================================================== -# Extra include directories, needed by OpenCV 2 new structure -# ============================================================== -SET(OpenCV_SOURCE_PATH "@CMAKE_OPENCV2_INCLUDE_DIRS_CONFIGCMAKE@") -if(NOT "${OpenCV_SOURCE_PATH}" STREQUAL "") - foreach(__CVLIB ${OpenCV_LIB_COMPONENTS}) - # We only need the "core",... part here: "opencv_core" -> "core" - STRING(REGEX REPLACE "opencv_(.*)" "\\1" __MODNAME ${__CVLIB}) - INCLUDE_DIRECTORIES("${OpenCV_SOURCE_PATH}/modules/${__MODNAME}/include") - LIST(APPEND OpenCV_INCLUDE_DIRS "${OpenCV_SOURCE_PATH}/modules/${__MODNAME}/include") - endforeach() -endif() - -# For OpenCV built as static libs, we need the user to link against -# many more dependencies: -IF (NOT OpenCV_SHARED) - # Under static libs, the user of OpenCV needs access to the 3rdparty libs as well: - LINK_DIRECTORIES(@CMAKE_3RDPARTY_LIB_DIRS_CONFIGCMAKE@) - - set(OpenCV_LIBS @OPENCV_LINKER_LIBS@ @IPP_LIBS@ @HIGHGUI_LIBRARIES@ ${OpenCV_LIBS}) - set(OpenCV_EXTRA_COMPONENTS @JPEG_LIBRARIES@ @PNG_LIBRARIES@ @TIFF_LIBRARIES@ @JASPER_LIBRARIES@ @ZLIB_LIBRARY@) - - if (WIN32 AND ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} VERSION_GREATER 2.4) - # Modern CMake: - foreach(__EXTRA_LIB ${OpenCV_EXTRA_COMPONENTS}) - set(OpenCV_LIBS ${OpenCV_LIBS} - debug ${__EXTRA_LIB}@OPENCV_DEBUG_POSTFIX@ - optimized ${__EXTRA_LIB}) - endforeach() - else() - # Old CMake: - set(OpenCV_LIBS ${OpenCV_LIBS} ${OpenCV_EXTRA_COMPONENTS}) - endif() - - if (APPLE) - set(OpenCV_LIBS ${OpenCV_LIBS} "-lbz2" "-framework Cocoa" "-framework QuartzCore" "-framework QTKit") - endif() -ENDIF() - -# ====================================================== -# Android camera helper macro -# ====================================================== -IF (OpenCV_HAVE_ANDROID_CAMERA) - macro( COPY_NATIVE_CAMERA_LIBS target ) - get_target_property(target_location ${target} LOCATION) - get_filename_component(target_location "${target_location}" PATH) - file(GLOB camera_wrappers "${OpenCV_LIB_DIR}/libnative_camera_r*.so") - foreach(wrapper ${camera_wrappers}) - ADD_CUSTOM_COMMAND( - TARGET ${target} - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy "${wrapper}" "${target_location}" - ) - endforeach() - endmacro() -ENDIF() - -# ====================================================== -# Version variables: -# ====================================================== -SET(OpenCV_VERSION @OPENCV_VERSION@) -SET(OpenCV_VERSION_MAJOR @OPENCV_VERSION_MAJOR@) -SET(OpenCV_VERSION_MINOR @OPENCV_VERSION_MINOR@) -SET(OpenCV_VERSION_PATCH @OPENCV_VERSION_PATCH@) +# =================================================================================== +# The OpenCV CMake configuration file +# +# ** File generated automatically, do not modify ** +# +# Usage from an external project: +# In your CMakeLists.txt, add these lines: +# +# FIND_PACKAGE(OpenCV REQUIRED ) +# TARGET_LINK_LIBRARIES(MY_TARGET_NAME ${OpenCV_LIBS}) +# +# This file will define the following variables: +# - OpenCV_LIBS : The list of libraries to links against. +# - OpenCV_LIB_DIR : The directory where lib files are. Calling LINK_DIRECTORIES +# with this path is NOT needed. +# - OpenCV_INCLUDE_DIRS : The OpenCV include directories. +# - OpenCV_COMPUTE_CAPABILITIES : The version of compute capability +# - OpenCV_VERSION : The version of this OpenCV build. Example: "@OPENCV_VERSION@" +# - OpenCV_VERSION_MAJOR : Major version part of OpenCV_VERSION. Example: "@OPENCV_VERSION_MAJOR@" +# - OpenCV_VERSION_MINOR : Minor version part of OpenCV_VERSION. Example: "@OPENCV_VERSION_MINOR@" +# - OpenCV_VERSION_PATCH : Patch version part of OpenCV_VERSION. Example: "@OPENCV_VERSION_PATCH@" +# +# Advanced variables: +# - OpenCV_SHARED +# - OpenCV_CONFIG_PATH +# - OpenCV_INSTALL_PATH +# - OpenCV_LIB_COMPONENTS +# - OpenCV_EXTRA_COMPONENTS +# - OpenCV_USE_MANGLED_PATHS +# - OpenCV_HAVE_ANDROID_CAMERA +# - OpenCV_SOURCE_PATH +# +# ================================================================================================= + +# ====================================================== +# Version Compute Capability from which library OpenCV +# has been compiled is remembered +# ====================================================== +SET(OpenCV_COMPUTE_CAPABILITIES @OpenCV_CUDA_CC@) + +# Some additional settings are required if OpenCV is built as static libs +set(OpenCV_SHARED @BUILD_SHARED_LIBS@) + +# Enables mangled install paths, that help with side by side installs +set(OpenCV_USE_MANGLED_PATHS @OPENCV_MANGLED_INSTALL_PATHS@) + +# Extract the directory where *this* file has been installed (determined at cmake run-time) +get_filename_component(OpenCV_CONFIG_PATH "${CMAKE_CURRENT_LIST_FILE}" PATH) + +# Get the absolute path with no ../.. relative marks, to eliminate implicit linker warnings +get_filename_component(OpenCV_INSTALL_PATH "${OpenCV_CONFIG_PATH}/../.." REALPATH) + +# Presence of Android native camera support +set (OpenCV_HAVE_ANDROID_CAMERA @WITH_ANDROID_CAMERA@) + +# ====================================================== +# Include directories to add to the user project: +# ====================================================== + +# Provide the include directories to the caller +SET(OpenCV_INCLUDE_DIRS @CMAKE_INCLUDE_DIRS_CONFIGCMAKE@) +INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIRS}) + +# ====================================================== +# Link directories to add to the user project: +# ====================================================== + +# Provide the libs directory anyway, it may be needed in some cases. +SET(OpenCV_LIB_DIR @CMAKE_LIB_DIRS_CONFIGCMAKE@) +LINK_DIRECTORIES(${OpenCV_LIB_DIR}) + +# ==================================================================== +# Link libraries: e.g. libopencv_core.so, opencv_imgproc220d.lib, etc... +# ==================================================================== + +# OpenCV internal dependencies: +# opencv_androidcamera -> {} +# opencv_core -> {} +# opencv_flann -> {opencv_core} +# opencv_imgproc -> {opencv_core} +# opencv_ml -> {opencv_core} +# opencv_highgui -> {opencv_core, opencv_imgproc, opencv_androidcamera} +# opencv_video -> {opencv_core, opencv_imgproc} +# opencv_features2d -> {opencv_core, opencv_imgproc, opencv_flann, opencv_highgui} +# opencv_calib3d -> {opencv_core, opencv_imgproc, opencv_flann, opencv_features2d} +# opencv_objdetect -> {opencv_core, opencv_imgproc, opencv_flann, opencv_highgui, opencv_features2d, opencv_calib3d} +# opencv_gpu -> {opencv_core, opencv_imgproc, opencv_flann, opencv_features2d, opencv_calib3d, opencv_objdetect} +# opencv_stitching -> {opencv_core, opencv_imgproc, opencv_flann, opencv_features2d, opencv_calib3d, opencv_objdetect, opencv_gpu} +# opencv_legacy -> {opencv_core, opencv_imgproc, opencv_flann, opencv_highgui, opencv_features2d, opencv_calib3d, opencv_video} +# opencv_contrib -> {opencv_core, opencv_imgproc, opencv_flann, opencv_highgui, opencv_features2d, opencv_calib3d, opencv_objdetect, opencv_video, opencv_ml} + +SET(OpenCV_LIB_COMPONENTS opencv_contrib opencv_legacy opencv_stitching opencv_gpu opencv_objdetect opencv_calib3d opencv_features2d opencv_video opencv_highgui opencv_ml opencv_imgproc opencv_flann opencv_core opencv_androidcamera) + +# remove modules unavailable on current platform: +if(ANDROID) + LIST(REMOVE_ITEM OpenCV_LIB_COMPONENTS opencv_gpu) + SET(OpenCV_LIB_ANDROID @OpenCV_LIB_ANDROID@) + IF(OpenCV_LIB_ANDROID) + SET(OpenCV_LIB_COMPONENTS ${OpenCV_LIB_COMPONENTS} ${OpenCV_LIB_ANDROID}) + SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--allow-shlib-undefined") + SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--allow-shlib-undefined") + ENDIF() +endif() +if(NOT ANDROID OR OpenCV_SHARED OR NOT OpenCV_HAVE_ANDROID_CAMERA) + LIST(REMOVE_ITEM OpenCV_LIB_COMPONENTS opencv_androidcamera) +endif() + +if(OpenCV_USE_MANGLED_PATHS) + #be explicit about the library names. + set(OpenCV_LIB_COMPONENTS_ ) + foreach( CVLib ${OpenCV_LIB_COMPONENTS}) + list(APPEND OpenCV_LIB_COMPONENTS_ ${OpenCV_LIB_DIR}/lib${CVLib}.so.@OPENCV_VERSION@ ) + endforeach() + set(OpenCV_LIB_COMPONENTS ${OpenCV_LIB_COMPONENTS_}) +endif() + +SET(OpenCV_LIBS "") +if(WIN32) + foreach(__CVLIB ${OpenCV_LIB_COMPONENTS}) + # CMake>=2.6 supports the notation "debug XXd optimized XX" + if (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} VERSION_GREATER 2.4) + # Modern CMake: + SET(OpenCV_LIBS ${OpenCV_LIBS} debug ${__CVLIB}@OPENCV_DLLVERSION@@OPENCV_DEBUG_POSTFIX@ optimized ${__CVLIB}@OPENCV_DLLVERSION@) + else() + # Old CMake: + SET(OpenCV_LIBS ${OpenCV_LIBS} ${__CVLIB}@OPENCV_DLLVERSION@) + endif() + endforeach() +else() + foreach(__CVLIB ${OpenCV_LIB_COMPONENTS}) + SET(OpenCV_LIBS ${OpenCV_LIBS} ${__CVLIB}) + endforeach() +endif() + +# ============================================================== +# Extra include directories, needed by OpenCV 2 new structure +# ============================================================== +SET(OpenCV_SOURCE_PATH "@CMAKE_OPENCV2_INCLUDE_DIRS_CONFIGCMAKE@") +if(NOT "${OpenCV_SOURCE_PATH}" STREQUAL "") + foreach(__CVLIB ${OpenCV_LIB_COMPONENTS}) + # We only need the "core",... part here: "opencv_core" -> "core" + STRING(REGEX REPLACE "opencv_(.*)" "\\1" __MODNAME ${__CVLIB}) + INCLUDE_DIRECTORIES("${OpenCV_SOURCE_PATH}/modules/${__MODNAME}/include") + LIST(APPEND OpenCV_INCLUDE_DIRS "${OpenCV_SOURCE_PATH}/modules/${__MODNAME}/include") + endforeach() +endif() + +# For OpenCV built as static libs, we need the user to link against +# many more dependencies: +IF (NOT OpenCV_SHARED) + # Under static libs, the user of OpenCV needs access to the 3rdparty libs as well: + LINK_DIRECTORIES(@CMAKE_3RDPARTY_LIB_DIRS_CONFIGCMAKE@) + + set(OpenCV_LIBS @OPENCV_LINKER_LIBS@ @IPP_LIBS@ @HIGHGUI_LIBRARIES@ ${OpenCV_LIBS}) + set(OpenCV_EXTRA_COMPONENTS @JPEG_LIBRARIES@ @PNG_LIBRARIES@ @TIFF_LIBRARIES@ @JASPER_LIBRARIES@ @ZLIB_LIBRARY@) + + if (WIN32 AND ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} VERSION_GREATER 2.4) + # Modern CMake: + foreach(__EXTRA_LIB ${OpenCV_EXTRA_COMPONENTS}) + set(OpenCV_LIBS ${OpenCV_LIBS} + debug ${__EXTRA_LIB}@OPENCV_DEBUG_POSTFIX@ + optimized ${__EXTRA_LIB}) + endforeach() + else() + # Old CMake: + set(OpenCV_LIBS ${OpenCV_LIBS} ${OpenCV_EXTRA_COMPONENTS}) + endif() + + if (APPLE) + set(OpenCV_LIBS ${OpenCV_LIBS} "-lbz2" "-framework Cocoa" "-framework QuartzCore" "-framework QTKit") + endif() +ENDIF() + +# ====================================================== +# Android camera helper macro +# ====================================================== +IF (OpenCV_HAVE_ANDROID_CAMERA) + macro( COPY_NATIVE_CAMERA_LIBS target ) + get_target_property(target_location ${target} LOCATION) + get_filename_component(target_location "${target_location}" PATH) + file(GLOB camera_wrappers "${OpenCV_LIB_DIR}/libnative_camera_r*.so") + foreach(wrapper ${camera_wrappers}) + ADD_CUSTOM_COMMAND( + TARGET ${target} + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy "${wrapper}" "${target_location}" + ) + endforeach() + endmacro() +ENDIF() + +# ====================================================== +# Version variables: +# ====================================================== +SET(OpenCV_VERSION @OPENCV_VERSION@) +SET(OpenCV_VERSION_MAJOR @OPENCV_VERSION_MAJOR@) +SET(OpenCV_VERSION_MINOR @OPENCV_VERSION_MINOR@) +SET(OpenCV_VERSION_PATCH @OPENCV_VERSION_PATCH@) diff --git a/cmake_uninstall.cmake.in b/cmake/templates/cmake_uninstall.cmake.in similarity index 100% rename from cmake_uninstall.cmake.in rename to cmake/templates/cmake_uninstall.cmake.in diff --git a/cvconfig.h.cmake b/cmake/templates/cvconfig.h.cmake similarity index 97% rename from cvconfig.h.cmake rename to cmake/templates/cvconfig.h.cmake index b2f439b530..3c501ca917 100644 --- a/cvconfig.h.cmake +++ b/cmake/templates/cvconfig.h.cmake @@ -163,9 +163,6 @@ /* Intel Threading Building Blocks */ #cmakedefine HAVE_TBB -/* Threading Framework --- temporary decision for ARM instead of Intel TBB */ -#cmakedefine HAVE_THREADING_FRAMEWORK - /* Eigen Matrix & Linear Algebra Library */ #cmakedefine HAVE_EIGEN diff --git a/opencv-XXX.pc.cmake.in b/cmake/templates/opencv-XXX.pc.cmake.in similarity index 100% rename from opencv-XXX.pc.cmake.in rename to cmake/templates/opencv-XXX.pc.cmake.in diff --git a/opencv.pc.cmake.in b/cmake/templates/opencv.pc.cmake.in similarity index 100% rename from opencv.pc.cmake.in rename to cmake/templates/opencv.pc.cmake.in diff --git a/modules/core/include/opencv2/core/internal.hpp b/modules/core/include/opencv2/core/internal.hpp index 23bba05236..b0a68db4ec 100644 --- a/modules/core/include/opencv2/core/internal.hpp +++ b/modules/core/include/opencv2/core/internal.hpp @@ -198,19 +198,6 @@ CV_INLINE IppiSize ippiSize(int width, int height) int _begin, _end, _grainsize; }; - -#ifdef HAVE_THREADING_FRAMEWORK -#include "opencv2/core/threading_framework.hpp" - - template - static void parallel_for( const BlockedRange& range, const Body& body ) - { - tf::parallel_for(range, body); - } - - typedef tf::ConcurrentVector ConcurrentRectVector; - typedef tf::ConcurrentVector ConcurrentDoubleVector; -#else template static inline void parallel_for( const BlockedRange& range, const Body& body ) { @@ -218,7 +205,6 @@ CV_INLINE IppiSize ippiSize(int width, int height) } typedef std::vector ConcurrentRectVector; typedef std::vector ConcurrentDoubleVector; -#endif template static inline void parallel_do( Iterator first, Iterator last, const Body& body ) diff --git a/modules/objdetect/src/cascadedetect.cpp b/modules/objdetect/src/cascadedetect.cpp index 7f05b0a6e6..dd9b8f7bf8 100644 --- a/modules/objdetect/src/cascadedetect.cpp +++ b/modules/objdetect/src/cascadedetect.cpp @@ -1076,7 +1076,7 @@ void CascadeClassifier::detectMultiScale( const Mat& image, vector& object int stripCount, stripSize; - #if defined(HAVE_TBB) || defined(HAVE_THREADING_FRAMEWORK) + #ifdef HAVE_TBB const int PTS_PER_THREAD = 1000; stripCount = ((processingRectSize.width/yStep)*(processingRectSize.height + yStep-1)/yStep + PTS_PER_THREAD/2)/PTS_PER_THREAD; stripCount = std::min(std::max(stripCount, 1), 100); diff --git a/modules/python/CMakeLists.txt b/modules/python/CMakeLists.txt index d9ea987e61..1433fc4dd8 100644 --- a/modules/python/CMakeLists.txt +++ b/modules/python/CMakeLists.txt @@ -1,3 +1,7 @@ +if(WIN32 AND CMAKE_BUILD_TYPE STREQUAL "Debug") + return() +endif() + # ---------------------------------------------------------------------------- # CMake file for python support # ----------------------------------------------------------------------------