aboutsummaryrefslogtreecommitdiffstats
path: root/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/python/dist.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/python/dist.py')
-rwxr-xr-xlib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/python/dist.py427
1 files changed, 0 insertions, 427 deletions
diff --git a/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/python/dist.py b/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/python/dist.py
deleted file mode 100755
index 26e5b57a..00000000
--- a/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/python/dist.py
+++ /dev/null
@@ -1,427 +0,0 @@
-# -*- test-case-name: twisted.python.test.test_dist -*-
-# Copyright (c) Twisted Matrix Laboratories.
-# See LICENSE for details.
-
-"""
-Distutils convenience functionality.
-
-Don't use this outside of Twisted.
-
-Maintainer: Christopher Armstrong
-"""
-
-from distutils.command import build_scripts, install_data, build_ext
-from distutils.errors import CompileError
-from distutils import core
-from distutils.core import Extension
-import fnmatch
-import os
-import platform
-import sys
-
-from twisted.python.compat import execfile
-
-
-twisted_subprojects = ["conch", "lore", "mail", "names",
- "news", "pair", "runner", "web",
- "words"]
-
-
-
-class ConditionalExtension(Extension):
- """
- An extension module that will only be compiled if certain conditions are
- met.
-
- @param condition: A callable of one argument which returns True or False to
- indicate whether the extension should be built. The argument is an
- instance of L{build_ext_twisted}, which has useful methods for checking
- things about the platform.
- """
- def __init__(self, *args, **kwargs):
- self.condition = kwargs.pop("condition", lambda builder: True)
- Extension.__init__(self, *args, **kwargs)
-
-
-
-def setup(**kw):
- """
- An alternative to distutils' setup() which is specially designed
- for Twisted subprojects.
-
- Pass twisted_subproject=projname if you want package and data
- files to automatically be found for you.
-
- @param conditionalExtensions: Extensions to optionally build.
- @type conditionalExtensions: C{list} of L{ConditionalExtension}
- """
- return core.setup(**get_setup_args(**kw))
-
-
-def get_setup_args(**kw):
- if 'twisted_subproject' in kw:
- if 'twisted' not in os.listdir('.'):
- raise RuntimeError("Sorry, you need to run setup.py from the "
- "toplevel source directory.")
- projname = kw['twisted_subproject']
- projdir = os.path.join('twisted', projname)
-
- kw['packages'] = getPackages(projdir, parent='twisted')
- kw['version'] = getVersion(projname)
-
- plugin = "twisted/plugins/twisted_" + projname + ".py"
- if os.path.exists(plugin):
- kw.setdefault('py_modules', []).append(
- plugin.replace("/", ".")[:-3])
-
- kw['data_files'] = getDataFiles(projdir, parent='twisted')
-
- del kw['twisted_subproject']
- else:
- if 'plugins' in kw:
- py_modules = []
- for plg in kw['plugins']:
- py_modules.append("twisted.plugins." + plg)
- kw.setdefault('py_modules', []).extend(py_modules)
- del kw['plugins']
-
- if 'cmdclass' not in kw:
- kw['cmdclass'] = {
- 'install_data': install_data_twisted,
- 'build_scripts': build_scripts_twisted}
-
- if "conditionalExtensions" in kw:
- extensions = kw["conditionalExtensions"]
- del kw["conditionalExtensions"]
-
- if 'ext_modules' not in kw:
- # This is a workaround for distutils behavior; ext_modules isn't
- # actually used by our custom builder. distutils deep-down checks
- # to see if there are any ext_modules defined before invoking
- # the build_ext command. We need to trigger build_ext regardless
- # because it is the thing that does the conditional checks to see
- # if it should build any extensions. The reason we have to delay
- # the conditional checks until then is that the compiler objects
- # are not yet set up when this code is executed.
- kw["ext_modules"] = extensions
-
- class my_build_ext(build_ext_twisted):
- conditionalExtensions = extensions
- kw.setdefault('cmdclass', {})['build_ext'] = my_build_ext
- return kw
-
-
-def getVersion(proj, base="twisted"):
- """
- Extract the version number for a given project.
-
- @param proj: the name of the project. Examples are "core",
- "conch", "words", "mail".
-
- @rtype: str
- @returns: The version number of the project, as a string like
- "2.0.0".
- """
- if proj == 'core':
- vfile = os.path.join(base, '_version.py')
- else:
- vfile = os.path.join(base, proj, '_version.py')
- ns = {'__name__': 'Nothing to see here'}
- execfile(vfile, ns)
- return ns['version'].base()
-
-
-# Names that are exluded from globbing results:
-EXCLUDE_NAMES = ["{arch}", "CVS", ".cvsignore", "_darcs",
- "RCS", "SCCS", ".svn"]
-EXCLUDE_PATTERNS = ["*.py[cdo]", "*.s[ol]", ".#*", "*~", "*.py"]
-
-
-def _filterNames(names):
- """
- Given a list of file names, return those names that should be copied.
- """
- names = [n for n in names
- if n not in EXCLUDE_NAMES]
- # This is needed when building a distro from a working
- # copy (likely a checkout) rather than a pristine export:
- for pattern in EXCLUDE_PATTERNS:
- names = [n for n in names
- if (not fnmatch.fnmatch(n, pattern))
- and (not n.endswith('.py'))]
- return names
-
-
-def relativeTo(base, relativee):
- """
- Gets 'relativee' relative to 'basepath'.
-
- i.e.,
-
- >>> relativeTo('/home/', '/home/radix/')
- 'radix'
- >>> relativeTo('.', '/home/radix/Projects/Twisted') # curdir is /home/radix
- 'Projects/Twisted'
-
- The 'relativee' must be a child of 'basepath'.
- """
- basepath = os.path.abspath(base)
- relativee = os.path.abspath(relativee)
- if relativee.startswith(basepath):
- relative = relativee[len(basepath):]
- if relative.startswith(os.sep):
- relative = relative[1:]
- return os.path.join(base, relative)
- raise ValueError("%s is not a subpath of %s" % (relativee, basepath))
-
-
-def getDataFiles(dname, ignore=None, parent=None):
- """
- Get all the data files that should be included in this distutils Project.
-
- 'dname' should be the path to the package that you're distributing.
-
- 'ignore' is a list of sub-packages to ignore. This facilitates
- disparate package hierarchies. That's a fancy way of saying that
- the 'twisted' package doesn't want to include the 'twisted.conch'
- package, so it will pass ['conch'] as the value.
-
- 'parent' is necessary if you're distributing a subpackage like
- twisted.conch. 'dname' should point to 'twisted/conch' and 'parent'
- should point to 'twisted'. This ensures that your data_files are
- generated correctly, only using relative paths for the first element
- of the tuple ('twisted/conch/*').
- The default 'parent' is the current working directory.
- """
- parent = parent or "."
- ignore = ignore or []
- result = []
- for directory, subdirectories, filenames in os.walk(dname):
- resultfiles = []
- for exname in EXCLUDE_NAMES:
- if exname in subdirectories:
- subdirectories.remove(exname)
- for ig in ignore:
- if ig in subdirectories:
- subdirectories.remove(ig)
- for filename in _filterNames(filenames):
- resultfiles.append(filename)
- if resultfiles:
- result.append((relativeTo(parent, directory),
- [relativeTo(parent,
- os.path.join(directory, filename))
- for filename in resultfiles]))
- return result
-
-
-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 getPackages(dname, pkgname=None, results=None, ignore=None, parent=None):
- """
- Get all packages which are under dname. This is necessary for
- Python 2.2's distutils. Pretty similar arguments to getDataFiles,
- including 'parent'.
- """
- parent = parent or ""
- prefix = []
- if parent:
- prefix = [parent]
- bname = os.path.basename(dname)
- ignore = ignore or []
- if bname in ignore:
- return []
- if results is None:
- results = []
- if pkgname is None:
- pkgname = []
- subfiles = os.listdir(dname)
- abssubfiles = [os.path.join(dname, x) for x in subfiles]
- if '__init__.py' in subfiles:
- results.append(prefix + pkgname + [bname])
- for subdir in filter(os.path.isdir, abssubfiles):
- getPackages(subdir, pkgname=pkgname + [bname],
- results=results, ignore=ignore,
- parent=parent)
- res = ['.'.join(result) for result in results]
- return res
-
-
-def getScripts(projname, basedir=''):
- """
- Returns a list of scripts for a Twisted subproject; this works in
- any of an SVN checkout, a project-specific tarball.
- """
- scriptdir = os.path.join(basedir, 'bin', projname)
- if not os.path.isdir(scriptdir):
- # Probably a project-specific tarball, in which case only this
- # project's bins are included in 'bin'
- scriptdir = os.path.join(basedir, 'bin')
- if not os.path.isdir(scriptdir):
- return []
- thingies = os.listdir(scriptdir)
- for specialExclusion in ['.svn', '_preamble.py', '_preamble.pyc']:
- if specialExclusion in thingies:
- thingies.remove(specialExclusion)
- return filter(os.path.isfile,
- [os.path.join(scriptdir, x) for x in thingies])
-
-
-## Helpers and distutil tweaks
-
-class build_scripts_twisted(build_scripts.build_scripts):
- """
- Renames scripts so they end with '.py' on Windows.
- """
- def run(self):
- build_scripts.build_scripts.run(self)
- if not os.name == "nt":
- return
- for f in os.listdir(self.build_dir):
- fpath = os.path.join(self.build_dir, f)
- if not fpath.endswith(".py"):
- pypath = fpath + ".py"
- if os.path.exists(pypath):
- os.unlink(pypath)
- os.rename(fpath, pypath)
-
-
-
-class install_data_twisted(install_data.install_data):
- """
- I make sure data files are installed in the package directory.
- """
- def finalize_options(self):
- self.set_undefined_options('install',
- ('install_lib', 'install_dir')
- )
- install_data.install_data.finalize_options(self)
-
-
-
-class build_ext_twisted(build_ext.build_ext):
- """
- Allow subclasses to easily detect and customize Extensions to
- build at install-time.
- """
-
- def prepare_extensions(self):
- """
- Prepare the C{self.extensions} attribute (used by
- L{build_ext.build_ext}) by checking which extensions in
- L{conditionalExtensions} should be built. In addition, if we are
- building on NT, define the WIN32 macro to 1.
- """
- # always define WIN32 under Windows
- if os.name == 'nt':
- self.define_macros = [("WIN32", 1)]
- else:
- self.define_macros = []
- self.extensions = [x for x in self.conditionalExtensions
- if x.condition(self)]
- for ext in self.extensions:
- ext.define_macros.extend(self.define_macros)
-
-
- def build_extensions(self):
- """
- Check to see which extension modules to build and then build them.
- """
- self.prepare_extensions()
- build_ext.build_ext.build_extensions(self)
-
-
- def _remove_conftest(self):
- for filename in ("conftest.c", "conftest.o", "conftest.obj"):
- try:
- os.unlink(filename)
- except EnvironmentError:
- pass
-
-
- def _compile_helper(self, content):
- conftest = open("conftest.c", "w")
- try:
- conftest.write(content)
- conftest.close()
-
- try:
- self.compiler.compile(["conftest.c"], output_dir='')
- except CompileError:
- return False
- return True
- finally:
- self._remove_conftest()
-
-
- def _check_header(self, header_name):
- """
- Check if the given header can be included by trying to compile a file
- that contains only an #include line.
- """
- self.compiler.announce("checking for %s ..." % header_name, 0)
- return self._compile_helper("#include <%s>\n" % header_name)
-
-
-
-def _checkCPython(sys=sys, platform=platform):
- """
- Checks if this implementation is CPython.
-
- On recent versions of Python, will use C{platform.python_implementation}.
- On 2.5, it will try to extract the implementation from sys.subversion. On
- older versions (currently the only supported older version is 2.4), checks
- if C{__pypy__} is in C{sys.modules}, since PyPy is the implementation we
- really care about. If it isn't, assumes CPython.
-
- This takes C{sys} and C{platform} kwargs that by default use the real
- modules. You shouldn't care about these -- they are for testing purposes
- only.
-
- @return: C{False} if the implementation is definitely not CPython, C{True}
- otherwise.
- """
- try:
- return platform.python_implementation() == "CPython"
- except AttributeError:
- # For 2.5:
- try:
- implementation, _, _ = sys.subversion
- return implementation == "CPython"
- except AttributeError:
- pass
-
- # Are we on Pypy?
- if "__pypy__" in sys.modules:
- return False
-
- # No? Well, then we're *probably* on CPython.
- return True
-
-
-_isCPython = _checkCPython()
-
-
-def _hasEpoll(builder):
- """
- Checks if the header for building epoll (C{sys/epoll.h}) is available.
-
- @return: C{True} if the header is available, C{False} otherwise.
- """
- return builder._check_header("sys/epoll.h")