[Cmake-commits] CMake branch, next, updated. v2.8.9-1047-g8ee84ad

Brad King brad.king at kitware.com
Tue Oct 9 08:28:29 EDT 2012


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  8ee84adf9c644f3fda8825cced371d153d263db6 (commit)
       via  7aa99270fa77a13e8e710adc0098385403d6cf7a (commit)
       via  78e54b99fed1bd4c899360c9df779205ce6b29ba (commit)
       via  d729e8b74ccdf14d809a1b7f9260a5a1d225c2bc (commit)
       via  354face4fa234adfe6f056dc9d3039fc135ab4ef (commit)
       via  8b3b88abd82a36daf541dfa7094f978e0be08efc (commit)
       via  b3d8f5dab7f33dba4f327ab7ef4bd7ea90d6b651 (commit)
       via  a4985a9af9ed9762c1a51c369981609dd24f7425 (commit)
       via  d70650d6c3c94d1d903eb7f21998861d8f7bf2c6 (commit)
       via  4801eb633392eff95586709df570dabcdf0f5db1 (commit)
      from  f52c0911b7bcfbd06cbe2ff9d2e4276bc520e43f (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=8ee84adf9c644f3fda8825cced371d153d263db6
commit 8ee84adf9c644f3fda8825cced371d153d263db6
Merge: f52c091 7aa9927
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Tue Oct 9 08:28:22 2012 -0400
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Tue Oct 9 08:28:22 2012 -0400

    Merge topic 'generator-expression-bug-fixes' into next
    
    7aa9927 GenEx: Don't use std::vector::at(int).
    78e54b9 GenEx: Add tests for "0" and "1" expressions with literal commas.
    d729e8b GenEx: Add test for $<BOOL:> with empty parameter.
    354face GenEx: Ensure that the empty CONFIGURATION can be used conditionally.
    8b3b88a GenEx: Validate target and property names.
    b3d8f5d GenEx: Parse comma after colon tokens specially
    a4985a9 GenEx: Report actual target name not found, not "0" each time.
    d70650d GenEx: Return after error reported.
    4801eb6 GenEx: It is not an error to specify an empty parameter


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=7aa99270fa77a13e8e710adc0098385403d6cf7a
commit 7aa99270fa77a13e8e710adc0098385403d6cf7a
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Thu Oct 4 11:21:05 2012 +0200
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Tue Oct 9 08:26:56 2012 -0400

    GenEx: Don't use std::vector::at(int).
    
    It might not exist with GCC 2.9.

diff --git a/Source/cmGeneratorExpressionEvaluator.cxx b/Source/cmGeneratorExpressionEvaluator.cxx
index 93895b3..92e2052 100644
--- a/Source/cmGeneratorExpressionEvaluator.cxx
+++ b/Source/cmGeneratorExpressionEvaluator.cxx
@@ -173,7 +173,7 @@ static const struct StrEqualNode : public cmGeneratorExpressionNode
                        const GeneratorExpressionContent *,
                        cmGeneratorExpressionDAGChecker *) const
   {
-    return *parameters.begin() == parameters.at(1) ? "1" : "0";
+    return *parameters.begin() == parameters[1] ? "1" : "0";
   }
 } strEqualNode;
 
@@ -281,7 +281,7 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
     std::string propertyName = *parameters.begin();
     if (parameters.size() == 2)
       {
-      if (parameters.begin()->empty() && parameters.at(1).empty())
+      if (parameters.begin()->empty() && parameters[1].empty())
         {
         reportError(context, content->GetOriginalExpression(),
             "$<TARGET_PROPERTY:tgt,prop> expression requires a non-empty "
@@ -297,7 +297,7 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
         }
 
       std::string targetName = parameters.front();
-      propertyName = parameters.at(1);
+      propertyName = parameters[1];
       if (!nameValidator.find(targetName.c_str()))
         {
         if (!nameValidator.find(propertyName.c_str()))

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=78e54b99fed1bd4c899360c9df779205ce6b29ba
commit 78e54b99fed1bd4c899360c9df779205ce6b29ba
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Thu Oct 4 10:27:34 2012 +0200
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Tue Oct 9 08:26:54 2012 -0400

    GenEx: Add tests for "0" and "1" expressions with literal commas.

diff --git a/Tests/GeneratorExpression/CMakeLists.txt b/Tests/GeneratorExpression/CMakeLists.txt
index 41639ac..8bc4f32 100644
--- a/Tests/GeneratorExpression/CMakeLists.txt
+++ b/Tests/GeneratorExpression/CMakeLists.txt
@@ -4,7 +4,9 @@ project(GeneratorExpression NONE)
 add_custom_target(check ALL
   COMMAND ${CMAKE_COMMAND}
     -Dtest_0=$<0:nothing>
+    -Dtest_0_with_comma=$<0:-Wl,--no-undefined>
     -Dtest_1=$<1:content>
+    -Dtest_1_with_comma=$<1:-Wl,--no-undefined>
     -Dconfig=$<CONFIGURATION>
     -Dtest_and_0=$<AND:0>
     -Dtest_and_0_0=$<AND:0,0>
diff --git a/Tests/GeneratorExpression/check.cmake b/Tests/GeneratorExpression/check.cmake
index fd1e2ab..ec1f130 100644
--- a/Tests/GeneratorExpression/check.cmake
+++ b/Tests/GeneratorExpression/check.cmake
@@ -6,7 +6,9 @@ endmacro()
 
 message(STATUS "config=[${config}]")
 check(test_0 "")
+check(test_0_with_comma "")
 check(test_1 "content")
+check(test_1_with_comma "-Wl,--no-undefined")
 check(test_and_0 "0")
 check(test_and_0_0 "0")
 check(test_and_0_1 "0")

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=d729e8b74ccdf14d809a1b7f9260a5a1d225c2bc
commit d729e8b74ccdf14d809a1b7f9260a5a1d225c2bc
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Thu Oct 4 10:24:32 2012 +0200
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Tue Oct 9 08:26:51 2012 -0400

    GenEx: Add test for $<BOOL:> with empty parameter.

diff --git a/Tests/GeneratorExpression/CMakeLists.txt b/Tests/GeneratorExpression/CMakeLists.txt
index 6494107..41639ac 100644
--- a/Tests/GeneratorExpression/CMakeLists.txt
+++ b/Tests/GeneratorExpression/CMakeLists.txt
@@ -30,6 +30,7 @@ add_custom_target(check ALL
     -Dtest_bool_off=$<BOOL:Off>
     -Dtest_bool_no=$<BOOL:No>
     -Dtest_bool_n=$<BOOL:N>
+    -Dtest_bool_empty=$<BOOL:>
     -Dtest_strequal_yes_yes=$<STREQUAL:Yes,Yes>
     -Dtest_strequal_yes_yes_cs=$<STREQUAL:Yes,yes>
     -Dtest_strequal_yes_no=$<STREQUAL:Yes,No>
diff --git a/Tests/GeneratorExpression/check.cmake b/Tests/GeneratorExpression/check.cmake
index 7192470..fd1e2ab 100644
--- a/Tests/GeneratorExpression/check.cmake
+++ b/Tests/GeneratorExpression/check.cmake
@@ -31,6 +31,7 @@ check(test_bool_on "1")
 check(test_bool_off "0")
 check(test_bool_no "0")
 check(test_bool_n "0")
+check(test_bool_empty "0")
 check(test_strequal_yes_yes "1")
 check(test_strequal_yes_yes_cs "0")
 check(test_strequal_yes_no "0")

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=354face4fa234adfe6f056dc9d3039fc135ab4ef
commit 354face4fa234adfe6f056dc9d3039fc135ab4ef
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Thu Oct 4 00:36:23 2012 +0200
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Tue Oct 9 08:26:48 2012 -0400

    GenEx: Ensure that the empty CONFIGURATION can be used conditionally.
    
    The CONFIGURATION can not be manipulated at unit testing time, so
    this is not unit tested further.

diff --git a/Source/cmGeneratorExpressionEvaluator.cxx b/Source/cmGeneratorExpressionEvaluator.cxx
index 12809f4..93895b3 100644
--- a/Source/cmGeneratorExpressionEvaluator.cxx
+++ b/Source/cmGeneratorExpressionEvaluator.cxx
@@ -237,11 +237,6 @@ static const struct ConfigurationTestNode : public cmGeneratorExpressionNode
                        const GeneratorExpressionContent *content,
                        cmGeneratorExpressionDAGChecker *) const
   {
-    if (!context->Config)
-      {
-      return std::string();
-      }
-
     cmsys::RegularExpression configValidator;
     configValidator.compile("^[A-Za-z0-9_]*$");
     if (!configValidator.find(parameters.begin()->c_str()))
@@ -250,6 +245,11 @@ static const struct ConfigurationTestNode : public cmGeneratorExpressionNode
                   "Expression syntax not recognized.");
       return std::string();
       }
+    if (!context->Config)
+      {
+      return parameters.front().empty() ? "1" : "0";
+      }
+
     return *parameters.begin() == context->Config ? "1" : "0";
   }
 } configurationTestNode;

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=8b3b88abd82a36daf541dfa7094f978e0be08efc
commit 8b3b88abd82a36daf541dfa7094f978e0be08efc
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Thu Oct 4 00:31:24 2012 +0200
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Tue Oct 9 08:26:45 2012 -0400

    GenEx: Validate target and property names.
    
    They must be non-empty, and match a restrictive regexp.

diff --git a/Source/cmGeneratorExpressionEvaluator.cxx b/Source/cmGeneratorExpressionEvaluator.cxx
index 80cffe9..12809f4 100644
--- a/Source/cmGeneratorExpressionEvaluator.cxx
+++ b/Source/cmGeneratorExpressionEvaluator.cxx
@@ -274,11 +274,42 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
           "$<TARGET_PROPERTY:...> expression requires one or two parameters");
       return std::string();
       }
+    cmsys::RegularExpression nameValidator;
+    nameValidator.compile("^[A-Za-z0-9_.-]+$");
+
     cmGeneratorTarget* target = context->Target;
     std::string propertyName = *parameters.begin();
     if (parameters.size() == 2)
       {
+      if (parameters.begin()->empty() && parameters.at(1).empty())
+        {
+        reportError(context, content->GetOriginalExpression(),
+            "$<TARGET_PROPERTY:tgt,prop> expression requires a non-empty "
+            "target name and property name.");
+        return std::string();
+        }
+      if (parameters.begin()->empty())
+        {
+        reportError(context, content->GetOriginalExpression(),
+            "$<TARGET_PROPERTY:tgt,prop> expression requires a non-empty "
+            "target name.");
+        return std::string();
+        }
+
       std::string targetName = parameters.front();
+      propertyName = parameters.at(1);
+      if (!nameValidator.find(targetName.c_str()))
+        {
+        if (!nameValidator.find(propertyName.c_str()))
+          {
+          ::reportError(context, content->GetOriginalExpression(),
+                        "Target name and property name not supported.");
+          return std::string();
+          }
+        ::reportError(context, content->GetOriginalExpression(),
+                      "Target name not supported.");
+        return std::string();
+        }
       target = context->Makefile->FindGeneratorTargetToUse(
                                                 targetName.c_str());
 
@@ -291,7 +322,21 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
         reportError(context, content->GetOriginalExpression(), e.str());
         return std::string();
         }
-      propertyName = parameters.at(1);
+      }
+
+    if (propertyName.empty())
+      {
+      reportError(context, content->GetOriginalExpression(),
+          "$<TARGET_PROPERTY:...> expression requires a non-empty property "
+          "name.");
+      return std::string();
+      }
+
+    if (!nameValidator.find(propertyName.c_str()))
+      {
+      ::reportError(context, content->GetOriginalExpression(),
+                    "Property name not supported.");
+      return std::string();
       }
 
     cmGeneratorExpressionDAGChecker dagChecker(context->Backtrace,
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName1-result.txt b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName1-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName1-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName1-stderr.txt b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName1-stderr.txt
new file mode 100644
index 0000000..3287d19
--- /dev/null
+++ b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName1-stderr.txt
@@ -0,0 +1,6 @@
+CMake Error:
+  Error evaluating generator expression:
+
+    \$<TARGET_PROPERTY:Invali/dTarget,INCLUDE_DIRECTORIES>
+
+  Target name not supported.
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName1.cmake b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName1.cmake
new file mode 100644
index 0000000..d5f661d
--- /dev/null
+++ b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName1.cmake
@@ -0,0 +1,7 @@
+
+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:Invali/dTarget,INCLUDE_DIRECTORIES>")
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName2-result.txt b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName2-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName2-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName2-stderr.txt b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName2-stderr.txt
new file mode 100644
index 0000000..e527e22
--- /dev/null
+++ b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName2-stderr.txt
@@ -0,0 +1,6 @@
+CMake Error:
+  Error evaluating generator expression:
+
+    \$<TARGET_PROPERTY:Invali/dTarget,Invali/dProperty>
+
+  Target name and property name not supported.$
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName2.cmake b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName2.cmake
new file mode 100644
index 0000000..6e4c1d0
--- /dev/null
+++ b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName2.cmake
@@ -0,0 +1,7 @@
+
+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:Invali/dTarget,Invali/dProperty>")
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName3-result.txt b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName3-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName3-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName3-stderr.txt b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName3-stderr.txt
new file mode 100644
index 0000000..517debb
--- /dev/null
+++ b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName3-stderr.txt
@@ -0,0 +1,6 @@
+CMake Error:
+  Error evaluating generator expression:
+
+    \$<TARGET_PROPERTY:Invali/dProperty>
+
+  Property name not supported.$
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName3.cmake b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName3.cmake
new file mode 100644
index 0000000..3f75aa3
--- /dev/null
+++ b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName3.cmake
@@ -0,0 +1,7 @@
+
+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:Invali/dProperty>")
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName4-result.txt b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName4-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName4-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName4-stderr.txt b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName4-stderr.txt
new file mode 100644
index 0000000..eab6fb6
--- /dev/null
+++ b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName4-stderr.txt
@@ -0,0 +1,6 @@
+CMake Error:
+  Error evaluating generator expression:
+
+    \$<TARGET_PROPERTY:foo,Invali/dProperty>
+
+  Property name not supported.$
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName4.cmake b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName4.cmake
new file mode 100644
index 0000000..b616c31
--- /dev/null
+++ b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName4.cmake
@@ -0,0 +1,9 @@
+
+file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/main.cpp"
+           "int main(int, char **) { return 0; }\n")
+
+add_executable(foo "${CMAKE_CURRENT_BINARY_DIR}/main.cpp")
+
+add_executable(TargetPropertyGeneratorExpressions
+           "${CMAKE_CURRENT_BINARY_DIR}/main.cpp")
+include_directories("$<TARGET_PROPERTY:foo,Invali/dProperty>")
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName5-result.txt b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName5-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName5-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName5-stderr.txt b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName5-stderr.txt
new file mode 100644
index 0000000..e2b4fc6
--- /dev/null
+++ b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName5-stderr.txt
@@ -0,0 +1,7 @@
+CMake Error:
+  Error evaluating generator expression:
+
+    \$<TARGET_PROPERTY:,>
+
+  \$<TARGET_PROPERTY:tgt,prop> expression requires a non-empty target name and
+  property name.
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName5.cmake b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName5.cmake
new file mode 100644
index 0000000..11cb6fa
--- /dev/null
+++ b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName5.cmake
@@ -0,0 +1,7 @@
+
+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:,>")
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName6-result.txt b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName6-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName6-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName6-stderr.txt b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName6-stderr.txt
new file mode 100644
index 0000000..e94f52f
--- /dev/null
+++ b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName6-stderr.txt
@@ -0,0 +1,6 @@
+CMake Error:
+  Error evaluating generator expression:
+
+    \$<TARGET_PROPERTY:,ValidProperty>
+
+  \$<TARGET_PROPERTY:tgt,prop> expression requires a non-empty target name.
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName6.cmake b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName6.cmake
new file mode 100644
index 0000000..bf868a5
--- /dev/null
+++ b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName6.cmake
@@ -0,0 +1,7 @@
+
+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:,ValidProperty>")
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName7-result.txt b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName7-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName7-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName7-stderr.txt b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName7-stderr.txt
new file mode 100644
index 0000000..2548215
--- /dev/null
+++ b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName7-stderr.txt
@@ -0,0 +1,6 @@
+CMake Error:
+  Error evaluating generator expression:
+
+    \$<TARGET_PROPERTY:foo,>
+
+  \$<TARGET_PROPERTY:...> expression requires a non-empty property name.
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName7.cmake b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName7.cmake
new file mode 100644
index 0000000..36d1a79
--- /dev/null
+++ b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName7.cmake
@@ -0,0 +1,9 @@
+
+file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/main.cpp"
+           "int main(int, char **) { return 0; }\n")
+
+add_executable(foo "${CMAKE_CURRENT_BINARY_DIR}/main.cpp")
+
+add_executable(TargetPropertyGeneratorExpressions
+           "${CMAKE_CURRENT_BINARY_DIR}/main.cpp")
+include_directories("$<TARGET_PROPERTY:foo,>")
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName8-result.txt b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName8-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName8-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName8-stderr.txt b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName8-stderr.txt
new file mode 100644
index 0000000..2a98f6f
--- /dev/null
+++ b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName8-stderr.txt
@@ -0,0 +1,6 @@
+CMake Error:
+  Error evaluating generator expression:
+
+    \$<TARGET_PROPERTY:>
+
+  \$<TARGET_PROPERTY:...> expression requires a non-empty property name.
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName8.cmake b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName8.cmake
new file mode 100644
index 0000000..f059288
--- /dev/null
+++ b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadInvalidName8.cmake
@@ -0,0 +1,7 @@
+
+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:>")
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/RunCMakeTest.cmake b/Tests/RunCMake/TargetPropertyGeneratorExpressions/RunCMakeTest.cmake
index e2abd56..0ee3238 100644
--- a/Tests/RunCMake/TargetPropertyGeneratorExpressions/RunCMakeTest.cmake
+++ b/Tests/RunCMake/TargetPropertyGeneratorExpressions/RunCMakeTest.cmake
@@ -7,3 +7,11 @@ run_cmake(BadSelfReference4)
 run_cmake(BadSelfReference5)
 run_cmake(BadSelfReference6)
 run_cmake(BadNonTarget)
+run_cmake(BadInvalidName1)
+run_cmake(BadInvalidName2)
+run_cmake(BadInvalidName3)
+run_cmake(BadInvalidName4)
+run_cmake(BadInvalidName5)
+run_cmake(BadInvalidName6)
+run_cmake(BadInvalidName7)
+run_cmake(BadInvalidName8)

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=b3d8f5dab7f33dba4f327ab7ef4bd7ea90d6b651
commit b3d8f5dab7f33dba4f327ab7ef4bd7ea90d6b651
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Thu Oct 4 00:34:03 2012 +0200
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Tue Oct 9 08:26:43 2012 -0400

    GenEx: Parse comma after colon tokens specially
    
    Otherwise the comma is treated as plain text by ParseContent.
    
    $<STREQUAL:,> should be valid and true.
    $<STREQUAL:,something> should be valid and false.
    
    $<STREQUAL:,,> should be non-valid as it is 3 parameters.
    $<STREQUAL:something,,> should be non-valid as it is 3 parameters.
    
    Additionally, this allows reporting the correct error for other
    expressions. For example $<TARGET_PROPERTY:,> should be invalid
    because it has an empty target and empty property. It shouldn't
    attempt to read the property ',' on the 'implicit this' target.

diff --git a/Source/cmGeneratorExpressionParser.cxx b/Source/cmGeneratorExpressionParser.cxx
index 344e9f8..d95e1cc 100644
--- a/Source/cmGeneratorExpressionParser.cxx
+++ b/Source/cmGeneratorExpressionParser.cxx
@@ -118,10 +118,16 @@ void cmGeneratorExpressionParser::ParseGeneratorExpression(
     colonToken = this->it;
     parameters.resize(parameters.size() + 1);
     ++this->it;
+    while (this->it->TokenType == cmGeneratorExpressionToken::CommaSeparator)
+      {
+      commaTokens.push_back(this->it);
+      parameters.resize(parameters.size() + 1);
+      ++this->it;
+      }
     while(this->it->TokenType != cmGeneratorExpressionToken::EndExpression)
       {
       this->ParseContent(*(parameters.end() - 1));
-      if (this->it->TokenType == cmGeneratorExpressionToken::CommaSeparator)
+      while (this->it->TokenType == cmGeneratorExpressionToken::CommaSeparator)
         {
         commaTokens.push_back(this->it);
         parameters.resize(parameters.size() + 1);
diff --git a/Tests/GeneratorExpression/CMakeLists.txt b/Tests/GeneratorExpression/CMakeLists.txt
index 79a8abb..6494107 100644
--- a/Tests/GeneratorExpression/CMakeLists.txt
+++ b/Tests/GeneratorExpression/CMakeLists.txt
@@ -37,6 +37,8 @@ add_custom_target(check ALL
     -Dtest_strequal_angle_r=$<STREQUAL:$<ANGLE-R>,$<ANGLE-R>>
     -Dtest_strequal_comma=$<STREQUAL:$<COMMA>,$<COMMA>>
     -Dtest_strequal_angle_r_comma=$<STREQUAL:$<ANGLE-R>,$<COMMA>>
+    -Dtest_strequal_both_empty=$<STREQUAL:,>
+    -Dtest_strequal_one_empty=$<STREQUAL:something,>
     -Dtest_angle_r=$<ANGLE-R>
     -Dtest_comma=$<COMMA>
     -P ${CMAKE_CURRENT_SOURCE_DIR}/check.cmake
diff --git a/Tests/GeneratorExpression/check.cmake b/Tests/GeneratorExpression/check.cmake
index 6fb87a2..7192470 100644
--- a/Tests/GeneratorExpression/check.cmake
+++ b/Tests/GeneratorExpression/check.cmake
@@ -38,5 +38,7 @@ check(test_strequal_no_yes "0")
 check(test_strequal_angle_r "1")
 check(test_strequal_comma "1")
 check(test_strequal_angle_r_comma "0")
+check(test_strequal_both_empty "1")
+check(test_strequal_one_empty "0")
 check(test_angle_r ">")
 check(test_comma ",")
diff --git a/Tests/RunCMake/GeneratorExpression/BadNOT-stderr.txt b/Tests/RunCMake/GeneratorExpression/BadNOT-stderr.txt
index 32169c5..e5e628c 100644
--- a/Tests/RunCMake/GeneratorExpression/BadNOT-stderr.txt
+++ b/Tests/RunCMake/GeneratorExpression/BadNOT-stderr.txt
@@ -20,7 +20,7 @@ CMake Error at BadNOT.cmake:1 \(add_custom_target\):
 
     \$<NOT:,>
 
-  \$<NOT> parameter must resolve to exactly one '0' or '1' value.
+  \$<NOT> expression requires exactly one parameter.
 Call Stack \(most recent call first\):
   CMakeLists.txt:3 \(include\)
 +
diff --git a/Tests/RunCMake/GeneratorExpression/BadStrEqual-result.txt b/Tests/RunCMake/GeneratorExpression/BadStrEqual-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/GeneratorExpression/BadStrEqual-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/GeneratorExpression/BadStrEqual-stderr.txt b/Tests/RunCMake/GeneratorExpression/BadStrEqual-stderr.txt
new file mode 100644
index 0000000..dd0d931
--- /dev/null
+++ b/Tests/RunCMake/GeneratorExpression/BadStrEqual-stderr.txt
@@ -0,0 +1,38 @@
+CMake Error at BadStrEqual.cmake:1 \(add_custom_target\):
+  Error evaluating generator expression:
+
+    \$<STREQUAL>
+
+  \$<STREQUAL> expression requires 2 comma separated parameters, but got 0
+  instead.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:3 \(include\)
++CMake Error at BadStrEqual.cmake:1 \(add_custom_target\):
+  Error evaluating generator expression:
+
+    \$<STREQUAL:>
+
+  \$<STREQUAL> expression requires 2 comma separated parameters, but got 1
+  instead.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:3 \(include\)
++
+CMake Error at BadStrEqual.cmake:1 \(add_custom_target\):
+  Error evaluating generator expression:
+
+    \$<STREQUAL:,,>
+
+  \$<STREQUAL> expression requires 2 comma separated parameters, but got 3
+  instead.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:3 \(include\)
++
+CMake Error at BadStrEqual.cmake:1 \(add_custom_target\):
+  Error evaluating generator expression:
+
+    \$<STREQUAL:something,,>
+
+  \$<STREQUAL> expression requires 2 comma separated parameters, but got 3
+  instead.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:3 \(include\)$
diff --git a/Tests/RunCMake/GeneratorExpression/BadStrEqual.cmake b/Tests/RunCMake/GeneratorExpression/BadStrEqual.cmake
new file mode 100644
index 0000000..56eb458
--- /dev/null
+++ b/Tests/RunCMake/GeneratorExpression/BadStrEqual.cmake
@@ -0,0 +1,6 @@
+add_custom_target(check ALL COMMAND check
+  $<STREQUAL>
+  $<STREQUAL:>
+  $<STREQUAL:,,>
+  $<STREQUAL:something,,>
+  VERBATIM)
diff --git a/Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake b/Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake
index ed18f25..18a47ae 100644
--- a/Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake
+++ b/Tests/RunCMake/GeneratorExpression/RunCMakeTest.cmake
@@ -4,3 +4,4 @@ run_cmake(BadCONFIG)
 run_cmake(BadOR)
 run_cmake(BadAND)
 run_cmake(BadNOT)
+run_cmake(BadStrEqual)

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=a4985a9af9ed9762c1a51c369981609dd24f7425
commit a4985a9af9ed9762c1a51c369981609dd24f7425
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Thu Oct 4 00:32:39 2012 +0200
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Tue Oct 9 08:26:40 2012 -0400

    GenEx: Report actual target name not found, not "0" each time.

diff --git a/Source/cmGeneratorExpressionEvaluator.cxx b/Source/cmGeneratorExpressionEvaluator.cxx
index ad5f83c..80cffe9 100644
--- a/Source/cmGeneratorExpressionEvaluator.cxx
+++ b/Source/cmGeneratorExpressionEvaluator.cxx
@@ -278,14 +278,15 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
     std::string propertyName = *parameters.begin();
     if (parameters.size() == 2)
       {
+      std::string targetName = parameters.front();
       target = context->Makefile->FindGeneratorTargetToUse(
-                                                parameters.begin()->c_str());
+                                                targetName.c_str());
 
       if (!target)
         {
         cmOStringStream e;
         e << "Target \""
-          << target
+          << targetName
           << "\" not found.";
         reportError(context, content->GetOriginalExpression(), e.str());
         return std::string();
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadNonTarget-result.txt b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadNonTarget-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadNonTarget-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadNonTarget-stderr.txt b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadNonTarget-stderr.txt
new file mode 100644
index 0000000..d2ac7a9
--- /dev/null
+++ b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadNonTarget-stderr.txt
@@ -0,0 +1,6 @@
+CMake Error:
+  Error evaluating generator expression:
+
+    \$<TARGET_PROPERTY:NonExistant,INCLUDE_DIRECTORIES>
+
+  Target "NonExistant" not found.$
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadNonTarget.cmake b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadNonTarget.cmake
new file mode 100644
index 0000000..b020c08
--- /dev/null
+++ b/Tests/RunCMake/TargetPropertyGeneratorExpressions/BadNonTarget.cmake
@@ -0,0 +1,7 @@
+
+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:NonExistant,INCLUDE_DIRECTORIES>")
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/RunCMakeTest.cmake b/Tests/RunCMake/TargetPropertyGeneratorExpressions/RunCMakeTest.cmake
index f2ff05b..e2abd56 100644
--- a/Tests/RunCMake/TargetPropertyGeneratorExpressions/RunCMakeTest.cmake
+++ b/Tests/RunCMake/TargetPropertyGeneratorExpressions/RunCMakeTest.cmake
@@ -6,3 +6,4 @@ run_cmake(BadSelfReference3)
 run_cmake(BadSelfReference4)
 run_cmake(BadSelfReference5)
 run_cmake(BadSelfReference6)
+run_cmake(BadNonTarget)

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=d70650d6c3c94d1d903eb7f21998861d8f7bf2c6
commit d70650d6c3c94d1d903eb7f21998861d8f7bf2c6
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Thu Oct 4 00:32:22 2012 +0200
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Tue Oct 9 08:26:37 2012 -0400

    GenEx: Return after error reported.

diff --git a/Source/cmGeneratorExpressionEvaluator.cxx b/Source/cmGeneratorExpressionEvaluator.cxx
index 22f60d4..ad5f83c 100644
--- a/Source/cmGeneratorExpressionEvaluator.cxx
+++ b/Source/cmGeneratorExpressionEvaluator.cxx
@@ -288,6 +288,7 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
           << target
           << "\" not found.";
         reportError(context, content->GetOriginalExpression(), e.str());
+        return std::string();
         }
       propertyName = parameters.at(1);
       }

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=4801eb633392eff95586709df570dabcdf0f5db1
commit 4801eb633392eff95586709df570dabcdf0f5db1
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Thu Oct 4 00:33:21 2012 +0200
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Tue Oct 9 08:26:32 2012 -0400

    GenEx: It is not an error to specify an empty parameter
    
    This is allowed by the CONFIG and STREQUAL expressions.

diff --git a/Source/cmGeneratorExpressionParser.cxx b/Source/cmGeneratorExpressionParser.cxx
index d3c4aa3..344e9f8 100644
--- a/Source/cmGeneratorExpressionParser.cxx
+++ b/Source/cmGeneratorExpressionParser.cxx
@@ -142,10 +142,6 @@ void cmGeneratorExpressionParser::ParseGeneratorExpression(
         --this->NestingLevel;
         ++this->it;
         }
-      if (parameters.empty())
-        {
-          // ERROR
-        }
     }
 
   if (nestedLevel != this->NestingLevel)

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

Summary of changes:


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list