-
Notifications
You must be signed in to change notification settings - Fork 575
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- parametrise module list - allow optional modules (pyopencl, PyQt4) - add setuptools - add compiler error detection - press return to continue
- Loading branch information
1 parent
15077c9
commit af5cb08
Showing
1 changed file
with
111 additions
and
76 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -24,15 +24,20 @@ | |
} | ||
|
||
packageName = { | ||
"PyQt": { | ||
"PyQt4": { | ||
"OpenBSD": "py-qt4", | ||
"FreeBSD": "py27-qt4", | ||
"Debian": "python-qt4", | ||
"Ubuntu": "python-qt4", | ||
"openSUSE": "python-qt", | ||
"Fedora": "PyQt4", | ||
"Guix": "[email protected]", | ||
"Gentoo": "dev-python/PyQt4" | ||
"Gentoo": "dev-python/PyQt4", | ||
'optional': True, | ||
'description': "You only need PyQt if you want to use the GUI. " \ | ||
"When only running as a daemon, this can be skipped.\n" \ | ||
"However, you would have to install it manually " \ | ||
"because setuptools does not support PyQt." | ||
}, | ||
"msgpack": { | ||
"OpenBSD": "py-msgpack", | ||
|
@@ -49,10 +54,34 @@ | |
"Debian": "python-pyopencl", | ||
"Ubuntu": "python-pyopencl", | ||
"Fedora": "python2-pyopencl", | ||
"Gentoo": "dev-python/pyopencl" | ||
"openSUSE": "", | ||
"OpenBSD": "", | ||
"Guix": "", | ||
"Gentoo": "dev-python/pyopencl", | ||
"optional": True, | ||
'description': "If you install pyopencl, you will be able to use " \ | ||
"GPU acceleration for proof of work. \n" \ | ||
"You also need a compatible GPU and drivers." | ||
}, | ||
"setuptools": { | ||
"OpenBSD": "py-setuptools", | ||
"FreeBSD": "py27-setuptools", | ||
"Debian": "python-setuptools", | ||
"Ubuntu": "python-setuptools", | ||
"Fedora": "python2-setuptools", | ||
"openSUSE": "python-setuptools", | ||
"Guix": "python2-setuptools", | ||
"Gentoo": "", | ||
} | ||
} | ||
|
||
compiling = { | ||
"Debian": "build-essential libssl-dev", | ||
"Ubuntu": "build-essential libssl-dev", | ||
"Fedora": "gcc-c++ redhat-rpm-config python-devel", | ||
"openSUSE": "gcc-c++ libopenssl-devel python-devel", | ||
} | ||
|
||
|
||
def detectOS(): | ||
if detectOS.result is not None: | ||
|
@@ -87,27 +116,14 @@ def detectOS(): | |
|
||
def detectPrereqs(missing=False): | ||
available = [] | ||
try: | ||
import_module("PyQt4.QtCore") | ||
if not missing: | ||
available.append("PyQt") | ||
except ImportError: | ||
if missing: | ||
available.append("PyQt") | ||
try: | ||
import_module("msgpack") | ||
if not missing: | ||
available.append("msgpack") | ||
except ImportError: | ||
if missing: | ||
available.append("msgpack") | ||
try: | ||
import_module("pyopencl") | ||
if not missing: | ||
available.append("pyopencl") | ||
except ImportError: | ||
if missing: | ||
available.append("pyopencl") | ||
for module in packageName.keys(): | ||
try: | ||
import_module(module) | ||
if not missing: | ||
available.append(module) | ||
except ImportError: | ||
if missing: | ||
available.append(module) | ||
return available | ||
|
||
|
||
|
@@ -116,27 +132,40 @@ def prereqToPackages(): | |
print "%s %s" % ( | ||
packageManager[detectOS()], " ".join( | ||
packageName[x][detectOS()] for x in detectPrereqs(True))) | ||
for package in detectPrereqs(True): | ||
if packageName[package]['optional']: | ||
print packageName[package]['description'] | ||
|
||
def compilerToPackages(): | ||
if not detectOS() in compiling: | ||
return | ||
print "You can install the requirements by running, as root:" | ||
print "%s %s" % ( | ||
packageManager[detectOS()], compiling[detectOS()]) | ||
|
||
if __name__ == "__main__": | ||
detectOS.result = None | ||
detectPrereqs.result = None | ||
if "PyQt" in detectPrereqs(True): | ||
print "You only need PyQt if you want to use the GUI. " \ | ||
"When only running as a daemon, this can be skipped.\n" \ | ||
"However, you would have to install it manually " \ | ||
"because setuptools does not support pyqt." | ||
if detectPrereqs(True) != [] and detectOS() in packageManager: | ||
if detectOS() is not None: | ||
print "It looks like you're using %s. " \ | ||
"It is highly recommended to use the package manager " \ | ||
"instead of setuptools." % (detectOS()) | ||
prereqToPackages() | ||
sys.exit() | ||
for module in detectPrereqs(True): | ||
if not packageName[module]['optional']: | ||
sys.exit() | ||
if not haveSetuptools: | ||
print "It looks like you're missing setuptools." | ||
sys.exit() | ||
|
||
if detectPrereqs(True) != []: | ||
print "Press Return to continue" | ||
try: | ||
nothing = raw_input | ||
except NameError: | ||
pass | ||
|
||
here = os.path.abspath(os.path.dirname(__file__)) | ||
with open(os.path.join(here, 'README.md')) as f: | ||
README = f.read() | ||
|
@@ -147,49 +176,55 @@ def prereqToPackages(): | |
libraries=['pthread', 'crypto'], | ||
) | ||
|
||
dist = setup( | ||
name='pybitmessage', | ||
version=softwareVersion, | ||
description="Reference client for Bitmessage: " | ||
"a P2P communications protocol", | ||
long_description=README, | ||
license='MIT', | ||
# TODO: add author info | ||
#author='', | ||
#author_email='', | ||
url='https://bitmessage.org', | ||
# TODO: add keywords | ||
#keywords='', | ||
install_requires=['msgpack-python'], | ||
classifiers=[ | ||
"License :: OSI Approved :: MIT License" | ||
"Operating System :: OS Independent", | ||
"Programming Language :: Python :: 2.7 :: Only", | ||
"Topic :: Internet", | ||
"Topic :: Security :: Cryptography", | ||
"Topic :: Software Development :: Libraries :: Python Modules", | ||
], | ||
package_dir={'pybitmessage': 'src'}, | ||
packages=[ | ||
'pybitmessage', | ||
'pybitmessage.bitmessageqt', | ||
'pybitmessage.bitmessagecurses', | ||
'pybitmessage.messagetypes', | ||
'pybitmessage.network', | ||
'pybitmessage.pyelliptic', | ||
'pybitmessage.socks', | ||
], | ||
package_data={'': [ | ||
'bitmessageqt/*.ui', 'bitmsghash/*.cl', 'sslkeys/*.pem', | ||
'translations/*.ts', 'translations/*.qm', | ||
'images/*.png', 'images/*.ico', 'images/*.icns' | ||
]}, | ||
ext_modules=[bitmsghash], | ||
zip_safe=False, | ||
#entry_points={ | ||
# 'console_scripts': [ | ||
# 'pybitmessage = pybitmessage.bitmessagemain:main' | ||
# ] | ||
#}, | ||
scripts=['src/pybitmessage'] | ||
) | ||
try: | ||
dist = setup( | ||
name='pybitmessage', | ||
version=softwareVersion, | ||
description="Reference client for Bitmessage: " | ||
"a P2P communications protocol", | ||
long_description=README, | ||
license='MIT', | ||
# TODO: add author info | ||
#author='', | ||
#author_email='', | ||
url='https://bitmessage.org', | ||
# TODO: add keywords | ||
#keywords='', | ||
install_requires=['msgpack-python'], | ||
classifiers=[ | ||
"License :: OSI Approved :: MIT License" | ||
"Operating System :: OS Independent", | ||
"Programming Language :: Python :: 2.7 :: Only", | ||
"Topic :: Internet", | ||
"Topic :: Security :: Cryptography", | ||
"Topic :: Software Development :: Libraries :: Python Modules", | ||
], | ||
package_dir={'pybitmessage': 'src'}, | ||
packages=[ | ||
'pybitmessage', | ||
'pybitmessage.bitmessageqt', | ||
'pybitmessage.bitmessagecurses', | ||
'pybitmessage.messagetypes', | ||
'pybitmessage.network', | ||
'pybitmessage.pyelliptic', | ||
'pybitmessage.socks', | ||
], | ||
package_data={'': [ | ||
'bitmessageqt/*.ui', 'bitmsghash/*.cl', 'sslkeys/*.pem', | ||
'translations/*.ts', 'translations/*.qm', | ||
'images/*.png', 'images/*.ico', 'images/*.icns' | ||
]}, | ||
ext_modules=[bitmsghash], | ||
zip_safe=False, | ||
#entry_points={ | ||
# 'console_scripts': [ | ||
# 'pybitmessage = pybitmessage.bitmessagemain:main' | ||
# ] | ||
#}, | ||
scripts=['src/pybitmessage'] | ||
) | ||
except SystemExit: | ||
print "It looks like building the package failed.\n" \ | ||
"You may be missing a C++ compiler and the OpenSSL headers." | ||
compilerToPackages() | ||
|