|
@@ -37,16 +37,19 @@ cmGeneratorExpressionDAGChecker::cmGeneratorExpressionDAGChecker(
|
|
|
, Content(content)
|
|
, Content(content)
|
|
|
, Backtrace(std::move(backtrace))
|
|
, Backtrace(std::move(backtrace))
|
|
|
{
|
|
{
|
|
|
- const auto* top = this->Top;
|
|
|
|
|
- this->CheckResult = this->CheckGraph();
|
|
|
|
|
|
|
+ if (parent) {
|
|
|
|
|
+ this->TopIsTransitiveProperty = parent->TopIsTransitiveProperty;
|
|
|
|
|
+ } else {
|
|
|
|
|
+#define TEST_TRANSITIVE_PROPERTY_METHOD(METHOD) this->METHOD() ||
|
|
|
|
|
+ this->TopIsTransitiveProperty = (CM_FOR_EACH_TRANSITIVE_PROPERTY_METHOD(
|
|
|
|
|
+ TEST_TRANSITIVE_PROPERTY_METHOD) false); // NOLINT(*)
|
|
|
|
|
+#undef TEST_TRANSITIVE_PROPERTY_METHOD
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
-#define TEST_TRANSITIVE_PROPERTY_METHOD(METHOD) top->METHOD() ||
|
|
|
|
|
|
|
+ this->CheckResult = this->CheckGraph();
|
|
|
|
|
|
|
|
- if (this->CheckResult == DAG &&
|
|
|
|
|
- (CM_FOR_EACH_TRANSITIVE_PROPERTY_METHOD(
|
|
|
|
|
- TEST_TRANSITIVE_PROPERTY_METHOD) false)) // NOLINT(*)
|
|
|
|
|
-#undef TEST_TRANSITIVE_PROPERTY_METHOD
|
|
|
|
|
- {
|
|
|
|
|
|
|
+ if (this->CheckResult == DAG && this->EvaluatingTransitiveProperty()) {
|
|
|
|
|
+ const auto* top = this->Top;
|
|
|
auto it = top->Seen.find(this->Target);
|
|
auto it = top->Seen.find(this->Target);
|
|
|
if (it != top->Seen.end()) {
|
|
if (it != top->Seen.end()) {
|
|
|
const std::set<std::string>& propSet = it->second;
|
|
const std::set<std::string>& propSet = it->second;
|
|
@@ -139,6 +142,11 @@ bool cmGeneratorExpressionDAGChecker::GetTransitivePropertiesOnlyCMP0131()
|
|
|
return this->Top->CMP0131;
|
|
return this->Top->CMP0131;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+bool cmGeneratorExpressionDAGChecker::EvaluatingTransitiveProperty() const
|
|
|
|
|
+{
|
|
|
|
|
+ return this->TopIsTransitiveProperty;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
bool cmGeneratorExpressionDAGChecker::EvaluatingGenexExpression() const
|
|
bool cmGeneratorExpressionDAGChecker::EvaluatingGenexExpression() const
|
|
|
{
|
|
{
|
|
|
// Corresponds to GenexEvaluator::EvaluateExpression.
|
|
// Corresponds to GenexEvaluator::EvaluateExpression.
|