mirror of
https://github.com/Kitware/CMake.git
synced 2026-04-24 07:08:38 -05:00
cmGeneratorTarget: also check included objects for Fortran modules
Fortran modules provided by objects in `$<TARGET_OBJECTS>` should also count as "has Fortran modules" for the target referencing the objects.
This commit is contained in:
@@ -9090,19 +9090,47 @@ std::string cmGeneratorTarget::GetImportedXcFrameworkPath(
|
||||
bool cmGeneratorTarget::HaveFortranSources(std::string const& config) const
|
||||
{
|
||||
auto sources = this->GetSourceFiles(config);
|
||||
return std::any_of(sources.begin(), sources.end(),
|
||||
[](BT<cmSourceFile*> const& sf) -> bool {
|
||||
return sf.Value->GetLanguage() == "Fortran"_s;
|
||||
});
|
||||
bool const have_direct = std::any_of(
|
||||
sources.begin(), sources.end(), [](BT<cmSourceFile*> const& sf) -> bool {
|
||||
return sf.Value->GetLanguage() == "Fortran"_s;
|
||||
});
|
||||
bool have_via_target_objects = false;
|
||||
if (!have_direct) {
|
||||
auto const sourceObjectLibraries = this->GetSourceObjectLibraries(config);
|
||||
have_via_target_objects =
|
||||
std::any_of(sourceObjectLibraries.begin(), sourceObjectLibraries.end(),
|
||||
[&config](cmGeneratorTarget const* tgt) -> bool {
|
||||
return tgt->HaveFortranSources(config);
|
||||
});
|
||||
}
|
||||
return have_direct || have_via_target_objects;
|
||||
}
|
||||
|
||||
bool cmGeneratorTarget::HaveFortranSources() const
|
||||
{
|
||||
auto sources = cmGeneratorTarget::GetAllConfigSources();
|
||||
return std::any_of(sources.begin(), sources.end(),
|
||||
[](AllConfigSource const& sf) -> bool {
|
||||
return sf.Source->GetLanguage() == "Fortran"_s;
|
||||
});
|
||||
auto sources = this->GetAllConfigSources();
|
||||
bool const have_direct = std::any_of(
|
||||
sources.begin(), sources.end(), [](AllConfigSource const& sf) -> bool {
|
||||
return sf.Source->GetLanguage() == "Fortran"_s;
|
||||
});
|
||||
bool have_via_target_objects = false;
|
||||
if (!have_direct) {
|
||||
std::vector<std::string> configs =
|
||||
this->Makefile->GetGeneratorConfigs(cmMakefile::IncludeEmptyConfig);
|
||||
for (auto const& config : configs) {
|
||||
auto const sourceObjectLibraries =
|
||||
this->GetSourceObjectLibraries(config);
|
||||
have_via_target_objects =
|
||||
std::any_of(sourceObjectLibraries.begin(), sourceObjectLibraries.end(),
|
||||
[&config](cmGeneratorTarget const* tgt) -> bool {
|
||||
return tgt->HaveFortranSources(config);
|
||||
});
|
||||
if (have_via_target_objects) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return have_direct || have_via_target_objects;
|
||||
}
|
||||
|
||||
bool cmGeneratorTarget::HaveCxx20ModuleSources(std::string* errorMessage) const
|
||||
|
||||
Reference in New Issue
Block a user