summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2009-07-11 14:12:05 (GMT)
committerBrad King <brad.king@kitware.com>2009-07-11 14:12:05 (GMT)
commitf888a0efafafeb20753fa250deb2675bb627c595 (patch)
tree998743f0187669e17cdd098f709eba79e0862fe4
parent3621e073a88433af4408a8d7d58974b4e8254b54 (diff)
downloadCMake-f888a0efafafeb20753fa250deb2675bb627c595.zip
CMake-f888a0efafafeb20753fa250deb2675bb627c595.tar.gz
CMake-f888a0efafafeb20753fa250deb2675bb627c595.tar.bz2
ENH: Export and import link interface languages
Now that languages are part of the link interface of a target we need to export/import the information. A new IMPORTED_LINK_INTERFACE_LANGUAGES property and per-config IMPORTED_LINK_INTERFACE_LANGUAGES_<CONFIG> property specify the information for imported targets. The export() and install(EXPORT) commands automatically set the properties.
-rw-r--r--Source/cmExportFileGenerator.cxx3
-rw-r--r--Source/cmTarget.cxx42
2 files changed, 45 insertions, 0 deletions
diff --git a/Source/cmExportFileGenerator.cxx b/Source/cmExportFileGenerator.cxx
index 9c603c1..8c15a26 100644
--- a/Source/cmExportFileGenerator.cxx
+++ b/Source/cmExportFileGenerator.cxx
@@ -153,6 +153,9 @@ cmExportFileGenerator
if(cmTarget::LinkInterface const* iface = target->GetLinkInterface(config))
{
this->SetImportLinkProperty(suffix, target,
+ "IMPORTED_LINK_INTERFACE_LANGUAGES",
+ iface->Languages, properties);
+ this->SetImportLinkProperty(suffix, target,
"IMPORTED_LINK_INTERFACE_LIBRARIES",
iface->Libraries, properties);
this->SetImportLinkProperty(suffix, target,
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 09540df..22ba81b 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -311,6 +311,30 @@ void cmTarget::DefineProperties(cmake *cm)
"for the named configuration.");
cm->DefineProperty
+ ("IMPORTED_LINK_INTERFACE_LANGUAGES", cmProperty::TARGET,
+ "Languages compiled into an IMPORTED static library.",
+ "Lists languages of soure files compiled to produce a STATIC IMPORTED "
+ "library (such as \"C\" or \"CXX\"). "
+ "CMake accounts for these languages when computing how to link a "
+ "target to the imported library. "
+ "For example, when a C executable links to an imported C++ static "
+ "library CMake chooses the C++ linker to satisfy language runtime "
+ "dependencies of the static library. "
+ "\n"
+ "This property is ignored for targets that are not STATIC libraries. "
+ "This property is ignored for non-imported targets.");
+
+ cm->DefineProperty
+ ("IMPORTED_LINK_INTERFACE_LANGUAGES_<CONFIG>", cmProperty::TARGET,
+ "Per-configuration version of IMPORTED_LINK_INTERFACE_LANGUAGES.",
+ "This property is used when loading settings for the <CONFIG> "
+ "configuration of an imported target. "
+ "Configuration names correspond to those provided by the project "
+ "from which the target is imported. "
+ "If set, this property completely overrides the generic property "
+ "for the named configuration.");
+
+ cm->DefineProperty
("IMPORTED_LOCATION", cmProperty::TARGET,
"Full path to the main file on disk for an IMPORTED target.",
"Specifies the location of an IMPORTED target file on disk. "
@@ -3791,6 +3815,24 @@ void cmTarget::ComputeImportInfo(std::string const& desired_config,
cmSystemTools::ExpandListArgument(libs, info.LinkInterface.SharedDeps);
}
}
+
+ // Get the link languages.
+ if(this->GetType() == cmTarget::STATIC_LIBRARY)
+ {
+ std::string linkProp = "IMPORTED_LINK_INTERFACE_LANGUAGES";
+ linkProp += suffix;
+ if(const char* config_libs = this->GetProperty(linkProp.c_str()))
+ {
+ cmSystemTools::ExpandListArgument(config_libs,
+ info.LinkInterface.Languages);
+ }
+ else if(const char* libs =
+ this->GetProperty("IMPORTED_LINK_INTERFACE_LANGUAGES"))
+ {
+ cmSystemTools::ExpandListArgument(libs,
+ info.LinkInterface.Languages);
+ }
+ }
}
//----------------------------------------------------------------------------