mirror of
https://github.com/clearlinux/uwsgi.git
synced 2026-05-14 02:33:51 +00:00
119 lines
3.7 KiB
Python
119 lines
3.7 KiB
Python
# encoding: utf-8
|
|
|
|
"""
|
|
This is a hack allowing you installing
|
|
uWSGI and uwsgidecorators via pip and easy_install
|
|
since 1.9.11 it automatically detects pypy
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
import errno
|
|
import shlex
|
|
import uwsgiconfig
|
|
|
|
from setuptools import setup
|
|
from setuptools.command.build_ext import build_ext
|
|
from distutils.core import Extension
|
|
|
|
|
|
class uWSGIBuildExt(build_ext):
|
|
|
|
UWSGI_NAME = 'uwsgi'
|
|
UWSGI_PLUGIN = 'pyuwsgi'
|
|
|
|
def build_extensions(self):
|
|
self.uwsgi_setup()
|
|
# XXX: needs uwsgiconfig fix
|
|
self.uwsgi_build()
|
|
if 'UWSGI_USE_DISTUTILS' not in os.environ:
|
|
# XXX: needs uwsgiconfig fix
|
|
# uwsgiconfig.build_uwsgi(self.uwsgi_config)
|
|
return
|
|
|
|
else:
|
|
# XXX: needs uwsgiconfig fix
|
|
os.unlink(self.uwsgi_config.get('bin_name'))
|
|
|
|
# FIXME: else build fails :(
|
|
for baddie in set(self.compiler.compiler_so) & set(('-Wstrict-prototypes',)):
|
|
self.compiler.compiler_so.remove(baddie)
|
|
|
|
build_ext.build_extensions(self)
|
|
|
|
def uwsgi_setup(self):
|
|
default = 'pypy' if '__pypy__' in sys.builtin_module_names else 'default'
|
|
profile = os.environ.get('UWSGI_PROFILE') or 'buildconf/%s.ini' % default
|
|
|
|
if not profile.endswith('.ini'):
|
|
profile = profile + '.ini'
|
|
if '/' not in profile:
|
|
profile = 'buildconf/' + profile
|
|
|
|
# FIXME: update uwsgiconfig to properly set _EVERYTHING_!
|
|
config = uwsgiconfig.uConf(profile)
|
|
# insert in the beginning so UWSGI_PYTHON_NOLIB is exported
|
|
# before the python plugin compiles
|
|
ep = config.get('embedded_plugins').split(',')
|
|
if self.UWSGI_PLUGIN in ep:
|
|
ep.remove(self.UWSGI_PLUGIN)
|
|
ep.insert(0, self.UWSGI_PLUGIN)
|
|
config.set('embedded_plugins', ','.join(ep))
|
|
config.set('as_shared_library', 'true')
|
|
config.set('bin_name', self.get_ext_fullpath(self.UWSGI_NAME))
|
|
try:
|
|
os.makedirs(os.path.dirname(config.get('bin_name')))
|
|
except OSError as e:
|
|
if e.errno != errno.EEXIST:
|
|
raise
|
|
|
|
self.uwsgi_profile = profile
|
|
self.uwsgi_config = config
|
|
|
|
def uwsgi_build(self):
|
|
uwsgiconfig.build_uwsgi(self.uwsgi_config)
|
|
|
|
# XXX: merge uwsgi_setup (see other comments)
|
|
for ext in self.extensions:
|
|
if ext.name == self.UWSGI_NAME:
|
|
ext.sources = [s + '.c' for s in self.uwsgi_config.gcc_list]
|
|
ext.library_dirs = self.uwsgi_config.include_path[:]
|
|
ext.libraries = list()
|
|
ext.extra_compile_args = list()
|
|
|
|
for x in uwsgiconfig.uniq_warnings(
|
|
self.uwsgi_config.ldflags + self.uwsgi_config.libs,
|
|
):
|
|
for y in shlex.split(x):
|
|
if y.startswith('-l'):
|
|
ext.libraries.append(y[2:])
|
|
elif y.startswith('-L'):
|
|
ext.library_dirs.append(y[2:])
|
|
|
|
for x in self.uwsgi_config.cflags:
|
|
for y in shlex.split(x):
|
|
if y:
|
|
ext.extra_compile_args.append(y)
|
|
|
|
|
|
setup(
|
|
name='uWSGI',
|
|
license='GPL2',
|
|
version=uwsgiconfig.uwsgi_version,
|
|
author='Unbit',
|
|
author_email='info@unbit.it',
|
|
description='The uWSGI server',
|
|
cmdclass={
|
|
'build_ext': uWSGIBuildExt,
|
|
},
|
|
py_modules=[
|
|
'uwsgidecorators',
|
|
],
|
|
ext_modules=[
|
|
Extension(uWSGIBuildExt.UWSGI_NAME, sources=[]),
|
|
],
|
|
entry_points={
|
|
'console_scripts': ['uwsgi=%s:run' % uWSGIBuildExt.UWSGI_NAME],
|
|
},
|
|
)
|