| Index: third_party/twisted_8_1/twisted/python/dist.py
|
| diff --git a/third_party/twisted_8_1/twisted/python/dist.py b/third_party/twisted_8_1/twisted/python/dist.py
|
| deleted file mode 100644
|
| index 4fe86f6ac159801ce14d66c7a6d0d39bcd561f93..0000000000000000000000000000000000000000
|
| --- a/third_party/twisted_8_1/twisted/python/dist.py
|
| +++ /dev/null
|
| @@ -1,361 +0,0 @@
|
| -"""
|
| -Distutils convenience functionality.
|
| -
|
| -Don't use this outside of Twisted.
|
| -
|
| -Maintainer: U{Christopher Armstrong<mailto:radix@twistedmatrix.com>}
|
| -"""
|
| -
|
| -import sys, os
|
| -from distutils.command import build_scripts, install_data, build_ext, build_py
|
| -from distutils.errors import CompileError
|
| -from distutils import core
|
| -from distutils.core import Extension
|
| -
|
| -twisted_subprojects = ["conch", "flow", "lore", "mail", "names",
|
| - "news", "pair", "runner", "web", "web2",
|
| - "words", "vfs"]
|
| -
|
| -
|
| -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 sys.version_info[:3] < (2, 3, 0):
|
| - kw['cmdclass']['build_py'] = build_py_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"]
|
| -
|
| -import fnmatch
|
| -
|
| -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 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)
|
| - if '.svn' in thingies:
|
| - thingies.remove('.svn')
|
| - return filter(os.path.isfile,
|
| - [os.path.join(scriptdir, x) for x in thingies])
|
| -
|
| -
|
| -## Helpers and distutil tweaks
|
| -
|
| -class build_py_twisted(build_py.build_py):
|
| - """
|
| - Changes behavior in Python 2.2 to support simultaneous specification of
|
| - `packages' and `py_modules'.
|
| - """
|
| - def run(self):
|
| - if self.py_modules:
|
| - self.build_modules()
|
| - if self.packages:
|
| - self.build_packages()
|
| - self.byte_compile(self.get_outputs(include_bytecode=0))
|
| -
|
| -
|
| -
|
| -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"):
|
| - try:
|
| - os.unlink(fpath + ".py")
|
| - except EnvironmentError, e:
|
| - if e.args[1]=='No such file or directory':
|
| - pass
|
| - os.rename(fpath, fpath + ".py")
|
| -
|
| -
|
| -
|
| -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)
|
| -
|
|
|