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 <steve...@gmail.com> AuthorDate: Mon Feb 18 07:29:12 2013 -0500 Commit: CMake Topic Stage <kwro...@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 <steve...@gmail.com> AuthorDate: Mon Feb 18 10:42:00 2013 +0100 Commit: Stephen Kelly <steve...@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 <steve...@gmail.com> AuthorDate: Mon Feb 18 10:34:16 2013 +0100 Commit: Stephen Kelly <steve...@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 <steve...@gmail.com> AuthorDate: Wed Feb 13 12:35:31 2013 +0100 Commit: Stephen Kelly <steve...@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 <steve...@gmail.com> AuthorDate: Mon Feb 18 11:08:24 2013 +0100 Commit: Stephen Kelly <steve...@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 <steve...@gmail.com> AuthorDate: Mon Feb 18 11:24:41 2013 +0100 Commit: Stephen Kelly <steve...@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 _______________________________________________ Cmake-commits mailing list Cmake-commits@cmake.org http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-commits