diff --git a/Source/cmFindPackageCommand.cxx b/Source/cmFindPackageCommand.cxx index 6201894fd1..23083b0146 100644 --- a/Source/cmFindPackageCommand.cxx +++ b/Source/cmFindPackageCommand.cxx @@ -1349,7 +1349,7 @@ bool cmFindPackageCommand::FindPackageUsingConfigMode() this->Configs.emplace_back(std::move(config), pdt::Cps); config = cmStrCat(cmSystemTools::LowerCase(n), ".cps"); - if (config != this->Configs.front().Name) { + if (config != this->Configs.back().Name) { this->Configs.emplace_back(std::move(config), pdt::Cps); } } @@ -2873,14 +2873,13 @@ bool cmFindPackageCommand::FindConfigFile(std::string const& dir, this->DebugBuffer = cmStrCat(this->DebugBuffer, " ", file, '\n'); } if (cmSystemTools::FileExists(file, true)) { + // Allow resolving symlinks when the config file is found through a link + if (this->UseRealPath) { + file = cmSystemTools::GetRealPath(file); + } else { + file = cmSystemTools::ToNormalizedPathOnDisk(file); + } if (this->CheckVersion(file)) { - // Allow resolving symlinks when the config file is found through a - // link - if (this->UseRealPath) { - file = cmSystemTools::GetRealPath(file); - } else { - file = cmSystemTools::ToNormalizedPathOnDisk(file); - } foundMode = cmFindPackageCommand::FoundMode(config.Type); return true; } diff --git a/Tests/RunCMake/find_package-CPS/MissingVersion1-stderr.txt b/Tests/RunCMake/find_package-CPS/MissingVersion1-stderr.txt index 76879a2468..b3bfd9bde2 100644 --- a/Tests/RunCMake/find_package-CPS/MissingVersion1-stderr.txt +++ b/Tests/RunCMake/find_package-CPS/MissingVersion1-stderr.txt @@ -3,11 +3,15 @@ CMake Error at MissingVersion1\.cmake:[0-9]+ \(find_package\): with requested version "1\.2\.7"\. The following configuration files were considered but not accepted: - - .*/Tests/RunCMake/find_package-CPS/cps/sample/1\.5\.0/sample\.cps, version: 1\.5\.0\+niven - .*/Tests/RunCMake/find_package-CPS/cps/sample/1\.4\.2/sample\.cps, version: 1\.4\.2\+adams - .*/Tests/RunCMake/find_package-CPS/cps/sample/1\.2\.3/sample\.cps, version: 1\.2\.3\+clarke - .*/Tests/RunCMake/find_package-CPS/cps/sample/1\.1\.0/sample\.cps, version: 1\.1\.0\+asimov +( + [^ +]*/Tests/RunCMake/find_package-CPS/cps/sample/1\.5\.0/[Ss]ample\.cps, version: 1\.5\.0\+niven)+( + [^ +]*/Tests/RunCMake/find_package-CPS/cps/sample/1\.4\.2/[Ss]ample\.cps, version: 1\.4\.2\+adams)+( + [^ +]*/Tests/RunCMake/find_package-CPS/cps/sample/1\.2\.3/[Ss]ample\.cps, version: 1\.2\.3\+clarke)+( + [^ +]*/Tests/RunCMake/find_package-CPS/cps/sample/1\.1\.0/[Ss]ample\.cps, version: 1\.1\.0\+asimov)+ Call Stack \(most recent call first\): CMakeLists\.txt:3 \(include\) diff --git a/Tests/RunCMake/find_package-CPS/MissingVersion2-stderr.txt b/Tests/RunCMake/find_package-CPS/MissingVersion2-stderr.txt index c984ce72ba..cdb3a8d406 100644 --- a/Tests/RunCMake/find_package-CPS/MissingVersion2-stderr.txt +++ b/Tests/RunCMake/find_package-CPS/MissingVersion2-stderr.txt @@ -3,11 +3,15 @@ CMake Error at MissingVersion2\.cmake:[0-9]+ \(find_package\): with requested version "1\.4\.9"\. The following configuration files were considered but not accepted: - - .*/Tests/RunCMake/find_package-CPS/cps/sample/1\.5\.0/sample\.cps, version: 1\.5\.0\+niven - .*/Tests/RunCMake/find_package-CPS/cps/sample/1\.4\.2/sample\.cps, version: 1\.4\.2\+adams - .*/Tests/RunCMake/find_package-CPS/cps/sample/1\.2\.3/sample\.cps, version: 1\.2\.3\+clarke - .*/Tests/RunCMake/find_package-CPS/cps/sample/1\.1\.0/sample\.cps, version: 1\.1\.0\+asimov +( + [^ +]*/Tests/RunCMake/find_package-CPS/cps/sample/1\.5\.0/[Ss]ample\.cps, version: 1\.5\.0\+niven)+( + [^ +]*/Tests/RunCMake/find_package-CPS/cps/sample/1\.4\.2/[Ss]ample\.cps, version: 1\.4\.2\+adams)+( + [^ +]*/Tests/RunCMake/find_package-CPS/cps/sample/1\.2\.3/[Ss]ample\.cps, version: 1\.2\.3\+clarke)+( + [^ +]*/Tests/RunCMake/find_package-CPS/cps/sample/1\.1\.0/[Ss]ample\.cps, version: 1\.1\.0\+asimov)+ Call Stack \(most recent call first\): CMakeLists\.txt:3 \(include\) diff --git a/Tests/RunCMake/find_package-CPS/VersionLimit3-stderr.txt b/Tests/RunCMake/find_package-CPS/VersionLimit3-stderr.txt index 3b1c5efa6c..e11db59f93 100644 --- a/Tests/RunCMake/find_package-CPS/VersionLimit3-stderr.txt +++ b/Tests/RunCMake/find_package-CPS/VersionLimit3-stderr.txt @@ -3,11 +3,15 @@ CMake Error at VersionLimit3\.cmake:[0-9]+ \(find_package\): with requested version range "1\.2\.0\.\.\.1\.2\.2"\. The following configuration files were considered but not accepted: - - .*/Tests/RunCMake/find_package-CPS/cps/sample/1\.5\.0/sample\.cps, version: 1\.5\.0\+niven - .*/Tests/RunCMake/find_package-CPS/cps/sample/1\.4\.2/sample\.cps, version: 1\.4\.2\+adams - .*/Tests/RunCMake/find_package-CPS/cps/sample/1\.2\.3/sample\.cps, version: 1\.2\.3\+clarke - .*/Tests/RunCMake/find_package-CPS/cps/sample/1\.1\.0/sample\.cps, version: 1\.1\.0\+asimov +( + [^ +]*/Tests/RunCMake/find_package-CPS/cps/sample/1\.5\.0/[Ss]ample\.cps, version: 1\.5\.0\+niven)+( + [^ +]*/Tests/RunCMake/find_package-CPS/cps/sample/1\.4\.2/[Ss]ample\.cps, version: 1\.4\.2\+adams)+( + [^ +]*/Tests/RunCMake/find_package-CPS/cps/sample/1\.2\.3/[Ss]ample\.cps, version: 1\.2\.3\+clarke)+( + [^ +]*/Tests/RunCMake/find_package-CPS/cps/sample/1\.1\.0/[Ss]ample\.cps, version: 1\.1\.0\+asimov)+ Call Stack \(most recent call first\): CMakeLists\.txt:3 \(include\) diff --git a/Tests/RunCMake/find_package-CPS/VersionLimit4-stderr.txt b/Tests/RunCMake/find_package-CPS/VersionLimit4-stderr.txt index 67cef1528d..3ae8004310 100644 --- a/Tests/RunCMake/find_package-CPS/VersionLimit4-stderr.txt +++ b/Tests/RunCMake/find_package-CPS/VersionLimit4-stderr.txt @@ -3,11 +3,15 @@ CMake Error at VersionLimit4\.cmake:[0-9]+ \(find_package\): with requested version range "1\.2\.0\.\.\.<1\.2\.3"\. The following configuration files were considered but not accepted: - - .*/Tests/RunCMake/find_package-CPS/cps/sample/1\.5\.0/sample\.cps, version: 1\.5\.0\+niven - .*/Tests/RunCMake/find_package-CPS/cps/sample/1\.4\.2/sample\.cps, version: 1\.4\.2\+adams - .*/Tests/RunCMake/find_package-CPS/cps/sample/1\.2\.3/sample\.cps, version: 1\.2\.3\+clarke - .*/Tests/RunCMake/find_package-CPS/cps/sample/1\.1\.0/sample\.cps, version: 1\.1\.0\+asimov +( + [^ +]*/Tests/RunCMake/find_package-CPS/cps/sample/1\.5\.0/[Ss]ample\.cps, version: 1\.5\.0\+niven)+( + [^ +]*/Tests/RunCMake/find_package-CPS/cps/sample/1\.4\.2/[Ss]ample\.cps, version: 1\.4\.2\+adams)+( + [^ +]*/Tests/RunCMake/find_package-CPS/cps/sample/1\.2\.3/[Ss]ample\.cps, version: 1\.2\.3\+clarke)+( + [^ +]*/Tests/RunCMake/find_package-CPS/cps/sample/1\.1\.0/[Ss]ample\.cps, version: 1\.1\.0\+asimov)+ Call Stack \(most recent call first\): CMakeLists\.txt:3 \(include\) diff --git a/Tests/RunCMake/find_package/PackageRootRelative-stdout.txt b/Tests/RunCMake/find_package/PackageRootRelative-stdout.txt new file mode 100644 index 0000000000..e99d37d447 --- /dev/null +++ b/Tests/RunCMake/find_package/PackageRootRelative-stdout.txt @@ -0,0 +1,2 @@ +-- Relative_ROOT='root' +-- Relative_DIR='[^']*/Tests/RunCMake/find_package/PackageRootRelative-build/root' diff --git a/Tests/RunCMake/find_package/PackageRootRelative.cmake b/Tests/RunCMake/find_package/PackageRootRelative.cmake new file mode 100644 index 0000000000..3d63753477 --- /dev/null +++ b/Tests/RunCMake/find_package/PackageRootRelative.cmake @@ -0,0 +1,7 @@ +cmake_policy(SET CMP0074 NEW) +set(Relative_ROOT root) +file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/root/RelativeConfig.cmake" "") +file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/root/RelativeConfigVersion.cmake" "set(PACKAGE_VERSION 1)") +find_package(Relative) +message(STATUS "Relative_ROOT='${Relative_ROOT}'") +message(STATUS "Relative_DIR='${Relative_DIR}'") diff --git a/Tests/RunCMake/find_package/RunCMakeTest.cmake b/Tests/RunCMake/find_package/RunCMakeTest.cmake index 10f3453514..969d6d7bc1 100644 --- a/Tests/RunCMake/find_package/RunCMakeTest.cmake +++ b/Tests/RunCMake/find_package/RunCMakeTest.cmake @@ -39,6 +39,7 @@ run_cmake_with_options(ModuleModeDebugPkg --debug-find-pkg=Foo,Zot) run_cmake(PackageRoot) run_cmake(PackageRootNestedConfig) run_cmake(PackageRootNestedModule) +run_cmake(PackageRootRelative) run_cmake(PackageVarOverridesOptional) run_cmake(PolicyPush) run_cmake(PolicyPop)