1
0
mirror of https://github.com/EDCD/EDMarketConnector.git synced 2025-04-13 15:57:14 +03:00

148 lines
5.6 KiB
Python
Executable File

#!/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' ],
'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' ],
}
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 = [ {'script': APP,
'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<item>
\t\t\t<title>Release {0}</title>
\t\t\t<description>
\t\t\t\t<![CDATA[
<h{6}>Release {0:.2f}</h{6}>
<ul>
</ul>
\t\t\t\t]]>
\t\t\t</description>
\t\t\t<enclosure
\t\t\t\turl="https://github.com/Marginal/EDMarketConnector/releases/download/rel-{1}/{2}"
\t\t\t\tsparkle:os="{3}"
\t\t\t\tsparkle:version="{4}"
\t\t\t\tlength="{5}"
\t\t\t\ttype="application/octet-stream"
\t\t\t/>
\t\t</item>
'''.format(float(SHORTVERSION)/100, SHORTVERSION, PKG, sys.platform=='darwin' and 'osx' or 'windows"\n\t\t\t\tsparkle:installerArguments="/passive', VERSION, os.stat(PKG).st_size, sys.platform=='darwin' and 2 or 3))