mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-06 05:40:54 -06:00
Merge topic 'cxxmodules-dyndep-error-on-private-usage' into release-3.28
3f8a59a05c cxxmodules: return failure from the collator when private usage is found
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !9257
This commit is contained in:
@@ -305,7 +305,7 @@ cm::static_string_view CxxModuleMapExtension(
|
||||
|
||||
std::set<std::string> CxxModuleUsageSeed(
|
||||
CxxModuleLocations const& loc, std::vector<cmScanDepInfo> const& objects,
|
||||
CxxModuleUsage& usages)
|
||||
CxxModuleUsage& usages, bool& private_usage_found)
|
||||
{
|
||||
// Track inner usages to populate usages from internal bits.
|
||||
//
|
||||
@@ -334,6 +334,7 @@ std::set<std::string> CxxModuleUsageSeed(
|
||||
cmStrCat("Unable to use module '", r.LogicalName,
|
||||
"' as it is 'PRIVATE' and therefore not accessible outside "
|
||||
"of its owning target."));
|
||||
private_usage_found = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
@@ -93,7 +93,7 @@ cm::static_string_view CxxModuleMapExtension(
|
||||
// import cycle).
|
||||
std::set<std::string> CxxModuleUsageSeed(
|
||||
CxxModuleLocations const& loc, std::vector<cmScanDepInfo> const& objects,
|
||||
CxxModuleUsage& usages);
|
||||
CxxModuleUsage& usages, bool& private_usage_found);
|
||||
|
||||
// Return the contents of the module map in the given format for the
|
||||
// object file.
|
||||
|
||||
@@ -2719,7 +2719,9 @@ bool cmGlobalNinjaGenerator::WriteDyndepFile(
|
||||
|
||||
// Insert information about the current target's modules.
|
||||
if (modmap_fmt) {
|
||||
auto cycle_modules = CxxModuleUsageSeed(locs, objects, usages);
|
||||
bool private_usage_found = false;
|
||||
auto cycle_modules =
|
||||
CxxModuleUsageSeed(locs, objects, usages, private_usage_found);
|
||||
if (!cycle_modules.empty()) {
|
||||
cmSystemTools::Error(
|
||||
cmStrCat("Circular dependency detected in the C++ module import "
|
||||
@@ -2727,6 +2729,10 @@ bool cmGlobalNinjaGenerator::WriteDyndepFile(
|
||||
cmJoin(cycle_modules, R"(", ")"_s), '"'));
|
||||
return false;
|
||||
}
|
||||
if (private_usage_found) {
|
||||
// Already errored in the function.
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
cmNinjaBuild build("dyndep");
|
||||
|
||||
Reference in New Issue
Block a user