#!/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)