Explorar o código

BUG: fix xcode 15 (really bill Hoffman)

Andy Cedilnik %!s(int64=20) %!d(string=hai) anos
pai
achega
93ee345b41
Modificáronse 2 ficheiros con 41 adicións e 22 borrados
  1. 39 22
      Source/cmGlobalXCodeGenerator.cxx
  2. 2 0
      Source/cmGlobalXCodeGenerator.h

+ 39 - 22
Source/cmGlobalXCodeGenerator.cxx

@@ -1413,35 +1413,52 @@ void cmGlobalXCodeGenerator::AddDependTarget(cmXCodeObject* target,
     }
 }
 
+
+//----------------------------------------------------------------------------
+void cmGlobalXCodeGenerator::AppendOrAddBuildSetting(cmXCodeObject* settings,
+                                                     const char* attribute,
+                                                     const char* value)
+{
+  if(settings)
+    {
+    cmXCodeObject* attr = settings->GetObject(attribute);
+    if(!attr)
+      {
+      settings->AddAttribute(attribute, this->CreateString(value));
+      }
+    else
+      {
+      std::string oldValue = attr->GetString();
+      cmSystemTools::ReplaceString(oldValue, "\"", "");
+      oldValue += " ";
+      oldValue += value;
+      attr->SetString(oldValue.c_str());
+      }
+    }
+}
+
 //----------------------------------------------------------------------------
 void cmGlobalXCodeGenerator::AppendBuildSettingAttribute(cmXCodeObject* target,
                                                          const char* attribute,
                                                          const char* value)
 {
-  cmXCodeObject* configurationList = target->GetObject("buildConfigurationList")->GetObject();
-  cmXCodeObject* buildConfigs = configurationList->GetObject("buildConfigurations");
-  std::vector<cmXCodeObject*> list = buildConfigs->GetObjectList();
-  // each configuration and the target itself has a buildSettings in it 
-  list.push_back(target);
-  for(std::vector<cmXCodeObject*>::iterator i = list.begin(); i != list.end(); ++i)
+  if(m_XcodeVersion < 21)
     {
+    this->AppendOrAddBuildSetting(target->GetObject("buildSettings"),
+                                  attribute, value);
+    }
+  else
+    {
+    cmXCodeObject* configurationList = target->GetObject("buildConfigurationList")->GetObject();
+    cmXCodeObject* buildConfigs = configurationList->GetObject("buildConfigurations");
+    std::vector<cmXCodeObject*> list = buildConfigs->GetObjectList();
+    // each configuration and the target itself has a buildSettings in it 
+    list.push_back(target);
+    for(std::vector<cmXCodeObject*>::iterator i = list.begin(); i != list.end(); ++i)
+      {
       cmXCodeObject* settings = (*i)->GetObject("buildSettings");
-      if(settings)
-        {
-        cmXCodeObject* attr = settings->GetObject(attribute);
-        if(!attr)
-          {
-          settings->AddAttribute(attribute, this->CreateString(value));
-          }
-        else
-          {
-          std::string oldValue = attr->GetString();
-          cmSystemTools::ReplaceString(oldValue, "\"", "");
-          oldValue += " ";
-          oldValue += value;
-          attr->SetString(oldValue.c_str());
-          }
-        }
+      this->AppendOrAddBuildSetting(settings, attribute, value);
+      }
     }
 }
 

+ 2 - 0
Source/cmGlobalXCodeGenerator.h

@@ -100,6 +100,8 @@ private:
                                    cmXCodeObject* buildPhases);
   void AddConfigurations(cmXCodeObject* target,
                          cmTarget& cmtarget);
+  void AppendOrAddBuildSetting(cmXCodeObject* settings, const char* attr, 
+                               const char* value);
   void AppendBuildSettingAttribute(cmXCodeObject* target, const char* attr, 
                                    const char* value);
   cmXCodeObject* CreateUtilityTarget(cmTarget& target);