summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Kelly <steveire@gmail.com>2013-07-25 07:12:28 (GMT)
committerStephen Kelly <steveire@gmail.com>2013-07-26 14:58:25 (GMT)
commitb8dc7fad23a0b6867dae30e3cd6a23c82d6cfac9 (patch)
tree2e1bf0429e6c4413eddbfe064f97bf6b67ef3ce5
parentc8a10ba9ad8707cfb892ca812efa2f6899adf60b (diff)
downloadCMake-b8dc7fad23a0b6867dae30e3cd6a23c82d6cfac9.zip
CMake-b8dc7fad23a0b6867dae30e3cd6a23c82d6cfac9.tar.gz
CMake-b8dc7fad23a0b6867dae30e3cd6a23c82d6cfac9.tar.bz2
Genex: Disallow LINKER_LANGUAGE only when used on a static library.
For shared libraries and executables, the linker_language is indepenedent of the linked libraries.
-rw-r--r--Source/cmGeneratorExpressionEvaluator.cxx5
-rw-r--r--Source/cmTarget.cxx8
-rw-r--r--Source/cmTarget.h3
-rw-r--r--Tests/RunCMake/Languages/LINK_LANGUAGE-genex.cmake4
4 files changed, 12 insertions, 8 deletions
diff --git a/Source/cmGeneratorExpressionEvaluator.cxx b/Source/cmGeneratorExpressionEvaluator.cxx
index b59298f..d0b6190 100644
--- a/Source/cmGeneratorExpressionEvaluator.cxx
+++ b/Source/cmGeneratorExpressionEvaluator.cxx
@@ -790,11 +790,12 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
if (propertyName == "LINKER_LANGUAGE")
{
- if (dagCheckerParent && dagCheckerParent->EvaluatingLinkLibraries())
+ if (target->LinkLanguagePropagatesToDependents() &&
+ dagCheckerParent && dagCheckerParent->EvaluatingLinkLibraries())
{
reportError(context, content->GetOriginalExpression(),
"LINKER_LANGUAGE target property can not be used while evaluating "
- "link libraries");
+ "link libraries for a static library");
return std::string();
}
const char *lang = target->GetLinkerLanguage(context->Config);
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 622e812..ffd4008 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -6241,7 +6241,7 @@ void cmTarget::ComputeImportInfo(std::string const& desired_config,
}
// Get the link languages.
- if(this->GetType() == cmTarget::STATIC_LIBRARY)
+ if(this->LinkLanguagePropagatesToDependents())
{
std::string linkProp = "IMPORTED_LINK_INTERFACE_LANGUAGES";
linkProp += suffix;
@@ -6470,7 +6470,7 @@ bool cmTarget::ComputeLinkInterface(const char* config, LinkInterface& iface,
else
{
iface.Libraries = impl->Libraries;
- if(this->GetType() == cmTarget::STATIC_LIBRARY)
+ if(this->LinkLanguagePropagatesToDependents())
{
// Targets using this archive need its language runtime libraries.
iface.Languages = impl->Languages;
@@ -6539,7 +6539,7 @@ bool cmTarget::ComputeLinkInterface(const char* config, LinkInterface& iface,
}
}
}
- if(this->GetType() == cmTarget::STATIC_LIBRARY)
+ if(this->LinkLanguagePropagatesToDependents())
{
// Targets using this archive need its language runtime libraries.
iface.Languages = impl->Languages;
@@ -6558,7 +6558,7 @@ bool cmTarget::ComputeLinkInterface(const char* config, LinkInterface& iface,
iface.ImplementationIsInterface = true;
iface.Libraries = impl->Libraries;
iface.WrongConfigLibraries = impl->WrongConfigLibraries;
- if(this->GetType() == cmTarget::STATIC_LIBRARY)
+ if(this->LinkLanguagePropagatesToDependents())
{
// Targets using this archive need its language runtime libraries.
iface.Languages = impl->Languages;
diff --git a/Source/cmTarget.h b/Source/cmTarget.h
index 24a71ed..27b74ca 100644
--- a/Source/cmTarget.h
+++ b/Source/cmTarget.h
@@ -549,6 +549,9 @@ public:
void FinalizeSystemIncludeDirectories();
+ bool LinkLanguagePropagatesToDependents() const
+ { return this->TargetTypeValue == STATIC_LIBRARY; }
+
private:
// The set of include directories that are marked as system include
// directories.
diff --git a/Tests/RunCMake/Languages/LINK_LANGUAGE-genex.cmake b/Tests/RunCMake/Languages/LINK_LANGUAGE-genex.cmake
index d4e31cd..64f394c 100644
--- a/Tests/RunCMake/Languages/LINK_LANGUAGE-genex.cmake
+++ b/Tests/RunCMake/Languages/LINK_LANGUAGE-genex.cmake
@@ -1,4 +1,4 @@
-add_library(foo SHARED empty.cpp)
-add_library(bar SHARED empty.cpp)
+add_library(foo STATIC empty.cpp)
+add_library(bar STATIC empty.cpp)
target_link_libraries(foo $<$<STREQUAL:$<TARGET_PROPERTY:LINKER_LANGUAGE>,anything>:bar>)