Fallback to building pure Python variant if extension cannot be compiled.
This commit is contained in:
85
setup.py
85
setup.py
@@ -1,10 +1,36 @@
|
||||
from __future__ import print_function
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
from distutils.core import setup
|
||||
from distutils.core import Extension
|
||||
from distutils.command.build_ext import build_ext
|
||||
from distutils.errors import (CCompilerError, DistutilsExecError,
|
||||
DistutilsPlatformError)
|
||||
|
||||
with_extensions = os.environ.get('WRAPT_EXTENSIONS', 'true')
|
||||
with_extensions = (with_extensions.lower() != 'false')
|
||||
if sys.platform == 'win32':
|
||||
build_ext_errors = (CCompilerError, DistutilsExecError,
|
||||
DistutilsPlatformError, IOError)
|
||||
else:
|
||||
build_ext_errors = (CCompilerError, DistutilsExecError,
|
||||
DistutilsPlatformError)
|
||||
|
||||
class BuildExtFailed(Exception):
|
||||
pass
|
||||
|
||||
class optional_build_ext(build_ext):
|
||||
def run(self):
|
||||
try:
|
||||
build_ext.run(self)
|
||||
except DistutilsPlatformError:
|
||||
raise BuildExtFailed()
|
||||
|
||||
def build_extension(self, ext):
|
||||
try:
|
||||
build_ext.build_extension(self, ext)
|
||||
except build_ext_errors:
|
||||
raise BuildExtFailed()
|
||||
|
||||
setup_kwargs = dict(
|
||||
name = 'wrapt',
|
||||
@@ -18,11 +44,56 @@ setup_kwargs = dict(
|
||||
package_dir={'wrapt': 'src'},
|
||||
)
|
||||
|
||||
setup_extension_kwargs = dict(
|
||||
ext_modules = [Extension("wrapt._wrappers", ["src/_wrappers.c"])],
|
||||
)
|
||||
def run_setup(with_extensions):
|
||||
setup_kwargs_tmp = dict(setup_kwargs)
|
||||
|
||||
if with_extensions:
|
||||
setup_kwargs_tmp['ext_modules'] = [
|
||||
Extension("wrapt._wrappers", ["src/_wrappers.c"])]
|
||||
setup_kwargs_tmp['cmdclass'] = dict(build_ext=optional_build_ext)
|
||||
|
||||
setup(**setup_kwargs_tmp)
|
||||
|
||||
with_extensions = os.environ.get('WRAPT_EXTENSIONS', None)
|
||||
|
||||
if with_extensions:
|
||||
setup_kwargs.update(setup_extension_kwargs)
|
||||
if with_extensions.lower() == 'true':
|
||||
with_extensions = True
|
||||
elif with_extensions.lower() == 'false':
|
||||
with_extensions = False
|
||||
else:
|
||||
with_extensions = None
|
||||
|
||||
setup(**setup_kwargs)
|
||||
if hasattr(sys, 'pypy_version_info'):
|
||||
with_extensions = False
|
||||
|
||||
WARNING = """
|
||||
WARNING: The C extension component for wrapt could not be compiled.
|
||||
"""
|
||||
|
||||
if with_extensions is not None:
|
||||
run_setup(with_extensions=with_extensions)
|
||||
|
||||
else:
|
||||
try:
|
||||
run_setup(with_extensions=True)
|
||||
|
||||
except BuildExtFailed:
|
||||
|
||||
print(75 * '*')
|
||||
|
||||
print(WARNING)
|
||||
print("INFO: Trying to build without extensions.")
|
||||
|
||||
print()
|
||||
print(75 * '*')
|
||||
|
||||
run_setup(with_extensions=False)
|
||||
|
||||
print(75 * '*')
|
||||
|
||||
print(WARNING)
|
||||
print("INFO: Only pure Python version of package installed.")
|
||||
|
||||
print()
|
||||
print(75 * '*')
|
||||
|
||||
Reference in New Issue
Block a user