From 7ecac703cec8bde71f8d11c1a8fa34bfa077edee Mon Sep 17 00:00:00 2001
From: Gregor Jasny <gjasny@googlemail.com>
Date: Sat, 3 Dec 2016 23:46:15 +0100
Subject: Xcode: Add target property to override productType

---
 Help/manual/cmake-properties.7.rst   | 1 +
 Help/prop_tgt/XCODE_PRODUCT_TYPE.rst | 6 ++++++
 Source/cmGlobalXCodeGenerator.cxx    | 4 ++++
 3 files changed, 11 insertions(+)
 create mode 100644 Help/prop_tgt/XCODE_PRODUCT_TYPE.rst

diff --git a/Help/manual/cmake-properties.7.rst b/Help/manual/cmake-properties.7.rst
index e55524c..292a85b 100644
--- a/Help/manual/cmake-properties.7.rst
+++ b/Help/manual/cmake-properties.7.rst
@@ -294,6 +294,7 @@ Properties on Targets
    /prop_tgt/WIN32_EXECUTABLE
    /prop_tgt/WINDOWS_EXPORT_ALL_SYMBOLS
    /prop_tgt/XCODE_ATTRIBUTE_an-attribute
+   /prop_tgt/XCODE_PRODUCT_TYPE
    /prop_tgt/XCTEST
 
 .. _`Test Properties`:
diff --git a/Help/prop_tgt/XCODE_PRODUCT_TYPE.rst b/Help/prop_tgt/XCODE_PRODUCT_TYPE.rst
new file mode 100644
index 0000000..1fbf001
--- /dev/null
+++ b/Help/prop_tgt/XCODE_PRODUCT_TYPE.rst
@@ -0,0 +1,6 @@
+XCODE_PRODUCT_TYPE
+------------------
+
+Set the Xcode ``productType`` attribute on its reference to a
+target.  CMake computes a default based on target type but
+can be told explicitly with this property.
diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx
index 50197c9..82ca7a8 100644
--- a/Source/cmGlobalXCodeGenerator.cxx
+++ b/Source/cmGlobalXCodeGenerator.cxx
@@ -2340,6 +2340,10 @@ const char* cmGlobalXCodeGenerator::GetTargetFileType(
 const char* cmGlobalXCodeGenerator::GetTargetProductType(
   cmGeneratorTarget* target)
 {
+  if (const char* e = target->GetProperty("XCODE_PRODUCT_TYPE")) {
+    return e;
+  }
+
   switch (target->GetType()) {
     case cmStateEnums::OBJECT_LIBRARY:
     case cmStateEnums::STATIC_LIBRARY:
-- 
cgit v0.12


From 0ae4632119ba5300995ec5ddd5513a44bfd2a198 Mon Sep 17 00:00:00 2001
From: Gregor Jasny <gjasny@googlemail.com>
Date: Sat, 3 Dec 2016 23:45:55 +0100
Subject: Xcode: Add target property to override explicitFileType

---
 Help/manual/cmake-properties.7.rst         | 1 +
 Help/prop_tgt/XCODE_EXPLICIT_FILE_TYPE.rst | 8 ++++++++
 Help/prop_tgt/XCODE_PRODUCT_TYPE.rst       | 2 ++
 Source/cmGlobalXCodeGenerator.cxx          | 4 ++++
 4 files changed, 15 insertions(+)
 create mode 100644 Help/prop_tgt/XCODE_EXPLICIT_FILE_TYPE.rst

diff --git a/Help/manual/cmake-properties.7.rst b/Help/manual/cmake-properties.7.rst
index 292a85b..70bd279 100644
--- a/Help/manual/cmake-properties.7.rst
+++ b/Help/manual/cmake-properties.7.rst
@@ -294,6 +294,7 @@ Properties on Targets
    /prop_tgt/WIN32_EXECUTABLE
    /prop_tgt/WINDOWS_EXPORT_ALL_SYMBOLS
    /prop_tgt/XCODE_ATTRIBUTE_an-attribute
+   /prop_tgt/XCODE_EXPLICIT_FILE_TYPE
    /prop_tgt/XCODE_PRODUCT_TYPE
    /prop_tgt/XCTEST
 
diff --git a/Help/prop_tgt/XCODE_EXPLICIT_FILE_TYPE.rst b/Help/prop_tgt/XCODE_EXPLICIT_FILE_TYPE.rst
new file mode 100644
index 0000000..dc92902
--- /dev/null
+++ b/Help/prop_tgt/XCODE_EXPLICIT_FILE_TYPE.rst
@@ -0,0 +1,8 @@
+XCODE_EXPLICIT_FILE_TYPE
+------------------------
+
+Set the Xcode ``explicitFileType`` attribute on its reference to a
+target.  CMake computes a default based on target type but
+can be told explicitly with this property.
+
+See also :prop_tgt:`XCODE_PRODUCT_TYPE`.
diff --git a/Help/prop_tgt/XCODE_PRODUCT_TYPE.rst b/Help/prop_tgt/XCODE_PRODUCT_TYPE.rst
index 1fbf001..f4ef5c0 100644
--- a/Help/prop_tgt/XCODE_PRODUCT_TYPE.rst
+++ b/Help/prop_tgt/XCODE_PRODUCT_TYPE.rst
@@ -4,3 +4,5 @@ XCODE_PRODUCT_TYPE
 Set the Xcode ``productType`` attribute on its reference to a
 target.  CMake computes a default based on target type but
 can be told explicitly with this property.
+
+See also :prop_tgt:`XCODE_EXPLICIT_FILE_TYPE`.
diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx
index 82ca7a8..736aa91 100644
--- a/Source/cmGlobalXCodeGenerator.cxx
+++ b/Source/cmGlobalXCodeGenerator.cxx
@@ -2313,6 +2313,10 @@ const char* cmGlobalXCodeGenerator::GetTargetLinkFlagsVar(
 const char* cmGlobalXCodeGenerator::GetTargetFileType(
   cmGeneratorTarget* target)
 {
+  if (const char* e = target->GetProperty("XCODE_EXPLICIT_FILE_TYPE")) {
+    return e;
+  }
+
   switch (target->GetType()) {
     case cmStateEnums::OBJECT_LIBRARY:
     case cmStateEnums::STATIC_LIBRARY:
-- 
cgit v0.12


From 9ac0c3936e612ec4780ea96d298095e2ad907fef Mon Sep 17 00:00:00 2001
From: Brad King <brad.king@kitware.com>
Date: Mon, 12 Dec 2016 14:18:12 -0500
Subject: Help: Add notes for topic 'xcode-message-extension'

---
 Help/release/dev/xcode-message-extension.rst | 7 +++++++
 1 file changed, 7 insertions(+)
 create mode 100644 Help/release/dev/xcode-message-extension.rst

diff --git a/Help/release/dev/xcode-message-extension.rst b/Help/release/dev/xcode-message-extension.rst
new file mode 100644
index 0000000..11c0702
--- /dev/null
+++ b/Help/release/dev/xcode-message-extension.rst
@@ -0,0 +1,7 @@
+xcode-message-extension
+-----------------------
+
+* New :prop_tgt:`XCODE_PRODUCT_TYPE` and :prop_tgt:`XCODE_EXPLICIT_FILE_TYPE`
+  target properties were created to tell the :generator:`Xcode` generator
+  to use custom values of the corresponding attributes for a target in the
+  generated Xcode project.
-- 
cgit v0.12