diff options
Diffstat (limited to 'setup.py')
-rw-r--r-- | setup.py | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..0190808 --- /dev/null +++ b/setup.py @@ -0,0 +1,105 @@ +#!/usr/bin/env python +from distutils.core import setup, Extension, Command + +import sys +import platform + +includes = [] +library_dirs = [] +cmdclasses = dict() +CFLAGS = [] + + +class Tester(Command): + """Runs unit tests""" + + user_options = [] + + def initialize_options(self): + pass + + def finalize_options(self): + pass + + def run(self): + if ((sys.version_info > (3, 2, 0, 'final', 0)) or + (sys.version_info > (2, 7, 0, 'final', 0) and sys.version_info < (3, 0, 0, 'final', 0))): + from unittest import TextTestRunner, defaultTestLoader + else: + try: + from unittest2 import TextTestRunner, defaultTestLoader + except ImportError: + print("Please install unittest2 to run the test suite") + exit(-1) + from tests import test_scrypt, test_scrypt_py2x, test_scrypt_py3x + suite = defaultTestLoader.loadTestsFromModule(test_scrypt) + suite.addTests(defaultTestLoader.loadTestsFromModule(test_scrypt_py2x)) + suite.addTests(defaultTestLoader.loadTestsFromModule(test_scrypt_py3x)) + runner = TextTestRunner() + result = runner.run(suite) + +cmdclasses['test'] = Tester + +if sys.platform.startswith('linux'): + define_macros = [('HAVE_CLOCK_GETTIME', '1'), + ('HAVE_LIBRT', '1'), + ('HAVE_POSIX_MEMALIGN', '1'), + ('HAVE_STRUCT_SYSINFO', '1'), + ('HAVE_STRUCT_SYSINFO_MEM_UNIT', '1'), + ('HAVE_STRUCT_SYSINFO_TOTALRAM', '1'), + ('HAVE_SYSINFO', '1'), + ('HAVE_SYS_SYSINFO_H', '1'), + ('_FILE_OFFSET_BITS', '64')] + libraries = ['crypto', 'rt'] + CFLAGS.append('-O2') +elif sys.platform.startswith('win32'): + define_macros = [] + library_dirs = ['c:\OpenSSL-Win32\lib\MinGW'] + libraries = ['eay32'] + includes = ['c:\OpenSSL-Win32\include'] +elif sys.platform.startswith('darwin') and platform.mac_ver()[0] < '10.6': + define_macros = [('HAVE_SYSCTL_HW_USERMEM', '1')] + libraries = ['crypto'] +else: + define_macros = [('HAVE_POSIX_MEMALIGN', '1'), + ('HAVE_SYSCTL_HW_USERMEM', '1')] + libraries = ['crypto'] + +scrypt_module = Extension('_scrypt', + sources=['src/scrypt.c', + 'scrypt-1.1.6/lib/crypto/crypto_aesctr.c', + 'scrypt-1.1.6/lib/crypto/crypto_scrypt-nosse.c', + 'scrypt-1.1.6/lib/crypto/sha256.c', + 'scrypt-1.1.6/lib/scryptenc/scryptenc.c', + 'scrypt-1.1.6/lib/scryptenc/scryptenc_cpuperf.c', + 'scrypt-1.1.6/lib/util/memlimit.c', + 'scrypt-1.1.6/lib/util/warn.c'], + include_dirs=['scrypt-1.1.6', + 'scrypt-1.1.6/lib', + 'scrypt-1.1.6/lib/scryptenc', + 'scrypt-1.1.6/lib/crypto', + 'scrypt-1.1.6/lib/util'] + includes, + define_macros=[('HAVE_CONFIG_H', None)] + define_macros, + extra_compile_args=CFLAGS, + library_dirs=library_dirs, + libraries=libraries) + +setup(name='scrypt', + version='0.6.1', + description='Bindings for the scrypt key derivation function library', + author='Magnus Hallin', + author_email='mhallin@gmail.com', + url='http://bitbucket.org/mhallin/py-scrypt', + py_modules=['scrypt'], + ext_modules=[scrypt_module], + classifiers=['Development Status :: 4 - Beta', + 'Intended Audience :: Developers', + 'License :: OSI Approved :: BSD License', + 'Programming Language :: Python :: 2.6', + 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3', + 'Topic :: Security :: Cryptography', + 'Topic :: Software Development :: Libraries'], + license='2-clause BSD', + long_description=open('README.rst').read(), + cmdclass=cmdclasses) |