From 3475000902d423a12afd6b59a70ef149ccebd9bf Mon Sep 17 00:00:00 2001 From: Maran Date: Sat, 15 Jun 2013 21:09:15 +0200 Subject: [PATCH] Added OS X Build scripts --- osx.sh | 23 ++++++++++++ src/build_osx.py | 71 +++++++++++++++++++++++++++++++++++++ src/images/bitmessage.icns | Bin 0 -> 39467 bytes 3 files changed, 94 insertions(+) create mode 100755 osx.sh create mode 100644 src/build_osx.py create mode 100644 src/images/bitmessage.icns diff --git a/osx.sh b/osx.sh new file mode 100755 index 00000000..ca05ffde --- /dev/null +++ b/osx.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +# OS X Build script wrapper around the py2app script. +# These build can only be generated on OS X. +# Requires all build dependencies for Bitmessage + +export ARCHFLAGS="-arch i386 -arch x86_64" + +if [[ -z "$1" ]]; then + echo "Please supply a version number for this release as the first argument." + exit +fi + +echo "Creating OS X packages for Bitmessage. This script will ask for sudo to create the dmg volume" + +cd src && python build_osx.py py2app + +if [[ $? = "0" ]]; then + sudo hdiutil create -fs HFS+ -volname "Bitmessage" -srcfolder dist/Bitmessage.app dist/bitmessage-v$1.dmg +else + echo "Problem creating Bitmessage.app, stopping." + exit +fi diff --git a/src/build_osx.py b/src/build_osx.py new file mode 100644 index 00000000..ded1be4a --- /dev/null +++ b/src/build_osx.py @@ -0,0 +1,71 @@ +""" +py2app/py2exe build script for Bitmessage + +Usage (Mac OS X): + python setup.py py2app + +Usage (Windows): + python setup.py py2exe +""" + +import sys, os, shutil, re +from setuptools import setup + + +name = "Bitmessage" +mainscript = 'bitmessagemain.py' +version = "0.3.3" + +if sys.platform == 'darwin': + extra_options = dict( + setup_requires=['py2app'], + app=[mainscript], + options=dict(py2app=dict(argv_emulation=True, + includes = ['PyQt4.QtCore','PyQt4.QtGui', 'sip', 'sqlite'], + packages = ['bitmessageqt'], + iconfile='images/bitmessage.icns', + resources=["images"])), + ) +elif sys.platform == 'win32': + extra_options = dict( + setup_requires=['py2exe'], + app=[mainscript], + ) +else: + extra_options = dict( + # Normally unix-like platforms will use "setup.py install" + # and install the main script as such + scripts=[mainscript], + ) + +setup( + name = name, + version = version, + **extra_options +) +from distutils import dir_util + +if sys.platform == 'darwin': + resource = "dist/" + name + ".app/Contents/Resources/" + + # Try to locate qt_menu + # Let's try the port version first! + if os.path.isfile("/opt/local/lib/Resources/qt_menu.nib"): + qt_menu_location = "/opt/local/lib/Resources/qt_menu.nib" + else: + # No dice? Then let's try the brew version + qt_menu_location = os.popen("find /usr/local/Cellar -name qt_menu.nib | tail -n 1").read() + qt_menu_location = re.sub('\n','', qt_menu_location) + + if(len(qt_menu_location) == 0): + print "Sorry couldn't find your qt_menu.nib this probably won't work" + else: + print "Found your qib: " + qt_menu_location + + # Need to include a copy of qt_menu.nib + shutil.copytree(qt_menu_location, resource + "qt_menu.nib") + # Need to touch qt.conf to avoid loading 2 sets of Qt libraries + fname = resource + "qt.conf" + with file(fname, 'a'): + os.utime(fname, None) + diff --git a/src/images/bitmessage.icns b/src/images/bitmessage.icns new file mode 100644 index 0000000000000000000000000000000000000000..a796f9d46a94f3562bf5a283857c7d943d3c78e4 GIT binary patch literal 39467 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 BjV1s9 literal 0 HcmV?d00001