|
@@ -9374,11 +9374,25 @@ bool cmGeneratorTarget::NeedDyndepForSource(std::string const& lang,
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+ auto targetDyndep = this->NeedCxxDyndep(config);
|
|
|
+ if (targetDyndep == CxxModuleSupport::Unavailable) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ auto const sfProp = sf->GetProperty("CXX_SCAN_FOR_MODULES");
|
|
|
+ if (sfProp.IsSet()) {
|
|
|
+ return sfProp.IsOn();
|
|
|
+ }
|
|
|
+ return targetDyndep == CxxModuleSupport::Enabled;
|
|
|
+}
|
|
|
+
|
|
|
+cmGeneratorTarget::CxxModuleSupport cmGeneratorTarget::NeedCxxDyndep(
|
|
|
+ std::string const& config) const
|
|
|
+{
|
|
|
bool haveRule = false;
|
|
|
switch (this->HaveCxxModuleSupport(config)) {
|
|
|
case Cxx20SupportLevel::MissingCxx:
|
|
|
case Cxx20SupportLevel::NoCxx20:
|
|
|
- return false;
|
|
|
+ return CxxModuleSupport::Unavailable;
|
|
|
case Cxx20SupportLevel::MissingRule:
|
|
|
break;
|
|
|
case Cxx20SupportLevel::Supported:
|
|
@@ -9388,28 +9402,29 @@ bool cmGeneratorTarget::NeedDyndepForSource(std::string const& lang,
|
|
|
bool haveGeneratorSupport =
|
|
|
this->GetGlobalGenerator()->CheckCxxModuleSupport(
|
|
|
cmGlobalGenerator::CxxModuleSupportQuery::Inspect);
|
|
|
- auto const sfProp = sf->GetProperty("CXX_SCAN_FOR_MODULES");
|
|
|
- if (sfProp.IsSet()) {
|
|
|
- return sfProp.IsOn();
|
|
|
- }
|
|
|
auto const tgtProp = this->GetProperty("CXX_SCAN_FOR_MODULES");
|
|
|
if (tgtProp.IsSet()) {
|
|
|
- return tgtProp.IsOn();
|
|
|
+ return tgtProp.IsOn() ? CxxModuleSupport::Enabled
|
|
|
+ : CxxModuleSupport::Disabled;
|
|
|
}
|
|
|
|
|
|
- bool policyAnswer = false;
|
|
|
+ CxxModuleSupport policyAnswer = CxxModuleSupport::Unavailable;
|
|
|
switch (this->GetPolicyStatusCMP0155()) {
|
|
|
case cmPolicies::WARN:
|
|
|
case cmPolicies::OLD:
|
|
|
// The OLD behavior is to not scan the source.
|
|
|
- policyAnswer = false;
|
|
|
+ policyAnswer = CxxModuleSupport::Disabled;
|
|
|
break;
|
|
|
case cmPolicies::REQUIRED_ALWAYS:
|
|
|
case cmPolicies::REQUIRED_IF_USED:
|
|
|
case cmPolicies::NEW:
|
|
|
// The NEW behavior is to scan the source if the compiler supports
|
|
|
// scanning and the generator supports it.
|
|
|
- policyAnswer = haveRule && haveGeneratorSupport;
|
|
|
+ if (haveRule && haveGeneratorSupport) {
|
|
|
+ policyAnswer = CxxModuleSupport::Enabled;
|
|
|
+ } else {
|
|
|
+ policyAnswer = CxxModuleSupport::Disabled;
|
|
|
+ }
|
|
|
break;
|
|
|
}
|
|
|
return policyAnswer;
|