From f694192878a1a0a8140b5c001e9172694028f5c3 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Mon, 21 Aug 2017 17:43:56 +0300 Subject: [PATCH] cmake: use CMAKE_CXX_COMPILER_VERSION (CMake 2.8.8+) - '-fvisibility' flag was updated - PVAPI library detection was changed --- 3rdparty/tbb/CMakeLists.txt | 4 +-- CMakeLists.txt | 4 --- cmake/OpenCVCompilerOptions.cmake | 4 ++- cmake/OpenCVDetectCUDA.cmake | 2 +- cmake/OpenCVDetectCXXCompiler.cmake | 56 +++-------------------------- cmake/OpenCVFindLibsVideo.cmake | 25 +++++-------- 6 files changed, 19 insertions(+), 76 deletions(-) diff --git a/3rdparty/tbb/CMakeLists.txt b/3rdparty/tbb/CMakeLists.txt index a99f2d16be..11a2b40ddd 100644 --- a/3rdparty/tbb/CMakeLists.txt +++ b/3rdparty/tbb/CMakeLists.txt @@ -71,9 +71,9 @@ if(HAVE_PTHREAD) add_definitions(-DUSE_PTHREAD) #required for Unix endif() -if (CMAKE_COMPILER_IS_GNUCXX) +if(CMAKE_COMPILER_IS_GNUCXX AND NOT CMAKE_COMPILER_IS_CLANGCXX) add_definitions(-DTBB_USE_GCC_BUILTINS=1) #required for ARM GCC - if (NOT CMAKE_OPENCV_GCC_VERSION_NUM LESS 600) + if(NOT CMAKE_CXX_COMPILER_VERSION LESS 6.0) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -flifetime-dse=1") # workaround for GCC 6.x endif() endif() diff --git a/CMakeLists.txt b/CMakeLists.txt index 3e23a3955d..33a381d364 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -943,10 +943,6 @@ endif() # ========================== C/C++ options ========================== if(CMAKE_CXX_COMPILER_VERSION) set(OPENCV_COMPILER_STR "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} (ver ${CMAKE_CXX_COMPILER_VERSION})") -elseif(CMAKE_COMPILER_IS_CLANGCXX) - set(OPENCV_COMPILER_STR "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} (ver ${CMAKE_CLANG_REGEX_VERSION})") -elseif(CMAKE_COMPILER_IS_GNUCXX) - set(OPENCV_COMPILER_STR "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} (ver ${CMAKE_GCC_REGEX_VERSION})") else() set(OPENCV_COMPILER_STR "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1}") endif() diff --git a/cmake/OpenCVCompilerOptions.cmake b/cmake/OpenCVCompilerOptions.cmake index 87b6523c5c..ed8cf3c98e 100644 --- a/cmake/OpenCVCompilerOptions.cmake +++ b/cmake/OpenCVCompilerOptions.cmake @@ -279,7 +279,9 @@ set(OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE "${OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEA set(OPENCV_EXTRA_EXE_LINKER_FLAGS_DEBUG "${OPENCV_EXTRA_EXE_LINKER_FLAGS_DEBUG}" CACHE INTERNAL "Extra linker flags for Debug build") # set default visibility to hidden -if(CMAKE_COMPILER_IS_GNUCXX AND CMAKE_OPENCV_GCC_VERSION_NUM GREATER 399) +if((CMAKE_COMPILER_ID STREQUAL "GNU" OR CMAKE_COMPILER_ID STREQUAL "Clang") + AND NOT OPENCV_SKIP_VISIBILITY_HIDDEN + AND NOT CMAKE_CXX_FLAGS MATCHES "-fvisibility") add_extra_compiler_option(-fvisibility=hidden) add_extra_compiler_option(-fvisibility-inlines-hidden) endif() diff --git a/cmake/OpenCVDetectCUDA.cmake b/cmake/OpenCVDetectCUDA.cmake index 282ba3e529..1b6dffd60b 100644 --- a/cmake/OpenCVDetectCUDA.cmake +++ b/cmake/OpenCVDetectCUDA.cmake @@ -220,7 +220,7 @@ if(CUDA_FOUND) endif() # disabled because of multiple warnings during building nvcc auto generated files - if(CMAKE_COMPILER_IS_GNUCXX AND CMAKE_GCC_REGEX_VERSION VERSION_GREATER "4.6.0") + if(CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "4.6.0") ocv_warnings_disable(CMAKE_CXX_FLAGS -Wunused-but-set-variable) endif() diff --git a/cmake/OpenCVDetectCXXCompiler.cmake b/cmake/OpenCVDetectCXXCompiler.cmake index 67e2a0f903..c65081ca7a 100644 --- a/cmake/OpenCVDetectCXXCompiler.cmake +++ b/cmake/OpenCVDetectCXXCompiler.cmake @@ -45,59 +45,11 @@ if(MSVC AND CMAKE_C_COMPILER MATCHES "icc|icl") set(CV_ICC __INTEL_COMPILER_FOR_WINDOWS) endif() -# ---------------------------------------------------------------------------- -# Detect GNU version: -# ---------------------------------------------------------------------------- -if(CMAKE_COMPILER_IS_CLANGCXX) - set(CMAKE_GCC_REGEX_VERSION "4.2.1") - set(CMAKE_OPENCV_GCC_VERSION_MAJOR 4) - set(CMAKE_OPENCV_GCC_VERSION_MINOR 2) - set(CMAKE_OPENCV_GCC_VERSION 42) - set(CMAKE_OPENCV_GCC_VERSION_NUM 402) - - execute_process(COMMAND ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} -v - ERROR_VARIABLE CMAKE_OPENCV_CLANG_VERSION_FULL - ERROR_STRIP_TRAILING_WHITESPACE) - - string(REGEX MATCH "version.*$" CMAKE_OPENCV_CLANG_VERSION_FULL "${CMAKE_OPENCV_CLANG_VERSION_FULL}") - string(REGEX MATCH "[0-9]+\\.[0-9]+" CMAKE_CLANG_REGEX_VERSION "${CMAKE_OPENCV_CLANG_VERSION_FULL}") - -elseif(CMAKE_COMPILER_IS_GNUCXX) - execute_process(COMMAND ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} -dumpversion - OUTPUT_VARIABLE CMAKE_OPENCV_GCC_VERSION_FULL - OUTPUT_STRIP_TRAILING_WHITESPACE) - - execute_process(COMMAND ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} -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, major.minor.build - string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" CMAKE_GCC_REGEX_VERSION "${CMAKE_OPENCV_GCC_VERSION_FULL}") - if(NOT CMAKE_GCC_REGEX_VERSION)#major.minor - string(REGEX MATCH "[0-9]+\\.[0-9]+" CMAKE_GCC_REGEX_VERSION "${CMAKE_OPENCV_GCC_VERSION_FULL}") - endif() - - if(CMAKE_GCC_REGEX_VERSION) - # Split the 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) - else()#compiler returned just the major version number - string(REGEX MATCH "[0-9]+" CMAKE_GCC_REGEX_VERSION "${CMAKE_OPENCV_GCC_VERSION_FULL}") - if(NOT CMAKE_GCC_REGEX_VERSION)#compiler did not return anything reasonable - set(CMAKE_GCC_REGEX_VERSION "0") - message(WARNING "GCC version not detected!") - endif() - set(CMAKE_OPENCV_GCC_VERSION_MAJOR ${CMAKE_GCC_REGEX_VERSION}) - set(CMAKE_OPENCV_GCC_VERSION_MINOR 0) - endif() - - 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(NOT DEFINED CMAKE_CXX_COMPILER_VERSION) + message(WARNING "Compiler version is not available: CMAKE_CXX_COMPILER_VERSION is not set") +endif() +if(CMAKE_COMPILER_IS_GNUCXX) if(WIN32) execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpmachine OUTPUT_VARIABLE OPENCV_GCC_TARGET_MACHINE diff --git a/cmake/OpenCVFindLibsVideo.cmake b/cmake/OpenCVFindLibsVideo.cmake index 062b165a20..f7b427bf45 100644 --- a/cmake/OpenCVFindLibsVideo.cmake +++ b/cmake/OpenCVFindLibsVideo.cmake @@ -89,23 +89,16 @@ if(WITH_PVAPI) set(PVAPI_SDK_SUBDIR arm) endif() - get_filename_component(_PVAPI_LIBRARY "${PVAPI_INCLUDE_PATH}/../lib-pc" ABSOLUTE) - if(PVAPI_SDK_SUBDIR) - set(_PVAPI_LIBRARY "${_PVAPI_LIBRARY}/${PVAPI_SDK_SUBDIR}") - endif() - if(NOT WIN32 AND CMAKE_COMPILER_IS_GNUCXX) - set(_PVAPI_LIBRARY "${_PVAPI_LIBRARY}/${CMAKE_OPENCV_GCC_VERSION_MAJOR}.${CMAKE_OPENCV_GCC_VERSION_MINOR}") - endif() + get_filename_component(_PVAPI_LIBRARY_HINT "${PVAPI_INCLUDE_PATH}/../lib-pc" ABSOLUTE) - if(WIN32) - if(MINGW) - set(PVAPI_DEFINITIONS "-DPVDECL=__stdcall") - endif(MINGW) - set(PVAPI_LIBRARY "${_PVAPI_LIBRARY}/PvAPI.lib" CACHE PATH "The PvAPI library") - else(WIN32) - set(PVAPI_LIBRARY "${_PVAPI_LIBRARY}/${CMAKE_STATIC_LIBRARY_PREFIX}PvAPI${CMAKE_STATIC_LIBRARY_SUFFIX}" CACHE PATH "The PvAPI library") - endif(WIN32) - if(EXISTS "${PVAPI_LIBRARY}") + find_library(PVAPI_LIBRARY NAMES "PvAPI" PATHS "${_PVAPI_LIBRARY_HINT}") + + if(PVAPI_LIBRARY) + if(WIN32) + if(MINGW) + set(PVAPI_DEFINITIONS "-DPVDECL=__stdcall") + endif(MINGW) + endif() set(HAVE_PVAPI TRUE) endif() endif(PVAPI_INCLUDE_PATH) -- GitLab