f7308beee9
The older version we were running didn't support jsonrpc v2 for error codes, which both the command line client and ui client were expecting.
352 lines
11 KiB
Python
352 lines
11 KiB
Python
#!/usr/bin/env python
|
|
|
|
import sys
|
|
import os
|
|
import site
|
|
from lbrynet import __version__
|
|
|
|
LINUX = 1
|
|
DARWIN = 2
|
|
WINDOWS = 3
|
|
|
|
if sys.platform.startswith("linux"):
|
|
platform = LINUX
|
|
elif sys.platform.startswith("darwin"):
|
|
platform = DARWIN
|
|
elif sys.platform.startswith("win"):
|
|
platform = WINDOWS
|
|
else:
|
|
raise Exception("Unknown os: %s" % sys.platform)
|
|
|
|
base_dir = os.path.abspath(os.path.dirname(__file__))
|
|
package_name = "lbrynet"
|
|
dist_name = "LBRY"
|
|
description = "A decentralized media library and marketplace"
|
|
author = "LBRY, Inc"
|
|
url = "lbry.io"
|
|
maintainer = "Jack Robison"
|
|
maintainer_email = "jack@lbry.io"
|
|
keywords = "LBRY"
|
|
|
|
|
|
# TODO: find a way to keep this in sync with requirements.txt
|
|
requires = [
|
|
'Twisted==16.0.0',
|
|
'Yapsy==1.11.223',
|
|
'appdirs==1.4.0',
|
|
'argparse==1.2.1',
|
|
'colorama==0.3.7',
|
|
'dnspython==1.12.0',
|
|
'ecdsa==0.13',
|
|
'envparse==0.2.0',
|
|
'gmpy==1.17',
|
|
'jsonrpc==1.2',
|
|
'jsonrpclib==0.1.7',
|
|
'jsonschema==2.5.1',
|
|
'lbryum',
|
|
'loggly-python-handler==1.0.0',
|
|
'miniupnpc==1.9',
|
|
'pbkdf2==1.3',
|
|
'protobuf==3.0.0',
|
|
'pycrypto==2.6.1',
|
|
'qrcode==5.2.2',
|
|
'requests==2.9.1',
|
|
'requests_futures==0.9.7',
|
|
'seccure==0.3.1.3',
|
|
'simplejson==3.8.2',
|
|
'six>=1.9.0',
|
|
'slowaes==0.1a1',
|
|
'txJSON-RPC==0.5',
|
|
'wsgiref==0.1.2',
|
|
'zope.interface==4.1.3',
|
|
'base58==0.2.2',
|
|
'googlefinance==0.7',
|
|
'pyyaml==3.12',
|
|
'service_identity==16.0.0',
|
|
'ndg-httpsclient==0.4.2',
|
|
]
|
|
|
|
|
|
console_scripts = [
|
|
'lbrynet-daemon = lbrynet.lbrynet_daemon.DaemonControl:start',
|
|
'stop-lbrynet-daemon = lbrynet.lbrynet_daemon.DaemonControl:stop',
|
|
'lbrynet-cli = lbrynet.lbrynet_daemon.DaemonCLI:main'
|
|
]
|
|
|
|
|
|
def package_files(directory):
|
|
for path, _, filenames in os.walk(directory):
|
|
for filename in filenames:
|
|
yield os.path.join('..', path, filename)
|
|
|
|
|
|
if platform == LINUX:
|
|
import ez_setup
|
|
ez_setup.use_setuptools()
|
|
from setuptools import setup, find_packages
|
|
|
|
requires.append('service-identity')
|
|
|
|
setup(name=package_name,
|
|
description=description,
|
|
version=__version__,
|
|
maintainer=maintainer,
|
|
maintainer_email=maintainer_email,
|
|
url=url,
|
|
author=author,
|
|
keywords=keywords,
|
|
packages=find_packages(base_dir),
|
|
install_requires=requires,
|
|
entry_points={'console_scripts': console_scripts},
|
|
package_data={
|
|
package_name: list(package_files('lbrynet/resources/ui'))
|
|
}
|
|
)
|
|
|
|
elif platform == DARWIN:
|
|
import ez_setup
|
|
|
|
ez_setup.use_setuptools()
|
|
from setuptools import setup, find_packages
|
|
|
|
setup(name=package_name,
|
|
description=description,
|
|
version=__version__,
|
|
maintainer=maintainer,
|
|
maintainer_email=maintainer_email,
|
|
url=url,
|
|
author=author,
|
|
keywords=keywords,
|
|
packages=find_packages(base_dir),
|
|
install_requires=requires,
|
|
entry_points={'console_scripts': console_scripts},
|
|
package_data={
|
|
package_name: list(package_files('lbrynet/resources/ui'))
|
|
},
|
|
# If this is True, setuptools tries to build an egg
|
|
# and py2app / modulegraph / imp.find_module
|
|
# doesn't like that.
|
|
zip_safe=False,
|
|
)
|
|
|
|
elif platform == WINDOWS:
|
|
import opcode
|
|
import pkg_resources
|
|
from cx_Freeze import setup, Executable
|
|
import requests.certs
|
|
|
|
app_dir = os.path.join('packaging', 'windows', 'lbry-win32-app')
|
|
daemon_dir = os.path.join('lbrynet', 'lbrynet_daemon')
|
|
win_icon = os.path.join(app_dir, 'icons', 'lbry256.ico')
|
|
wordlist_path = pkg_resources.resource_filename('lbryum', 'wordlist')
|
|
|
|
# Allow virtualenv to find distutils of base python installation
|
|
distutils_path = os.path.join(os.path.dirname(opcode.__file__), 'distutils')
|
|
|
|
schemas = os.path.join(site.getsitepackages()[1], "jsonschema", "schemas")
|
|
onlyfiles = [f for f in os.listdir(schemas) if os.path.isfile(os.path.join(schemas, f))]
|
|
zipincludes = [(os.path.join(schemas, f), os.path.join("jsonschema", "schemas", f)) for f in onlyfiles]
|
|
|
|
def find_data_file(filename):
|
|
if getattr(sys, 'frozen', False):
|
|
# The application is frozen
|
|
data_dir = os.path.dirname(sys.executable)
|
|
else:
|
|
# The application is not frozen
|
|
# Change this bit to match where you store your data files:
|
|
data_dir = os.path.dirname(__file__)
|
|
return os.path.join(data_dir, filename)
|
|
|
|
shortcut_table = [
|
|
('LBRYShortcut', # Shortcut
|
|
'DesktopFolder', # Directory
|
|
'LBRY', # Name
|
|
'TARGETDIR', # Component
|
|
'[TARGETDIR]\{0}.exe'.format(dist_name), # Target
|
|
None, # Arguments
|
|
description, # Description
|
|
None, # Hotkey
|
|
None, # Icon
|
|
None, # IconIndex
|
|
None, # ShowCmd
|
|
'TARGETDIR', # WkDir
|
|
),
|
|
# ('DaemonShortcut', # Shortcut
|
|
# 'DesktopFolder', # Directory
|
|
# 'lbrynet-daemon', # Name
|
|
# 'TARGETDIR', # Component
|
|
# '[TARGETDIR]\lbrynet-daemon.exe', # Target
|
|
# '--log-to-console', # Arguments
|
|
# description, # Description
|
|
# None, # Hotkey
|
|
# None, # Icon
|
|
# None, # IconIndex
|
|
# None, # ShowCmd
|
|
# 'TARGETDIR', # WkDir
|
|
# ),
|
|
# ('DaemonCLIShortcut', # Shortcut
|
|
# 'DesktopFolder', # Directory
|
|
# 'lbrynet-cli', # Name
|
|
# 'TARGETDIR', # Component
|
|
# '[TARGETDIR]\lbrynet-cli.exe', # Target
|
|
# None, # Arguments
|
|
# description, # Description
|
|
# None, # Hotkey
|
|
# None, # Icon
|
|
# None, # IconIndex
|
|
# None, # ShowCmd
|
|
# 'TARGETDIR', # WkDir
|
|
# ),
|
|
('ProgramMenuLBRYShortcut', # Shortcut
|
|
'ProgramMenuFolder', # Directory
|
|
# r'[ProgramMenuFolder]\lbrynet', # Directory
|
|
'LBRY', # Name
|
|
'TARGETDIR', # Component
|
|
'[TARGETDIR]\{0}.exe'.format(dist_name), # Target
|
|
None, # Arguments
|
|
description, # Description
|
|
None, # Hotkey
|
|
None, # Icon
|
|
None, # IconIndex
|
|
None, # ShowCmd
|
|
'TARGETDIR', # WkDir
|
|
),
|
|
('ProgramMenuDaemonShortcut', # Shortcut
|
|
'ProgramMenuFolder', # Directory
|
|
# r'[ProgramMenuFolder]\lbrynet', # Directory
|
|
'lbrynet-daemon', # Name
|
|
'TARGETDIR', # Component
|
|
'[TARGETDIR]\lbrynet-daemon.exe', # Target
|
|
'--log-to-console', # Arguments
|
|
description, # Description
|
|
None, # Hotkey
|
|
None, # Icon
|
|
None, # IconIndex
|
|
None, # ShowCmd
|
|
'TARGETDIR', # WkDir
|
|
),
|
|
('ProgramMenuDaemonCLIShortcut', # Shortcut
|
|
'ProgramMenuFolder', # Directory
|
|
# r'[ProgramMenuFolder]\lbrynet', # Directory
|
|
'lbrynet-cli', # Name
|
|
'TARGETDIR', # Component
|
|
'[TARGETDIR]\lbrynet-cli.exe', # Target
|
|
None, # Arguments
|
|
description, # Description
|
|
None, # Hotkey
|
|
None, # Icon
|
|
None, # IconIndex
|
|
None, # ShowCmd
|
|
'TARGETDIR', # WkDir
|
|
),
|
|
]
|
|
|
|
msi_data = {"Shortcut": shortcut_table}
|
|
|
|
bdist_msi_options = {
|
|
'upgrade_code': '{18c0e933-ad08-44e8-a413-1d0ed624c100}',
|
|
'add_to_path': True,
|
|
# Default install path is 'C:\Program Files\' for 32-bit or 'C:\Program Files (x86)\' for 64-bit
|
|
# 'initial_target_dir': r'[LocalAppDataFolder]\{0}'.format(name),
|
|
'data': msi_data
|
|
}
|
|
|
|
build_exe_options = {
|
|
'include_msvcr': True,
|
|
'includes': [],
|
|
'packages': ['cython',
|
|
'twisted',
|
|
'yapsy',
|
|
'appdirs',
|
|
'argparse',
|
|
'base58',
|
|
'colorama',
|
|
'cx_Freeze',
|
|
'dns',
|
|
'ecdsa',
|
|
'envparse',
|
|
'gmpy',
|
|
'googlefinance',
|
|
'jsonrpc',
|
|
'jsonrpclib',
|
|
'lbryum',
|
|
'loggly',
|
|
'miniupnpc',
|
|
'pbkdf2',
|
|
'google.protobuf',
|
|
'Crypto',
|
|
'bitcoinrpc',
|
|
'win32api',
|
|
'qrcode',
|
|
'requests',
|
|
'requests_futures',
|
|
'seccure',
|
|
'simplejson',
|
|
'jsonschema',
|
|
'six',
|
|
'aes',
|
|
'txjsonrpc',
|
|
'wsgiref',
|
|
'zope.interface',
|
|
'os',
|
|
'pkg_resources',
|
|
'yaml'
|
|
],
|
|
'excludes': ['distutils', 'collections.sys', 'collections._weakref', 'collections.abc',
|
|
'Tkinter', 'tk', 'tcl', 'PyQt4', 'nose', 'mock'
|
|
'zope.interface._zope_interface_coptimizations', 'leveldb'],
|
|
'include_files': [(distutils_path, 'distutils'), (requests.certs.where(), 'cacert.pem'),
|
|
(os.path.join(app_dir, 'icons', 'lbry16.ico'), os.path.join('icons', 'lbry16.ico')),
|
|
(os.path.join(app_dir, 'icons', 'lbry256.ico'), os.path.join('icons', 'lbry256.ico')),
|
|
(os.path.join(wordlist_path, 'chinese_simplified.txt'),
|
|
os.path.join('wordlist', 'chinese_simplified.txt')),
|
|
(os.path.join(wordlist_path, 'english.txt'), os.path.join('wordlist', 'english.txt')),
|
|
(os.path.join(wordlist_path, 'japanese.txt'), os.path.join('wordlist', 'japanese.txt')),
|
|
(os.path.join(wordlist_path, 'portuguese.txt'), os.path.join('wordlist', 'portuguese.txt')),
|
|
(os.path.join(wordlist_path, 'spanish.txt'), os.path.join('wordlist', 'spanish.txt'))
|
|
],
|
|
'namespace_packages': ['zope', 'google'],
|
|
"zip_includes": zipincludes}
|
|
|
|
tray_app = Executable(
|
|
script=os.path.join(app_dir, 'LBRYWin32App.py'),
|
|
base='Win32GUI',
|
|
icon=win_icon,
|
|
targetName='{0}.exe'.format(dist_name)
|
|
)
|
|
|
|
daemon_exe = Executable(
|
|
script=os.path.join(daemon_dir, 'DaemonControl.py'),
|
|
icon=win_icon,
|
|
targetName='lbrynet-daemon.exe'
|
|
)
|
|
|
|
cli_exe = Executable(
|
|
script=os.path.join(daemon_dir, 'DaemonCLI.py'),
|
|
icon=win_icon,
|
|
targetName='lbrynet-cli.exe'
|
|
)
|
|
|
|
setup(
|
|
name=package_name,
|
|
description=description,
|
|
version=__version__,
|
|
maintainer=maintainer,
|
|
maintainer_email=maintainer_email,
|
|
url=url,
|
|
author=author,
|
|
keywords=keywords,
|
|
data_files=[],
|
|
options={
|
|
'build_exe': build_exe_options,
|
|
'bdist_msi': bdist_msi_options
|
|
},
|
|
executables=[
|
|
tray_app,
|
|
daemon_exe,
|
|
cli_exe
|
|
],
|
|
package_data={
|
|
package_name: list(package_files('lbrynet/resources/ui'))
|
|
}
|
|
)
|