summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2013-06-05 13:54:20 (GMT)
committerCMake Topic Stage <kwrobot@kitware.com>2013-06-05 13:54:20 (GMT)
commitd3c8688ecdcdcea89373af2d6a30c4ba66315465 (patch)
tree827f12a133ab4d91edd09103a86e83e9505d59e1
parentaa025cc60a56da31dfe8461faec0dc3aa517cc10 (diff)
parent5b222354de7060af409d0d80aa06180ed1b3ac64 (diff)
downloadCMake-d3c8688ecdcdcea89373af2d6a30c4ba66315465.zip
CMake-d3c8688ecdcdcea89373af2d6a30c4ba66315465.tar.gz
CMake-d3c8688ecdcdcea89373af2d6a30c4ba66315465.tar.bz2
Merge topic 'fix-genex-HEAD-target'
5b22235 Genex: Fix the HEAD target used for evaluated expressions
-rw-r--r--Source/cmGeneratorExpressionEvaluator.cxx13
-rw-r--r--Tests/IncludeDirectories/TargetIncludeDirectories/CMakeLists.txt5
-rw-r--r--Tests/IncludeDirectories/TargetIncludeDirectories/other.cpp6
3 files changed, 20 insertions, 4 deletions
diff --git a/Source/cmGeneratorExpressionEvaluator.cxx b/Source/cmGeneratorExpressionEvaluator.cxx
index 5e7d00d..28f749d 100644
--- a/Source/cmGeneratorExpressionEvaluator.cxx
+++ b/Source/cmGeneratorExpressionEvaluator.cxx
@@ -500,6 +500,7 @@ static const char* targetPropertyTransitiveWhitelist[] = {
std::string getLinkedTargetsContent(const std::vector<std::string> &libraries,
cmTarget *target,
+ cmTarget *headTarget,
cmGeneratorExpressionContext *context,
cmGeneratorExpressionDAGChecker *dagChecker,
const std::string &interfacePropertyName)
@@ -530,7 +531,7 @@ std::string getLinkedTargetsContent(const std::vector<std::string> &libraries,
std::string linkedTargetsContent = cge->Evaluate(context->Makefile,
context->Config,
context->Quiet,
- context->HeadTarget,
+ headTarget,
target,
dagChecker);
if (cge->GetHadContextSensitiveCondition())
@@ -729,6 +730,8 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
interfacePropertyName = "INTERFACE_COMPILE_OPTIONS";
}
+ cmTarget *headTarget = context->HeadTarget ? context->HeadTarget : target;
+
const char **transBegin = targetPropertyTransitiveWhitelist;
const char **transEnd = targetPropertyTransitiveWhitelist
+ (sizeof(targetPropertyTransitiveWhitelist) /
@@ -738,11 +741,12 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
{
const cmTarget::LinkInterface *iface = target->GetLinkInterface(
context->Config,
- context->HeadTarget);
+ headTarget);
if(iface)
{
linkedTargetsContent =
getLinkedTargetsContent(iface->Libraries, target,
+ headTarget,
context, &dagChecker,
interfacePropertyName);
}
@@ -752,11 +756,12 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
{
const cmTarget::LinkImplementation *impl = target->GetLinkImplementation(
context->Config,
- context->HeadTarget);
+ headTarget);
if(impl)
{
linkedTargetsContent =
getLinkedTargetsContent(impl->Libraries, target,
+ headTarget,
context, &dagChecker,
interfacePropertyName);
}
@@ -805,7 +810,7 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
std::string result = cge->Evaluate(context->Makefile,
context->Config,
context->Quiet,
- context->HeadTarget,
+ headTarget,
target,
&dagChecker);
diff --git a/Tests/IncludeDirectories/TargetIncludeDirectories/CMakeLists.txt b/Tests/IncludeDirectories/TargetIncludeDirectories/CMakeLists.txt
index 088725b..6919261 100644
--- a/Tests/IncludeDirectories/TargetIncludeDirectories/CMakeLists.txt
+++ b/Tests/IncludeDirectories/TargetIncludeDirectories/CMakeLists.txt
@@ -109,6 +109,11 @@ set_property(TARGET libbad APPEND PROPERTY
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_BINARY_DIR}/bad"
)
+add_library(lib6 SHARED other.cpp)
+add_library(lib7 SHARED other.cpp)
+target_link_libraries(lib7 $<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:lib6>)
+target_include_directories(lib7 PUBLIC $<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:/lib7/include>)
+add_custom_target(head_target_test "some_bogus_custom_tool \"$<TARGET_PROPERTY:lib7,INCLUDE_DIRECTORIES>$<TARGET_PROPERTY:lib7,INTERFACE_INCLUDE_DIRECTORIES>\"")
add_library(includes_source_good empty.cpp)
target_include_directories(includes_source_good
diff --git a/Tests/IncludeDirectories/TargetIncludeDirectories/other.cpp b/Tests/IncludeDirectories/TargetIncludeDirectories/other.cpp
new file mode 100644
index 0000000..6673471
--- /dev/null
+++ b/Tests/IncludeDirectories/TargetIncludeDirectories/other.cpp
@@ -0,0 +1,6 @@
+#ifdef _WIN32
+__declspec(dllexport)
+#endif
+int other() {
+ return 0;
+}