mirror of
				https://github.com/msgpack/msgpack-python.git
				synced 2025-10-31 17:40:54 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			99 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
| #!/usr/bin/env python
 | |
| # coding: utf-8
 | |
| import io
 | |
| import os
 | |
| import sys
 | |
| from glob import glob
 | |
| from setuptools import setup, Extension
 | |
| from setuptools.command.build_ext import build_ext
 | |
| from setuptools.command.sdist import sdist
 | |
| 
 | |
| 
 | |
| PYPY = hasattr(sys, "pypy_version_info")
 | |
| PY2 = sys.version_info[0] == 2
 | |
| 
 | |
| 
 | |
| class NoCython(Exception):
 | |
|     pass
 | |
| 
 | |
| 
 | |
| try:
 | |
|     import Cython.Compiler.Main as cython_compiler
 | |
| 
 | |
|     have_cython = True
 | |
| except ImportError:
 | |
|     have_cython = False
 | |
| 
 | |
| 
 | |
| def cythonize(src):
 | |
|     sys.stderr.write("cythonize: %r\n" % (src,))
 | |
|     cython_compiler.compile([src], cplus=True)
 | |
| 
 | |
| 
 | |
| def ensure_source(src):
 | |
|     pyx = os.path.splitext(src)[0] + ".pyx"
 | |
| 
 | |
|     if not os.path.exists(src):
 | |
|         if not have_cython:
 | |
|             raise NoCython
 | |
|         cythonize(pyx)
 | |
|     elif (
 | |
|         os.path.exists(pyx)
 | |
|         and os.stat(src).st_mtime < os.stat(pyx).st_mtime
 | |
|         and have_cython
 | |
|     ):
 | |
|         cythonize(pyx)
 | |
|     return src
 | |
| 
 | |
| 
 | |
| class BuildExt(build_ext):
 | |
|     def build_extension(self, ext):
 | |
|         try:
 | |
|             ext.sources = list(map(ensure_source, ext.sources))
 | |
|         except NoCython:
 | |
|             print("WARNING")
 | |
|             print("Cython is required for building extension from checkout.")
 | |
|             print("Install Cython >= 0.16 or install msgpack from PyPI.")
 | |
|             print("Falling back to pure Python implementation.")
 | |
|             return
 | |
|         try:
 | |
|             return build_ext.build_extension(self, ext)
 | |
|         except Exception as e:
 | |
|             print("WARNING: Failed to compile extension modules.")
 | |
|             print("msgpack uses fallback pure python implementation.")
 | |
|             print(e)
 | |
| 
 | |
| 
 | |
| # Cython is required for sdist
 | |
| class Sdist(sdist):
 | |
|     def __init__(self, *args, **kwargs):
 | |
|         cythonize("msgpack/_cmsgpack.pyx")
 | |
|         sdist.__init__(self, *args, **kwargs)
 | |
| 
 | |
| 
 | |
| libraries = []
 | |
| macros = []
 | |
| 
 | |
| if sys.platform == "win32":
 | |
|     libraries.append("ws2_32")
 | |
|     macros = [("__LITTLE_ENDIAN__", "1")]
 | |
| 
 | |
| ext_modules = []
 | |
| if not PYPY and not PY2 and not os.environ.get("MSGPACK_PUREPYTHON"):
 | |
|     ext_modules.append(
 | |
|         Extension(
 | |
|             "msgpack._cmsgpack",
 | |
|             sources=["msgpack/_cmsgpack.cpp"],
 | |
|             libraries=libraries,
 | |
|             include_dirs=["."],
 | |
|             define_macros=macros,
 | |
|         )
 | |
|     )
 | |
| del libraries, macros
 | |
| 
 | |
| 
 | |
| setup(
 | |
|     cmdclass={"build_ext": BuildExt, "sdist": Sdist},
 | |
|     ext_modules=ext_modules,
 | |
|     packages=["msgpack"],
 | |
| )
 | 
