From 6fd1b687a1120fae4dd0c2b9023ded0ea616ac2e Mon Sep 17 00:00:00 2001 From: Gold856 <117957790+Gold856@users.noreply.github.com> Date: Fri, 5 Jun 2026 15:52:49 -0400 Subject: [PATCH] Clean up CMake version checks --- cmake/OpenCVCompilerOptions.cmake | 4 +- cmake/OpenCVUtils.cmake | 3 - cmake/templates/OpenCVConfig.cmake.in | 72 +++++++------------ .../OpenCVConfig.root-ANDROID.cmake.in | 7 -- .../OpenCVConfig.root-WIN32.cmake.in | 8 +-- doc/CMakeLists.txt | 2 +- modules/java/jar/CMakeLists.txt | 4 +- samples/sycl/CMakeLists.txt | 1 + 8 files changed, 35 insertions(+), 66 deletions(-) diff --git a/cmake/OpenCVCompilerOptions.cmake b/cmake/OpenCVCompilerOptions.cmake index e43cd9bd79..a89dbc4c4c 100644 --- a/cmake/OpenCVCompilerOptions.cmake +++ b/cmake/OpenCVCompilerOptions.cmake @@ -377,7 +377,7 @@ if(NOT OPENCV_SKIP_LINK_AS_NEEDED) if(UNIX) set(_option "-Wl,--as-needed") set(_saved_CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${_option}") # requires CMake 3.2+ and CMP0056 + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${_option}") ocv_check_compiler_flag(CXX "" HAVE_LINK_AS_NEEDED) set(CMAKE_EXE_LINKER_FLAGS "${_saved_CMAKE_EXE_LINKER_FLAGS}") if(HAVE_LINK_AS_NEEDED) @@ -393,7 +393,7 @@ if(NOT OPENCV_SKIP_LINK_NO_UNDEFINED) if(UNIX AND (NOT CMAKE_SYSTEM_NAME MATCHES "OpenBSD")) set(_option "-Wl,--no-undefined") set(_saved_CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${_option}") # requires CMake 3.2+ and CMP0056 + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${_option}") ocv_check_compiler_flag(CXX "" HAVE_LINK_NO_UNDEFINED) set(CMAKE_EXE_LINKER_FLAGS "${_saved_CMAKE_EXE_LINKER_FLAGS}") if(HAVE_LINK_NO_UNDEFINED) diff --git a/cmake/OpenCVUtils.cmake b/cmake/OpenCVUtils.cmake index 880a72c9e1..c557685856 100644 --- a/cmake/OpenCVUtils.cmake +++ b/cmake/OpenCVUtils.cmake @@ -1944,9 +1944,6 @@ macro(ocv_get_smart_file_name output_var fpath) unset(__subir) endmacro() -# Needed by install(DIRECTORY ...) -set(compatible_MESSAGE_NEVER MESSAGE_NEVER) - macro(ocv_git_describe var_name path) if(GIT_FOUND) execute_process(COMMAND "${GIT_EXECUTABLE}" describe --tags --exact-match --dirty diff --git a/cmake/templates/OpenCVConfig.cmake.in b/cmake/templates/OpenCVConfig.cmake.in index c642863e9a..441f3f2d6b 100644 --- a/cmake/templates/OpenCVConfig.cmake.in +++ b/cmake/templates/OpenCVConfig.cmake.in @@ -54,8 +54,7 @@ SET(OpenCV_VERSION_STATUS "@OPENCV_VERSION_STATUS@") include(FindPackageHandleStandardArgs) -if(NOT CMAKE_VERSION VERSION_LESS 2.8.8 - AND OpenCV_FIND_COMPONENTS # prevent excessive output +if(OpenCV_FIND_COMPONENTS # prevent excessive output ) # HANDLE_COMPONENTS was introduced in CMake 2.8.8 list(APPEND _OpenCV_FPHSA_ARGS HANDLE_COMPONENTS) @@ -67,13 +66,6 @@ else() set(_OpenCV_HANDLE_COMPONENTS_MANUALLY TRUE) endif() -# Extract directory name from full path of the file currently being processed. -# Note that CMake 2.8.3 introduced CMAKE_CURRENT_LIST_DIR. We reimplement it -# for older versions of CMake to support these as well. -if(CMAKE_VERSION VERSION_LESS "2.8.3") - get_filename_component(CMAKE_CURRENT_LIST_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) -endif() - # Extract the directory where *this* file has been installed (determined at cmake run-time) # Get the absolute path with no ../.. relative marks, to eliminate implicit linker warnings get_filename_component(OpenCV_CONFIG_PATH "${CMAKE_CURRENT_LIST_DIR}" REALPATH) @@ -128,19 +120,15 @@ if(NOT TARGET opencv_core) include(${CMAKE_CURRENT_LIST_DIR}/OpenCVModules${OpenCV_MODULES_SUFFIX}.cmake) endif() -if(NOT CMAKE_VERSION VERSION_LESS "2.8.11") - # Target property INTERFACE_INCLUDE_DIRECTORIES available since 2.8.11: - # * http://www.cmake.org/cmake/help/v2.8.11/cmake.html#prop_tgt:INTERFACE_INCLUDE_DIRECTORIES - foreach(__component ${OpenCV_LIB_COMPONENTS}) - if(TARGET ${__component}) - set_target_properties( - ${__component} - PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${OpenCV_INCLUDE_DIRS}" - ) - endif() - endforeach() -endif() +foreach(__component ${OpenCV_LIB_COMPONENTS}) + if(TARGET ${__component}) + set_target_properties( + ${__component} + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${OpenCV_INCLUDE_DIRS}" + ) + endif() +endforeach() if(NOT DEFINED OPENCV_MAP_IMPORTED_CONFIG) @@ -275,31 +263,23 @@ endif() # ============================================================== set(OpenCV_LIBRARIES ${OpenCV_LIBS}) -# Require C++11 features for OpenCV modules -if(CMAKE_VERSION VERSION_LESS "3.1") - if(NOT OpenCV_FIND_QUIETLY AND NOT OPENCV_HIDE_WARNING_COMPILE_FEATURES) - message(STATUS "OpenCV: CMake version is low (${CMAKE_VERSION}, required 3.1+). Can't enable C++11 features: https://github.com/opencv/opencv/issues/13000") - endif() -else() - set(__target opencv_core) - if(TARGET opencv_world) - set(__target opencv_world) - endif() - set(__compile_features cxx_std_11) # CMake 3.8+ - if(DEFINED OPENCV_COMPILE_FEATURES) - set(__compile_features ${OPENCV_COMPILE_FEATURES}) # custom override - elseif(CMAKE_VERSION VERSION_LESS "3.8") - set(__compile_features cxx_auto_type cxx_rvalue_references cxx_lambdas) - endif() - if(__compile_features) - # Simulate exported result of target_compile_features(opencv_core PUBLIC ...) - set_target_properties(${__target} PROPERTIES - INTERFACE_COMPILE_FEATURES "${__compile_features}" - ) - endif() - unset(__target) - unset(__compile_features) +# Require C++17 features for OpenCV modules +set(__target opencv_core) +if(TARGET opencv_world) + set(__target opencv_world) endif() +set(__compile_features cxx_std_17) +if(DEFINED OPENCV_COMPILE_FEATURES) + set(__compile_features ${OPENCV_COMPILE_FEATURES}) # custom override +endif() +if(__compile_features) + # Simulate exported result of target_compile_features(opencv_core PUBLIC ...) + set_target_properties(${__target} PROPERTIES + INTERFACE_COMPILE_FEATURES "${__compile_features}" + ) +endif() +unset(__target) +unset(__compile_features) # # Some macros for samples diff --git a/cmake/templates/OpenCVConfig.root-ANDROID.cmake.in b/cmake/templates/OpenCVConfig.root-ANDROID.cmake.in index 7ceeec4c7f..88ff1ac32f 100644 --- a/cmake/templates/OpenCVConfig.root-ANDROID.cmake.in +++ b/cmake/templates/OpenCVConfig.root-ANDROID.cmake.in @@ -28,13 +28,6 @@ # # =================================================================================== -# Extract directory name from full path of the file currently being processed. -# Note that CMake 2.8.3 introduced CMAKE_CURRENT_LIST_DIR. We reimplement it -# for older versions of CMake to support these as well. -if(CMAKE_VERSION VERSION_LESS "2.8.3") - get_filename_component(CMAKE_CURRENT_LIST_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) -endif() - if(NOT DEFINED OpenCV_CONFIG_SUBDIR) set(OpenCV_CONFIG_SUBDIR "/abi-${ANDROID_NDK_ABI_NAME}") endif() diff --git a/cmake/templates/OpenCVConfig.root-WIN32.cmake.in b/cmake/templates/OpenCVConfig.root-WIN32.cmake.in index cc9fd8745f..13d4093b46 100644 --- a/cmake/templates/OpenCVConfig.root-WIN32.cmake.in +++ b/cmake/templates/OpenCVConfig.root-WIN32.cmake.in @@ -34,11 +34,9 @@ # - OpenCV_STATIC # - OpenCV_CUDA -if(CMAKE_VERSION VERSION_GREATER 2.6) - get_property(OpenCV_LANGUAGES GLOBAL PROPERTY ENABLED_LANGUAGES) - if(NOT ";${OpenCV_LANGUAGES};" MATCHES ";CXX;") - enable_language(CXX) - endif() +get_property(OpenCV_LANGUAGES GLOBAL PROPERTY ENABLED_LANGUAGES) +if(NOT ";${OpenCV_LANGUAGES};" MATCHES ";CXX;") + enable_language(CXX) endif() if(NOT DEFINED OpenCV_STATIC) diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index 0aee356f70..36c2198f48 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -309,6 +309,6 @@ if(DOXYGEN_FOUND) install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doxygen/html DESTINATION "${OPENCV_DOC_INSTALL_PATH}" COMPONENT "docs" OPTIONAL - ${compatible_MESSAGE_NEVER} + MESSAGE_NEVER ) endif() diff --git a/modules/java/jar/CMakeLists.txt b/modules/java/jar/CMakeLists.txt index c755521e2b..352a862274 100644 --- a/modules/java/jar/CMakeLists.txt +++ b/modules/java/jar/CMakeLists.txt @@ -101,7 +101,7 @@ if(BUILD_DOCS) install(DIRECTORY ${OpenCV_BINARY_DIR}/doc/doxygen/html/javadoc DESTINATION "${OPENCV_DOC_INSTALL_PATH}/html" COMPONENT "docs" OPTIONAL - ${compatible_MESSAGE_NEVER} + MESSAGE_NEVER ) elseif(OPENCV_JAVA_SDK_BUILD_TYPE STREQUAL "JAVA") set(Java_JAVADOC_EXECUTABLE ${Java_JAVADOC_EXECUTABLE} -encoding utf-8) @@ -121,7 +121,7 @@ if(BUILD_DOCS) install(DIRECTORY ${OpenCV_BINARY_DIR}/doc/doxygen/html/javadoc/${the_module}/ DESTINATION "${OPENCV_DOC_INSTALL_PATH}/html/javadoc" COMPONENT "docs" OPTIONAL - ${compatible_MESSAGE_NEVER} + MESSAGE_NEVER ) else() ocv_assert(0) diff --git a/samples/sycl/CMakeLists.txt b/samples/sycl/CMakeLists.txt index b50df8420b..a4024a1bb9 100644 --- a/samples/sycl/CMakeLists.txt +++ b/samples/sycl/CMakeLists.txt @@ -1,6 +1,7 @@ if(OPENCV_SKIP_SAMPLES_SYCL) return() endif() +cmake_minimum_required(VERSION 3.13) ocv_install_example_src(sycl *.cpp *.hpp CMakeLists.txt)