From 146493363ebcb7618e5da175f89b69fcc4f9bb16 Mon Sep 17 00:00:00 2001
From: Stephen Kelly <steveire@gmail.com>
Date: Tue, 29 Oct 2013 09:22:32 +0100
Subject: Genex: Simplify the preprocessor looper for interface properties.

By removing the INTERFACE_ prefix, we can use this in more contexts.
---
 Source/cmExportTryCompileFileGenerator.cxx | 2 +-
 Source/cmGeneratorExpressionDAGChecker.h   | 8 ++++----
 Source/cmGeneratorExpressionEvaluator.cxx  | 2 +-
 3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/Source/cmExportTryCompileFileGenerator.cxx b/Source/cmExportTryCompileFileGenerator.cxx
index b70fed6..d9bc04c 100644
--- a/Source/cmExportTryCompileFileGenerator.cxx
+++ b/Source/cmExportTryCompileFileGenerator.cxx
@@ -32,7 +32,7 @@ bool cmExportTryCompileFileGenerator::GenerateMainFile(std::ostream& os)
       ImportPropertyMap properties;
 
 #define FIND_TARGETS(PROPERTY) \
-      this->FindTargets(#PROPERTY, te, emittedDeps);
+      this->FindTargets("INTERFACE_" #PROPERTY, te, emittedDeps);
 
       CM_FOR_EACH_TRANSITIVE_PROPERTY_NAME(FIND_TARGETS)
 
diff --git a/Source/cmGeneratorExpressionDAGChecker.h b/Source/cmGeneratorExpressionDAGChecker.h
index 0b7ef02..c8594e7 100644
--- a/Source/cmGeneratorExpressionDAGChecker.h
+++ b/Source/cmGeneratorExpressionDAGChecker.h
@@ -23,10 +23,10 @@
   F(EvaluatingCompileOptions)
 
 #define CM_FOR_EACH_TRANSITIVE_PROPERTY_NAME(F) \
-  F(INTERFACE_INCLUDE_DIRECTORIES) \
-  F(INTERFACE_SYSTEM_INCLUDE_DIRECTORIES) \
-  F(INTERFACE_COMPILE_DEFINITIONS) \
-  F(INTERFACE_COMPILE_OPTIONS)
+  F(INCLUDE_DIRECTORIES) \
+  F(SYSTEM_INCLUDE_DIRECTORIES) \
+  F(COMPILE_DEFINITIONS) \
+  F(COMPILE_OPTIONS)
 
 //----------------------------------------------------------------------------
 struct cmGeneratorExpressionDAGChecker
diff --git a/Source/cmGeneratorExpressionEvaluator.cxx b/Source/cmGeneratorExpressionEvaluator.cxx
index 107ef73..2d26053 100644
--- a/Source/cmGeneratorExpressionEvaluator.cxx
+++ b/Source/cmGeneratorExpressionEvaluator.cxx
@@ -652,7 +652,7 @@ static const struct JoinNode : public cmGeneratorExpressionNode
 } joinNode;
 
 #define TRANSITIVE_PROPERTY_NAME(PROPERTY) \
-  , #PROPERTY
+  , "INTERFACE_" #PROPERTY
 
 //----------------------------------------------------------------------------
 static const char* targetPropertyTransitiveWhitelist[] = {
-- 
cgit v0.12


From 77a0fd5135e3f9cdd0a365ab3ce41a9393f41037 Mon Sep 17 00:00:00 2001
From: Stephen Kelly <steveire@gmail.com>
Date: Fri, 25 Oct 2013 15:55:40 +0200
Subject: Genex: Use a preprocessor foreach to follow transitive properties.

---
 Source/cmGeneratorExpressionEvaluator.cxx | 29 ++++++++++++-----------------
 1 file changed, 12 insertions(+), 17 deletions(-)

diff --git a/Source/cmGeneratorExpressionEvaluator.cxx b/Source/cmGeneratorExpressionEvaluator.cxx
index 2d26053..2ae5a22 100644
--- a/Source/cmGeneratorExpressionEvaluator.cxx
+++ b/Source/cmGeneratorExpressionEvaluator.cxx
@@ -893,26 +893,21 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
 
     std::string interfacePropertyName;
 
-    if (propertyName == "INTERFACE_INCLUDE_DIRECTORIES"
-        || propertyName == "INCLUDE_DIRECTORIES")
-      {
-      interfacePropertyName = "INTERFACE_INCLUDE_DIRECTORIES";
-      }
-    else if (propertyName == "INTERFACE_SYSTEM_INCLUDE_DIRECTORIES")
-      {
-      interfacePropertyName = "INTERFACE_SYSTEM_INCLUDE_DIRECTORIES";
-      }
-    else if (propertyName == "INTERFACE_COMPILE_DEFINITIONS"
-        || propertyName == "COMPILE_DEFINITIONS"
-        || strncmp(propertyName.c_str(), "COMPILE_DEFINITIONS_", 20) == 0)
+#define POPULATE_INTERFACE_PROPERTY_NAME(prop) \
+    if (propertyName == #prop || propertyName == "INTERFACE_" #prop) \
+      { \
+      interfacePropertyName = "INTERFACE_" #prop; \
+      } \
+    else
+
+    CM_FOR_EACH_TRANSITIVE_PROPERTY_NAME(POPULATE_INTERFACE_PROPERTY_NAME)
+      // Note that the above macro terminates with an else
+    /* else */ if (strncmp(propertyName.c_str(),
+                           "COMPILE_DEFINITIONS_", 20) == 0)
       {
       interfacePropertyName = "INTERFACE_COMPILE_DEFINITIONS";
       }
-    else if (propertyName == "INTERFACE_COMPILE_OPTIONS"
-        || propertyName == "COMPILE_OPTIONS")
-      {
-      interfacePropertyName = "INTERFACE_COMPILE_OPTIONS";
-      }
+#undef POPULATE_INTERFACE_PROPERTY_NAME
 
     cmTarget const* headTarget = context->HeadTarget
                                ? context->HeadTarget : target;
-- 
cgit v0.12