From c6b9982c5a0288082624997228af0cbdf13a1aac Mon Sep 17 00:00:00 2001
From: Thomas Herault <herault@icl.utk.edu>
Date: Tue, 22 Nov 2011 01:42:36 +0000
Subject: [PATCH] Allow to create a Mac OS X bundle:   - add a template
 info.plist   - add the CMakeLists magic   - add a fix on main.cpp: Finder
 passes an argument (-psn_%d_%d) to any bundled app, that Cocoa is supposed to
 remove, and Qt apparently does not remove. Remove it by hand until someone
 figures how to make Drag & Drop work with Mac OS X.

---
 src/CMakeLists.txt     | 21 +++++++++++++++--
 src/main.cpp           | 15 +++++++++++++
 src/vite-info.plist.in | 51 ++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 85 insertions(+), 2 deletions(-)
 create mode 100644 src/vite-info.plist.in

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index bd982b74..940615c0 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -380,13 +380,30 @@ INCLUDE_DIRECTORIES(
   ${QTCOLORPICKERDIR}
 )
 #ADD_LIBRARY(vite2 SHARED ${VITE_SRCS} ${VITE_MOC} ${VITE_RCC_SRCS})
-ADD_EXECUTABLE(vite ${VITE_SRCS} ${VITE_MOC} ${VITE_RCC_SRCS})
+
+if( APPLE )
+  SET( OSX_ICON_FILES "interface/icon/mac_logo.icns")
+  set_source_files_properties(${OSX_ICON_FILES} PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
+  ADD_EXECUTABLE(vite MACOSX_BUNDLE ${VITE_SRCS} ${VITE_MOC} ${VITE_RCC_SRCS} ${OSX_ICON_FILES})
+  SET_TARGET_PROPERTIES(vite PROPERTIES 
+         MACOSX_BUNDLE_INFO_STRING "ViTE"
+         MACOSX_BUNDLE_ICON_FILE "mac_logo.icns"
+         MACOSX_BUNDLE_LONG_VERSION_STRING "Visual Trace Explorer - version ${VITE_VERSION_MAJOR}.${VITE_VERSION_MINOR}"
+         MACOSX_BUNDLE_BUNDLE_NAME "Vite-MacOSX"
+         MACOSX_BUNDLE_SHORT_VERSION_STRING "ViTE-${VITE_VERSION_MAJOR}.${VITE_VERSION_MINOR}"
+         MACOSX_BUNDLE_BUNDLE_VERSION "1.0"
+         MACOSX_BUNDLE_COPYRIGHT "INRIA 2006-2012"
+       	 MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/vite-info.plist.in)
+else( APPLE )
+  ADD_EXECUTABLE(vite ${VITE_SRCS} ${VITE_MOC} ${VITE_RCC_SRCS})
+endif( APPLE )
+
 TARGET_LINK_LIBRARIES(vite
   ${QT_LIBRARIES}
   ${GLU_LIBRARY}
   ${Boost_LIBRARIES}
   )
-  
+
 IF(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
   TARGET_LINK_LIBRARIES(vite
   rt
diff --git a/src/main.cpp b/src/main.cpp
index 357a7e4a..797f4843 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -92,6 +92,21 @@ int main(int argc, char **argv) {
     
     Q_INIT_RESOURCE(vite);
 
+    {
+        /* Mac OS X Application bundle:
+         *  Remove the -psn_0_%d argument that Mac OS X passes to
+         *  all bundled applications
+         */
+        int i, k;
+        for(i = 0; i <= argc; i++) {
+            if( strncmp(argv[i], "-psn", 4) == 0 ) {
+                for(k = i+1; k <= argc; k++)
+                    argv[k-1] = argv[k];
+                argc--;
+            }
+        }
+    }
+
     Info::Render::_key_alt = false;/* no CTRL key pushed */
 
 #ifdef VITE_DBG_MEMORY_TRACE      
diff --git a/src/vite-info.plist.in b/src/vite-info.plist.in
new file mode 100644
index 00000000..fa4dc9b1
--- /dev/null
+++ b/src/vite-info.plist.in
@@ -0,0 +1,51 @@
+<?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>CFBundleGetInfoString</key>
+	<string>${MACOSX_BUNDLE_INFO_STRING}</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>CFBundleLongVersionString</key>
+	<string>${MACOSX_BUNDLE_LONG_VERSION_STRING}</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>LSRequiresCarbon</key>
+	<true/>
+	<key>NSHumanReadableCopyright</key>
+	<string>${MACOSX_BUNDLE_COPYRIGHT}</string>
+	<key>CFBundleDocumentTypes</key>
+	<array>
+		<dict>
+			<key>CFBundleTypeExtensions</key>
+			<array>
+				<string>*.trace</string>
+			</array>
+			<key>CFBundleTypeIconFile</key>
+			<string>${MACOSX_BUNDLE_ICON_FILE}</string>
+			<key>CFBundleTypeName</key>
+			<string>Paje Trace File</string>
+			<key>CFBundleTypeRole</key>
+			<string>Viewer</string>
+		</dict>
+	</array>
+</dict>
+</plist>
-- 
GitLab