summaryrefslogtreecommitdiffstats
path: root/Tests
diff options
context:
space:
mode:
authorCraig Scott <craig.scott@crascit.com>2024-04-14 08:07:41 (GMT)
committerBrad King <brad.king@kitware.com>2024-04-19 15:44:09 (GMT)
commitc5231ba29e47101b772572f730af5b2bc82fbd53 (patch)
tree450618966f266499ba95aac1f7496411f01cad21 /Tests
parent8ac7958e3a2d24258cc4ebf0d6c44eccfb8a849a (diff)
downloadCMake-c5231ba29e47101b772572f730af5b2bc82fbd53.zip
CMake-c5231ba29e47101b772572f730af5b2bc82fbd53.tar.gz
CMake-c5231ba29e47101b772572f730af5b2bc82fbd53.tar.bz2
find_package: Save/restore PACKAGE_PREFIX_DIR
Package configuration files generated by `configure_package_config_file` set this variable in `@PACKAGE_INIT@` and then use it later. There may be intervening calls to `find_package`, e.g., via `find_dependency`. If the loaded package also used `configure_package_config_file`, it may change the value of `PACKAGE_PREFIX_DIR`. Explicitly save and restore the value to avoid this. Fixes: #25827
Diffstat (limited to 'Tests')
-rw-r--r--Tests/RunCMake/CMakePackage/NestedConfigFile-stdout.txt6
-rw-r--r--Tests/RunCMake/CMakePackage/NestedConfigFile.cmake43
-rw-r--r--Tests/RunCMake/CMakePackage/RunCMakeTest.cmake2
3 files changed, 51 insertions, 0 deletions
diff --git a/Tests/RunCMake/CMakePackage/NestedConfigFile-stdout.txt b/Tests/RunCMake/CMakePackage/NestedConfigFile-stdout.txt
new file mode 100644
index 0000000..cdb3384
--- /dev/null
+++ b/Tests/RunCMake/CMakePackage/NestedConfigFile-stdout.txt
@@ -0,0 +1,6 @@
+(-- )?Before find_dependency: PACKAGE_PREFIX_DIR = .*/Tests/RunCMake/CMakePackage/NestedConfigFile-build/install_pkg_b
+(-- )?Hello from pkg_a
+(-- )?Leaving pkg_a-config\.cmake with PACKAGE_PREFIX_DIR = .*/Tests/RunCMake/CMakePackage/NestedConfigFile-build/install_pkg_a
+(-- )?After find_dependency: PACKAGE_PREFIX_DIR = .*/Tests/RunCMake/CMakePackage/NestedConfigFile-build/install_pkg_b
+(-- )?Hello from pkg_b
+(-- )?Leaving pkg_b-config\.cmake with PACKAGE_PREFIX_DIR = .*/Tests/RunCMake/CMakePackage/NestedConfigFile-build/install_pkg_b
diff --git a/Tests/RunCMake/CMakePackage/NestedConfigFile.cmake b/Tests/RunCMake/CMakePackage/NestedConfigFile.cmake
new file mode 100644
index 0000000..2eeaebb
--- /dev/null
+++ b/Tests/RunCMake/CMakePackage/NestedConfigFile.cmake
@@ -0,0 +1,43 @@
+set(CMAKE_INSTALL_DATADIR share)
+
+include(CMakePackageConfigHelpers)
+
+file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/pkg_a-config.cmake.in [[
+@PACKAGE_INIT@
+include("@PACKAGE_CMAKE_INSTALL_DATADIR@/pkg_a_included.cmake")
+message(STATUS "Leaving pkg_a-config.cmake with PACKAGE_PREFIX_DIR = ${PACKAGE_PREFIX_DIR}")
+]])
+configure_package_config_file(
+ ${CMAKE_CURRENT_BINARY_DIR}/pkg_a-config.cmake.in
+ ${CMAKE_CURRENT_BINARY_DIR}/install_pkg_a/pkg_a-config.cmake
+ INSTALL_DESTINATION .
+ PATH_VARS CMAKE_INSTALL_DATADIR
+)
+file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/install_pkg_a/share/pkg_a_included.cmake
+ [[message(STATUS "Hello from pkg_a")]]
+)
+
+file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/pkg_b-config.cmake.in [[
+@PACKAGE_INIT@
+include(CMakeFindDependencyMacro)
+message(STATUS "Before find_dependency: PACKAGE_PREFIX_DIR = ${PACKAGE_PREFIX_DIR}")
+find_dependency(pkg_a NO_DEFAULT_PATH
+ PATHS "@CMAKE_CURRENT_BINARY_DIR@/install_pkg_a"
+)
+message(STATUS "After find_dependency: PACKAGE_PREFIX_DIR = ${PACKAGE_PREFIX_DIR}")
+include("@PACKAGE_CMAKE_INSTALL_DATADIR@/pkg_b_included.cmake")
+message(STATUS "Leaving pkg_b-config.cmake with PACKAGE_PREFIX_DIR = ${PACKAGE_PREFIX_DIR}")
+]])
+configure_package_config_file(
+ ${CMAKE_CURRENT_BINARY_DIR}/pkg_b-config.cmake.in
+ ${CMAKE_CURRENT_BINARY_DIR}/install_pkg_b/pkg_b-config.cmake
+ INSTALL_DESTINATION .
+ PATH_VARS CMAKE_INSTALL_DATADIR
+)
+file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/install_pkg_b/share/pkg_b_included.cmake
+ [[message(STATUS "Hello from pkg_b")]]
+)
+
+find_package(pkg_b REQUIRED NO_DEFAULT_PATH
+ PATHS ${CMAKE_CURRENT_BINARY_DIR}/install_pkg_b
+)
diff --git a/Tests/RunCMake/CMakePackage/RunCMakeTest.cmake b/Tests/RunCMake/CMakePackage/RunCMakeTest.cmake
index 3b4bef5..c4a05e3 100644
--- a/Tests/RunCMake/CMakePackage/RunCMakeTest.cmake
+++ b/Tests/RunCMake/CMakePackage/RunCMakeTest.cmake
@@ -4,6 +4,8 @@ if(NOT RunCMake_GENERATOR_IS_MULTI_CONFIG)
set(maybe_CMAKE_BUILD_TYPE -DCMAKE_BUILD_TYPE=Release)
endif()
+run_cmake_with_options(NestedConfigFile ${maybe_CMAKE_BUILD_TYPE})
+
function(apple_export platform system_name archs sysroot)
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/apple-export-${platform}-build)
string(REPLACE ";" "\\;" archs "${archs}")