gmpy/setup_msys.py
2021-01-09 22:07:04 -08:00

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,
)