From 2b22c2a45fc66d56f829f73d65855529937b7042 Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 31 Mar 2026 15:28:36 -0400 Subject: [PATCH 1/5] find_package: Clarify dependency ordering logic in package stack Clarify package stack manipulation from commit c6e6861e63 (install(EXPORT): Export find_dependency() calls, 2023-11-07, v3.29.0-rc1~439^2~1). Issue: #27730 --- Source/cmMakefile.cxx | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index f480874c0c..64e9f2c0f8 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -4275,14 +4275,24 @@ cmFindPackageStackRAII::~cmFindPackageStackRAII() this->Makefile->FindPackageStack = this->Makefile->FindPackageStack.Pop(); if (!this->Makefile->FindPackageStack.Empty()) { - auto top = this->Makefile->FindPackageStack.Top(); + // We have just finished an inner package found as a dependency of an + // outer package. Targets created in the outer package after this + // point may depend on the inner package, so if they are exported, + // their find_dependency call for the outer package should be + // ordered after the find_dependency call for the inner package. + // + // Any targets created by the outer package before the inner package + // was loaded will have already saved a copy of the outer package + // stack with its original index. Replace the top entry with a new + // one representing the same outer package with a new index. + cmFindPackageCall outer = this->Makefile->FindPackageStack.Top(); this->Makefile->FindPackageStack = this->Makefile->FindPackageStack.Pop(); - top.Index = this->Makefile->FindPackageStackNextIndex; + outer.Index = this->Makefile->FindPackageStackNextIndex; this->Makefile->FindPackageStackNextIndex++; this->Makefile->FindPackageStack = - this->Makefile->FindPackageStack.Push(top); + this->Makefile->FindPackageStack.Push(outer); } } From 5aa649d5f6e635bb2d0be41cd743abcbe4b5624f Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 1 Apr 2026 11:12:37 -0400 Subject: [PATCH 2/5] find_package: Save package information only after successfully loading it If a package configuration file sets `_FOUND` to false, the package is considered not found. Do not save its package info. Note that this exposes an existing pointer invalidation on nested `find_package` calls, which will be fixed in following commits. Issue: #27730 --- Source/cmFindPackageCommand.cxx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Source/cmFindPackageCommand.cxx b/Source/cmFindPackageCommand.cxx index dd866440e6..25143f5003 100644 --- a/Source/cmFindPackageCommand.cxx +++ b/Source/cmFindPackageCommand.cxx @@ -1732,6 +1732,12 @@ bool cmFindPackageCommand::HandlePackageMode( // The configuration file is invalid. result = false; } + + if (this->UseConfigFiles && found) { + this->CurrentPackageInfo->Directory = + cmSystemTools::GetFilenamePath(this->FileFound); + this->CurrentPackageInfo->Version = this->VersionFound; + } } if (this->UseFindModules && !found && @@ -1975,8 +1981,6 @@ bool cmFindPackageCommand::FindConfig() std::string init; if (found) { init = cmSystemTools::GetFilenamePath(this->FileFound); - this->CurrentPackageInfo->Directory = init; - this->CurrentPackageInfo->Version = this->VersionFound; } else { init = this->Variable + "-NOTFOUND"; } From e935ed22fbb3f39b68a9b65b909abc3ae726d709 Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 1 Apr 2026 07:24:30 -0400 Subject: [PATCH 3/5] find_package: Share package information among copies of package stack Since commit ae373e93fb (install(PACKAGE_INFO): Add version and location to package dependencies, 2025-07-31, v4.2.0-rc1~340^2) we add package information to the current package's stack entry as it is discovered. However, a nested package can cause the current package's stack entry to be replaced by a copy with a new ordering index due to commit c6e6861e63 (install(EXPORT): Export find_dependency() calls, 2023-11-07, v3.29.0-rc1~439^2~1). Depending on whether imported targets were created by the current package before finding the nested package, the `CurrentPackageInfo` pointer is either invalidated, or left pointing at only one of multiple copies. Fix this by sharing a single instance of package information with all copies of the current package's stack entry. Keep a mutable pointer to the current package's information only while it is still pending. This also avoids the need to expose mutation from the package stack. Add a test that exposes the previously-invalidated pointer to dynamic analysis tools. Fixes: #27730 --- Source/cmExportPackageInfoGenerator.cxx | 3 ++- Source/cmFindPackageCommand.cxx | 16 +++++++------- Source/cmFindPackageCommand.h | 2 +- Source/cmFindPackageStack.h | 11 +++------- Source/cmMakefile.cxx | 21 ++++--------------- .../RunCMake/find_package/NestedConfig.cmake | 3 +++ .../NestedConfig/OuterConfig.cmake | 1 + .../RunCMake/find_package/RunCMakeTest.cmake | 1 + 8 files changed, 24 insertions(+), 34 deletions(-) create mode 100644 Tests/RunCMake/find_package/NestedConfig.cmake create mode 100644 Tests/RunCMake/find_package/NestedConfig/OuterConfig.cmake diff --git a/Source/cmExportPackageInfoGenerator.cxx b/Source/cmExportPackageInfoGenerator.cxx index d63b2d597c..a790f60da7 100644 --- a/Source/cmExportPackageInfoGenerator.cxx +++ b/Source/cmExportPackageInfoGenerator.cxx @@ -298,7 +298,8 @@ bool cmExportPackageInfoGenerator::NoteLinkedTarget( auto pkgInfo = [](cmTarget* t) -> Package { cmFindPackageStack pkgStack = t->GetFindPackageStack(); if (!pkgStack.Empty()) { - return std::make_pair(pkgStack.Top().Name, pkgStack.Top().PackageInfo); + return std::make_pair(pkgStack.Top().Name, + *pkgStack.Top().PackageInfo); } cmPackageInformation package; diff --git a/Source/cmFindPackageCommand.cxx b/Source/cmFindPackageCommand.cxx index 25143f5003..c2dfc08be5 100644 --- a/Source/cmFindPackageCommand.cxx +++ b/Source/cmFindPackageCommand.cxx @@ -1218,13 +1218,15 @@ bool cmFindPackageCommand::FindPackage( } } + // Record package information discovered while it is loaded. + this->PackageInfo = std::make_shared(); + // RAII objects to ensure we leave this function with consistent state. FlushDebugBufferOnExit flushDebugBufferOnExit(*this); PushPopRootPathStack pushPopRootPathStack(*this); SetRestoreFindDefinitions setRestoreFindDefinitions(*this); - cmFindPackageStackRAII findPackageStackRAII(this->Makefile, this->Name); - - findPackageStackRAII.BindTop(this->CurrentPackageInfo); + cmFindPackageStackRAII findPackageStackRAII(this->Makefile, this->Name, + this->PackageInfo); // See if we have been told to delegate to FetchContent or some other // redirected config package first. We have to check all names that @@ -1272,8 +1274,8 @@ bool cmFindPackageCommand::FindPackage( this->Names.clear(); this->Names.emplace_back(overrideName); // Force finding this one this->Variable = cmStrCat(this->Name, "_DIR"); - this->CurrentPackageInfo->Directory = redirectsDir; - this->CurrentPackageInfo->Version = this->VersionFound; + this->PackageInfo->Directory = redirectsDir; + this->PackageInfo->Version = this->VersionFound; this->SetConfigDirCacheVariable(redirectsDir); break; } @@ -1734,9 +1736,9 @@ bool cmFindPackageCommand::HandlePackageMode( } if (this->UseConfigFiles && found) { - this->CurrentPackageInfo->Directory = + this->PackageInfo->Directory = cmSystemTools::GetFilenamePath(this->FileFound); - this->CurrentPackageInfo->Version = this->VersionFound; + this->PackageInfo->Version = this->VersionFound; } } diff --git a/Source/cmFindPackageCommand.h b/Source/cmFindPackageCommand.h index 4ac057e6e6..740cdca82f 100644 --- a/Source/cmFindPackageCommand.h +++ b/Source/cmFindPackageCommand.h @@ -285,7 +285,7 @@ private: std::set OptionalComponents; std::set RequiredTargets; std::string DebugBuffer; - cmPackageInformation* CurrentPackageInfo; + std::shared_ptr PackageInfo; enum class SearchResult { diff --git a/Source/cmFindPackageStack.h b/Source/cmFindPackageStack.h index e7fb9a6ee4..3a5804120b 100644 --- a/Source/cmFindPackageStack.h +++ b/Source/cmFindPackageStack.h @@ -39,7 +39,7 @@ class cmFindPackageCall { public: std::string const Name; - cmPackageInformation PackageInfo; + std::shared_ptr PackageInfo; unsigned int Index; }; @@ -50,19 +50,14 @@ public: class cmFindPackageStackRAII { cmMakefile* Makefile; - cmPackageInformation** Value = nullptr; public: - cmFindPackageStackRAII(cmMakefile* mf, std::string const& pkg); + cmFindPackageStackRAII(cmMakefile* mf, std::string const& pkg, + std::shared_ptr pkgInfo); ~cmFindPackageStackRAII(); cmFindPackageStackRAII(cmFindPackageStackRAII const&) = delete; cmFindPackageStackRAII& operator=(cmFindPackageStackRAII const&) = delete; - - /** Get a mutable pointer to the top of the stack. - The pointer is invalidated if BindTop is called again or when the - cmFindPackageStackRAII goes out of scope. */ - void BindTop(cmPackageInformation*& value); }; /** diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index 64e9f2c0f8..714c84c86c 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -51,7 +51,6 @@ #include "cmSourceFile.h" #include "cmSourceFileLocation.h" #include "cmSourceGroup.h" -#include "cmStack.h" #include "cmState.h" #include "cmStateDirectory.h" #include "cmStateTypes.h" @@ -4242,34 +4241,22 @@ cmMakefile::MacroPushPop::~MacroPushPop() this->Makefile->PopMacroScope(this->ReportError); } -cmFindPackageStackRAII::cmFindPackageStackRAII(cmMakefile* mf, - std::string const& name) +cmFindPackageStackRAII::cmFindPackageStackRAII( + cmMakefile* mf, std::string const& name, + std::shared_ptr pkgInfo) : Makefile(mf) { this->Makefile->FindPackageStack = this->Makefile->FindPackageStack.Push(cmFindPackageCall{ name, - cmPackageInformation(), + std::move(pkgInfo), this->Makefile->FindPackageStackNextIndex, }); this->Makefile->FindPackageStackNextIndex++; } -void cmFindPackageStackRAII::BindTop(cmPackageInformation*& value) -{ - if (this->Value) { - *this->Value = nullptr; - } - this->Value = &value; - value = &this->Makefile->FindPackageStack.cmStack::Top().PackageInfo; -} - cmFindPackageStackRAII::~cmFindPackageStackRAII() { - if (this->Value) { - *this->Value = nullptr; - } - this->Makefile->FindPackageStackNextIndex = this->Makefile->FindPackageStack.Top().Index + 1; this->Makefile->FindPackageStack = this->Makefile->FindPackageStack.Pop(); diff --git a/Tests/RunCMake/find_package/NestedConfig.cmake b/Tests/RunCMake/find_package/NestedConfig.cmake new file mode 100644 index 0000000000..9bd376a20c --- /dev/null +++ b/Tests/RunCMake/find_package/NestedConfig.cmake @@ -0,0 +1,3 @@ +cmake_policy(SET CMP0074 NEW) +set(Outer_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/NestedConfig) +find_package(Outer CONFIG) diff --git a/Tests/RunCMake/find_package/NestedConfig/OuterConfig.cmake b/Tests/RunCMake/find_package/NestedConfig/OuterConfig.cmake new file mode 100644 index 0000000000..2a1332b87b --- /dev/null +++ b/Tests/RunCMake/find_package/NestedConfig/OuterConfig.cmake @@ -0,0 +1 @@ +find_package(Inner CONFIG NO_DEFAULT_PATH) diff --git a/Tests/RunCMake/find_package/RunCMakeTest.cmake b/Tests/RunCMake/find_package/RunCMakeTest.cmake index 3cd4ab9906..b1b720b94e 100644 --- a/Tests/RunCMake/find_package/RunCMakeTest.cmake +++ b/Tests/RunCMake/find_package/RunCMakeTest.cmake @@ -36,6 +36,7 @@ run_cmake(MissingConfigRequired) run_cmake(MissingConfigVersion) run_cmake(MixedModeOptions) run_cmake_with_options(ModuleModeDebugPkg --debug-find-pkg=Foo,Zot) +run_cmake(NestedConfig) run_cmake(PackageRoot) run_cmake(PackageRootNestedConfig) run_cmake(PackageRootNestedModule) From 9387988626601559942f294a34d774d996bb1063 Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 1 Apr 2026 11:12:37 -0400 Subject: [PATCH 4/5] find_package: Save package information only after successfully loading it If a package configuration file sets `_FOUND` to false, the package is considered not found. Do not save its package info. Note that this exposes an existing pointer invalidation on nested `find_package` calls, which will be fixed in following commits. Issue: #27730 --- Source/cmFindPackageCommand.cxx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Source/cmFindPackageCommand.cxx b/Source/cmFindPackageCommand.cxx index cf6184bf49..b8ee8c905b 100644 --- a/Source/cmFindPackageCommand.cxx +++ b/Source/cmFindPackageCommand.cxx @@ -1668,12 +1668,6 @@ bool cmFindPackageCommand::HandlePackageMode( "fileFound is true but FileFound is empty!"); fileFound = false; } - - if (fileFound) { - this->CurrentPackageInfo->Directory = - cmSystemTools::GetFilenamePath(this->FileFound); - this->CurrentPackageInfo->Version = this->VersionFound; - } } std::string const foundVar = cmStrCat(this->Name, "_FOUND"); @@ -1735,6 +1729,12 @@ bool cmFindPackageCommand::HandlePackageMode( // The configuration file is invalid. result = false; } + + if (this->UseConfigFiles && found) { + this->CurrentPackageInfo->Directory = + cmSystemTools::GetFilenamePath(this->FileFound); + this->CurrentPackageInfo->Version = this->VersionFound; + } } if (this->UseFindModules && !found && From aae02ee60a6c73d64a69a7310949237518611dfb Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 1 Apr 2026 07:24:30 -0400 Subject: [PATCH 5/5] find_package: Share package information among copies of package stack Since commit ae373e93fb (install(PACKAGE_INFO): Add version and location to package dependencies, 2025-07-31, v4.2.0-rc1~340^2) we add package information to the current package's stack entry as it is discovered. However, a nested package can cause the current package's stack entry to be replaced by a copy with a new ordering index due to commit c6e6861e63 (install(EXPORT): Export find_dependency() calls, 2023-11-07, v3.29.0-rc1~439^2~1). Depending on whether imported targets were created by the current package before finding the nested package, the `CurrentPackageInfo` pointer is either invalidated, or left pointing at only one of multiple copies. Fix this by sharing a single instance of package information with all copies of the current package's stack entry. Keep a mutable pointer to the current package's information only while it is still pending. This also avoids the need to expose mutation from the package stack. Add a test that exposes the previously-invalidated pointer to dynamic analysis tools. Fixes: #27730 --- Source/cmExportPackageInfoGenerator.cxx | 3 ++- Source/cmExportSbomGenerator.cxx | 4 +++- Source/cmFindPackageCommand.cxx | 16 +++++++------- Source/cmFindPackageCommand.h | 2 +- Source/cmFindPackageStack.h | 11 +++------- Source/cmMakefile.cxx | 21 ++++--------------- .../RunCMake/find_package/NestedConfig.cmake | 3 +++ .../NestedConfig/OuterConfig.cmake | 1 + .../RunCMake/find_package/RunCMakeTest.cmake | 1 + 9 files changed, 27 insertions(+), 35 deletions(-) create mode 100644 Tests/RunCMake/find_package/NestedConfig.cmake create mode 100644 Tests/RunCMake/find_package/NestedConfig/OuterConfig.cmake diff --git a/Source/cmExportPackageInfoGenerator.cxx b/Source/cmExportPackageInfoGenerator.cxx index 23f2b7284d..62a01e5eed 100644 --- a/Source/cmExportPackageInfoGenerator.cxx +++ b/Source/cmExportPackageInfoGenerator.cxx @@ -311,7 +311,8 @@ bool cmExportPackageInfoGenerator::NoteLinkedTarget( auto pkgInfo = [](cmTarget* t) -> Package { cmFindPackageStack pkgStack = t->GetFindPackageStack(); if (!pkgStack.Empty()) { - return std::make_pair(pkgStack.Top().Name, pkgStack.Top().PackageInfo); + return std::make_pair(pkgStack.Top().Name, + *pkgStack.Top().PackageInfo); } cmPackageInformation package; diff --git a/Source/cmExportSbomGenerator.cxx b/Source/cmExportSbomGenerator.cxx index 26bee6eae9..c99141f3fb 100644 --- a/Source/cmExportSbomGenerator.cxx +++ b/Source/cmExportSbomGenerator.cxx @@ -4,6 +4,7 @@ #include #include +#include #include #include #include @@ -320,7 +321,8 @@ bool cmExportSbomGenerator::NoteLinkedTarget( auto pkgInfo = [](cmTarget* t) -> Package { cmFindPackageStack pkgStack = t->GetFindPackageStack(); if (!pkgStack.Empty()) { - return std::make_pair(pkgStack.Top().Name, pkgStack.Top().PackageInfo); + return std::make_pair(pkgStack.Top().Name, + *pkgStack.Top().PackageInfo); } std::string const pkgName = t->GetSafeProperty("EXPORT_FIND_PACKAGE_NAME"); diff --git a/Source/cmFindPackageCommand.cxx b/Source/cmFindPackageCommand.cxx index b8ee8c905b..09a677514a 100644 --- a/Source/cmFindPackageCommand.cxx +++ b/Source/cmFindPackageCommand.cxx @@ -1215,13 +1215,15 @@ bool cmFindPackageCommand::FindPackage( } } + // Record package information discovered while it is loaded. + this->PackageInfo = std::make_shared(); + // RAII objects to ensure we leave this function with consistent state. FlushDebugBufferOnExit flushDebugBufferOnExit(*this); PushPopRootPathStack pushPopRootPathStack(*this); SetRestoreFindDefinitions setRestoreFindDefinitions(*this); - cmFindPackageStackRAII findPackageStackRAII(this->Makefile, this->Name); - - findPackageStackRAII.BindTop(this->CurrentPackageInfo); + cmFindPackageStackRAII findPackageStackRAII(this->Makefile, this->Name, + this->PackageInfo); // See if we have been told to delegate to FetchContent or some other // redirected config package first. We have to check all names that @@ -1269,8 +1271,8 @@ bool cmFindPackageCommand::FindPackage( this->Names.clear(); this->Names.emplace_back(overrideName); // Force finding this one this->Variable = cmStrCat(this->Name, "_DIR"); - this->CurrentPackageInfo->Directory = redirectsDir; - this->CurrentPackageInfo->Version = this->VersionFound; + this->PackageInfo->Directory = redirectsDir; + this->PackageInfo->Version = this->VersionFound; this->SetConfigDirCacheVariable(redirectsDir); break; } @@ -1731,9 +1733,9 @@ bool cmFindPackageCommand::HandlePackageMode( } if (this->UseConfigFiles && found) { - this->CurrentPackageInfo->Directory = + this->PackageInfo->Directory = cmSystemTools::GetFilenamePath(this->FileFound); - this->CurrentPackageInfo->Version = this->VersionFound; + this->PackageInfo->Version = this->VersionFound; } } diff --git a/Source/cmFindPackageCommand.h b/Source/cmFindPackageCommand.h index 4ac057e6e6..740cdca82f 100644 --- a/Source/cmFindPackageCommand.h +++ b/Source/cmFindPackageCommand.h @@ -285,7 +285,7 @@ private: std::set OptionalComponents; std::set RequiredTargets; std::string DebugBuffer; - cmPackageInformation* CurrentPackageInfo; + std::shared_ptr PackageInfo; enum class SearchResult { diff --git a/Source/cmFindPackageStack.h b/Source/cmFindPackageStack.h index e7fb9a6ee4..3a5804120b 100644 --- a/Source/cmFindPackageStack.h +++ b/Source/cmFindPackageStack.h @@ -39,7 +39,7 @@ class cmFindPackageCall { public: std::string const Name; - cmPackageInformation PackageInfo; + std::shared_ptr PackageInfo; unsigned int Index; }; @@ -50,19 +50,14 @@ public: class cmFindPackageStackRAII { cmMakefile* Makefile; - cmPackageInformation** Value = nullptr; public: - cmFindPackageStackRAII(cmMakefile* mf, std::string const& pkg); + cmFindPackageStackRAII(cmMakefile* mf, std::string const& pkg, + std::shared_ptr pkgInfo); ~cmFindPackageStackRAII(); cmFindPackageStackRAII(cmFindPackageStackRAII const&) = delete; cmFindPackageStackRAII& operator=(cmFindPackageStackRAII const&) = delete; - - /** Get a mutable pointer to the top of the stack. - The pointer is invalidated if BindTop is called again or when the - cmFindPackageStackRAII goes out of scope. */ - void BindTop(cmPackageInformation*& value); }; /** diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index 78455b80a3..e0f2d10067 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -51,7 +51,6 @@ #include "cmSourceFile.h" #include "cmSourceFileLocation.h" #include "cmSourceGroup.h" -#include "cmStack.h" #include "cmState.h" #include "cmStateDirectory.h" #include "cmStateTypes.h" @@ -4234,34 +4233,22 @@ cmMakefile::MacroPushPop::~MacroPushPop() this->Makefile->PopMacroScope(this->ReportError); } -cmFindPackageStackRAII::cmFindPackageStackRAII(cmMakefile* mf, - std::string const& name) +cmFindPackageStackRAII::cmFindPackageStackRAII( + cmMakefile* mf, std::string const& name, + std::shared_ptr pkgInfo) : Makefile(mf) { this->Makefile->FindPackageStack = this->Makefile->FindPackageStack.Push(cmFindPackageCall{ name, - cmPackageInformation(), + std::move(pkgInfo), this->Makefile->FindPackageStackNextIndex, }); this->Makefile->FindPackageStackNextIndex++; } -void cmFindPackageStackRAII::BindTop(cmPackageInformation*& value) -{ - if (this->Value) { - *this->Value = nullptr; - } - this->Value = &value; - value = &this->Makefile->FindPackageStack.cmStack::Top().PackageInfo; -} - cmFindPackageStackRAII::~cmFindPackageStackRAII() { - if (this->Value) { - *this->Value = nullptr; - } - this->Makefile->FindPackageStackNextIndex = this->Makefile->FindPackageStack.Top().Index + 1; this->Makefile->FindPackageStack = this->Makefile->FindPackageStack.Pop(); diff --git a/Tests/RunCMake/find_package/NestedConfig.cmake b/Tests/RunCMake/find_package/NestedConfig.cmake new file mode 100644 index 0000000000..9bd376a20c --- /dev/null +++ b/Tests/RunCMake/find_package/NestedConfig.cmake @@ -0,0 +1,3 @@ +cmake_policy(SET CMP0074 NEW) +set(Outer_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/NestedConfig) +find_package(Outer CONFIG) diff --git a/Tests/RunCMake/find_package/NestedConfig/OuterConfig.cmake b/Tests/RunCMake/find_package/NestedConfig/OuterConfig.cmake new file mode 100644 index 0000000000..2a1332b87b --- /dev/null +++ b/Tests/RunCMake/find_package/NestedConfig/OuterConfig.cmake @@ -0,0 +1 @@ +find_package(Inner CONFIG NO_DEFAULT_PATH) diff --git a/Tests/RunCMake/find_package/RunCMakeTest.cmake b/Tests/RunCMake/find_package/RunCMakeTest.cmake index f0fc80b3a7..1d96eeb745 100644 --- a/Tests/RunCMake/find_package/RunCMakeTest.cmake +++ b/Tests/RunCMake/find_package/RunCMakeTest.cmake @@ -36,6 +36,7 @@ run_cmake(MissingConfigRequired) run_cmake(MissingConfigVersion) run_cmake(MixedModeOptions) run_cmake_with_options(ModuleModeDebugPkg --debug-find-pkg=Foo,Zot) +run_cmake(NestedConfig) run_cmake(PackageRoot) run_cmake(PackageRootNestedConfig) run_cmake(PackageRootNestedModule)