From 7a52c3d9f18794c73b08ecb9a697a734695c2d5b Mon Sep 17 00:00:00 2001 From: Vadim Pisarevsky Date: Thu, 5 Mar 2015 18:58:54 +0300 Subject: [PATCH 1/4] 1) make sure Python 2.7 is detected on Ubuntu (including libs) when it's there. 2) disable IPP on 32-bit Linux when OpenCV is built as shared libs. Otherwise we get linker errors 3) disable IPP's minMaxIdx 32-bit floating-point flavor in a hope that it fixes some test failures --- CMakeLists.txt | 2 +- cmake/OpenCVDetectPython.cmake | 3 +++ cmake/OpenCVFindIPP.cmake | 5 +++++ modules/core/src/stat.cpp | 2 +- 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 02863f8a63..89b6cf7199 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -995,7 +995,7 @@ if(WITH_IPP AND HAVE_IPP) status(" linked:" BUILD_WITH_DYNAMIC_IPP THEN "dynamic" ELSE "static") endif() else() - status(" Use IPP:" WITH_IPP AND NOT HAVE_IPP THEN "IPP not found" ELSE NO) + status(" Use IPP:" WITH_IPP AND NOT HAVE_IPP THEN "IPP not found or implicitly disabled" ELSE NO) endif() if(DEFINED WITH_IPP_A) diff --git a/cmake/OpenCVDetectPython.cmake b/cmake/OpenCVDetectPython.cmake index eb2c7bccbf..bcfdc5e0a6 100644 --- a/cmake/OpenCVDetectPython.cmake +++ b/cmake/OpenCVDetectPython.cmake @@ -88,6 +88,9 @@ function(find_python preferred_version min_version library_env include_dir_env find_host_package(PythonLibs "${_version_major_minor}") else() find_host_package(PythonLibs "${_version_major_minor}.${_version_patch}" EXACT) + if(NOT PYTHONLIBS_FOUND) + find_host_package(PythonLibs "${_version_major_minor}.${_version_patch}") + endif() endif() if(PYTHONLIBS_FOUND) diff --git a/cmake/OpenCVFindIPP.cmake b/cmake/OpenCVFindIPP.cmake index feb4484619..0242c13039 100644 --- a/cmake/OpenCVFindIPP.cmake +++ b/cmake/OpenCVFindIPP.cmake @@ -34,6 +34,11 @@ unset(IPP_VERSION_MAJOR) unset(IPP_VERSION_MINOR) unset(IPP_VERSION_BUILD) +if (X86 AND UNIX AND NOT APPLE AND NOT ANDROID AND BUILD_SHARED_LIBS) + message(STATUS "On 32-bit Linux IPP can not currently be used with dynamic libs. Set BUILD_SHARED_LIBS=OFF") + return() +endif() + set(IPP_X64 0) if(CMAKE_CXX_SIZEOF_DATA_PTR EQUAL 8) set(IPP_X64 1) diff --git a/modules/core/src/stat.cpp b/modules/core/src/stat.cpp index 348a68fd3b..bd69e5dc73 100644 --- a/modules/core/src/stat.cpp +++ b/modules/core/src/stat.cpp @@ -2314,7 +2314,7 @@ void cv::minMaxIdx(InputArray _src, double* minVal, depth == CV_8U ? (ippiMinMaxIndxFuncC1)ippiMinMaxIndx_8u_C1R : depth == CV_8S ? (ippiMinMaxIndxFuncC1)ippiMinMaxIndx_8s_C1R : depth == CV_16U ? (ippiMinMaxIndxFuncC1)ippiMinMaxIndx_16u_C1R : - depth == CV_32F ? (ippiMinMaxIndxFuncC1)ippiMinMaxIndx_32f_C1R : 0; + /*depth == CV_32F ? (ippiMinMaxIndxFuncC1)ippiMinMaxIndx_32f_C1R :*/ 0; CV_SUPPRESS_DEPRECATED_END if( ippFuncC1 ) From 5d8a1bf8136c3c46f92bce0987687f36e78e327d Mon Sep 17 00:00:00 2001 From: Vadim Pisarevsky Date: Fri, 6 Mar 2015 15:02:22 +0300 Subject: [PATCH 2/4] explained reason why IPP is disabled on 32-bit Linux. disable IPP's minMaxLoc_32f on 32-bit OSes only --- cmake/OpenCVFindIPP.cmake | 2 +- modules/core/src/stat.cpp | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/cmake/OpenCVFindIPP.cmake b/cmake/OpenCVFindIPP.cmake index 0242c13039..76c73f3e01 100644 --- a/cmake/OpenCVFindIPP.cmake +++ b/cmake/OpenCVFindIPP.cmake @@ -35,7 +35,7 @@ unset(IPP_VERSION_MINOR) unset(IPP_VERSION_BUILD) if (X86 AND UNIX AND NOT APPLE AND NOT ANDROID AND BUILD_SHARED_LIBS) - message(STATUS "On 32-bit Linux IPP can not currently be used with dynamic libs. Set BUILD_SHARED_LIBS=OFF") + message(STATUS "On 32-bit Linux IPP can not currently be used with dynamic libs because of linker errors. Set BUILD_SHARED_LIBS=OFF") return() endif() diff --git a/modules/core/src/stat.cpp b/modules/core/src/stat.cpp index bd69e5dc73..243d1f6632 100644 --- a/modules/core/src/stat.cpp +++ b/modules/core/src/stat.cpp @@ -2314,7 +2314,10 @@ void cv::minMaxIdx(InputArray _src, double* minVal, depth == CV_8U ? (ippiMinMaxIndxFuncC1)ippiMinMaxIndx_8u_C1R : depth == CV_8S ? (ippiMinMaxIndxFuncC1)ippiMinMaxIndx_8s_C1R : depth == CV_16U ? (ippiMinMaxIndxFuncC1)ippiMinMaxIndx_16u_C1R : - /*depth == CV_32F ? (ippiMinMaxIndxFuncC1)ippiMinMaxIndx_32f_C1R :*/ 0; + #if !((defined _MSC_VER && defined _M_IX86) || defined __i386__) + depth == CV_32F ? (ippiMinMaxIndxFuncC1)ippiMinMaxIndx_32f_C1R : + #endif + 0; CV_SUPPRESS_DEPRECATED_END if( ippFuncC1 ) From 4aa6d10a607dc5f64e3eac00176605088ccd9e34 Mon Sep 17 00:00:00 2001 From: Vadim Pisarevsky Date: Fri, 6 Mar 2015 15:48:36 +0300 Subject: [PATCH 3/4] added Maksim's fix as well; they both handle correctly more cases than each of them individually --- cmake/OpenCVDetectPython.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/OpenCVDetectPython.cmake b/cmake/OpenCVDetectPython.cmake index bcfdc5e0a6..754c2f1386 100644 --- a/cmake/OpenCVDetectPython.cmake +++ b/cmake/OpenCVDetectPython.cmake @@ -75,10 +75,10 @@ function(find_python preferred_version min_version library_env include_dir_env if(NOT ANDROID AND NOT IOS) ocv_check_environment_variables(${library_env} ${include_dir_env}) - if(${library}) + if(${library_env}) set(PYTHON_LIBRARY "${${library_env}}") endif() - if(${include_dir}) + if(${include_dir_env}) set(PYTHON_INCLUDE_DIR "${${include_dir_env}}") endif() From 643bbb2d93a23390736942566fa1c01993927cdc Mon Sep 17 00:00:00 2001 From: Vadim Pisarevsky Date: Fri, 6 Mar 2015 16:57:38 +0300 Subject: [PATCH 4/4] looks like Maksim was right; the new fix does not do the second attempt to detect python libs, it finds it correctly with the first attempt --- cmake/OpenCVDetectPython.cmake | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/cmake/OpenCVDetectPython.cmake b/cmake/OpenCVDetectPython.cmake index 754c2f1386..8ed425fb5a 100644 --- a/cmake/OpenCVDetectPython.cmake +++ b/cmake/OpenCVDetectPython.cmake @@ -75,10 +75,10 @@ function(find_python preferred_version min_version library_env include_dir_env if(NOT ANDROID AND NOT IOS) ocv_check_environment_variables(${library_env} ${include_dir_env}) - if(${library_env}) + if(${${library_env}}) set(PYTHON_LIBRARY "${${library_env}}") endif() - if(${include_dir_env}) + if(${${include_dir_env}}) set(PYTHON_INCLUDE_DIR "${${include_dir_env}}") endif() @@ -88,9 +88,6 @@ function(find_python preferred_version min_version library_env include_dir_env find_host_package(PythonLibs "${_version_major_minor}") else() find_host_package(PythonLibs "${_version_major_minor}.${_version_patch}" EXACT) - if(NOT PYTHONLIBS_FOUND) - find_host_package(PythonLibs "${_version_major_minor}.${_version_patch}") - endif() endif() if(PYTHONLIBS_FOUND)