mirror of
				https://github.com/msgpack/msgpack-python.git
				synced 2025-10-31 09:30:53 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			122 lines
		
	
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			122 lines
		
	
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!/usr/bin/env python
 | |
| # coding: utf-8
 | |
| import os
 | |
| import sys
 | |
| from glob import glob
 | |
| from distutils.command.sdist import sdist
 | |
| from setuptools import setup, Extension
 | |
| 
 | |
| from distutils.command.build_ext import build_ext
 | |
| 
 | |
| 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, emit_linenums=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 extensiom modules.")
 | |
|             print("msgpack uses fallback pure python implementation.")
 | |
|             print(e)
 | |
| 
 | |
| 
 | |
| exec(open('msgpack/_version.py').read())
 | |
| 
 | |
| version_str = '.'.join(str(x) for x in version[:3])
 | |
| if len(version) > 3 and version[3] != 'final':
 | |
|     version_str += version[3]
 | |
| 
 | |
| # take care of extension modules.
 | |
| if have_cython:
 | |
|     class Sdist(sdist):
 | |
|         def __init__(self, *args, **kwargs):
 | |
|             for src in glob('msgpack/*.pyx'):
 | |
|                 cythonize(src)
 | |
|             sdist.__init__(self, *args, **kwargs)
 | |
| else:
 | |
|     Sdist = sdist
 | |
| 
 | |
| libraries = []
 | |
| if sys.platform == 'win32':
 | |
|     libraries.append('ws2_32')
 | |
| 
 | |
| if sys.byteorder == 'big':
 | |
|     macros = [('__BIG_ENDIAN__', '1')]
 | |
| else:
 | |
|     macros = [('__LITTLE_ENDIAN__', '1')]
 | |
| 
 | |
| ext_modules = []
 | |
| if not hasattr(sys, 'pypy_version_info'):
 | |
|     ext_modules.append(Extension('msgpack._packer',
 | |
|                                  sources=['msgpack/_packer.cpp'],
 | |
|                                  libraries=libraries,
 | |
|                                  include_dirs=['.'],
 | |
|                                  define_macros=macros,
 | |
|                                  ))
 | |
|     ext_modules.append(Extension('msgpack._unpacker',
 | |
|                                  sources=['msgpack/_unpacker.cpp'],
 | |
|                                  libraries=libraries,
 | |
|                                  include_dirs=['.'],
 | |
|                                  define_macros=macros,
 | |
|                                  ))
 | |
| del libraries, macros
 | |
| 
 | |
| 
 | |
| desc = 'MessagePack (de)serializer.'
 | |
| f = open('README.rst')
 | |
| long_desc = f.read()
 | |
| f.close()
 | |
| del f
 | |
| 
 | |
| setup(name='msgpack-python',
 | |
|       author='INADA Naoki',
 | |
|       author_email='songofacandy@gmail.com',
 | |
|       version=version_str,
 | |
|       cmdclass={'build_ext': BuildExt, 'sdist': Sdist},
 | |
|       ext_modules=ext_modules,
 | |
|       packages=['msgpack'],
 | |
|       description=desc,
 | |
|       long_description=long_desc,
 | |
|       url='http://msgpack.org/',
 | |
|       download_url='http://pypi.python.org/pypi/msgpack/',
 | |
|       classifiers=[
 | |
|           'Programming Language :: Python :: 2',
 | |
|           'Programming Language :: Python :: 3',
 | |
|           'Intended Audience :: Developers',
 | |
|           'License :: OSI Approved :: Apache Software License',
 | |
|           ]
 | |
|       )
 | 
