quassel and quasselclient targets now generate a bundle on Mac OS X
authorMarcus Eggenberger <egs@quassel-irc.org>
Sat, 14 Jun 2008 12:33:42 +0000 (14:33 +0200)
committerMarcus Eggenberger <egs@quassel-irc.org>
Sat, 14 Jun 2008 12:33:42 +0000 (14:33 +0200)
CMakeLists.txt
scripts/build/Info.plist [new file with mode: 0644]
scripts/build/macosx_makebundle.py [new file with mode: 0755]

index bfcfaf1..d9d8aa5 100644 (file)
@@ -158,6 +158,7 @@ if(BUILD_QTCLIENT)
                                ${RC_ICONS} ${RC_QUASSEL_ICONS} ${RC_I18N} ${WIN32_RC})
   set_target_properties(quasselclient PROPERTIES COMPILE_FLAGS "-DQT_GUI_LIB -DQT_NETWORK_LIB -DBUILD_QTUI")
   target_link_libraries(quasselclient mod_qtui mod_uisupport mod_client mod_common ${QUASSEL_QT_LIBRARIES})
+  add_custom_command(TARGET quasselclient POST_BUILD COMMAND ${CMAKE_SOURCE_DIR}/scripts/build/macosx_makebundle.py ${CMAKE_SOURCE_DIR} "Quassel Client" quasselclient)
 endif(BUILD_QTCLIENT)
 
 if(BUILD_MONO)
@@ -166,4 +167,7 @@ if(BUILD_MONO)
                          ${RC_ICONS} ${RC_QUASSEL_ICONS} ${RC_SQL} ${RC_I18N} ${WIN32_RC})
   set_target_properties(quassel PROPERTIES COMPILE_FLAGS "-DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_SCRIPT_LIB -DQT_SQL_LIB -DBUILD_MONO")
   target_link_libraries(quassel mod_qtui mod_uisupport mod_client mod_core mod_common ${QUASSEL_QT_LIBRARIES})
+  add_custom_command(TARGET quassel POST_BUILD COMMAND ${CMAKE_SOURCE_DIR}/scripts/build/macosx_makebundle.py ${CMAKE_SOURCE_DIR} "Quassel" quassel)
 endif(BUILD_MONO)
+
+
diff --git a/scripts/build/Info.plist b/scripts/build/Info.plist
new file mode 100644 (file)
index 0000000..fbc7ac1
--- /dev/null
@@ -0,0 +1,35 @@
+<?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>%(BUNDLE_NAME)s</string>
+  <key>CFBundleGetInfoString</key>
+  <string>Quassel IRC Client</string>
+  <key>CFBundleIconFile</key>
+  <string>%(ICON_FILE)s</string>
+  <key>CFBundleIdentifier</key>
+  <string>org.quassel-irc.client</string>
+  <key>CFBundleInfoDictionaryVersion</key>
+  <string>6.0</string>
+  <key>CFBundleName</key>
+  <string>Quassel IRC Client</string>
+  <key>CFBundlePackageType</key>
+  <string>APPL</string>
+  <key>CFBundleShortVersionString</key>
+  <string>%(BUNDLE_VERSION)s</string>
+  <key>CFBundleSignature</key>
+  <string>????</string>
+  <key>CFBundleVersion</key>
+  <string>%(BUNDLE_VERSION)s</string>
+  <!-- <key>CSResourcesFileMapped</key>
+       <true/> -->
+  <key>LSRequiresCarbon</key>
+  <true/>
+  <key>NSHumanReadableCopyright</key>
+  <string>© 2005-08, Quassel IRC Team</string>
+</dict>
+</plist>
diff --git a/scripts/build/macosx_makebundle.py b/scripts/build/macosx_makebundle.py
new file mode 100755 (executable)
index 0000000..821ce74
--- /dev/null
@@ -0,0 +1,56 @@
+#!/usr/bin/python
+# -*- coding: iso-8859-1 -*-
+
+# ==============================
+#  Imports
+# ==============================
+import os
+import sys
+
+# ==============================
+#  Constants
+# ==============================
+if len(sys.argv) < 2:
+    sys.exit(1)
+
+SOURCE_DIR = sys.argv[1]
+
+if len(sys.argv) < 4:
+    BUNDLE_NAME= "Quassel Client"
+    EXE_NAME = "quasselclient"
+else:
+    BUNDLE_NAME = sys.argv[2]
+    EXE_NAME = sys.argv[3]
+CONTENTS_DIR = BUNDLE_NAME + ".app/Contents/"
+
+BUNDLE_VERSION = "0.2.0-pre"
+ICON_FILE = "src/icons/quassel/quassel.icns"
+
+def createBundle():
+    try:
+        os.makedirs(CONTENTS_DIR + "MacOS")
+        os.makedirs(CONTENTS_DIR + "Resources")
+    except:
+        pass
+
+def copyFiles(exeFile, iconFile):
+    os.system("cp %s %sMacOs/%s" % (exeFile, CONTENTS_DIR.replace(' ', '\ '), BUNDLE_NAME.replace(' ', '\ ')))
+    os.system("cp %s/%s %s/Resources" % (SOURCE_DIR, iconFile, CONTENTS_DIR.replace(' ', '\ ')))
+
+def createPlist(bundleName, iconFile, bundleVersion):
+    templateFile = file(SOURCE_DIR + "/scripts/build/Info.plist", 'r')
+    template = templateFile.read()
+    templateFile.close()
+    print 
+
+    plistFile = file(CONTENTS_DIR + "Info.plist", 'w')
+    plistFile.write(template % {"BUNDLE_NAME" : bundleName,
+                                "ICON_FILE" : iconFile[iconFile.rfind("/")+1:],
+                                "BUNDLE_VERSION" : bundleVersion})
+    plistFile.close()
+
+if __name__ == "__main__":
+    createBundle()
+    createPlist(BUNDLE_NAME, ICON_FILE, BUNDLE_VERSION)
+    copyFiles(EXE_NAME, ICON_FILE)
+    pass