From 369f1316f67545e6ef115b317802bc7acedf6697 Mon Sep 17 00:00:00 2001 From: Chris Wright Date: Thu, 30 Nov 2023 19:01:03 +0000 Subject: [PATCH] Treat relative paths as relative to parent project's remote (#522) * Treat relative paths as relative to parent project's remote * replace unit test case with integration test * run relative URL test only on supported CMake versions (3.27) * omit cmake 2.25.x test runner as replaced by 2.27.x --------- Co-authored-by: Chris Wright Co-authored-by: Lars Melchior --- .github/workflows/style.yaml | 2 +- .github/workflows/test.yaml | 2 +- README.md | 1 + cmake/CPM.cmake | 6 ++++++ test/integration/test_relative_urls.rb | 17 +++++++++++++++++ 5 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 test/integration/test_relative_urls.rb diff --git a/.github/workflows/style.yaml b/.github/workflows/style.yaml index b518fcc..5a04c3d 100644 --- a/.github/workflows/style.yaml +++ b/.github/workflows/style.yaml @@ -19,7 +19,7 @@ jobs: - name: Setup cmake uses: jwlawson/actions-setup-cmake@v1.13 with: - cmake-version: '3.25.x' + cmake-version: '3.27.x' - name: Install format dependencies run: pip3 install clang-format==14.0.6 cmake_format==0.6.11 pyyaml diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 1c968c0..7b4eef8 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -19,7 +19,7 @@ jobs: os: [ubuntu-latest, windows-2022, macos-latest] # we want to ensure compatibility with a recent CMake version as well as the lowest officially supported # legacy version that we define as the default version of the second-latest Ubuntu LTS release currently available - cmake_version: ['3.16.3', '3.25.1'] + cmake_version: ['3.16.3', '3.27.5'] exclude: # there seems to be an issue with CMake 3.16 not finding a C++ compiler on windows-2022 - os: windows-2022 diff --git a/README.md b/README.md index a3c876c..aec677f 100644 --- a/README.md +++ b/README.md @@ -142,6 +142,7 @@ Dependencies using CPM will automatically use the updated script of the outermos - **Some CMake policies set to `NEW`** Including CPM.cmake will lead to several CMake policies being set to `NEW`. Users which need the old behavior will need to manually modify their CMake code to ensure they're set to `OLD` at the appropriate places. The policies are: - [CMP0077](https://cmake.org/cmake/help/latest/policy/CMP0077.html) and [CMP0126](https://cmake.org/cmake/help/latest/policy/CMP0126.html). They make setting package options from `CMPAddPackage` possible. - [CMP0135](https://cmake.org/cmake/help/latest/policy/CMP0135.html) It allows for proper package rebuilds of packages which are archives, source cache is not used, and the package URL is changed to an older version. + - [CMP0150](https://cmake.org/cmake/help/latest/policy/CMP0150.html) Relative paths provided to `GIT_REPOSITORY` are treated as relative to the parent project's remote. For projects with more complex needs and where an extra setup step doesn't matter, it may be worth to check out an external C++ package manager such as [vcpkg](https://github.com/microsoft/vcpkg), [conan](https://conan.io) or [hunter](https://github.com/ruslo/hunter). Dependencies added with `CPMFindPackage` should work with external package managers. diff --git a/cmake/CPM.cmake b/cmake/CPM.cmake index 937d20b..f4d0eea 100644 --- a/cmake/CPM.cmake +++ b/cmake/CPM.cmake @@ -99,6 +99,12 @@ macro(cpm_set_policies) cmake_policy(SET CMP0135 NEW) set(CMAKE_POLICY_DEFAULT_CMP0135 NEW) endif() + + # treat relative git repository paths as being relative to the parent project's remote + if(POLICY CMP0150) + cmake_policy(SET CMP0150 NEW) + set(CMAKE_POLICY_DEFAULT_CMP0150 NEW) + endif() endmacro() cpm_set_policies() diff --git a/test/integration/test_relative_urls.rb b/test/integration/test_relative_urls.rb new file mode 100644 index 0000000..f5f30f8 --- /dev/null +++ b/test/integration/test_relative_urls.rb @@ -0,0 +1,17 @@ +require_relative './lib' + +class RelativeURLs < IntegrationTest + def setup + # relative URLs were introduced in CMake 3.27 + @relative_urls_supported = (!ENV['CMAKE_VERSION']) || (Gem::Version.new(ENV['CMAKE_VERSION']) >= Gem::Version.new('3.27')) + end + + def test_add_project_with_relative_urls + omit_if !@relative_urls_supported do + prj = make_project from_template: 'using-fibadder' + prj.create_lists_from_default_template package: 'CPMAddPackage("gh:cpm-cmake/testpack-fibadder@1.1.0-relative-urls")' + assert_success prj.configure + assert_success prj.build + end + end +end