summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
Diffstat (limited to 'Source')
-rw-r--r--Source/cmDocumentVariables.cxx24
-rw-r--r--Source/cmExportFileGenerator.cxx2
-rw-r--r--Source/cmFileCommand.h2
-rw-r--r--Source/cmGeneratorExpressionEvaluator.cxx5
-rw-r--r--Source/cmMakefile.cxx2
-rw-r--r--Source/cmTarget.cxx50
-rw-r--r--Source/cmTarget.h3
7 files changed, 61 insertions, 27 deletions
diff --git a/Source/cmDocumentVariables.cxx b/Source/cmDocumentVariables.cxx
index cfd5e76..58b7147 100644
--- a/Source/cmDocumentVariables.cxx
+++ b/Source/cmDocumentVariables.cxx
@@ -963,9 +963,11 @@ void cmDocumentVariables::DefineVariables(cmake* cm)
"Enables tracing output for target properties.",
"This variable can be populated with a list of properties to generate "
"debug output for when evaluating target properties. Currently it can "
- "only be used when evaluating the INCLUDE_DIRECTORIES target property. "
- "In that case, it outputs a backtrace for each include directory in "
- "the build. Default is unset.",false,"Variables That Change Behavior");
+ "only be used when evaluating the INCLUDE_DIRECTORIES, "
+ "COMPILE_DEFINITIONS and COMPILE_OPTIONS target properties. "
+ "In that case, it outputs a backtrace for each entry in the target "
+ "propertythe build. Default is unset.",
+ false,"Variables That Change Behavior");
// Variables defined by CMake that describe the system
@@ -1518,6 +1520,22 @@ void cmDocumentVariables::DefineVariables(cmake* cm)
"See that target property for additional information.",
false,
"Variables that Control the Build");
+ cm->DefineProperty
+ ("CMAKE_<LANG>_VISIBILITY_PRESET", cmProperty::VARIABLE,
+ "Default value for <LANG>_VISIBILITY_PRESET of targets.",
+ "This variable is used to initialize the "
+ "<LANG>_VISIBILITY_PRESET property on all the targets. "
+ "See that target property for additional information.",
+ false,
+ "Variables that Control the Build");
+ cm->DefineProperty
+ ("CMAKE_VISIBILITY_INLINES_HIDDEN", cmProperty::VARIABLE,
+ "Default value for VISIBILITY_INLINES_HIDDEN of targets.",
+ "This variable is used to initialize the "
+ "VISIBILITY_INLINES_HIDDEN property on all the targets. "
+ "See that target property for additional information.",
+ false,
+ "Variables that Control the Build");
// Variables defined when the a language is enabled These variables will
// also be defined whenever CMake has loaded its support for compiling (LANG)
diff --git a/Source/cmExportFileGenerator.cxx b/Source/cmExportFileGenerator.cxx
index 36802b5..d4437a8 100644
--- a/Source/cmExportFileGenerator.cxx
+++ b/Source/cmExportFileGenerator.cxx
@@ -641,7 +641,7 @@ cmExportFileGenerator
cmMakefile *mf = target->GetMakefile();
cmOStringStream e;
e << "Target \"" << target->GetName() << "\" has policy CMP0022 enabled, "
- "but also has old-style INTERFACE_LINK_LIBRARIES properties "
+ "but also has old-style LINK_INTERFACE_LIBRARIES properties "
"populated, but it was exported without the "
"EXPORT_LINK_INTERFACE_LIBRARIES to export the old-style properties";
mf->IssueMessage(cmake::FATAL_ERROR, e.str());
diff --git a/Source/cmFileCommand.h b/Source/cmFileCommand.h
index 586fee2..aa755d1 100644
--- a/Source/cmFileCommand.h
+++ b/Source/cmFileCommand.h
@@ -90,7 +90,7 @@ public:
" file(TIMESTAMP filename variable [<format string>] [UTC])\n"
" file(GENERATE OUTPUT output_file\n"
" <INPUT input_file|CONTENT input_content>\n"
- " CONDITION expression)\n"
+ " [CONDITION expression])\n"
"WRITE will write a message into a file called 'filename'. It "
"overwrites the file if it already exists, and creates the file "
"if it does not exist. (If the file is a build input, use "
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/cmMakefile.cxx b/Source/cmMakefile.cxx
index 2cd19cf..78012de 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -4081,7 +4081,7 @@ void cmMakefile::DefineProperties(cmake *cm)
"List of options to pass to the compiler.",
"This property specifies the list of directories given "
"so far for this property. "
- "This property exists on directories and targets. "
+ "This property exists on directories and targets."
"\n"
"The target property values are used by the generators to set "
"the options for the compiler.\n"
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index b9dc423..560f07c 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -304,7 +304,7 @@ void cmTarget::DefineProperties(cmake *cm)
"List of options to pass to the compiler.",
"This property specifies the list of options specified "
"so far for this property. "
- "This property exists on directories and targets. "
+ "This property exists on directories and targets."
"\n"
"The target property values are used by the generators to set "
"the options for the compiler.\n"
@@ -1001,22 +1001,13 @@ void cmTarget::DefineProperties(cmake *cm)
"(such as \"lib\") on a library name.");
cm->DefineProperty
- ("C_VISIBILITY_PRESET", cmProperty::TARGET,
+ ("<LANG>_VISIBILITY_PRESET", cmProperty::TARGET,
"Value for symbol visibility compile flags",
- "The C_VISIBILITY_PRESET property determines the value passed used in "
- "a visibility related compile option, such as -fvisibility=. This "
- "property only has an affect for libraries and executables with "
+ "The <LANG>_VISIBILITY_PRESET property determines the value passed in "
+ "a visibility related compile option, such as -fvisibility= for <LANG>. "
+ "This property only has an affect for libraries and executables with "
"exports. This property is initialized by the value of the variable "
- "CMAKE_C_VISIBILITY_PRESET if it is set when a target is created.");
-
- cm->DefineProperty
- ("CXX_VISIBILITY_PRESET", cmProperty::TARGET,
- "Value for symbol visibility compile flags",
- "The CXX_VISIBILITY_PRESET property determines the value passed used in "
- "a visibility related compile option, such as -fvisibility=. This "
- "property only has an affect for libraries and executables with "
- "exports. This property is initialized by the value of the variable "
- "CMAKE_CXX_VISIBILITY_PRESET if it is set when a target is created.");
+ "CMAKE_<LANG>_VISIBILITY_PRESET if it is set when a target is created.");
cm->DefineProperty
("VISIBILITY_INLINES_HIDDEN", cmProperty::TARGET,
@@ -2530,6 +2521,7 @@ void cmTarget::GetTllSignatureTraces(cmOStringStream &s,
= (sig == cmTarget::KeywordTLLSignature ? "keyword"
: "plain");
s << "The uses of the " << sigString << " signature are here:\n";
+ std::set<cmStdString> emitted;
for(std::vector<cmListFileBacktrace>::const_iterator it = sigs.begin();
it != sigs.end(); ++it)
{
@@ -2537,7 +2529,12 @@ void cmTarget::GetTllSignatureTraces(cmOStringStream &s,
if(i != it->end())
{
cmListFileContext const& lfc = *i;
- s << " * " << (lfc.Line? "": " in ") << lfc << std::endl;
+ cmOStringStream line;
+ line << " * " << (lfc.Line? "": " in ") << lfc << std::endl;
+ if (emitted.insert(line.str()).second)
+ {
+ s << line.str();
+ }
++i;
}
}
@@ -6244,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,6 +6467,15 @@ bool cmTarget::ComputeLinkInterface(const char* config, LinkInterface& iface,
break;
}
}
+ else
+ {
+ iface.Libraries = impl->Libraries;
+ if(this->LinkLanguagePropagatesToDependents())
+ {
+ // Targets using this archive need its language runtime libraries.
+ iface.Languages = impl->Languages;
+ }
+ }
}
}
@@ -6498,7 +6504,8 @@ bool cmTarget::ComputeLinkInterface(const char* config, LinkInterface& iface,
headTarget,
this, &dagChecker), iface.Libraries);
- if(this->GetType() == cmTarget::SHARED_LIBRARY)
+ if(this->GetType() == cmTarget::SHARED_LIBRARY
+ || this->GetType() == cmTarget::STATIC_LIBRARY)
{
// Shared libraries may have runtime implementation dependencies
// on other shared libraries that are not in the interface.
@@ -6532,6 +6539,11 @@ bool cmTarget::ComputeLinkInterface(const char* config, LinkInterface& iface,
}
}
}
+ if(this->LinkLanguagePropagatesToDependents())
+ {
+ // Targets using this archive need its language runtime libraries.
+ iface.Languages = impl->Languages;
+ }
}
}
else if (this->GetPolicyStatusCMP0022() == cmPolicies::WARN
@@ -6546,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.