aboutsummaryrefslogtreecommitdiffstats
path: root/setuptools/dist.py
diff options
context:
space:
mode:
Diffstat (limited to 'setuptools/dist.py')
-rw-r--r--setuptools/dist.py69
1 files changed, 55 insertions, 14 deletions
diff --git a/setuptools/dist.py b/setuptools/dist.py
index 3c7ff852..a603ade0 100644
--- a/setuptools/dist.py
+++ b/setuptools/dist.py
@@ -11,6 +11,32 @@ from distutils.errors import DistutilsOptionError, DistutilsPlatformError
from distutils.errors import DistutilsSetupError
import setuptools, pkg_resources
+def get_command_class(self, command):
+ """Pluggable version of get_command_class()"""
+ if command in self.cmdclass:
+ return self.cmdclass[command]
+
+ for dist in pkg_resources.working_set:
+ if dist.get_entry_info('distutils.commands',command):
+ cmdclass = dist.load_entry_point('distutils.commands',command)
+ self.cmdclass[command] = cmdclass
+ return cmdclass
+ else:
+ return _old_get_command_class(self, command)
+
+def print_commands(self):
+ for dist in pkg_resources.working_set:
+ for cmd,ep in dist.get_entry_map('distutils.commands').items():
+ if cmd not in self.cmdclass:
+ cmdclass = ep.load() # don't require extras, we're not running
+ self.cmdclass[cmd] = cmdclass
+ return _old_print_commands(self)
+
+for meth in 'print_commands', 'get_command_class':
+ if getattr(_Distribution,meth).im_func.func_globals is not globals():
+ globals()['_old_'+meth] = getattr(_Distribution,meth)
+ setattr(_Distribution, meth, globals()[meth])
+
sequence = tuple, list
class Distribution(_Distribution):
@@ -80,6 +106,21 @@ class Distribution(_Distribution):
distribution for the included and excluded features.
"""
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
def __init__ (self, attrs=None):
have_package_data = hasattr(self, "package_data")
if not have_package_data:
@@ -93,15 +134,9 @@ class Distribution(_Distribution):
self.zip_safe = None
self.namespace_packages = None
self.eager_resources = None
+ self.entry_points = None
_Distribution.__init__(self,attrs)
- if not have_package_data:
- from setuptools.command.build_py import build_py
- self.cmdclass.setdefault('build_py',build_py)
- self.cmdclass.setdefault('build_ext',build_ext)
- self.cmdclass.setdefault('install',install)
- self.cmdclass.setdefault('install_lib',install_lib)
- self.cmdclass.setdefault('sdist',sdist)
def parse_command_line(self):
"""Process features after parsing command line options"""
@@ -121,6 +156,12 @@ class Distribution(_Distribution):
+
+
+
+
+
+
def finalize_options(self):
_Distribution.finalize_options(self)
@@ -171,6 +212,12 @@ class Distribution(_Distribution):
"namespace package %r" % nsp
)
+ if self.entry_points is not None:
+ try:
+ pkg_resources.EntryPoint.parse_map(self.entry_points)
+ except ValueError, e:
+ raise DistutilsSetupError(e)
+
def _set_global_opts_from_features(self):
"""Add --with-X/--without-X options based on optional features"""
@@ -197,12 +244,6 @@ class Distribution(_Distribution):
-
-
-
-
-
-
def _finalize_features(self):
"""Add/remove features and resolve dependencies between them"""
@@ -420,7 +461,7 @@ class Distribution(_Distribution):
src,alias = aliases[command]
del aliases[command] # ensure each alias can expand only once!
import shlex
- args[:1] = shlex.split(alias,True)
+ args[:1] = shlex.split(alias,True)
command = args[0]
nargs = _Distribution._parse_command_opts(self, parser, args)