diff options
author | Brad King <brad.king@kitware.com> | 2009-07-11 14:12:05 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2009-07-11 14:12:05 (GMT) |
commit | f888a0efafafeb20753fa250deb2675bb627c595 (patch) | |
tree | 998743f0187669e17cdd098f709eba79e0862fe4 | |
parent | 3621e073a88433af4408a8d7d58974b4e8254b54 (diff) | |
download | CMake-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.cxx | 3 | ||||
-rw-r--r-- | Source/cmTarget.cxx | 42 |
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); + } + } } //---------------------------------------------------------------------------- |