From f888a0efafafeb20753fa250deb2675bb627c595 Mon Sep 17 00:00:00 2001 From: Brad King Date: Sat, 11 Jul 2009 10:12:05 -0400 Subject: 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_ property specify the information for imported targets. The export() and install(EXPORT) commands automatically set the properties. --- Source/cmExportFileGenerator.cxx | 3 +++ Source/cmTarget.cxx | 42 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) 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_", cmProperty::TARGET, + "Per-configuration version of IMPORTED_LINK_INTERFACE_LANGUAGES.", + "This property is used when loading settings for the " + "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); + } + } } //---------------------------------------------------------------------------- -- cgit v0.12