summaryrefslogtreecommitdiffstats
path: root/Source/cmGlobalXCodeGenerator.cxx
diff options
context:
space:
mode:
authorGregor Jasny <gjasny@googlemail.com>2016-01-02 16:57:06 (GMT)
committerGregor Jasny <gjasny@googlemail.com>2016-01-03 10:46:27 (GMT)
commit28db2268e8e36521626071a39596b9aaa87defbb (patch)
tree88c610c03e52d9eabddf2d01314163a7b61cbe9f /Source/cmGlobalXCodeGenerator.cxx
parent506504d44049b91fe51539a1b7a29cdc65234b7f (diff)
downloadCMake-28db2268e8e36521626071a39596b9aaa87defbb.zip
CMake-28db2268e8e36521626071a39596b9aaa87defbb.tar.gz
CMake-28db2268e8e36521626071a39596b9aaa87defbb.tar.bz2
Xcode: Factor out XCODE_ATTRIBUTE_ variant filter (#14947)
Move the variant=<config> filter out to a helper function so that it can be re-used later for CMAKE_XCODE_ATTRIBUTE_*.
Diffstat (limited to 'Source/cmGlobalXCodeGenerator.cxx')
-rw-r--r--Source/cmGlobalXCodeGenerator.cxx68
1 files changed, 41 insertions, 27 deletions
diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx
index 475efa8..c9d2742 100644
--- a/Source/cmGlobalXCodeGenerator.cxx
+++ b/Source/cmGlobalXCodeGenerator.cxx
@@ -1656,6 +1656,46 @@ std::string cmGlobalXCodeGenerator::ExtractFlagRegex(const char* exp,
return retFlag;
}
+ //----------------------------------------------------------------------------
+// This function strips off Xcode attributes that do not target the current
+// configuration
+void
+cmGlobalXCodeGenerator
+::FilterConfigurationAttribute(std::string const& configName,
+ std::string& attribute)
+{
+ // Handle [variant=<config>] condition explicitly here.
+ std::string::size_type beginVariant = attribute.find("[variant=");
+ if (beginVariant == std::string::npos)
+ {
+ // There is no variant in this attribute.
+ return;
+ }
+
+ std::string::size_type endVariant = attribute.find("]", beginVariant+9);
+ if (endVariant == std::string::npos)
+ {
+ // There is no terminating bracket.
+ return;
+ }
+
+ // Compare the variant to the configuration.
+ std::string variant =
+ attribute.substr(beginVariant+9, endVariant-beginVariant-9);
+ if (variant == configName)
+ {
+ // The variant matches the configuration so use this
+ // attribute but drop the [variant=<config>] condition.
+ attribute.erase(beginVariant, endVariant-beginVariant+1);
+ }
+ else
+ {
+ // The variant does not match the configuration so
+ // do not use this attribute.
+ attribute.clear();
+ }
+}
+
//----------------------------------------------------------------------------
void
cmGlobalXCodeGenerator::AddCommandsToBuildPhase(cmXCodeObject* buildphase,
@@ -2498,33 +2538,7 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmGeneratorTarget* gtgt,
if(i->find("XCODE_ATTRIBUTE_") == 0)
{
std::string attribute = i->substr(16);
- // Handle [variant=<config>] condition explicitly here.
- std::string::size_type beginVariant =
- attribute.find("[variant=");
- if (beginVariant != std::string::npos)
- {
- std::string::size_type endVariant =
- attribute.find("]", beginVariant+9);
- if (endVariant != std::string::npos)
- {
- // Compare the variant to the configuration.
- std::string variant =
- attribute.substr(beginVariant+9, endVariant-beginVariant-9);
- if (variant == configName)
- {
- // The variant matches the configuration so use this
- // attribute but drop the [variant=<config>] condition.
- attribute.erase(beginVariant, endVariant-beginVariant+1);
- }
- else
- {
- // The variant does not match the configuration so
- // do not use this attribute.
- attribute.clear();
- }
- }
- }
-
+ this->FilterConfigurationAttribute(configName, attribute);
if (!attribute.empty())
{
cmGeneratorExpression ge;