From 82ebbf683e201af7b9bb493a221804992abf5a4a Mon Sep 17 00:00:00 2001
From: Gregor Jasny <gjasny@googlemail.com>
Date: Sun, 12 Jun 2016 21:39:16 +0200
Subject: Xcode: Add function to conditionally add Xcode Attributes

---
 Source/cmXCodeObject.cxx | 16 ++++++++++++++++
 Source/cmXCodeObject.h   |  9 +++++++++
 2 files changed, 25 insertions(+)

diff --git a/Source/cmXCodeObject.cxx b/Source/cmXCodeObject.cxx
index 3d31343..fabf097 100644
--- a/Source/cmXCodeObject.cxx
+++ b/Source/cmXCodeObject.cxx
@@ -83,6 +83,22 @@ cmXCodeObject::cmXCodeObject(PBXType ptype, Type type)
   }
 }
 
+bool cmXCodeObject::IsEmpty() const
+{
+  switch (this->TypeValue) {
+    case OBJECT_LIST:
+      return this->List.empty();
+    case STRING:
+      return this->String.empty();
+    case ATTRIBUTE_GROUP:
+      return this->ObjectAttributes.empty();
+    case OBJECT_REF:
+    case OBJECT:
+      return this->Object == 0;
+  }
+  return true; // unreachable, but quiets warnings
+}
+
 void cmXCodeObject::Indent(int level, std::ostream& out)
 {
   while (level) {
diff --git a/Source/cmXCodeObject.h b/Source/cmXCodeObject.h
index 1502c27..ed917af 100644
--- a/Source/cmXCodeObject.h
+++ b/Source/cmXCodeObject.h
@@ -62,6 +62,8 @@ public:
   Type GetType() const { return this->TypeValue; }
   PBXType GetIsA() const { return this->IsA; }
 
+  bool IsEmpty() const;
+
   void SetString(const std::string& s);
   const std::string& GetString() const { return this->String; }
 
@@ -70,6 +72,13 @@ public:
     this->ObjectAttributes[name] = value;
   }
 
+  void AddAttributeIfNotEmpty(const std::string& name, cmXCodeObject* value)
+  {
+    if (value && !value->IsEmpty()) {
+      AddAttribute(name, value);
+    }
+  }
+
   void SetObject(cmXCodeObject* value) { this->Object = value; }
   cmXCodeObject* GetObject() { return this->Object; }
   void AddObject(cmXCodeObject* value) { this->List.push_back(value); }
-- 
cgit v0.12