[Cmake-commits] CMake branch, next, updated. v2.8.10.2-2171-g392dbd4

Stephen Kelly steveire at gmail.com
Mon Feb 18 07:29:22 EST 2013


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".

The branch, next has been updated
       via  392dbd47ff50d84da14df6096771da0fbf713d1c (commit)
       via  0626cf56f80f850f8d7631903ff2436eec7bc69c (commit)
       via  34ef6eaff4d00cf7b5e70dac60e315e32f5bd311 (commit)
       via  a3a133e0c0b4570b2210e421ae89fd6e27decd37 (commit)
       via  953def1e17f3bbba0aa42037ae15ced011d8fd2a (commit)
       via  ec2c67bcf3aada9b601d5dca52b31a4fb6104240 (commit)
       via  a0ac2c59feec347a4cc93ab46fcf28f1dad49e99 (commit)
      from  a4654bb86a47bed11b702e3c09f0d7c77f2d6dff (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=392dbd47ff50d84da14df6096771da0fbf713d1c
commit 392dbd47ff50d84da14df6096771da0fbf713d1c
Merge: a4654bb 0626cf5
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Mon Feb 18 07:29:12 2013 -0500
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Mon Feb 18 07:29:12 2013 -0500

    Merge topic 'interface-property-external-read' into next
    
    0626cf5 Fix the tests for evaluating includes and defines.
    34ef6ea Fix constness of accessors.
    a3a133e Expand includes and defines transitively in 'external' genexes.
    953def1 Fix DAG checker finding cycling dependencies.
    ec2c67b Strip stray semicolons when evaluating generator expressions.
    a0ac2c5 CMake Nightly Date Stamp


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=0626cf56f80f850f8d7631903ff2436eec7bc69c
commit 0626cf56f80f850f8d7631903ff2436eec7bc69c
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Mon Feb 18 10:42:00 2013 +0100
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Mon Feb 18 13:21:12 2013 +0100

    Fix the tests for evaluating includes and defines.
    
    We should also check whether the INTERFACE_ variant of a property
    is being read, and in the case of the compile definitions, we should
    test the _<CONFIG> suffixed variants.
    
    This way, we use the ALREADY_SEEN optimization when evaluating
    the includes of a target in 'external' generator expressions, ie, those
    used in a add_custom_command invokation, as opposed to evaluating the
    INCLUDE_DIRECTORIES of a target itself via GetIncludeDirectories.

diff --git a/Source/cmGeneratorExpressionDAGChecker.cxx b/Source/cmGeneratorExpressionDAGChecker.cxx
index f8776d9..5cb50b9 100644
--- a/Source/cmGeneratorExpressionDAGChecker.cxx
+++ b/Source/cmGeneratorExpressionDAGChecker.cxx
@@ -33,8 +33,8 @@ cmGeneratorExpressionDAGChecker::cmGeneratorExpressionDAGChecker(
     }
   this->CheckResult = this->checkGraph();
 
-  if (CheckResult == DAG && (top->Property == "INCLUDE_DIRECTORIES"
-      || top->Property == "COMPILE_DEFINITIONS") )
+  if (CheckResult == DAG && (top->EvaluatingIncludeDirectories()
+      || top->EvaluatingCompileDefinitions()))
     {
     std::map<cmStdString, std::set<cmStdString> >::const_iterator it
                                                     = top->Seen.find(target);
diff --git a/Tests/GeneratorExpression/check-part2.cmake b/Tests/GeneratorExpression/check-part2.cmake
index 928c781..2a5c9a1 100644
--- a/Tests/GeneratorExpression/check-part2.cmake
+++ b/Tests/GeneratorExpression/check-part2.cmake
@@ -26,10 +26,10 @@ check(test_build_interface "build")
 check(test_install_interface "")
 check(test_target_name_1 "tgt,ok")
 check(test_target_name_2 "tgt:ok")
-check(test_target_includes1 "/empty1/public;/empty2/public;/empty3/public;/empty4/public;/empty4/public")
-check(test_target_includes2 "/empty2/public;/empty3/public;/empty4/public;/empty4/public")
-check(test_target_includes3 "/empty3/public;/empty2/public;/empty4/public;/empty4/public")
+check(test_target_includes1 "/empty1/public;/empty2/public;/empty3/public;/empty4/public")
+check(test_target_includes2 "/empty2/public;/empty3/public;/empty4/public")
+check(test_target_includes3 "/empty3/public;/empty2/public;/empty4/public")
 check(test_target_includes4 "/empty1/public;/empty1/private")
 check(test_target_includes5 "/empty2/public")
 check(test_target_includes6 "/empty3/public;/empty3/private")
-check(test_target_includes7 "/empty1/public;/empty2/public;/empty3/public;/empty4/public;/empty4/public")
+check(test_target_includes7 "/empty1/public;/empty2/public;/empty3/public;/empty4/public")

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=34ef6eaff4d00cf7b5e70dac60e315e32f5bd311
commit 34ef6eaff4d00cf7b5e70dac60e315e32f5bd311
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Mon Feb 18 10:34:16 2013 +0100
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Mon Feb 18 13:21:12 2013 +0100

    Fix constness of accessors.

diff --git a/Source/cmGeneratorExpressionDAGChecker.cxx b/Source/cmGeneratorExpressionDAGChecker.cxx
index 2d50c25..f8776d9 100644
--- a/Source/cmGeneratorExpressionDAGChecker.cxx
+++ b/Source/cmGeneratorExpressionDAGChecker.cxx
@@ -153,7 +153,7 @@ bool cmGeneratorExpressionDAGChecker::EvaluatingLinkLibraries()
 }
 
 //----------------------------------------------------------------------------
-bool cmGeneratorExpressionDAGChecker::EvaluatingIncludeDirectories()
+bool cmGeneratorExpressionDAGChecker::EvaluatingIncludeDirectories() const
 {
   const char *prop = this->Property.c_str();
   return (strcmp(prop, "INCLUDE_DIRECTORIES") == 0
@@ -161,7 +161,7 @@ bool cmGeneratorExpressionDAGChecker::EvaluatingIncludeDirectories()
 }
 
 //----------------------------------------------------------------------------
-bool cmGeneratorExpressionDAGChecker::EvaluatingCompileDefinitions()
+bool cmGeneratorExpressionDAGChecker::EvaluatingCompileDefinitions() const
 {
   const char *prop = this->Property.c_str();
   return (strcmp(prop, "COMPILE_DEFINITIONS") == 0
diff --git a/Source/cmGeneratorExpressionDAGChecker.h b/Source/cmGeneratorExpressionDAGChecker.h
index a2e5ce4..62a5cdf 100644
--- a/Source/cmGeneratorExpressionDAGChecker.h
+++ b/Source/cmGeneratorExpressionDAGChecker.h
@@ -38,8 +38,8 @@ struct cmGeneratorExpressionDAGChecker
                    const std::string &expr);
 
   bool EvaluatingLinkLibraries();
-  bool EvaluatingIncludeDirectories();
-  bool EvaluatingCompileDefinitions();
+  bool EvaluatingIncludeDirectories() const;
+  bool EvaluatingCompileDefinitions() const;
 
 private:
   Result checkGraph() const;

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=a3a133e0c0b4570b2210e421ae89fd6e27decd37
commit a3a133e0c0b4570b2210e421ae89fd6e27decd37
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Wed Feb 13 12:35:31 2013 +0100
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Mon Feb 18 13:21:12 2013 +0100

    Expand includes and defines transitively in 'external' genexes.
    
    This means that we can use expressions of the form
    
     $<TARGET_PROPERTY:foo,INTERFACE_INCLUDE_DIRECTORIES>
    
    to get a list of the interface include directories of foo, including
    those coming from dependencies.

diff --git a/Source/cmGeneratorExpressionEvaluator.cxx b/Source/cmGeneratorExpressionEvaluator.cxx
index 7de35d1..b6a2c63 100644
--- a/Source/cmGeneratorExpressionEvaluator.cxx
+++ b/Source/cmGeneratorExpressionEvaluator.cxx
@@ -458,8 +458,6 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
 
     const char *prop = target->GetProperty(propertyName.c_str());
 
-    std::string linkedTargetsContent;
-
     if (dagCheckerParent)
       {
       if (dagCheckerParent->EvaluatingLinkLibraries())
@@ -473,44 +471,46 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
         {
         assert(dagCheckerParent->EvaluatingIncludeDirectories()
             || dagCheckerParent->EvaluatingCompileDefinitions());
+        }
+      }
+
+    std::string linkedTargetsContent;
+
+    if (propertyName == "INTERFACE_INCLUDE_DIRECTORIES"
+        || propertyName == "INTERFACE_COMPILE_DEFINITIONS")
+      {
+      const cmTarget::LinkInterface *iface = target->GetLinkInterface(
+                                                    context->Config,
+                                                    context->HeadTarget);
+      if(iface)
+        {
+        cmGeneratorExpression ge(context->Backtrace);
 
-        if (propertyName == "INTERFACE_INCLUDE_DIRECTORIES"
-            || propertyName == "INTERFACE_COMPILE_DEFINITIONS")
+        std::string sep;
+        std::string depString;
+        for (std::vector<std::string>::const_iterator
+            it = iface->Libraries.begin();
+            it != iface->Libraries.end(); ++it)
           {
-          const cmTarget::LinkInterface *iface = target->GetLinkInterface(
-                                                        context->Config,
-                                                        context->HeadTarget);
-          if(iface)
+          if (context->Makefile->FindTargetToUse(it->c_str()))
             {
-            cmGeneratorExpression ge(context->Backtrace);
-
-            std::string sep;
-            std::string depString;
-            for (std::vector<std::string>::const_iterator
-                it = iface->Libraries.begin();
-                it != iface->Libraries.end(); ++it)
-              {
-              if (context->Makefile->FindTargetToUse(it->c_str()))
-                {
-                depString +=
-                  sep + "$<TARGET_PROPERTY:" + *it + "," + propertyName + ">";
-                sep = ";";
-                }
-              }
-            cmsys::auto_ptr<cmCompiledGeneratorExpression> cge =
-                                                          ge.Parse(depString);
-            linkedTargetsContent = cge->Evaluate(context->Makefile,
-                                context->Config,
-                                context->Quiet,
-                                context->HeadTarget,
-                                target,
-                                &dagChecker);
-            if (cge->GetHadContextSensitiveCondition())
-              {
-              context->HadContextSensitiveCondition = true;
-              }
+            depString +=
+              sep + "$<TARGET_PROPERTY:" + *it + "," + propertyName + ">";
+            sep = ";";
             }
           }
+        cmsys::auto_ptr<cmCompiledGeneratorExpression> cge =
+                                                      ge.Parse(depString);
+        linkedTargetsContent = cge->Evaluate(context->Makefile,
+                            context->Config,
+                            context->Quiet,
+                            context->HeadTarget,
+                            target,
+                            &dagChecker);
+        if (cge->GetHadContextSensitiveCondition())
+          {
+          context->HadContextSensitiveCondition = true;
+          }
         }
       }
 
diff --git a/Tests/GeneratorExpression/CMakeLists.txt b/Tests/GeneratorExpression/CMakeLists.txt
index ecbbedf..75bf21a 100644
--- a/Tests/GeneratorExpression/CMakeLists.txt
+++ b/Tests/GeneratorExpression/CMakeLists.txt
@@ -1,5 +1,5 @@
 cmake_minimum_required (VERSION 2.8.8)
-project(GeneratorExpression NONE)
+project(GeneratorExpression CXX)
 
 add_custom_target(check-part1 ALL
   COMMAND ${CMAKE_COMMAND}
@@ -62,6 +62,24 @@ add_custom_target(check-part1 ALL
   VERBATIM
   )
 
+add_library(empty1 empty.cpp)
+target_include_directories(empty1 PUBLIC /empty1/public)
+target_include_directories(empty1 PRIVATE /empty1/private)
+
+add_library(empty2 empty.cpp)
+target_include_directories(empty2 PUBLIC /empty2/public)
+
+add_library(empty3 empty.cpp)
+target_include_directories(empty3 PUBLIC /empty3/public)
+target_include_directories(empty3 PRIVATE /empty3/private)
+
+add_library(empty4 empty.cpp)
+target_include_directories(empty4 PUBLIC /empty4/public)
+
+target_link_libraries(empty1 LINK_PUBLIC empty2)
+target_link_libraries(empty2 LINK_PUBLIC empty3 empty4)
+target_link_libraries(empty3 LINK_PUBLIC empty2 empty4)
+
 add_custom_target(check-part2 ALL
   COMMAND ${CMAKE_COMMAND}
     -Dtest_incomplete_1=$<
@@ -89,6 +107,13 @@ add_custom_target(check-part2 ALL
     -Dtest_install_interface=$<INSTALL_INTERFACE:install>
     -Dtest_target_name_1=$<TARGET_NAME:tgt,ok>
     -Dtest_target_name_2=$<TARGET_NAME:tgt:ok>
+    -Dtest_target_includes1=$<TARGET_PROPERTY:empty1,INTERFACE_INCLUDE_DIRECTORIES>
+    -Dtest_target_includes2=$<TARGET_PROPERTY:empty2,INTERFACE_INCLUDE_DIRECTORIES>
+    -Dtest_target_includes3=$<TARGET_PROPERTY:empty3,INTERFACE_INCLUDE_DIRECTORIES>
+    -Dtest_target_includes4=$<TARGET_PROPERTY:empty1,INCLUDE_DIRECTORIES>
+    -Dtest_target_includes5=$<TARGET_PROPERTY:empty2,INCLUDE_DIRECTORIES>
+    -Dtest_target_includes6=$<TARGET_PROPERTY:empty3,INCLUDE_DIRECTORIES>
+    -Dtest_target_includes7=$<TARGET_PROPERTY:empty1,INTERFACE_INCLUDE_DIRECTORIES>
     -P ${CMAKE_CURRENT_SOURCE_DIR}/check-part2.cmake
   COMMAND ${CMAKE_COMMAND} -E echo "check done (part 2 of 2)"
   VERBATIM
diff --git a/Tests/GeneratorExpression/check-part2.cmake b/Tests/GeneratorExpression/check-part2.cmake
index 8855a97..928c781 100644
--- a/Tests/GeneratorExpression/check-part2.cmake
+++ b/Tests/GeneratorExpression/check-part2.cmake
@@ -26,3 +26,10 @@ check(test_build_interface "build")
 check(test_install_interface "")
 check(test_target_name_1 "tgt,ok")
 check(test_target_name_2 "tgt:ok")
+check(test_target_includes1 "/empty1/public;/empty2/public;/empty3/public;/empty4/public;/empty4/public")
+check(test_target_includes2 "/empty2/public;/empty3/public;/empty4/public;/empty4/public")
+check(test_target_includes3 "/empty3/public;/empty2/public;/empty4/public;/empty4/public")
+check(test_target_includes4 "/empty1/public;/empty1/private")
+check(test_target_includes5 "/empty2/public")
+check(test_target_includes6 "/empty3/public;/empty3/private")
+check(test_target_includes7 "/empty1/public;/empty2/public;/empty3/public;/empty4/public;/empty4/public")
diff --git a/Tests/GeneratorExpression/empty.cpp b/Tests/GeneratorExpression/empty.cpp
new file mode 100644
index 0000000..c539901
--- /dev/null
+++ b/Tests/GeneratorExpression/empty.cpp
@@ -0,0 +1,2 @@
+
+// empty

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=953def1e17f3bbba0aa42037ae15ced011d8fd2a
commit 953def1e17f3bbba0aa42037ae15ced011d8fd2a
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Mon Feb 18 11:08:24 2013 +0100
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Mon Feb 18 13:21:09 2013 +0100

    Fix DAG checker finding cycling dependencies.
    
    Before this patch, the following is reported falsely as a self-reference:
    
     target_link_libraries(empty2 LINK_PUBLIC empty3)
     target_link_libraries(empty3 LINK_PUBLIC empty2)
    
     add_custom_target(...
        -DINCLUDES=$<TARGET_PROPERTY:empty2,INTERFACE_INCLUDE_DIRECTORIES>
     )
    
    The reason is that the existing code assumed that all reading of
    include directories would be done through cmTarget::GetIncludeDirectories()
    and would therefore be initialized with a DagChecker. That is not the case
    if reading the property with an 'external' generator expression.
    
    As an unfortunate side-effect of backward compatibility for the
    LINK_INTERFACE_LIBRARIES property, self references can no longer be errors.

diff --git a/Source/cmGeneratorExpressionDAGChecker.cxx b/Source/cmGeneratorExpressionDAGChecker.cxx
index 57e7358..2d50c25 100644
--- a/Source/cmGeneratorExpressionDAGChecker.cxx
+++ b/Source/cmGeneratorExpressionDAGChecker.cxx
@@ -126,7 +126,7 @@ cmGeneratorExpressionDAGChecker::checkGraph() const
     {
     if (this->Target == parent->Target && this->Property == parent->Property)
       {
-      return parent->Parent ? CYCLIC_REFERENCE : SELF_REFERENCE;
+      return (parent == this->Parent) ? SELF_REFERENCE : CYCLIC_REFERENCE;
       }
     parent = parent->Parent;
     }
diff --git a/Source/cmGeneratorExpressionEvaluator.cxx b/Source/cmGeneratorExpressionEvaluator.cxx
index 023daf8..7de35d1 100644
--- a/Source/cmGeneratorExpressionEvaluator.cxx
+++ b/Source/cmGeneratorExpressionEvaluator.cxx
@@ -429,7 +429,13 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
     switch (dagChecker.check())
       {
     case cmGeneratorExpressionDAGChecker::SELF_REFERENCE:
-      dagChecker.reportError(context, content->GetOriginalExpression());
+      // It would be better to consider it an error for the foo target
+      // to have a INTERFACE_INCLUDE_DIRECTORIES which depends directly on its
+      // own INTERFACE_INCLUDE_DIRECTORIES property, but as the error of a
+      // target having itself in its own LINK_INTERFACE_LIBRARIES is 'allowed'
+      // and tested, and as the interface includes and defines are now based
+      // on the link interface, it breaks the CMakeOnly.LinkInterfaceLoop test.
+//       dagChecker.reportError(context, content->GetOriginalExpression());
       return std::string();
     case cmGeneratorExpressionDAGChecker::CYCLIC_REFERENCE:
       // No error. We just skip cyclic references.
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference1-result.txt b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference1-result.txt
deleted file mode 100644
index d00491f..0000000
--- a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference1-result.txt
+++ /dev/null
@@ -1 +0,0 @@
-1
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference1-stderr.txt b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference1-stderr.txt
deleted file mode 100644
index 791c4a9..0000000
--- a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference1-stderr.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-CMake Error:
-  Error evaluating generator expression:
-
-    \$<TARGET_PROPERTY:INCLUDE_DIRECTORIES>
-
-  Self reference on target "TargetPropertyGeneratorExpressions".$
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference1.cmake b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference1.cmake
deleted file mode 100644
index a85731e..0000000
--- a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference1.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/main.cpp"
-           "int main(int, char **) { return 0; }\n")
-
-add_executable(TargetPropertyGeneratorExpressions
-           "${CMAKE_CURRENT_BINARY_DIR}/main.cpp")
-include_directories("$<TARGET_PROPERTY:INCLUDE_DIRECTORIES>")
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference2-result.txt b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference2-result.txt
deleted file mode 100644
index d00491f..0000000
--- a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference2-result.txt
+++ /dev/null
@@ -1 +0,0 @@
-1
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference2-stderr.txt b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference2-stderr.txt
deleted file mode 100644
index 791c4a9..0000000
--- a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference2-stderr.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-CMake Error:
-  Error evaluating generator expression:
-
-    \$<TARGET_PROPERTY:INCLUDE_DIRECTORIES>
-
-  Self reference on target "TargetPropertyGeneratorExpressions".$
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference2.cmake b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference2.cmake
deleted file mode 100644
index f1459b8..0000000
--- a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference2.cmake
+++ /dev/null
@@ -1,9 +0,0 @@
-
-file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/main.cpp"
-           "int main(int, char **) { return 0; }\n")
-
-add_executable(TargetPropertyGeneratorExpressions
-           "${CMAKE_CURRENT_BINARY_DIR}/main.cpp")
-set_property(TARGET TargetPropertyGeneratorExpressions PROPERTY
-  INCLUDE_DIRECTORIES "$<TARGET_PROPERTY:INCLUDE_DIRECTORIES>"
-)
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference3-result.txt b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference3-result.txt
deleted file mode 100644
index d00491f..0000000
--- a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference3-result.txt
+++ /dev/null
@@ -1 +0,0 @@
-1
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference3-stderr.txt b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference3-stderr.txt
deleted file mode 100644
index f60d726..0000000
--- a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference3-stderr.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-CMake Error:
-  Error evaluating generator expression:
-
-    \$<TARGET_PROPERTY:TargetPropertyGeneratorExpressions,INCLUDE_DIRECTORIES>
-
-  Self reference on target "TargetPropertyGeneratorExpressions".$
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference3.cmake b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference3.cmake
deleted file mode 100644
index 433b730..0000000
--- a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference3.cmake
+++ /dev/null
@@ -1,8 +0,0 @@
-
-file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/main.cpp"
-           "int main(int, char **) { return 0; }\n")
-
-add_executable(TargetPropertyGeneratorExpressions
-           "${CMAKE_CURRENT_BINARY_DIR}/main.cpp")
-include_directories(
-  "$<TARGET_PROPERTY:TargetPropertyGeneratorExpressions,INCLUDE_DIRECTORIES>")
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference4-result.txt b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference4-result.txt
deleted file mode 100644
index d00491f..0000000
--- a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference4-result.txt
+++ /dev/null
@@ -1 +0,0 @@
-1
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference4-stderr.txt b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference4-stderr.txt
deleted file mode 100644
index f60d726..0000000
--- a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference4-stderr.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-CMake Error:
-  Error evaluating generator expression:
-
-    \$<TARGET_PROPERTY:TargetPropertyGeneratorExpressions,INCLUDE_DIRECTORIES>
-
-  Self reference on target "TargetPropertyGeneratorExpressions".$
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference4.cmake b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference4.cmake
deleted file mode 100644
index 4b64459..0000000
--- a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference4.cmake
+++ /dev/null
@@ -1,10 +0,0 @@
-
-file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/main.cpp"
-           "int main(int, char **) { return 0; }\n")
-
-add_executable(TargetPropertyGeneratorExpressions
-           "${CMAKE_CURRENT_BINARY_DIR}/main.cpp")
-set_property(TARGET TargetPropertyGeneratorExpressions PROPERTY
-INCLUDE_DIRECTORIES
-  "$<TARGET_PROPERTY:TargetPropertyGeneratorExpressions,INCLUDE_DIRECTORIES>"
-)
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference5-result.txt b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference5-result.txt
deleted file mode 100644
index d00491f..0000000
--- a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference5-result.txt
+++ /dev/null
@@ -1 +0,0 @@
-1
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference5-stderr.txt b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference5-stderr.txt
deleted file mode 100644
index 2b22d0f..0000000
--- a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference5-stderr.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-CMake Error:
-  Error evaluating generator expression:
-
-    \$<TARGET_PROPERTY:COMPILE_DEFINITIONS>
-
-  Self reference on target "TargetPropertyGeneratorExpressions".$
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference5.cmake b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference5.cmake
deleted file mode 100644
index 74fff67..0000000
--- a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference5.cmake
+++ /dev/null
@@ -1,10 +0,0 @@
-
-file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/main.cpp"
-           "int main(int, char **) { return 0; }\n")
-
-add_executable(TargetPropertyGeneratorExpressions
-           "${CMAKE_CURRENT_BINARY_DIR}/main.cpp")
-set_property(TARGET TargetPropertyGeneratorExpressions
-PROPERTY
-  COMPILE_DEFINITIONS "$<TARGET_PROPERTY:COMPILE_DEFINITIONS>"
-)
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference6-result.txt b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference6-result.txt
deleted file mode 100644
index d00491f..0000000
--- a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference6-result.txt
+++ /dev/null
@@ -1 +0,0 @@
-1
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference6-stderr.txt b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference6-stderr.txt
deleted file mode 100644
index fe7caa3..0000000
--- a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference6-stderr.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-CMake Error:
-  Error evaluating generator expression:
-
-    \$<TARGET_PROPERTY:TargetPropertyGeneratorExpressions,COMPILE_DEFINITIONS>
-
-  Self reference on target "TargetPropertyGeneratorExpressions".$
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference6.cmake b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference6.cmake
deleted file mode 100644
index d6650d3..0000000
--- a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference6.cmake
+++ /dev/null
@@ -1,10 +0,0 @@
-
-file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/main.cpp"
-           "int main(int, char **) { return 0; }\n")
-
-add_executable(TargetPropertyGeneratorExpressions
-           "${CMAKE_CURRENT_BINARY_DIR}/main.cpp")
-set_property(TARGET TargetPropertyGeneratorExpressions PROPERTY
-COMPILE_DEFINITIONS
-  "$<TARGET_PROPERTY:TargetPropertyGeneratorExpressions,COMPILE_DEFINITIONS>"
-)
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/RunCMakeTest.cmake b/Tests/RunCMake/TargetPropertyGeneratorExpressions/RunCMakeTest.cmake
index 0ee3238..fa14d4c 100644
--- a/Tests/RunCMake/TargetPropertyGeneratorExpressions/RunCMakeTest.cmake
+++ b/Tests/RunCMake/TargetPropertyGeneratorExpressions/RunCMakeTest.cmake
@@ -1,11 +1,5 @@
 include(RunCMake)
 
-run_cmake(BadSelfReference1)
-run_cmake(BadSelfReference2)
-run_cmake(BadSelfReference3)
-run_cmake(BadSelfReference4)
-run_cmake(BadSelfReference5)
-run_cmake(BadSelfReference6)
 run_cmake(BadNonTarget)
 run_cmake(BadInvalidName1)
 run_cmake(BadInvalidName2)

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=ec2c67bcf3aada9b601d5dca52b31a4fb6104240
commit ec2c67bcf3aada9b601d5dca52b31a4fb6104240
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Mon Feb 18 11:24:41 2013 +0100
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Mon Feb 18 12:07:32 2013 +0100

    Strip stray semicolons when evaluating generator expressions.

diff --git a/Source/cmGeneratorExpression.cxx b/Source/cmGeneratorExpression.cxx
index 5d162fe..08ffe1d 100644
--- a/Source/cmGeneratorExpression.cxx
+++ b/Source/cmGeneratorExpression.cxx
@@ -153,7 +153,8 @@ cmCompiledGeneratorExpression::~cmCompiledGeneratorExpression()
 }
 
 //----------------------------------------------------------------------------
-static std::string stripEmptyListElements(const std::string &input)
+std::string cmGeneratorExpression::StripEmptyListElements(
+                                                    const std::string &input)
 {
   std::string result;
 
@@ -223,7 +224,7 @@ static std::string stripAllGeneratorExpressions(const std::string &input)
     lastPos = pos;
     }
   result += input.substr(lastPos);
-  return stripEmptyListElements(result);
+  return cmGeneratorExpression::StripEmptyListElements(result);
 }
 
 //----------------------------------------------------------------------------
@@ -284,7 +285,7 @@ static std::string stripExportInterface(const std::string &input,
     }
   result += input.substr(lastPos);
 
-  return stripEmptyListElements(result);
+  return cmGeneratorExpression::StripEmptyListElements(result);
 }
 
 //----------------------------------------------------------------------------
diff --git a/Source/cmGeneratorExpression.h b/Source/cmGeneratorExpression.h
index 489b052..ca41573 100644
--- a/Source/cmGeneratorExpression.h
+++ b/Source/cmGeneratorExpression.h
@@ -66,6 +66,7 @@ public:
 
   static bool IsValidTargetName(const std::string &input);
 
+  static std::string StripEmptyListElements(const std::string &input);
 private:
   cmGeneratorExpression(const cmGeneratorExpression &);
   void operator=(const cmGeneratorExpression &);
diff --git a/Source/cmGeneratorExpressionEvaluator.cxx b/Source/cmGeneratorExpressionEvaluator.cxx
index cd6a40b..023daf8 100644
--- a/Source/cmGeneratorExpressionEvaluator.cxx
+++ b/Source/cmGeneratorExpressionEvaluator.cxx
@@ -508,6 +508,9 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
         }
       }
 
+    linkedTargetsContent =
+          cmGeneratorExpression::StripEmptyListElements(linkedTargetsContent);
+
     if (!prop)
       {
       if (target->IsImported())

-----------------------------------------------------------------------

Summary of changes:
 Source/CMakeVersion.cmake                          |    2 +-
 Source/cmGeneratorExpression.cxx                   |    7 +-
 Source/cmGeneratorExpression.h                     |    1 +
 Source/cmGeneratorExpressionDAGChecker.cxx         |   10 +-
 Source/cmGeneratorExpressionDAGChecker.h           |    4 +-
 Source/cmGeneratorExpressionEvaluator.cxx          |   81 +++++++++++---------
 Tests/GeneratorExpression/CMakeLists.txt           |   27 ++++++-
 Tests/GeneratorExpression/check-part2.cmake        |    7 ++
 Tests/GeneratorExpression/empty.cpp                |    2 +
 .../BadSelfReference1-result.txt                   |    1 -
 .../BadSelfReference1-stderr.txt                   |    6 --
 .../BadSelfReference1.cmake                        |    7 --
 .../BadSelfReference2-result.txt                   |    1 -
 .../BadSelfReference2-stderr.txt                   |    6 --
 .../BadSelfReference2.cmake                        |    9 --
 .../BadSelfReference3-result.txt                   |    1 -
 .../BadSelfReference3-stderr.txt                   |    6 --
 .../BadSelfReference3.cmake                        |    8 --
 .../BadSelfReference4-result.txt                   |    1 -
 .../BadSelfReference4-stderr.txt                   |    6 --
 .../BadSelfReference4.cmake                        |   10 ---
 .../BadSelfReference5-result.txt                   |    1 -
 .../BadSelfReference5-stderr.txt                   |    6 --
 .../BadSelfReference5.cmake                        |   10 ---
 .../BadSelfReference6-result.txt                   |    1 -
 .../BadSelfReference6-stderr.txt                   |    6 --
 .../BadSelfReference6.cmake                        |   10 ---
 .../RunCMakeTest.cmake                             |    6 --
 28 files changed, 93 insertions(+), 150 deletions(-)
 create mode 100644 Tests/GeneratorExpression/empty.cpp
 delete mode 100644 Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference1-result.txt
 delete mode 100644 Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference1-stderr.txt
 delete mode 100644 Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference1.cmake
 delete mode 100644 Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference2-result.txt
 delete mode 100644 Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference2-stderr.txt
 delete mode 100644 Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference2.cmake
 delete mode 100644 Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference3-result.txt
 delete mode 100644 Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference3-stderr.txt
 delete mode 100644 Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference3.cmake
 delete mode 100644 Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference4-result.txt
 delete mode 100644 Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference4-stderr.txt
 delete mode 100644 Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference4.cmake
 delete mode 100644 Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference5-result.txt
 delete mode 100644 Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference5-stderr.txt
 delete mode 100644 Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference5.cmake
 delete mode 100644 Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference6-result.txt
 delete mode 100644 Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference6-stderr.txt
 delete mode 100644 Tests/RunCMake/TargetPropertyGeneratorExpressions/BadSelfReference6.cmake


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list