From dcf1b645691a1d31cbbad78a9c6c9dca8d472346 Mon Sep 17 00:00:00 2001
From: Brad King <brad.king@kitware.com>
Date: Tue, 8 Oct 2013 12:32:28 -0400
Subject: [PATCH] OS X: Set CMake.app bundle Info.plist fields (#11694)

Use the Apple Info.plist reference documentation:

 Core Foundation Keys
 https://developer.apple.com/library/mac/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html

 Launch Services Keys
 https://developer.apple.com/library/mac/documentation/general/Reference/InfoPlistKeyReference/Articles/LaunchServicesKeys.html

 Cocoa Keys
 https://developer.apple.com/library/mac/documentation/general/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html

modify the Info.plist we create for cmake-gui to add/set fields

 CFBundleShortVersionString = The release-version-number string
 LSApplicationCategoryType  = UTI that categorizes the app for the App Store
 NSHumanReadableCopyright   = Specifies the copyright notice

and drop fields

 CFBundleGetInfoString
 CFBundleLongVersionString
 LSRequiresCarbon

Also prepare to set

 CFBundleVersion            = The build-version-number string

but leave it commented out as TBD (To Be Determined) for now.

The version fields must have form <major>.<minor>.<patch> with integer
components.  While at it, rename the bundle to end in ".<patch>" instead
of "-<patch>" so that it is consistent with the version number and does
not look like a packaging increment suffix.
---
 CMakeLists.txt                 |  5 +++--
 Source/QtDialog/CMakeLists.txt |  7 ++++++-
 Source/QtDialog/Info.plist.in  | 32 ++++++++++++++++++++++++++++++++
 3 files changed, 41 insertions(+), 3 deletions(-)
 create mode 100644 Source/QtDialog/Info.plist.in

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1fbbe08a11..3ff65d8a53 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -529,8 +529,9 @@ endif()
 
 if(BUILD_QtDialog)
   if(APPLE)
-    set(CMAKE_BUNDLE_NAME
-      "CMake ${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}-${CMake_VERSION_PATCH}")
+    set(CMAKE_BUNDLE_VERSION
+      "${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}.${CMake_VERSION_PATCH}")
+    set(CMAKE_BUNDLE_NAME "CMake ${CMAKE_BUNDLE_VERSION}")
     set(CMAKE_BUNDLE_LOCATION "${CMAKE_INSTALL_PREFIX}")
     # make sure CMAKE_INSTALL_PREFIX ends in /
     string(LENGTH "${CMAKE_INSTALL_PREFIX}" LEN)
diff --git a/Source/QtDialog/CMakeLists.txt b/Source/QtDialog/CMakeLists.txt
index ef252944e6..15f9ef1fd9 100644
--- a/Source/QtDialog/CMakeLists.txt
+++ b/Source/QtDialog/CMakeLists.txt
@@ -112,7 +112,12 @@ endif()
 
 if(APPLE)
   set_target_properties(cmake-gui PROPERTIES
-    OUTPUT_NAME ${CMAKE_BUNDLE_NAME})
+    OUTPUT_NAME ${CMAKE_BUNDLE_NAME}
+    MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Info.plist.in"
+    MACOSX_BUNDLE_SHORT_VERSION_STRING "${CMAKE_BUNDLE_VERSION}"
+    # TBD: MACOSX_BUNDLE_BUNDLE_VERSION "${CMAKE_BUNDLE_VERSION}"
+    MACOSX_BUNDLE_COPYRIGHT "Copyright 2000-2013 Kitware, Inc."
+    )
 endif()
 set(CMAKE_INSTALL_DESTINATION_ARGS
   BUNDLE DESTINATION "${CMAKE_BUNDLE_LOCATION}")
diff --git a/Source/QtDialog/Info.plist.in b/Source/QtDialog/Info.plist.in
new file mode 100644
index 0000000000..b9c4af5838
--- /dev/null
+++ b/Source/QtDialog/Info.plist.in
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>English</string>
+	<key>CFBundleExecutable</key>
+	<string>${MACOSX_BUNDLE_EXECUTABLE_NAME}</string>
+	<key>CFBundleIconFile</key>
+	<string>${MACOSX_BUNDLE_ICON_FILE}</string>
+	<key>CFBundleIdentifier</key>
+	<string>${MACOSX_BUNDLE_GUI_IDENTIFIER}</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleName</key>
+	<string>${MACOSX_BUNDLE_BUNDLE_NAME}</string>
+	<key>CFBundlePackageType</key>
+	<string>APPL</string>
+	<key>CFBundleShortVersionString</key>
+	<string>${MACOSX_BUNDLE_SHORT_VERSION_STRING}</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>CFBundleVersion</key>
+	<string>${MACOSX_BUNDLE_BUNDLE_VERSION}</string>
+	<key>CSResourcesFileMapped</key>
+	<true/>
+	<key>LSApplicationCategoryType</key>
+	<string>public.app-category.developer-tools</string>
+	<key>NSHumanReadableCopyright</key>
+	<string>${MACOSX_BUNDLE_COPYRIGHT}</string>
+</dict>
+</plist>