From 6eaa1b36fcf5a3b28c2440a3cf8ab4780f1afef9 Mon Sep 17 00:00:00 2001 From: p2k Date: Wed, 2 Nov 2011 14:58:50 +0100 Subject: [PATCH] Mac Deployment Script See notes.txt in contrib/macdeploy. Also added a dash to the application name in src/qt/bitcoin.cpp --- contrib/macdeploy/background.png | Bin 0 -> 12073 bytes contrib/macdeploy/background.psd | Bin 0 -> 163518 bytes contrib/macdeploy/fancy.plist | 32 +++ contrib/macdeploy/macdeployqtplus | 341 ++++++++++++++++++++++++++++++ contrib/macdeploy/notes.txt | 26 +++ src/qt/bitcoin.cpp | 2 +- 6 files changed, 400 insertions(+), 1 deletion(-) create mode 100644 contrib/macdeploy/background.png create mode 100644 contrib/macdeploy/background.psd create mode 100644 contrib/macdeploy/fancy.plist create mode 100755 contrib/macdeploy/macdeployqtplus create mode 100644 contrib/macdeploy/notes.txt diff --git a/contrib/macdeploy/background.png b/contrib/macdeploy/background.png new file mode 100644 index 0000000000000000000000000000000000000000..fce12e380793b5ba9e893d7e1ed4ac75e69fd02d GIT binary patch literal 12073 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 g?`IaTgcUD+l_|TP+hyhZbLIPU<@ + + + + window_bounds + + 300 + 300 + 800 + 620 + + background_picture + background.png + icon_size + 96 + applications_symlink + + items_position + + Applications + + 370 + 156 + + Bitcoin-Qt.app + + 128 + 156 + + + + diff --git a/contrib/macdeploy/macdeployqtplus b/contrib/macdeploy/macdeployqtplus new file mode 100755 index 000000000..a43e7102a --- /dev/null +++ b/contrib/macdeploy/macdeployqtplus @@ -0,0 +1,341 @@ +#!/usr/bin/env python + +# +# Copyright (C) 2011 Patrick "p2k" Schneider +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +import subprocess, sys, re, os, shutil, os.path +from time import sleep +from argparse import ArgumentParser + +qt_conf="""[Paths] +translations=Resources +plugins=PlugIns +""" + +ap = ArgumentParser(description="""Front-end to macdeployqt with some additional functions. + +Outputs a ready-to-deploy app in a folder "dist" and optionally wraps it in a .dmg file. +Note, that the "dist" folder will be deleted before deploying on each run. + +Optionally, Qt translation files (.qm) and additional resources can be added to the bundle.""") + +ap.add_argument("app_bundle", nargs=1, metavar="app-bundle", help="application bundle to be deployed") +ap.add_argument("-verbose", type=int, nargs=1, default=[1], metavar="<0-3>", help="0 = no output, 1 = error/warning (default), 2 = normal, 3 = debug") +ap.add_argument("-no-plugins", dest="plugins", action="store_false", default=True, help="skip plugin deployment") +ap.add_argument("-no-strip", dest="strip", action="store_false", default=True, help="don't run 'strip' on the binaries") +ap.add_argument("-dmg", nargs="?", const="", metavar="basename", help="create a .dmg disk image; if basename is not specified, a camel-cased version of the app name is used") +ap.add_argument("-fancy", nargs=1, metavar="plist", default=[], help="make a fancy looking disk image using the given plist file with instructions; requires -dmg to work") +ap.add_argument("-add-qt-tr", nargs=1, metavar="languages", default=[], help="add Qt translation files to the bundle's ressources; the language list must be separated with commas, not with whitespace") +ap.add_argument("-add-resources", nargs="+", metavar="path", default=[], help="list of additional files or folders to be copied into the bundle's resources; must be the last argument") + +config = ap.parse_args() + +verbose = config.verbose[0] + +# ------------------------------------------------ + +app_bundle = config.app_bundle[0] + +if not os.path.exists(app_bundle): + if verbose >= 1: + sys.stderr.write("Error: Could not find app bundle \"%s\"\n" % (app_bundle)) + sys.exit(1) + +app_bundle_name = os.path.splitext(os.path.basename(app_bundle))[0] + +# ------------------------------------------------ + +for p in config.add_resources: + if verbose >= 3: + print "Checking for \"%s\"..." % p + if not os.path.exists(p): + if verbose >= 1: + sys.stderr.write("Error: Could not find additional resource file \"%s\"\n" % (p)) + sys.exit(1) + +# ------------------------------------------------ + +if len(config.add_qt_tr) == 0: + add_qt_tr = [] +else: + qt_tr_dir = os.path.join(os.getenv("QTDIR", ""), "translations") + add_qt_tr = ["qt_%s.qm" % lng for lng in config.add_qt_tr[0].split(",")] + for lng_file in add_qt_tr: + p = os.path.join(qt_tr_dir, lng_file) + if verbose >= 3: + print "Checking for \"%s\"..." % p + if not os.path.exists(p): + if verbose >= 1: + sys.stderr.write("Error: Could not find Qt translation file \"%s\"\n" % (lng_file)) + sys.exit(1) + +# ------------------------------------------------ + +if len(config.fancy) == 1: + if verbose >= 3: + print "Fancy: Importing plistlib..." + try: + import plistlib + except ImportError: + if verbose >= 1: + sys.stderr.write("Error: Could not import plistlib which is required for fancy disk images.\n") + sys.exit(1) + + if verbose >= 3: + print "Fancy: Importing appscript..." + try: + import appscript + except ImportError: + if verbose >= 1: + sys.stderr.write("Error: Could not import appscript which is required for fancy disk images.\n") + sys.stderr.write("Please install it e.g. with \"sudo easy_install appscript\".\n") + sys.exit(1) + + p = config.fancy[0] + if verbose >= 3: + print "Fancy: Loading \"%s\"..." % p + if not os.path.exists(p): + if verbose >= 1: + sys.stderr.write("Error: Could not find fancy disk image plist at \"%s\"\n" % (p)) + sys.exit(1) + + try: + fancy = plistlib.readPlist(p) + except: + if verbose >= 1: + sys.stderr.write("Error: Could not parse fancy disk image plist at \"%s\"\n" % (p)) + sys.exit(1) + + try: + assert not fancy.has_key("window_bounds") or (isinstance(fancy["window_bounds"], list) and len(fancy["window_bounds"]) == 4) + assert not fancy.has_key("background_picture") or isinstance(fancy["background_picture"], str) + assert not fancy.has_key("icon_size") or isinstance(fancy["icon_size"], int) + assert not fancy.has_key("applications_symlink") or isinstance(fancy["applications_symlink"], bool) + if fancy.has_key("items_position"): + assert isinstance(fancy["items_position"], dict) + for key, value in fancy["items_position"].iteritems(): + assert isinstance(value, list) and len(value) == 2 and isinstance(value[0], int) and isinstance(value[1], int) + except: + if verbose >= 1: + sys.stderr.write("Error: Bad format of fancy disk image plist at \"%s\"\n" % (p)) + sys.exit(1) + + if fancy.has_key("background_picture"): + bp = fancy["background_picture"] + if verbose >= 3: + print "Fancy: Resolving background picture \"%s\"..." % bp + if not os.path.exists(bp): + bp = os.path.join(os.path.dirname(p), bp) + if not os.path.exists(bp): + if verbose >= 1: + sys.stderr.write("Error: Could not find background picture at \"%s\" or \"%s\"\n" % (fancy["background_picture"], bp)) + sys.exit(1) + else: + fancy["background_picture"] = bp +else: + fancy = None + +# ------------------------------------------------ + +if os.path.exists("dist"): + if verbose >= 2: + print "+ Removing old dist folder +" + + shutil.rmtree("dist") + +# ------------------------------------------------ + +target = os.path.join("dist", app_bundle) +target_res = os.path.join(target, "Contents", "Resources") + +if verbose >= 2: + print "+ Copying source bundle +" +if verbose >= 3: + print app_bundle, "->", target + +os.mkdir("dist") +shutil.copytree(app_bundle, target) + +# ------------------------------------------------ + +macdeployqt_args = ["macdeployqt", target, "-verbose=%d" % verbose] +if not config.plugins: + macdeployqt_args.append("-no-plugins") +if not config.strip: + macdeployqt_args.append("-no-strip") + +if verbose >= 2: + print "+ Running macdeployqt +" + +ret = subprocess.call(macdeployqt_args) +if ret != 0: + sys.exit(ret) + +# ------------------------------------------------ + +if verbose >= 2: + print "+ Installing qt.conf +" + +f = open(os.path.join(target_res, "qt.conf"), "wb") +f.write(qt_conf) +f.close() + +# ------------------------------------------------ + +if len(add_qt_tr) > 0 and verbose >= 2: + print "+ Adding Qt translations +" + +for lng_file in add_qt_tr: + if verbose >= 3: + print os.path.join(qt_tr_dir, lng_file), "->", os.path.join(target_res, lng_file) + shutil.copy2(os.path.join(qt_tr_dir, lng_file), os.path.join(target_res, lng_file)) + +# ------------------------------------------------ + +if len(config.add_resources) > 0 and verbose >= 2: + print "+ Adding additional resources +" + +for p in config.add_resources: + t = os.path.join(target_res, os.path.basename(p)) + if verbose >= 3: + print p, "->", t + if os.path.isdir(p): + shutil.copytree(p, t) + else: + shutil.copy2(p, t) + +# ------------------------------------------------ + +if config.dmg is not None: + def runHDIUtil(verb, image_basename, **kwargs): + hdiutil_args = ["hdiutil", verb, image_basename + ".dmg"] + if kwargs.has_key("capture_stdout"): + del kwargs["capture_stdout"] + run = subprocess.check_output + else: + if verbose < 2: + hdiutil_args.append("-quiet") + elif verbose >= 3: + hdiutil_args.append("-verbose") + run = subprocess.check_call + + for key, value in kwargs.iteritems(): + hdiutil_args.append("-" + key) + if not value is True: + hdiutil_args.append(str(value)) + + return run(hdiutil_args) + + if verbose >= 2: + if fancy is None: + print "+ Creating .dmg disk image +" + else: + print "+ Preparing .dmg disk image +" + + if config.dmg != "": + dmg_name = config.dmg + else: + spl = app_bundle_name.split(" ") + dmg_name = spl[0] + "".join(p.capitalize() for p in spl[1:]) + + if fancy is None: + try: + runHDIUtil("create", dmg_name, srcfolder="dist", format="UDBZ", volname=app_bundle_name, ov=True) + except subprocess.CalledProcessError as e: + sys.exit(e.returncode) + else: + if verbose >= 3: + print "Determining size of \"dist\"..." + size = 0 + for path, dirs, files in os.walk("dist"): + for file in files: + size += os.path.getsize(os.path.join(path, file)) + size += int(size * 0.1) + + if verbose >= 3: + print "Creating temp image for modification..." + try: + runHDIUtil("create", dmg_name + ".temp", srcfolder="dist", format="UDRW", size=size, volname=app_bundle_name, ov=True) + except subprocess.CalledProcessError as e: + sys.exit(e.returncode) + + if verbose >= 3: + print "Attaching temp image..." + try: + output = runHDIUtil("attach", dmg_name + ".temp", readwrite=True, noverify=True, noautoopen=True, capture_stdout=True) + except subprocess.CalledProcessError as e: + sys.exit(e.returncode) + + m = re.search("/Volumes/(.+$)", output) + disk_root = m.group(0) + disk_name = m.group(1) + + if verbose >= 2: + print "+ Applying fancy settings +" + + if fancy.has_key("background_picture"): + bg_path = os.path.join(disk_root, os.path.basename(fancy["background_picture"])) + if verbose >= 3: + print fancy["background_picture"], "->", bg_path + shutil.copy2(fancy["background_picture"], bg_path) + else: + bg_path = None + + if fancy.get("applications_symlink", False): + os.symlink("/Applications", os.path.join(disk_root, "Applications")) + + finder = appscript.app("Finder") + disk = finder.disks[disk_name] + disk.open() + window = disk.container_window + window.current_view.set(appscript.k.icon_view) + window.toolbar_visible.set(False) + window.statusbar_visible.set(False) + if fancy.has_key("window_bounds"): + window.bounds.set(fancy["window_bounds"]) + view_options = window.icon_view_options + view_options.arrangement.set(appscript.k.not_arranged) + if fancy.has_key("icon_size"): + view_options.icon_size.set(fancy["icon_size"]) + if bg_path is not None: + view_options.background_picture.set(disk.files[os.path.basename(bg_path)]) + if fancy.has_key("items_position"): + for name, position in fancy["items_position"].iteritems(): + window.items[name].position.set(position) + disk.close() + if bg_path is not None: + subprocess.call(["SetFile", "-a", "V", bg_path]) + disk.update(registering_applications=False) + sleep(2) + disk.eject() + + if verbose >= 2: + print "+ Finalizing .dmg disk image +" + + try: + runHDIUtil("convert", dmg_name + ".temp", format="UDBZ", o=dmg_name + ".dmg", ov=True) + except subprocess.CalledProcessError as e: + sys.exit(e.returncode) + + os.unlink(dmg_name + ".temp.dmg") + +# ------------------------------------------------ + +if verbose >= 2: + print "+ Done +" + +sys.exit(0) diff --git a/contrib/macdeploy/notes.txt b/contrib/macdeploy/notes.txt new file mode 100644 index 000000000..ac794d0f7 --- /dev/null +++ b/contrib/macdeploy/notes.txt @@ -0,0 +1,26 @@ + +macdeployqtplus works best on OS X Lion, for Snow Leopard you'd need to install +Python 2.7 and make it your default Python installation. + +You will need the appscript package for the fancy disk image creation to work. +Install it by invoking "sudo easy_install appscript". + +Ths script should be invoked in the target directory like this: +$source_dir/contrib/macdeploy/macdeployqtplus Bitcoin-Qt.app -add-qt-tr de,ru -dmg -fancy $source_dir/contrib/macdeploy/fancy.plist + +During the process, the disk image window will pop up briefly where the fancy +settings are applied. This is normal, please do not interfere. + +You can also set up Qt Creator for invoking the script. For this, go to the +"Projects" tab on the left side, switch to "Run Settings" above and add a +deploy configuration. Next add a deploy step choosing "Custom Process Step". +Fill in the following. + +Enable custom process step: [x] +Command: %{sourceDir}/contrib/macdeploy/macdeployqtplus +Working directory: %{buildDir} +Command arguments: Bitcoin-Qt.app -add-qt-tr de,ru -dmg -fancy %{sourceDir}/contrib/macdeploy/fancy.plist + +After that you can start the deployment process through the menu with +Build -> Deploy Project "bitcoin-qt" + diff --git a/src/qt/bitcoin.cpp b/src/qt/bitcoin.cpp index c8e332419..7f946a478 100644 --- a/src/qt/bitcoin.cpp +++ b/src/qt/bitcoin.cpp @@ -129,7 +129,7 @@ int main(int argc, char *argv[]) if (!translator.isEmpty()) app.installTranslator(&translator); - app.setApplicationName(QApplication::translate("main", "Bitcoin Qt")); + app.setApplicationName(QApplication::translate("main", "Bitcoin-Qt")); QSplashScreen splash(QPixmap(":/images/splash"), 0); splash.show();