From 5eb173a0fd308b835def6a32789c9451efb2be13 Mon Sep 17 00:00:00 2001 From: Tim Kaune <tim.kaune@gmx.de> Date: Wed, 21 Feb 2024 14:16:07 +0100 Subject: [PATCH] Automatically propagate minimum required CMake version The package config and tests take the minimum required CMake version from the main project. Also introduce the maximum supported CMake version for policy management. --- CMakeLists.txt | 15 +++++++++++---- packaging/CMakeLists.txt | 17 ++++++++++++++--- ...e => LoadStaticSharedTargetsConfig.cmake.in} | 17 ++++++++++++----- tests/CMakeLists.txt | 14 ++++++++++++-- tests/helpers/test_case_wrapper.cmake | 10 ++++++++++ 5 files changed, 59 insertions(+), 14 deletions(-) rename packaging/{LoadStaticSharedTargetsConfig.cmake => LoadStaticSharedTargetsConfig.cmake.in} (69%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9136e61..ef48ac0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,10 +25,17 @@ SOFTWARE. cmake_minimum_required(VERSION 3.25) -# If CMake >=3.24 is used, set policies up to v3.24 to NEW -# if (NOT ${CMAKE_VERSION} VERSION_LESS 3.24) -# cmake_policy(VERSION 3.24) -# endif() +set(CMAKE_MAXIMUM_SUPPORTED_VERSION 3.28) + +# If CMAKE_VERSION <= CMAKE_MAXIMUM_SUPPORTED_VERSION is used, set policies up +# to CMAKE_VERSION to NEW +if (${CMAKE_VERSION} VERSION_LESS_EQUAL ${CMAKE_MAXIMUM_SUPPORTED_VERSION}) + cmake_policy(VERSION ${CMAKE_VERSION}) +# If CMAKE_VERSION > CMAKE_MAXIMUM_SUPPORTED_VERSION is used, set policies up to +# CMAKE_MAXIMUM_SUPPORTED_VERSION to NEW +else () + cmake_policy(VERSION ${CMAKE_MAXIMUM_SUPPORTED_VERSION}) +endif() project(LoadStaticSharedTargets VERSION 1.4.1 LANGUAGES NONE) diff --git a/packaging/CMakeLists.txt b/packaging/CMakeLists.txt index 9f30981..ba64606 100644 --- a/packaging/CMakeLists.txt +++ b/packaging/CMakeLists.txt @@ -26,8 +26,13 @@ SOFTWARE. include(CMakePackageConfigHelpers) if (NOT DEFINED LoadStaticSharedTargets_INSTALL_CMAKEDIR) - set(LoadStaticSharedTargets_INSTALL_CMAKEDIR "${CMAKE_INSTALL_DATAROOTDIR}/cmake/${PROJECT_NAME}" - CACHE STRING "Path to LoadStaticSharedTargets CMake files") + set( + LoadStaticSharedTargets_INSTALL_CMAKEDIR + "${CMAKE_INSTALL_DATAROOTDIR}/cmake/${PROJECT_NAME}" + CACHE + STRING + "Path to LoadStaticSharedTargets CMake files" + ) endif () install( @@ -42,10 +47,16 @@ write_basic_package_version_file( COMPATIBILITY SameMajorVersion ) +configure_file( + "LoadStaticSharedTargetsConfig.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/LoadStaticSharedTargetsConfig.cmake" + @ONLY +) + install( FILES "${CMAKE_CURRENT_BINARY_DIR}/LoadStaticSharedTargetsConfigVersion.cmake" - "LoadStaticSharedTargetsConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/LoadStaticSharedTargetsConfig.cmake" "../src/cmake/LoadStaticSharedTargets.cmake" DESTINATION "${LoadStaticSharedTargets_INSTALL_CMAKEDIR}" ) diff --git a/packaging/LoadStaticSharedTargetsConfig.cmake b/packaging/LoadStaticSharedTargetsConfig.cmake.in similarity index 69% rename from packaging/LoadStaticSharedTargetsConfig.cmake rename to packaging/LoadStaticSharedTargetsConfig.cmake.in index 3a59913..dd26084 100644 --- a/packaging/LoadStaticSharedTargetsConfig.cmake +++ b/packaging/LoadStaticSharedTargetsConfig.cmake.in @@ -23,12 +23,19 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ]] -cmake_minimum_required(VERSION 3.25) +cmake_minimum_required(VERSION @CMAKE_MINIMUM_REQUIRED_VERSION@) -# If CMake >=3.24 is used, set policies up to v3.24 to NEW -# if (NOT ${CMAKE_VERSION} VERSION_LESS 3.24) -# cmake_policy(VERSION 3.24) -# endif() +set(CMAKE_MAXIMUM_SUPPORTED_VERSION @CMAKE_MAXIMUM_SUPPORTED_VERSION@) + +# If CMAKE_VERSION <= CMAKE_MAXIMUM_SUPPORTED_VERSION is used, set policies up +# to CMAKE_VERSION to NEW +if (${CMAKE_VERSION} VERSION_LESS_EQUAL ${CMAKE_MAXIMUM_SUPPORTED_VERSION}) + cmake_policy(VERSION ${CMAKE_VERSION}) +# If CMAKE_VERSION > CMAKE_MAXIMUM_SUPPORTED_VERSION is used, set policies up to +# CMAKE_MAXIMUM_SUPPORTED_VERSION to NEW +else () + cmake_policy(VERSION ${CMAKE_MAXIMUM_SUPPORTED_VERSION}) +endif() # include(LoadStaticSharedTargets) should work after this list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}") diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index dee4f65..7fb6d78 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -64,7 +64,12 @@ set( foreach (TEST_CASE IN LISTS TEST_CASES TEST_CASES_WITH_WARNING) add_test( NAME "${TEST_CASE}" - COMMAND "${CMAKE_COMMAND}" -D CMAKE_MINIMUM_REQUIRED_VERSION=${CMAKE_MINIMUM_REQUIRED_VERSION} -D "TEST_CASE=${TEST_CASE}" -P "./helpers/test_case_wrapper.cmake" + COMMAND + "${CMAKE_COMMAND}" + -D CMAKE_MINIMUM_REQUIRED_VERSION=${CMAKE_MINIMUM_REQUIRED_VERSION} + -D CMAKE_MAXIMUM_SUPPORTED_VERSION=${CMAKE_MAXIMUM_SUPPORTED_VERSION} + -D "TEST_CASE=${TEST_CASE}" + -P "./helpers/test_case_wrapper.cmake" WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" ) endforeach () @@ -72,7 +77,12 @@ endforeach () foreach (TEST_CASE IN LISTS TEST_CASES_WITH_WARNING) add_test( NAME "${TEST_CASE}_check-warning" - COMMAND "${CMAKE_COMMAND}" -D CMAKE_MINIMUM_REQUIRED_VERSION=${CMAKE_MINIMUM_REQUIRED_VERSION} -D "TEST_CASE=${TEST_CASE}" -P "./helpers/test_case_wrapper.cmake" + COMMAND + "${CMAKE_COMMAND}" + -D CMAKE_MINIMUM_REQUIRED_VERSION=${CMAKE_MINIMUM_REQUIRED_VERSION} + -D CMAKE_MAXIMUM_SUPPORTED_VERSION=${CMAKE_MAXIMUM_SUPPORTED_VERSION} + -D "TEST_CASE=${TEST_CASE}" + -P "./helpers/test_case_wrapper.cmake" WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" ) diff --git a/tests/helpers/test_case_wrapper.cmake b/tests/helpers/test_case_wrapper.cmake index 744a3e0..53c695b 100644 --- a/tests/helpers/test_case_wrapper.cmake +++ b/tests/helpers/test_case_wrapper.cmake @@ -25,6 +25,16 @@ SOFTWARE. cmake_policy(VERSION ${CMAKE_MINIMUM_REQUIRED_VERSION}) +# If CMAKE_VERSION <= CMAKE_MAXIMUM_SUPPORTED_VERSION is used, set policies up +# to CMAKE_VERSION to NEW +if (${CMAKE_VERSION} VERSION_LESS_EQUAL ${CMAKE_MAXIMUM_SUPPORTED_VERSION}) + cmake_policy(VERSION ${CMAKE_VERSION}) +# If CMAKE_VERSION > CMAKE_MAXIMUM_SUPPORTED_VERSION is used, set policies up to +# CMAKE_MAXIMUM_SUPPORTED_VERSION to NEW +else () + cmake_policy(VERSION ${CMAKE_MAXIMUM_SUPPORTED_VERSION}) +endif() + include("./helpers/assertions.cmake") include("../src/cmake/LoadStaticSharedTargets.cmake") -- GitLab