diff options
3 files changed, 20 insertions, 4 deletions
diff --git a/Source/cmGeneratorExpressionEvaluator.cxx b/Source/cmGeneratorExpressionEvaluator.cxx index de6371a571..a01a0f890f 100644 --- a/Source/cmGeneratorExpressionEvaluator.cxx +++ b/Source/cmGeneratorExpressionEvaluator.cxx @@ -315,6 +315,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) @@ -345,7 +346,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()) @@ -538,6 +539,8 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode interfacePropertyName = "INTERFACE_COMPILE_DEFINITIONS"; } + cmTarget *headTarget = context->HeadTarget ? context->HeadTarget : target; + const char **transBegin = targetPropertyTransitiveWhitelist; const char **transEnd = targetPropertyTransitiveWhitelist + (sizeof(targetPropertyTransitiveWhitelist) / @@ -547,11 +550,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); } @@ -561,11 +565,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); } @@ -614,7 +619,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 ad6671feb4..bcfbe3ca7b 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>\"") file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/lib5.cpp" "#include \"common.h\"\n") add_library(lib5 "${CMAKE_CURRENT_BINARY_DIR}/lib5.cpp") diff --git a/Tests/IncludeDirectories/TargetIncludeDirectories/other.cpp b/Tests/IncludeDirectories/TargetIncludeDirectories/other.cpp new file mode 100644 index 0000000000..6673471b5f --- /dev/null +++ b/Tests/IncludeDirectories/TargetIncludeDirectories/other.cpp @@ -0,0 +1,6 @@ +#ifdef _WIN32 +__declspec(dllexport) +#endif +int other() { + return 0; +} |