2009-06-24 14:33:36 +09:00
|
|
|
#!/usr/bin/env python
|
2009-06-10 10:45:07 +09:00
|
|
|
import os
|
2010-11-03 03:35:52 +09:00
|
|
|
import sys
|
2012-06-27 18:16:59 +09:00
|
|
|
from setuptools import setup, Extension
|
2022-03-03 12:29:55 +09:00
|
|
|
from setuptools.command.build_ext import build_ext
|
|
|
|
from setuptools.command.sdist import sdist
|
2012-08-19 02:53:16 +09:00
|
|
|
|
2019-11-28 20:23:34 +09:00
|
|
|
|
|
|
|
PYPY = hasattr(sys, "pypy_version_info")
|
|
|
|
|
|
|
|
|
2013-01-28 12:27:46 +01:00
|
|
|
class NoCython(Exception):
|
|
|
|
pass
|
|
|
|
|
2019-12-05 18:53:49 +09:00
|
|
|
|
2010-01-25 20:52:48 +09:00
|
|
|
try:
|
|
|
|
import Cython.Compiler.Main as cython_compiler
|
2019-12-05 18:53:49 +09:00
|
|
|
|
2010-01-25 20:52:48 +09:00
|
|
|
have_cython = True
|
|
|
|
except ImportError:
|
|
|
|
have_cython = False
|
2009-06-08 01:43:50 +09:00
|
|
|
|
2012-08-19 02:53:16 +09:00
|
|
|
|
|
|
|
def cythonize(src):
|
2023-09-28 15:25:10 +09:00
|
|
|
if not have_cython:
|
|
|
|
raise Exception("Cython is required for building from checkout")
|
2023-05-23 18:41:08 +02:00
|
|
|
sys.stderr.write(f"cythonize: {src!r}\n")
|
2016-07-21 19:32:00 +09:00
|
|
|
cython_compiler.compile([src], cplus=True)
|
2012-08-19 02:53:16 +09:00
|
|
|
|
2019-12-05 18:53:49 +09:00
|
|
|
|
2012-08-19 02:53:16 +09:00
|
|
|
def ensure_source(src):
|
2019-12-05 18:53:49 +09:00
|
|
|
pyx = os.path.splitext(src)[0] + ".pyx"
|
2012-08-19 02:53:16 +09:00
|
|
|
|
2023-09-28 15:25:10 +09:00
|
|
|
if not os.path.exists(src) or have_cython and os.stat(src).st_mtime < os.stat(pyx).st_mtime:
|
2012-08-21 14:56:32 +09:00
|
|
|
cythonize(pyx)
|
2012-08-19 02:53:16 +09:00
|
|
|
|
|
|
|
|
|
|
|
class BuildExt(build_ext):
|
|
|
|
def build_extension(self, ext):
|
2023-09-28 15:25:10 +09:00
|
|
|
for src in ext.sources:
|
|
|
|
ensure_source(src)
|
|
|
|
return build_ext.build_extension(self, ext)
|
2012-08-19 02:53:16 +09:00
|
|
|
|
|
|
|
|
2019-11-28 20:23:34 +09:00
|
|
|
# Cython is required for sdist
|
|
|
|
class Sdist(sdist):
|
|
|
|
def __init__(self, *args, **kwargs):
|
2019-12-05 18:53:49 +09:00
|
|
|
cythonize("msgpack/_cmsgpack.pyx")
|
2019-11-28 20:23:34 +09:00
|
|
|
sdist.__init__(self, *args, **kwargs)
|
2010-01-25 20:52:48 +09:00
|
|
|
|
2019-12-05 18:53:49 +09:00
|
|
|
|
2012-01-18 19:02:11 +01:00
|
|
|
libraries = []
|
2022-01-19 14:42:28 +09:00
|
|
|
macros = []
|
|
|
|
|
2019-12-05 18:53:49 +09:00
|
|
|
if sys.platform == "win32":
|
|
|
|
libraries.append("ws2_32")
|
|
|
|
macros = [("__LITTLE_ENDIAN__", "1")]
|
2010-11-03 03:35:52 +09:00
|
|
|
|
2012-12-11 22:15:21 +09:00
|
|
|
ext_modules = []
|
2023-05-21 09:26:39 +02:00
|
|
|
if not PYPY and not os.environ.get("MSGPACK_PUREPYTHON"):
|
2019-12-05 18:53:49 +09:00
|
|
|
ext_modules.append(
|
|
|
|
Extension(
|
|
|
|
"msgpack._cmsgpack",
|
|
|
|
sources=["msgpack/_cmsgpack.cpp"],
|
|
|
|
libraries=libraries,
|
|
|
|
include_dirs=["."],
|
|
|
|
define_macros=macros,
|
|
|
|
)
|
|
|
|
)
|
2012-12-11 22:15:21 +09:00
|
|
|
del libraries, macros
|
2010-01-25 20:52:48 +09:00
|
|
|
|
2009-06-08 01:43:50 +09:00
|
|
|
|
2019-12-05 18:53:49 +09:00
|
|
|
setup(
|
|
|
|
cmdclass={"build_ext": BuildExt, "sdist": Sdist},
|
|
|
|
ext_modules=ext_modules,
|
|
|
|
packages=["msgpack"],
|
2018-01-07 01:57:47 +09:00
|
|
|
)
|