From c5b5bb270f54dab4ff529688a26ea8aa271fa0e1 Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 13 Sep 2017 09:29:15 -0400 Subject: VS: Do not consider MAP_IMPORTED_CONFIG_ on non-imported targets Since commit v3.9.0-rc1~309^2 (include_external_msproject: Honor MAP_IMPORTED_CONFIG_, 2017-04-04) we accidentally honor `MAP_IMPORTED_CONFIG_` while generating the `.sln` file entries for normal targets. This causes `devenv.com`-driven builds to use the mapping incorrectly for normal targets. Check that a target really comes from `include_external_msproject` before considering the map. Furthermore, when we do use the map, we should only take the first entry if more than one configuration is specified. Otherwise we end up giving VS a configuration name with a `;` in it. Fixes: #17276 --- Source/cmGlobalVisualStudio8Generator.cxx | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'Source/cmGlobalVisualStudio8Generator.cxx') diff --git a/Source/cmGlobalVisualStudio8Generator.cxx b/Source/cmGlobalVisualStudio8Generator.cxx index 7a42b72e88..f06a8a1c6a 100644 --- a/Source/cmGlobalVisualStudio8Generator.cxx +++ b/Source/cmGlobalVisualStudio8Generator.cxx @@ -354,10 +354,16 @@ void cmGlobalVisualStudio8Generator::WriteProjectConfigurations( std::string guid = this->GetGUID(name); for (std::vector::const_iterator i = configs.begin(); i != configs.end(); ++i) { - const char* dstConfig = target.GetProperty("MAP_IMPORTED_CONFIG_" + - cmSystemTools::UpperCase(*i)); - if (dstConfig == CM_NULLPTR) { - dstConfig = i->c_str(); + std::vector mapConfig; + const char* dstConfig = i->c_str(); + if (target.GetProperty("EXTERNAL_MSPROJECT")) { + if (const char* m = target.GetProperty("MAP_IMPORTED_CONFIG_" + + cmSystemTools::UpperCase(*i))) { + cmSystemTools::ExpandListArgument(m, mapConfig); + if (!mapConfig.empty()) { + dstConfig = mapConfig[0].c_str(); + } + } } fout << "\t\t{" << guid << "}." << *i << "|" << this->GetPlatformName() << ".ActiveCfg = " << dstConfig << "|" -- cgit v1.2.1