cmake: Determine minimum deployment target for Qt
[quassel.git] / scripts / build / macosx_makebundle.py
index 821ce74..85742a0 100755 (executable)
@@ -1,11 +1,25 @@
 #!/usr/bin/python
 # -*- coding: iso-8859-1 -*-
 
+################################################################################
+#                                                                              #
+# 2008 June 27th by Marcus 'EgS' Eggenberger <egs@quassel-irc.org>             #
+#                                                                              #
+# The author disclaims copyright to this source code.                          #
+# This Python Script is in the PUBLIC DOMAIN.                                  #
+#                                                                              #
+################################################################################
+
 # ==============================
 #  Imports
 # ==============================
 import os
+import os.path
 import sys
+import commands
+
+# Handling Qt properties
+import macosx_qt
 
 # ==============================
 #  Constants
@@ -16,15 +30,20 @@ if len(sys.argv) < 2:
 SOURCE_DIR = sys.argv[1]
 
 if len(sys.argv) < 4:
-    BUNDLE_NAME= "Quassel Client"
+    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_NAME = sys.argv[2]
+
+# make the dir of the exe the target dir
+if(os.path.dirname(EXE_NAME)):
+    CONTENTS_DIR = os.path.dirname(EXE_NAME) + "/"
+CONTENTS_DIR += BUNDLE_NAME + ".app/Contents/"
+
+BUNDLE_VERSION = commands.getoutput("git --git-dir=" + SOURCE_DIR + "/.git/ describe")
+ICONSET_FOLDER = "pics/iconset/"
 
-BUNDLE_VERSION = "0.2.0-pre"
-ICON_FILE = "src/icons/quassel/quassel.icns"
 
 def createBundle():
     try:
@@ -33,24 +52,39 @@ def createBundle():
     except:
         pass
 
-def copyFiles(exeFile, iconFile):
+
+def copyFiles(exeFile, iconset):
     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(' ', '\ ')))
+    os.system("cp -r %s/%s %s/Resources/quassel.iconset/" % (SOURCE_DIR, iconset, CONTENTS_DIR.replace(' ', '\ ')))
+
 
-def createPlist(bundleName, iconFile, bundleVersion):
+def createPlist(bundleName, bundleVersion):
     templateFile = file(SOURCE_DIR + "/scripts/build/Info.plist", 'r')
     template = templateFile.read()
     templateFile.close()
-    print 
+
+    # Get the minimum macOS deployment version
+    QT_MACOSX_DEPLOYMENT_TARGET = macosx_qt.qtMakespec('QMAKE_MACOSX_DEPLOYMENT_TARGET')
+    # Keep in sync with QMAKE_MACOSX_DEPLOYMENT_TARGET
+    # See https://doc.qt.io/qt-5/macos.html
+    if QT_MACOSX_DEPLOYMENT_TARGET is None:
+        # Something went wrong
+        sys.exit("Could not determine 'QMAKE_MACOSX_DEPLOYMENT_TARGET', check build scripts")
+    print("Qt macOS deployment target (minimum version): %s" % QT_MACOSX_DEPLOYMENT_TARGET)
 
     plistFile = file(CONTENTS_DIR + "Info.plist", 'w')
-    plistFile.write(template % {"BUNDLE_NAME" : bundleName,
-                                "ICON_FILE" : iconFile[iconFile.rfind("/")+1:],
-                                "BUNDLE_VERSION" : bundleVersion})
+    plistFile.write(template % {"BUNDLE_NAME": bundleName,
+                                "ICON_FILE": "quassel.icns",
+                                "BUNDLE_VERSION": bundleVersion,
+                                "QT_MACOSX_DEPLOYMENT_TARGET": QT_MACOSX_DEPLOYMENT_TARGET})
     plistFile.close()
 
+def convertIconset():
+    os.system("iconutil -c icns %s/Resources/quassel.iconset" % CONTENTS_DIR.replace(' ', '\ '))
+    os.system("rm -R %s/Resources/quassel.iconset" % CONTENTS_DIR.replace(' ', '\ '))
+
 if __name__ == "__main__":
     createBundle()
-    createPlist(BUNDLE_NAME, ICON_FILE, BUNDLE_VERSION)
-    copyFiles(EXE_NAME, ICON_FILE)
-    pass
+    createPlist(BUNDLE_NAME, BUNDLE_VERSION)
+    copyFiles(EXE_NAME, ICONSET_FOLDER)
+    convertIconset()