mongo-python-driver/setup.py
2011-10-24 18:20:12 -04:00

208 lines
6.5 KiB
Python
Executable File

#!/usr/bin/env python
import sys
import os
try:
import subprocess
has_subprocess = True
except:
has_subprocess = False
import shutil
from ez_setup import use_setuptools
use_setuptools()
from setuptools import setup
from setuptools import Feature
from distutils.cmd import Command
from distutils.command.build_ext import build_ext
from distutils.errors import CCompilerError
from distutils.errors import DistutilsPlatformError, DistutilsExecError
from distutils.core import Extension
from pymongo import version
f = open("README.rst")
try:
try:
readme_content = f.read()
except:
readme_content = ""
finally:
f.close()
class doc(Command):
description = "generate or test documentation"
user_options = [("test", "t",
"run doctests instead of generating documentation")]
boolean_options = ["test"]
def initialize_options(self):
self.test = False
def finalize_options(self):
pass
def run(self):
if self.test:
path = "doc/_build/doctest"
mode = "doctest"
else:
path = "doc/_build/%s" % version
mode = "html"
# shutil.rmtree("doc/_build", ignore_errors=True)
try:
os.makedirs(path)
except:
pass
if has_subprocess:
status = subprocess.call(["sphinx-build", "-E", "-b", mode, "doc", path])
if status:
raise RuntimeError("documentation step '%s' failed" % mode)
print ""
print "Documentation step '%s' performed, results here:" % mode
print " %s/" % path
else:
print """
`setup.py doc` is not supported for this version of Python.
Please ask in the user forums for help.
"""
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.
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. Python development package names for popular
Linux distributions include:
RHEL/CentOS: python-devel
Debian/Ubuntu: python-dev
%s
**************************************************************
"""
def run(self):
try:
build_ext.run(self)
except DistutilsPlatformError, e:
print e
print self.warning_message % ("Extension modules",
"There was an issue with your "
"platform configuration "
"- see above.")
def build_extension(self, ext):
if sys.version_info[:3] >= (2, 4, 0):
try:
build_ext.build_extension(self, ext)
except build_errors, e:
print e
print self.warning_message % ("The %s extension "
"module" % ext.name,
"Above is the ouput showing how "
"the compilation failed.")
else:
print self.warning_message % ("The %s extension module" % ext.name,
"Please use Python >= 2.4 to take "
"advantage of the extension.")
c_ext = Feature(
"optional C extensions",
standard=True,
ext_modules=[Extension('bson._cbson',
include_dirs=['bson'],
sources=['bson/_cbsonmodule.c',
'bson/time64.c',
'bson/buffer.c',
'bson/encoding_helpers.c']),
Extension('pymongo._cmessage',
include_dirs=['bson'],
sources=['pymongo/_cmessagemodule.c',
'bson/_cbsonmodule.c',
'bson/time64.c',
'bson/buffer.c',
'bson/encoding_helpers.c'])])
if "--no_ext" in sys.argv:
sys.argv = [x for x in sys.argv if x != "--no_ext"]
features = {}
elif (sys.platform.startswith("java") or
sys.platform == "cli" or
"PyPy" in sys.version):
print """
*****************************************************
The optional C extensions are currently not supported
by this python implementation.
*****************************************************
"""
features = {}
elif sys.byteorder == "big":
print """
*****************************************************
The optional C extensions are currently not supported
on big endian platforms and will not be built.
Performance may be degraded.
*****************************************************
"""
features = {}
else:
features = {"c-ext": c_ext}
setup(
name="pymongo",
version=version,
description="Python driver for MongoDB <http://www.mongodb.org>",
long_description=readme_content,
author="Mike Dirolf",
author_email="mongodb-user@googlegroups.com",
maintainer="Bernie Hackett",
maintainer_email="bernie@10gen.com",
url="http://github.com/mongodb/mongo-python-driver",
keywords=["mongo", "mongodb", "pymongo", "gridfs", "bson"],
packages=["bson", "pymongo", "gridfs"],
install_requires=[],
features=features,
license="Apache License, Version 2.0",
tests_require=['nose'],
test_suite="nose.collector",
classifiers=[
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"License :: OSI Approved :: Apache Software License",
"Operating System :: MacOS :: MacOS X",
"Operating System :: Microsoft :: Windows",
"Operating System :: POSIX",
"Programming Language :: Python",
"Topic :: Database"],
cmdclass={"build_ext": custom_build_ext,
"doc": doc})