from setuptools import setup # , find_packages import os import re import sys import platform import warnings from distutils.cmd import Command from distutils.command.build_ext import build_ext from distutils.errors import CCompilerError, DistutilsOptionError from distutils.errors import DistutilsPlatformError, DistutilsExecError from distutils.core import Extension # PYTHON-654 - Clang doesn't support -mno-fused-madd but the pythons Apple # ships are built with it. This is a problem starting with Xcode 5.1 # since clang 3.4 errors out when it encounters unrecognized compiler # flags. This hack removes -mno-fused-madd from the CFLAGS automatically # generated by distutils for Apple provided pythons, allowing C extension # builds to complete without error. The inspiration comes from older # versions of distutils.sysconfig.get_config_vars. if sys.platform == 'darwin' and 'clang' in platform.python_compiler().lower(): from distutils.sysconfig import get_config_vars res = get_config_vars() for key in ('CFLAGS', 'PY_CFLAGS'): if key in res: flags = res[key] flags = re.sub('-mno-fused-madd', '', flags) res[key] = flags if sys.platform == 'win32' and sys.version_info > (2, 6): # 2.6's distutils.msvc9compiler can raise an IOError when failing to # find the compiler build_errors = (CCompilerError, DistutilsExecError, DistutilsPlatformError, IOError) else: build_errors = (CCompilerError, DistutilsExecError, DistutilsPlatformError) class custom_build_ext(build_ext): """Allow C extension building to fail. The C extension speeds up BSON encoding, but is not essential. """ warning_message = """ ******************************************************************** WARNING: %s could not be compiled. No C extensions are essential for PyMongo to run, although they do result in significant speed improvements. %s Please see the installation docs for solutions to build issues: http://api.mongodb.org/python/current/installation.html Here are some hints for popular operating systems: If you are seeing this message on Linux you probably need to install GCC and/or the Python development package for your version of Python. Debian and Ubuntu users should issue the following command: $ sudo apt-get install build-essential python-dev Users of Red Hat based distributions (RHEL, CentOS, Amazon Linux, Oracle Linux, Fedora, etc.) should issue the following command: $ sudo yum install gcc python-devel If you are seeing this message on Microsoft Windows please install PyMongo using the MS Windows installer for your version of Python, available on pypi here: http://pypi.python.org/pypi/pymongo/#downloads If you are seeing this message on OSX please read the documentation here: http://api.mongodb.org/python/current/installation.html#osx ******************************************************************** """ def run(self): try: build_ext.run(self) except DistutilsPlatformError: e = sys.exc_info()[1] sys.stdout.write('%s\n' % str(e)) warnings.warn(self.warning_message % ("Extension modules", "There was an issue with " "your platform configuration" " - see above.")) def build_extension(self, ext): name = ext.name if sys.version_info[:3] >= (2, 6, 0): try: build_ext.build_extension(self, ext) except build_errors: e = sys.exc_info()[1] sys.stdout.write('%s\n' % str(e)) warnings.warn(self.warning_message % ("The %s extension " "module" % (name,), "The output above " "this warning shows how " "the compilation " "failed.")) else: warnings.warn(self.warning_message % ("The %s extension " "module" % (name,), "Please use Python >= 2.6 " "to take advantage of the " "extension.")) ext_modules = [Extension('mongokat._cbson', include_dirs=['mongokat/_bson'], sources=['mongokat/_bson/_cbsonmodule.c', 'mongokat/_bson/time64.c', 'mongokat/_bson/buffer.c', 'mongokat/_bson/encoding_helpers.c']) ] extra_opts = {} if "--no_ext" in sys.argv: sys.argv.remove("--no_ext") elif (sys.platform.startswith("java") or sys.platform == "cli" or "PyPy" in sys.version): sys.stdout.write(""" *****************************************************\n The optional C extensions are currently not supported\n by this python implementation.\n *****************************************************\n """) elif sys.byteorder == "big": sys.stdout.write(""" *****************************************************\n The optional C extensions are currently not supported\n on big endian platforms and will not be built.\n Performance may be degraded.\n *****************************************************\n """) else: extra_opts['ext_modules'] = ext_modules def get_requirements(): reqs = [] for filename in ["requirements.txt"]: with open(filename, "r") as f: reqs += [x.strip() for x in f.readlines() if x.strip() and not x.strip().startswith("#")] return reqs def get_version(): basedir = os.path.dirname(__file__) with open(os.path.join(basedir, 'mongokat/version.py')) as f: locals = {} exec(f.read(), locals) return locals['VERSION'] raise RuntimeError('No version info found.') try: long_desc = open("docs/index.rst", "").read() except: long_desc = "" setup( name="mongokat", include_package_data=True, packages=['mongokat'], version=get_version(), description="Lightweight MongoDB ORM/ODM", author="Pricing Assistant", license='MIT', author_email="contact@pricingassistant.com", url="http://github.com/pricingassistant/mongokat", # download_url="http://chardet.feedparser.org/download/python3-chardet-1.0.1.tgz", keywords=["mongodb", "mongo", "orm", "odm", "mongokit"], platforms='any', entry_points={ 'console_scripts': [ ] }, # dependency_links=[ # "http://github.com/mongodb/mongo-python-driver/archive/cb4adb2193a83413bc5545d89b7bbde4d6087761.zip#egg=pymongo-2.7rc1" # ], zip_safe=False, cmdclass={"build_ext": custom_build_ext}, install_requires=get_requirements(), classifiers=[ "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", #'Development Status :: 1 - Planning', #'Development Status :: 2 - Pre-Alpha', #'Development Status :: 3 - Alpha', 'Development Status :: 4 - Beta', #'Development Status :: 5 - Production/Stable', #'Development Status :: 6 - Mature', #'Development Status :: 7 - Inactive', "Environment :: Other Environment", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Topic :: Utilities" ], long_description=long_desc, **extra_opts )