#!/usr/bin/python # -*- coding: utf-8 -*- """ This is a setup.py script generated by py2applet Usage: python setup.py py2app """ from setuptools import setup import os from os.path import exists, isdir, join import platform import re import shutil import sys if sys.platform=='win32': assert platform.architecture()[0]=='32bit', 'Assumes a Python built for 32bit' import py2exe dist_dir = 'dist.win32' elif sys.platform=='darwin': dist_dir = 'dist.macosx' else: assert False, 'Unsupported platform %s' % sys.platform if dist_dir and len(dist_dir)>1 and isdir(dist_dir): shutil.rmtree(dist_dir) # "Developer ID Application" name for signing macdeveloperid = None # Patch py2app recipe enumerator to skip the sip recipe since it's too enthusiastic - we'll list additional Qt modules explicitly if sys.platform=='darwin': from py2app import recipes import py2app.build_app def iterRecipes(module=recipes): for name in dir(module): if name.startswith('_') or name=='sip': continue check = getattr(getattr(module, name), 'check', None) if check is not None: yield (name, check) py2app.build_app.iterRecipes = iterRecipes APP = 'EDMarketConnector.py' APPNAME = re.search(r"^appname\s*=\s*'(.+)'", file('config.py').read(), re.MULTILINE).group(1) APPLONGNAME = re.search(r"^applongname\s*=\s*'(.+)'", file('config.py').read(), re.MULTILINE).group(1) VERSION = re.search(r"^appversion\s*=\s*'(.+)'", file('config.py').read(), re.MULTILINE).group(1) SHORTVERSION = ''.join(VERSION.split('.')[:3]) PY2APP_OPTIONS = {'dist_dir': dist_dir, 'optimize': 2, 'packages': [ 'requests' ], 'frameworks': [ 'Sparkle.framework' ], 'excludes': [ 'PIL', 'simplejson' ], 'iconfile': '%s.icns' % APPNAME, 'semi_standalone': True, 'site_packages': False, 'plist': { 'CFBundleName': APPLONGNAME, 'CFBundleIdentifier': 'uk.org.marginal.%s' % APPNAME.lower(), 'CFBundleShortVersionString': VERSION, 'CFBundleVersion': VERSION, 'LSMinimumSystemVersion': '.'.join(platform.mac_ver()[0].split('.')[:2]), # minimum version = build version 'NSHumanReadableCopyright': u'© 2015 Jonathan Harris', 'SUEnableAutomaticChecks': True, 'SUShowReleaseNotes': True, 'SUAllowsAutomaticUpdates': False, 'SUFeedURL': 'http://marginal.org.uk/edmarketconnector.xml', 'SUScheduledCheckInterval': 47*60*60, }, 'graph': True, # output dependency graph in dist } PY2EXE_OPTIONS = {'dist_dir': dist_dir, 'optimize': 2, 'packages': [ 'requests' ], 'excludes': [ 'PIL', 'simplejson' ], } if sys.platform=='win32': import requests DATA_FILES = [ ('', [requests.certs.where(), 'WinSparkle.dll', 'WinSparkle.pdb', # For debugging - don't include in package '%s.VisualElementsManifest.xml' % APPNAME, '%s.ico' % APPNAME ] ) ] else: DATA_FILES = [ ] setup( name = APPLONGNAME, version = VERSION, app = [APP], windows = [ {'dest_base': APPNAME, 'script': 'winlauncher.py', 'icon_resources': [(0, '%s.ico' % APPNAME)], 'copyright': u'© 2015 Jonathan Harris', 'name': APPNAME, # WinSparkle 'company_name': 'Marginal', # WinSparkle 'other_resources': [(24, 1, open(APPNAME+'.manifest').read())], } ], data_files = DATA_FILES, options = { 'py2app': PY2APP_OPTIONS, 'py2exe': PY2EXE_OPTIONS }, setup_requires = [sys.platform=='darwin' and 'py2app' or 'py2exe'], ) if sys.platform == 'darwin': if isdir('%s/%s.app' % (dist_dir, APPLONGNAME)): # from CFBundleName os.rename('%s/%s.app' % (dist_dir, APPLONGNAME), '%s/%s.app' % (dist_dir, APPNAME)) if macdeveloperid: os.system('codesign --deep -v -s "Developer ID Application: %s" %s/%s.app' % (macdeveloperid, dist_dir, APPNAME)) # Make zip for distribution, preserving signature PKG = '%s_mac_%s.zip' % (APPNAME, SHORTVERSION) os.system('cd %s; ditto -ck --keepParent --sequesterRsrc %s.app ../%s; cd ..' % (dist_dir, APPNAME, PKG)) else: os.system(r'"C:\Program Files (x86)\WiX Toolset v3.9\bin\candle.exe" -out %s\ %s.wxs' % (dist_dir, APPNAME)) if exists('%s/%s.wixobj' % (dist_dir, APPNAME)): PKG = '%s_win_%s.msi' % (APPNAME, SHORTVERSION) os.system(r'"C:\Program Files (x86)\WiX Toolset v3.9\bin\light.exe" -sacl -spdb -sw1076 %s\%s.wixobj -out %s' % (dist_dir, APPNAME, PKG)) # Make appcast entry appcast = open('appcast_%s_%s.xml' % (sys.platform=='darwin' and 'mac' or 'win', SHORTVERSION), 'w') appcast.write(''' \t\t \t\t\tRelease {0:.2f} \t\t\t \t\t\t\tRelease {0:.2f} \t\t\t\t]]> \t\t\t \t\t\t \t\t '''.format(float(SHORTVERSION)/100, SHORTVERSION, PKG, sys.platform=='win32' and 'windows"\n\t\t\t\tsparkle:installerArguments="/passive' or 'osx', VERSION, os.stat(PKG).st_size, sys.platform=='win32' and '\n' or ''))