mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-06 21:59:54 -06:00
cmGeneratorTarget: support better errors when checking for C++20 modules
Some callers have their own error reporting mechanisms which give more context. Support handing off the error string for these use cases.
This commit is contained in:
@@ -8930,24 +8930,28 @@ bool cmGeneratorTarget::HaveFortranSources(std::string const& config) const
|
||||
});
|
||||
}
|
||||
|
||||
bool cmGeneratorTarget::HaveCxx20ModuleSources() const
|
||||
bool cmGeneratorTarget::HaveCxx20ModuleSources(std::string* errorMessage) const
|
||||
{
|
||||
auto const& fs_names = this->Target->GetAllFileSetNames();
|
||||
return std::any_of(fs_names.begin(), fs_names.end(),
|
||||
[this](std::string const& name) -> bool {
|
||||
auto const* file_set = this->Target->GetFileSet(name);
|
||||
if (!file_set) {
|
||||
this->Makefile->IssueMessage(
|
||||
MessageType::INTERNAL_ERROR,
|
||||
cmStrCat("Target \"", this->Target->GetName(),
|
||||
"\" is tracked to have file set \"", name,
|
||||
"\", but it was not found."));
|
||||
return false;
|
||||
}
|
||||
return std::any_of(
|
||||
fs_names.begin(), fs_names.end(),
|
||||
[this, errorMessage](std::string const& name) -> bool {
|
||||
auto const* file_set = this->Target->GetFileSet(name);
|
||||
if (!file_set) {
|
||||
auto message = cmStrCat("Target \"", this->Target->GetName(),
|
||||
"\" is tracked to have file set \"", name,
|
||||
"\", but it was not found.");
|
||||
if (errorMessage) {
|
||||
*errorMessage = std::move(message);
|
||||
} else {
|
||||
this->Makefile->IssueMessage(MessageType::INTERNAL_ERROR, message);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
auto const& fs_type = file_set->GetType();
|
||||
return fs_type == "CXX_MODULES"_s;
|
||||
});
|
||||
auto const& fs_type = file_set->GetType();
|
||||
return fs_type == "CXX_MODULES"_s;
|
||||
});
|
||||
}
|
||||
|
||||
cmGeneratorTarget::Cxx20SupportLevel cmGeneratorTarget::HaveCxxModuleSupport(
|
||||
|
||||
@@ -1264,8 +1264,11 @@ public:
|
||||
*
|
||||
* This will inspect the target itself to see if C++20 module
|
||||
* support is expected to work based on its sources.
|
||||
*
|
||||
* If `errorMessage` is given a non-`nullptr`, any error message will be
|
||||
* stored in it, otherwise the error will be reported directly.
|
||||
*/
|
||||
bool HaveCxx20ModuleSources() const;
|
||||
bool HaveCxx20ModuleSources(std::string* errorMessage = nullptr) const;
|
||||
|
||||
enum class Cxx20SupportLevel
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user