blob: c8b58775f8aedc10addddda24ce39ac118d2d280 [file] [log] [blame]
#!/usr/bin/env python
# Copyright (c) 2001-2009 Twisted Matrix Laboratories.
# See LICENSE for details.
"""
Distutils installer for Twisted.
"""
try:
# Load setuptools, to build a specific source package
import setuptools
except ImportError:
pass
import sys, os
def getExtensions():
"""
Get all extensions from core and all subprojects.
"""
extensions = []
if not sys.platform.startswith('java'):
for dir in os.listdir("twisted") + [""]:
topfiles = os.path.join("twisted", dir, "topfiles")
if os.path.isdir(topfiles):
ns = {}
setup_py = os.path.join(topfiles, "setup.py")
execfile(setup_py, ns, ns)
if "extensions" in ns:
extensions.extend(ns["extensions"])
return extensions
def main(args):
"""
Invoke twisted.python.dist with the appropriate metadata about the
Twisted package.
"""
if os.path.exists('twisted'):
sys.path.insert(0, '.')
from twisted import copyright
from twisted.python.dist import getDataFiles, getScripts, getPackages, setup
# "" is included because core scripts are directly in bin/
projects = [''] + [x for x in os.listdir('bin')
if os.path.isdir(os.path.join("bin", x))
and not x.startswith(".")]
scripts = []
for i in projects:
scripts.extend(getScripts(i))
setup_args = dict(
# metadata
name="Twisted",
version=copyright.version,
description="An asynchronous networking framework written in "
"Python",
author="Twisted Matrix Laboratories",
author_email="twisted-python@twistedmatrix.com",
maintainer="Glyph Lefkowitz",
maintainer_email="glyph@twistedmatrix.com",
url="http://twistedmatrix.com/",
license="MIT",
long_description="""\
An extensible framework for Python programming, with special focus
on event-based network programming and multiprotocol integration.
""",
packages = getPackages('twisted'),
conditionalExtensions = getExtensions(),
scripts = scripts,
data_files=getDataFiles('twisted'),
)
if 'setuptools' in sys.modules:
from pkg_resources import parse_requirements
requirements = ["zope.interface"]
try:
list(parse_requirements(requirements))
except:
print """You seem to be running a very old version of setuptools.
This version of setuptools has a bug parsing dependencies, so automatic
dependency resolution is disabled.
"""
else:
setup_args['install_requires'] = requirements
setup_args['include_package_data'] = True
setup_args['zip_safe'] = False
setup(**setup_args)
if __name__ == "__main__":
try:
main(sys.argv[1:])
except KeyboardInterrupt:
sys.exit(1)