125 lines
4.4 KiB
Python
125 lines
4.4 KiB
Python
import platform
|
|
import os
|
|
from setuptools import setup, find_packages, Extension
|
|
from setuptools.command.build_ext import build_ext
|
|
|
|
ON_WINDOWS = platform.system() == 'Windows'
|
|
_comp_args = ["DSHARED=1"]
|
|
sources = ['src/gmpy2.c']
|
|
|
|
# Utility function to read the contents of the README file.
|
|
def read(fname):
|
|
return open(os.path.join(os.path.dirname(__file__), fname)).read()
|
|
|
|
class Gmpy2Build(build_ext):
|
|
description = "Build gmpy2 with custom build options"
|
|
user_options = build_ext.user_options + [
|
|
('fast', None,
|
|
"Depend on MPFR and MPC internal implementations details"
|
|
"(even more than the standard build)"),
|
|
('gcov', None, "Enable GCC code coverage collection"),
|
|
('vector', None, "Include the vector_XXX() functions;"
|
|
"they are unstable and under active development"),
|
|
('static', None, "Enable static linking compile time options."),
|
|
('static-dir=', None, "Enable static linking and specify location."),
|
|
('gdb', None, "Build with debug symbols."),
|
|
]
|
|
|
|
def initialize_options(self):
|
|
build_ext.initialize_options(self)
|
|
self.fast = False
|
|
self.gcov = False
|
|
self.vector = False
|
|
self.static = False
|
|
self.static_dir = False
|
|
self.gdb = False
|
|
|
|
def finalize_options(self):
|
|
build_ext.finalize_options(self)
|
|
if self.fast:
|
|
_comp_args.append('DFAST=1')
|
|
if self.gcov:
|
|
if ON_WINDOWS:
|
|
raise ValueError("Cannot enable GCC code coverage on Windows")
|
|
_comp_args.append('DGCOV=1')
|
|
_comp_args.append('O0')
|
|
_comp_args.append('-coverage')
|
|
self.libraries.append('gcov')
|
|
if self.vector:
|
|
_comp_args.append('DVECTOR=1')
|
|
if self.static:
|
|
_comp_args.remove('DSHARED=1')
|
|
_comp_args.append('DSTATIC=1')
|
|
if self.gdb:
|
|
_comp_args.append('ggdb')
|
|
if self.static_dir:
|
|
_comp_args.remove('DSHARED=1')
|
|
_comp_args.append('DSTATIC=1')
|
|
self.include_dirs.append(self.static_dir + '/include')
|
|
self.library_dirs.append(self.static_dir + '/lib')
|
|
|
|
def build_extensions(self):
|
|
compiler = self.compiler.compiler_type
|
|
if compiler == 'mingw32':
|
|
_comp_args.append('DMSYS2=1')
|
|
elif ON_WINDOWS and not self.static:
|
|
# MSVC shared build
|
|
_comp_args.append('DMSC_USE_DLL')
|
|
_prefix = '-' if compiler != 'msvc' else '/'
|
|
for i in range(len(_comp_args)):
|
|
_comp_args[i] = ''.join([_prefix, _comp_args[i]])
|
|
build_ext.build_extensions(self)
|
|
|
|
extensions = [
|
|
Extension('gmpy2.gmpy2',
|
|
sources=sources,
|
|
include_dirs=['./src'],
|
|
libraries=['mpc','mpfr','gmp'],
|
|
extra_compile_args=_comp_args,
|
|
)
|
|
]
|
|
|
|
cmdclass = {'build_ext': Gmpy2Build}
|
|
|
|
setup(
|
|
name="gmpy2",
|
|
version="2.1.0b6",
|
|
author="Case Van Horsen",
|
|
author_email="casevh@gmail.com",
|
|
cmdclass=cmdclass,
|
|
license="LGPL-3.0+",
|
|
url="https://github.com/aleaxit/gmpy",
|
|
description="gmpy2 interface to GMP, MPFR, "
|
|
"and MPC for Python 2.7 and 3.4+",
|
|
long_description=read('README'),
|
|
zip_safe=False,
|
|
include_package_data=True,
|
|
package_data={'gmpy2': [
|
|
'*.pxd',
|
|
'gmpy2.h',
|
|
]},
|
|
packages=find_packages(),
|
|
classifiers=[
|
|
'Development Status :: 4 - Beta',
|
|
'Intended Audience :: Developers',
|
|
'Intended Audience :: Science/Research',
|
|
'License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)',
|
|
'Natural Language :: English',
|
|
'Operating System :: MacOS :: MacOS X',
|
|
'Operating System :: Microsoft :: Windows',
|
|
'Operating System :: POSIX',
|
|
'Programming Language :: C',
|
|
'Programming Language :: Python :: 2',
|
|
'Programming Language :: Python :: 2.7',
|
|
'Programming Language :: Python :: 3',
|
|
'Programming Language :: Python :: 3.5',
|
|
'Programming Language :: Python :: 3.6',
|
|
'Programming Language :: Python :: 3.7',
|
|
'Programming Language :: Python :: 3.8',
|
|
'Programming Language :: Python :: Implementation :: CPython',
|
|
'Topic :: Scientific/Engineering :: Mathematics',
|
|
'Topic :: Software Development :: Libraries :: Python Modules',
|
|
],
|
|
keywords="gmp mpfr mpc multiple-precision arbitrary-precision precision bignum",
|
|
ext_modules=extensions,
|
|
)
|