diff --git a/CMakeLists.txt b/CMakeLists.txt index ba47b0adc2..44e503a935 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,6 +40,9 @@ if(NOT CMAKE_TOOLCHAIN_FILE) if(MSVC) set(CMAKE_USE_RELATIVE_PATHS ON CACHE INTERNAL "" FORCE) endif() +else(NOT CMAKE_TOOLCHAIN_FILE) + #Android: set output folder to ${CMAKE_BINARY_DIR} + set( LIBRARY_OUTPUT_PATH_ROOT ${CMAKE_BINARY_DIR} CACHE PATH "root for library output, set this to change where android libs are compiled to" ) endif(NOT CMAKE_TOOLCHAIN_FILE) # -------------------------------------------------------------- @@ -89,7 +92,6 @@ include(cmake/OpenCVDetectCXXCompiler.cmake REQUIRED) # 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) ) @@ -126,9 +128,7 @@ else() 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) ) @@ -165,6 +165,7 @@ OCV_OPTION(ENABLE_SSE41 "Enable SSE4.1 instructions" OCV_OPTION(ENABLE_SSE42 "Enable SSE4.2 instructions" OFF IF (CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) ) OCV_OPTION(OPENCV_WARNINGS_ARE_ERRORS "Treat warnings as errors" OFF ) +include(cmake/OpenCVLegacyOptions.cmake OPTIONAL) # ---------------------------------------------------------------------------- # Get actual OpenCV version number from sources @@ -444,7 +445,7 @@ include(cmake/OpenCVDetectPython.cmake REQUIRED) ########################### Java Support ########################## # current implementation of Java wrappers generator requires python at build time -if(BUILD_JAVA_SUPPORT AND PYTHON_EXECUTABLE) +if((NOT DEFINED BUILD_opencv_java OR BUILD_opencv_java) AND PYTHON_EXECUTABLE) if(ANDROID) include(cmake/OpenCVDetectAndroidSDK.cmake REQUIRED) endif() @@ -458,7 +459,8 @@ if(BUILD_JAVA_SUPPORT AND PYTHON_EXECUTABLE) endif() if(NOT CAN_BUILD_ANDROID_PROJECTS) - UNSET(BUILD_ANDROID_EXAMPLES CACHE) + message(WARNING "Android examples are chosen for build, but required SDK tools are not found.") + unset(BUILD_ANDROID_EXAMPLES CACHE) endif() ############################### QT ################################ @@ -778,10 +780,10 @@ status(" Python interpreter:" PYTHON_EXECUTABLE THEN "${PYTHON_EXECUTAB # interfaces to other languages status("") status(" Interfaces:") -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)") +status(" Python:" HAVE_opencv_python THEN YES ELSE NO) +status(" Python numpy:" PYTHON_USE_NUMPY THEN YES ELSE "NO (Python wrappers will not be generated)") if(ANDROID) - status(" Java:" BUILD_JAVA_SUPPORT AND PYTHON_EXECUTABLE THEN YES ELSE NO) + status(" Java:" HAVE_opencv_java THEN YES ELSE NO) endif() # documentation diff --git a/android/CMakeCache.android.initial.cmake b/android/CMakeCache.android.initial.cmake deleted file mode 100644 index fd7e11713c..0000000000 --- a/android/CMakeCache.android.initial.cmake +++ /dev/null @@ -1,32 +0,0 @@ -######################## -# Initial cache settings for opencv on android -# run cmake with: -# cmake -C -######################## - -#Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel. -set(CMAKE_BUILD_TYPE "Release" CACHE STRING "" ) - -#no python available on Android -set(BUILD_NEW_PYTHON_SUPPORT OFF CACHE INTERNAL "" FORCE) - -#Enable SSE instructions -SET( ENABLE_SSE OFF CACHE INTERNAL "" FORCE ) - -#Enable SSE2 instructions -SET( ENABLE_SSE2 OFF CACHE INTERNAL "" FORCE ) - -#Enable SSE3 instructions -SET( ENABLE_SSE3 OFF CACHE INTERNAL "" FORCE ) - -#Enable SSE4.1 instructions -SET( ENABLE_SSE41 OFF CACHE INTERNAL "" FORCE ) - -#Enable SSE4.2 instructions -SET( ENABLE_SSE42 OFF CACHE INTERNAL "" FORCE ) - -#Enable SSSE3 instructions -SET( ENABLE_SSSE3 OFF CACHE INTERNAL "" FORCE ) - -#Set output folder to ${CMAKE_BINARY_DIR} -set( LIBRARY_OUTPUT_PATH_ROOT ${CMAKE_BINARY_DIR} CACHE PATH "root for library output, set this to change where android libs are compiled to" ) diff --git a/android/scripts/build.cmd b/android/scripts/build.cmd index 0e98276ea6..9f4171d982 100644 --- a/android/scripts/build.cmd +++ b/android/scripts/build.cmd @@ -6,7 +6,7 @@ SETLOCAL ENABLEEXTENSIONS || (ECHO Unable to enable command extensions. & EXIT \ :: build environment SET SOURCE_DIR=%cd% -IF EXIST .\CMakeCache.android.initial.cmake (SET BUILD_OPENCV=1) ELSE (SET BUILD_OPENCV=0) +IF EXIST .\android.toolchain.cmake (SET BUILD_OPENCV=1) ELSE (SET BUILD_OPENCV=0) IF EXIST .\jni\nul (SET BUILD_JAVA_PART=1) ELSE (SET BUILD_JAVA_PART=0) :: load configuration @@ -53,7 +53,7 @@ ECHO ANDROID_ABI=%ANDROID_ABI% ECHO. IF NOT %BUILD_OPENCV%==1 GOTO other-cmake :opencv-cmake -("%CMAKE_EXE%" -G"MinGW Makefiles" -DANDROID_ABI="%ANDROID_ABI%" -C "%SOURCE_DIR%\CMakeCache.android.initial.cmake" -DCMAKE_TOOLCHAIN_FILE="%SOURCE_DIR%"\android.toolchain.cmake -DCMAKE_MAKE_PROGRAM="%MAKE_EXE%" %* "%SOURCE_DIR%\..") && GOTO cmakefin +("%CMAKE_EXE%" -G"MinGW Makefiles" -DANDROID_ABI="%ANDROID_ABI%" -DCMAKE_TOOLCHAIN_FILE="%SOURCE_DIR%"\android.toolchain.cmake -DCMAKE_MAKE_PROGRAM="%MAKE_EXE%" %* "%SOURCE_DIR%\..") && GOTO cmakefin ECHO. & ECHO cmake failed & GOTO end :other-cmake ("%CMAKE_EXE%" -G"MinGW Makefiles" -DANDROID_ABI="%ANDROID_ABI%" -DOpenCV_DIR="%OPENCV_BUILD_DIR%" -DCMAKE_TOOLCHAIN_FILE="%OPENCV_BUILD_DIR%\..\android.toolchain.cmake" -DCMAKE_MAKE_PROGRAM="%MAKE_EXE%" %* "%SOURCE_DIR%") && GOTO cmakefin diff --git a/android/scripts/cmake_android.sh b/android/scripts/cmake_android.sh index c17110e69b..f2cbe481e9 100644 --- a/android/scripts/cmake_android.sh +++ b/android/scripts/cmake_android.sh @@ -4,5 +4,5 @@ cd `dirname $0`/.. mkdir -p build cd build -cmake -C ../CMakeCache.android.initial.cmake -DCMAKE_TOOLCHAIN_FILE=../android.toolchain.cmake $@ ../.. +cmake -DCMAKE_TOOLCHAIN_FILE=../android.toolchain.cmake $@ ../.. diff --git a/android/scripts/cmake_android_armeabi.sh b/android/scripts/cmake_android_armeabi.sh index 8652d6919b..9c711d8855 100644 --- a/android/scripts/cmake_android_armeabi.sh +++ b/android/scripts/cmake_android_armeabi.sh @@ -4,5 +4,5 @@ cd `dirname $0`/.. mkdir -p build_armeabi cd build_armeabi -cmake -C ../CMakeCache.android.initial.cmake -DANDROID_ABI=armeabi -DCMAKE_TOOLCHAIN_FILE=../android.toolchain.cmake $@ ../.. +cmake -DANDROID_ABI=armeabi -DCMAKE_TOOLCHAIN_FILE=../android.toolchain.cmake $@ ../.. diff --git a/android/scripts/cmake_android_neon.sh b/android/scripts/cmake_android_neon.sh index ebd9dd0759..5e85605b56 100644 --- a/android/scripts/cmake_android_neon.sh +++ b/android/scripts/cmake_android_neon.sh @@ -4,5 +4,5 @@ cd `dirname $0`/.. mkdir -p build_neon cd build_neon -cmake -C ../CMakeCache.android.initial.cmake -DANDROID_ABI="armeabi-v7a with NEON" -DCMAKE_TOOLCHAIN_FILE=../android.toolchain.cmake $@ ../.. +cmake -DANDROID_ABI="armeabi-v7a with NEON" -DCMAKE_TOOLCHAIN_FILE=../android.toolchain.cmake $@ ../.. diff --git a/android/scripts/package.sh b/android/scripts/package.sh index 32ad00a157..41a9dad0be 100644 --- a/android/scripts/package.sh +++ b/android/scripts/package.sh @@ -15,7 +15,7 @@ mkdir opencv #mkdir build-neon #cd build-neon -#cmake -C "$ANDROID_DIR/CMakeCache.android.initial.cmake" -DANDROID_ABI="armeabi-v7a with NEON" -DBUILD_DOCS=OFF -DBUILD_TESTS=OFF -DBUILD_EXAMPLES=OFF -DBUILD_ANDROID_EXAMPLES=OFF -DCMAKE_TOOLCHAIN_FILE="$ANDROID_DIR/android.toolchain.cmake" -DCMAKE_INSTALL_PREFIX="$PRG_DIR/opencv" "$ANDROID_DIR/.." || exit 1 +#cmake -DANDROID_ABI="armeabi-v7a with NEON" -DBUILD_DOCS=OFF -DBUILD_TESTS=OFF -DBUILD_EXAMPLES=OFF -DBUILD_ANDROID_EXAMPLES=OFF -DCMAKE_TOOLCHAIN_FILE="$ANDROID_DIR/android.toolchain.cmake" -DCMAKE_INSTALL_PREFIX="$PRG_DIR/opencv" "$ANDROID_DIR/.." || exit 1 #make -j8 install/strip || exit 1 #cd "$PRG_DIR/opencv" @@ -29,7 +29,7 @@ cd "$PRG_DIR" mkdir build cd build -cmake -C "$ANDROID_DIR/CMakeCache.android.initial.cmake" -DANDROID_ABI="armeabi-v7a" -DBUILD_DOCS=OFF -DBUILD_TESTS=ON -DBUILD_EXAMPLES=OFF -DBUILD_ANDROID_EXAMPLES=ON -DCMAKE_TOOLCHAIN_FILE="$ANDROID_DIR/android.toolchain.cmake" -DCMAKE_INSTALL_PREFIX="$PRG_DIR/opencv" "$ANDROID_DIR/.." || exit 1 +cmake -DANDROID_ABI="armeabi-v7a" -DBUILD_DOCS=OFF -DBUILD_TESTS=ON -DBUILD_EXAMPLES=OFF -DBUILD_ANDROID_EXAMPLES=ON -DCMAKE_TOOLCHAIN_FILE="$ANDROID_DIR/android.toolchain.cmake" -DCMAKE_INSTALL_PREFIX="$PRG_DIR/opencv" "$ANDROID_DIR/.." || exit 1 make -j8 install/strip || exit 1 cd "$PRG_DIR/opencv" @@ -40,7 +40,7 @@ rm -rf doc include src .classpath .project AndroidManifest.xml default.propertie cd "$PRG_DIR/build" rm -rf CMakeCache.txt -cmake -C "$ANDROID_DIR/CMakeCache.android.initial.cmake" -DANDROID_ABI="armeabi" -DBUILD_DOCS=ON -DBUILD_TESTS=ON -DBUILD_EXAMPLES=OFF -DBUILD_ANDROID_EXAMPLES=ON -DINSTALL_ANDROID_EXAMPLES=ON -DCMAKE_TOOLCHAIN_FILE="$ANDROID_DIR/android.toolchain.cmake" -DCMAKE_INSTALL_PREFIX="$PRG_DIR/opencv" "$ANDROID_DIR/.." || exit 1 +cmake -DANDROID_ABI="armeabi" -DBUILD_DOCS=ON -DBUILD_TESTS=ON -DBUILD_EXAMPLES=OFF -DBUILD_ANDROID_EXAMPLES=ON -DINSTALL_ANDROID_EXAMPLES=ON -DCMAKE_TOOLCHAIN_FILE="$ANDROID_DIR/android.toolchain.cmake" -DCMAKE_INSTALL_PREFIX="$PRG_DIR/opencv" "$ANDROID_DIR/.." || exit 1 make -j8 install/strip docs || exit 1 find doc -name "*.pdf" -exec cp {} $PRG_DIR/opencv/doc \; diff --git a/cmake/OpenCVGenConfig.cmake b/cmake/OpenCVGenConfig.cmake index 01c7d926f3..d5fecc7ece 100644 --- a/cmake/OpenCVGenConfig.cmake +++ b/cmake/OpenCVGenConfig.cmake @@ -36,13 +36,16 @@ if(OpenCV_LIB_COMPONENTS) list(REMOVE_ITEM OPENCV_MODULES_CONFIGMAKE ${OpenCV_LIB_COMPONENTS}) endif() -macro(ocv_generate_dependencies_map_configmake suffix) +macro(ocv_generate_dependencies_map_configmake suffix configuration) set(OPENCV_DEPENDENCIES_MAP_${suffix} "") set(OPENCV_PROCESSED_LIBS "") set(OPENCV_LIBS_TO_PROCESS ${OPENCV_MODULES_CONFIGMAKE}) while(OPENCV_LIBS_TO_PROCESS) list(GET OPENCV_LIBS_TO_PROCESS 0 __ocv_lib) + get_target_property(__libname ${__ocv_lib} LOCATION_${configuration}) + get_filename_component(__libname "${__libname}" NAME) + set(OPENCV_DEPENDENCIES_MAP_${suffix} "${OPENCV_DEPENDENCIES_MAP_${suffix}}set(OpenCV_${__ocv_lib}_LIBNAME_${suffix} \"${__libname}\")\n") set(OPENCV_DEPENDENCIES_MAP_${suffix} "${OPENCV_DEPENDENCIES_MAP_${suffix}}set(OpenCV_${__ocv_lib}_DEPS_${suffix} ${${__ocv_lib}_MODULE_DEPS_${suffix}})\n") set(OPENCV_DEPENDENCIES_MAP_${suffix} "${OPENCV_DEPENDENCIES_MAP_${suffix}}set(OpenCV_${__ocv_lib}_EXTRA_DEPS_${suffix} ${${__ocv_lib}_EXTRA_DEPS_${suffix}})\n") @@ -53,19 +56,27 @@ macro(ocv_generate_dependencies_map_configmake suffix) unset(OPENCV_PROCESSED_LIBS) unset(OPENCV_LIBS_TO_PROCESS) unset(__ocv_lib) + unset(__libname) endmacro() -ocv_generate_dependencies_map_configmake(OPT) -ocv_generate_dependencies_map_configmake(DBG) +ocv_generate_dependencies_map_configmake(OPT Release) +ocv_generate_dependencies_map_configmake(DBG Debug) # ------------------------------------------------------------------------------------------- # Part 1/3: ${BIN_DIR}/OpenCVConfig.cmake -> For use *without* "make install" # ------------------------------------------------------------------------------------------- set(CMAKE_INCLUDE_DIRS_CONFIGCMAKE "\"${OPENCV_CONFIG_FILE_INCLUDE_DIR}\" \"${OpenCV_SOURCE_DIR}/include\" \"${OpenCV_SOURCE_DIR}/include/opencv\"") -set(CMAKE_OPENCV2_INCLUDE_DIRS_CONFIGCMAKE "${OpenCV_SOURCE_DIR}") -set(CMAKE_LIB_DIRS_CONFIGCMAKE "${LIBRARY_OUTPUT_PATH}") +set(CMAKE_LIB_DIRS_CONFIGCMAKE "\"${LIBRARY_OUTPUT_PATH}\"") set(CMAKE_3RDPARTY_LIB_DIRS_CONFIGCMAKE "\"${CMAKE_BINARY_DIR}/3rdparty/${OPENCV_LIB_INSTALL_PATH}\"") +#set(CMAKE_OPENCV2_INCLUDE_DIRS_CONFIGCMAKE "${OpenCV_SOURCE_DIR}") +set(CMAKE_OPENCV2_INCLUDE_DIRS_CONFIGCMAKE "") +foreach(m ${OPENCV_MODULES_BUILD}) + if(EXISTS "${OPENCV_MODULE_${m}_LOCATION}/include") + list(APPEND CMAKE_OPENCV2_INCLUDE_DIRS_CONFIGCMAKE "${OPENCV_MODULE_${m}_LOCATION}/include") + endif() +endforeach() + 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. @@ -77,7 +88,7 @@ configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/OpenCVConfig-version # ------------------------------------------------------------------------------------------- set(CMAKE_INCLUDE_DIRS_CONFIGCMAKE "\"\${OpenCV_INSTALL_PATH}/${OPENCV_INCLUDE_PREFIX}/opencv" "\${OpenCV_INSTALL_PATH}/${OPENCV_INCLUDE_PREFIX}\"") -set(CMAKE_OPENCV2_INCLUDE_DIRS_CONFIGCMAKE "") +set(CMAKE_OPENCV2_INCLUDE_DIRS_CONFIGCMAKE "\"\"") if(ANDROID) set(CMAKE_LIB_DIRS_CONFIGCMAKE "\"\${OpenCV_INSTALL_PATH}/libs/\${ANDROID_NDK_ABI_NAME}\"") set(CMAKE_3RDPARTY_LIB_DIRS_CONFIGCMAKE "\"\${OpenCV_INSTALL_PATH}/share/OpenCV/3rdparty/libs/\${ANDROID_NDK_ABI_NAME}\"") @@ -117,7 +128,7 @@ endif() # ------------------------------------------------------------------------------------------- if(WIN32) set(CMAKE_INCLUDE_DIRS_CONFIGCMAKE "\"\${OpenCV_CONFIG_PATH}/include\" \"\${OpenCV_CONFIG_PATH}/include/opencv\"") - set(CMAKE_OPENCV2_INCLUDE_DIRS_CONFIGCMAKE "") + set(CMAKE_OPENCV2_INCLUDE_DIRS_CONFIGCMAKE "\"\"") set(CMAKE_LIB_DIRS_CONFIGCMAKE "\"\${OpenCV_CONFIG_PATH}/${OPENCV_LIB_INSTALL_PATH}\"") set(CMAKE_3RDPARTY_LIB_DIRS_CONFIGCMAKE "\"\${OpenCV_CONFIG_PATH}/share/OpenCV/3rdparty/${OPENCV_LIB_INSTALL_PATH}\"") diff --git a/cmake/OpenCVLegacyOptions.cmake b/cmake/OpenCVLegacyOptions.cmake new file mode 100644 index 0000000000..924a476fe5 --- /dev/null +++ b/cmake/OpenCVLegacyOptions.cmake @@ -0,0 +1,15 @@ +macro(ocv_legacy_option old superseded_by) + if(DEFINED ${old}) + if(ARGV2) + set(${superseded_by} ${${old}} CACHE ${ARGV2} "Set via depricated ${old}" FORCE) + else() + set(${superseded_by} ${${old}} CACHE BOOL "Set via depricated ${old}" FORCE) + endif() + unset(${old} CACHE) + endif() +endmacro() + +ocv_legacy_option(BUILD_NEW_PYTHON_SUPPORT BUILD_opencv_python) +ocv_legacy_option(BUILD_JAVA_SUPPORT BUILD_opencv_java) +ocv_legacy_option(WITH_ANDROID_CAMERA BUILD_opencv_androidcamera) + diff --git a/cmake/templates/OpenCVConfig.cmake.in b/cmake/templates/OpenCVConfig.cmake.in index d68146f42c..5dc4c5906c 100644 --- a/cmake/templates/OpenCVConfig.cmake.in +++ b/cmake/templates/OpenCVConfig.cmake.in @@ -73,8 +73,10 @@ include_directories(${OpenCV_INCLUDE_DIRS}) # ====================================================== # Provide the libs directories to the caller -SET(OpenCV_LIB_DIR @CMAKE_LIB_DIRS_CONFIGCMAKE@) -link_directories(${OpenCV_LIB_DIR}) +set(OpenCV_LIB_DIR_OPT @CMAKE_LIB_DIRS_CONFIGCMAKE@) +set(OpenCV_LIB_DIR_DBG @CMAKE_LIB_DIRS_CONFIGCMAKE@) +set(OpenCV_3RDPARTY_LIB_DIR_OPT @CMAKE_3RDPARTY_LIB_DIRS_CONFIGCMAKE@) +set(OpenCV_3RDPARTY_LIB_DIR_DBG @CMAKE_3RDPARTY_LIB_DIRS_CONFIGCMAKE@) # ====================================================== # Version variables: @@ -94,6 +96,21 @@ SET(OpenCV_LIB_COMPONENTS @OPENCV_MODULES_CONFIGMAKE@) @OPENCV_DEPENDENCIES_MAP_DBG@ +# ============================================================== +# Extra include directories, needed by OpenCV 2 new structure +# ============================================================== +SET(OpenCV2_INCLUDE_DIRS @CMAKE_OPENCV2_INCLUDE_DIRS_CONFIGCMAKE@) +if(OpenCV2_INCLUDE_DIRS) + include_directories(${OpenCV2_INCLUDE_DIRS}) + list(APPEND OpenCV_INCLUDE_DIRS ${OpenCV2_INCLUDE_DIRS}) + if(MSVC) + set(OpenCV_LIB_DIR_OPT "${OpenCV_LIB_DIR_OPT}/Release") + set(OpenCV_LIB_DIR_DBG "${OpenCV_LIB_DIR_DBG}/Debug") + set(OpenCV_3RDPARTY_LIB_DIR_OPT "${OpenCV_3RDPARTY_LIB_DIR_OPT}/Release") + set(OpenCV_3RDPARTY_LIB_DIR_DBG "${OpenCV_3RDPARTY_LIB_DIR_DBG}/Debug") + endif() +endif() + # ============================================================== # Check OpenCV availability # ============================================================== @@ -114,10 +131,10 @@ endif() # Form list of modules (components) to find # ============================================================== if(NOT OpenCV_FIND_COMPONENTS) - set(OpenCV_FIND_COMPONENTS ${OpenCV_LIB_COMPONENTS}) + set(OpenCV_FIND_COMPONENTS ${OpenCV_LIB_COMPONENTS}) endif() -#expand short module names +# expand short module names and see if requested components exist set(OpenCV_FIND_COMPONENTS_ "") foreach(__cvcomponent ${OpenCV_FIND_COMPONENTS}) if(NOT __cvcomponent MATCHES "^opencv_") @@ -125,15 +142,20 @@ foreach(__cvcomponent ${OpenCV_FIND_COMPONENTS}) endif() list(FIND OpenCV_LIB_COMPONENTS ${__cvcomponent} __cvcomponentIdx) if(__cvcomponentIdx LESS 0) + #requested component is not found... if(OpenCV_FIND_REQUIRED) message(FATAL_ERROR "${__cvcomponent} is required but was not found") elseif(NOT OpenCV_FIND_QUIETLY) message(WARNING "${__cvcomponent} is required but was not found") endif() + #indicate that module is NOT found string(TOUPPER "${__cvcomponent}" __cvcomponent) set(${__cvcomponent}_FOUND "${__cvcomponent}_FOUND-NOTFOUND") else() list(APPEND OpenCV_FIND_COMPONENTS_ ${__cvcomponent}) + #indicate that module is found + string(TOUPPER "${__cvcomponent}" __cvcomponent) + set(${__cvcomponent}_FOUND 1) endif() endforeach() set(OpenCV_FIND_COMPONENTS ${OpenCV_FIND_COMPONENTS_}) @@ -142,39 +164,27 @@ set(OpenCV_FIND_COMPONENTS ${OpenCV_FIND_COMPONENTS_}) # Resolve dependencies # ============================================================== if(OpenCV_USE_MANGLED_PATHS) - set(OpenCV_LIB_SUFFIX_DBG ".so.${OpenCV_VERSION}") - set(OpenCV_LIB_SUFFIX_OPT ".so.${OpenCV_VERSION}") + set(OpenCV_LIB_SUFFIX ".${OpenCV_VERSION}") else() - set(OpenCV_LIB_SUFFIX_DBG "@OPENCV_DLLVERSION@@OPENCV_DEBUG_POSTFIX@") - set(OpenCV_LIB_SUFFIX_OPT "@OPENCV_DLLVERSION@") + set(OpenCV_LIB_SUFFIX "") endif() -set(OpenCV_3RDPARTY_LIB_SUFFIX_DBG "@OPENCV_DEBUG_POSTFIX@") -set(OpenCV_3RDPARTY_LIB_SUFFIX_OPT "") -# choose required dependencies -set(OpenCV_NEED_3RDPARTY_LINK_DEPS FALSE) -set(OpenCV_REQUIRED_MODULES ${OpenCV_FIND_COMPONENTS}) foreach(__opttype OPT DBG) SET(OpenCV_LIBS_${__opttype} "") SET(OpenCV_EXTRA_LIBS_${__opttype} "") foreach(__cvlib ${OpenCV_FIND_COMPONENTS}) foreach(__cvdep ${OpenCV_${__cvlib}_DEPS_${__opttype}}) if(__cvdep MATCHES "^opencv_") - list(APPEND OpenCV_LIBS_${__opttype} ${__cvdep}${OpenCV_LIB_SUFFIX_${__opttype}}) - list(APPEND OpenCV_REQUIRED_MODULES ${__cvdep}) + list(APPEND OpenCV_LIBS_${__opttype} "${OpenCV_LIB_DIR_${__opttype}}/${OpenCV_${__cvdep}_LIBNAME_${__opttype}}${OpenCV_LIB_SUFFIX}") #indicate that this module is also found string(TOUPPER "${__cvdep}" __cvdep) set(${__cvdep}_FOUND 1) else() - list(APPEND OpenCV_LIBS_${__opttype} ${__cvdep}${OpenCV_3RDPARTY_LIB_SUFFIX_${__opttype}}) - set(OpenCV_NEED_3RDPARTY_LINK_DEPS TRUE) + list(APPEND OpenCV_LIBS_${__opttype} "${OpenCV_3RDPARTY_LIB_DIR_${__opttype}}/${OpenCV_${__cvdep}_LIBNAME_${__opttype}}") endif() endforeach() - list(APPEND OpenCV_LIBS_${__opttype} ${__cvlib}${OpenCV_LIB_SUFFIX_${__opttype}}) + list(APPEND OpenCV_LIBS_${__opttype} "${OpenCV_LIB_DIR_${__opttype}}/${OpenCV_${__cvlib}_LIBNAME_${__opttype}}${OpenCV_LIB_SUFFIX}") list(APPEND OpenCV_EXTRA_LIBS_${__opttype} ${OpenCV_${__cvlib}_EXTRA_DEPS_${__opttype}}) - #indicate that module is found - string(TOUPPER "${__cvlib}" __cvlib) - set(${__cvlib}_FOUND 1) endforeach() if(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} VERSION_GREATER 2.4) @@ -184,19 +194,11 @@ foreach(__opttype OPT DBG) if(OpenCV_EXTRA_LIBS_${__opttype}) list(REMOVE_DUPLICATES OpenCV_EXTRA_LIBS_${__opttype}) endif() - if(OpenCV_REQUIRED_MODULES) - list(REMOVE_DUPLICATES OpenCV_REQUIRED_MODULES) - endif() else() #TODO: duplicates are annoying but they should not be the problem endif() endforeach() -if(OpenCV_NEED_3RDPARTY_LINK_DEPS) - list(APPEND OpenCV_LIB_DIR @CMAKE_3RDPARTY_LIB_DIRS_CONFIGCMAKE@) - link_directories(@CMAKE_3RDPARTY_LIB_DIRS_CONFIGCMAKE@) -endif() - if(OpenCV_LIBS_DBG) list(REVERSE OpenCV_LIBS_DBG) endif() @@ -224,19 +226,6 @@ else() endif() 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() - # ============================================================== # Android camera helper macro # ============================================================== diff --git a/modules/java/CMakeLists.txt b/modules/java/CMakeLists.txt index 05a355048b..518473e1f4 100644 --- a/modules/java/CMakeLists.txt +++ b/modules/java/CMakeLists.txt @@ -1,7 +1,7 @@ # ---------------------------------------------------------------------------- # CMake file for java support # ---------------------------------------------------------------------------- -if(NOT BUILD_JAVA_SUPPORT OR NOT PYTHON_EXECUTABLE) +if(NOT PYTHON_EXECUTABLE) ocv_module_disable(java) endif() diff --git a/modules/python/CMakeLists.txt b/modules/python/CMakeLists.txt index 730f52a2cf..bfe1b5a139 100644 --- a/modules/python/CMakeLists.txt +++ b/modules/python/CMakeLists.txt @@ -5,7 +5,7 @@ if(WIN32 AND CMAKE_BUILD_TYPE STREQUAL "Debug") ocv_module_disable(python) endif() -if(NOT PYTHONLIBS_FOUND OR NOT BUILD_NEW_PYTHON_SUPPORT OR NOT PYTHON_USE_NUMPY) +if(ANDROID OR IOS OR NOT PYTHONLIBS_FOUND OR NOT PYTHON_USE_NUMPY) ocv_module_disable(python) endif()