Ditched the whole notion of "alias options": this meant dropping the

'alias_options' table and getting rid of some hairy code in the
  Distribution constructor.
Resurrected the distribution options that describe the modules present
  in the module distribution ('py_modules', 'ext_modules'), and added
  a bunch more: 'packages', 'package_dir', 'ext_package', 'include_dirs',
  'install_path'.
Updated some comments.
Added 'warn()' method to Command.
'Command.get_command_name()' now stores generated command name in
  self.command_name.
This commit is contained in:
Greg Ward 1999-09-21 18:41:36 +00:00
parent ac1424a9ce
commit df0d33586d
1 changed files with 21 additions and 39 deletions

View File

@ -114,19 +114,6 @@ class Distribution:
('dry-run', 'n', "don't actually do anything"), ('dry-run', 'n', "don't actually do anything"),
] ]
# 'alias_options' map distribution options to command options -- the
# idea is that the most common, essential options can be directly
# specified as Distribution attributes, and the rest can go in the
# 'options' dictionary. These aliases are for those common, essential
# options.
alias_options = { 'py_modules': ('build_py', 'modules'),
'ext_modules': ('build_ext', 'extensions'),
'package': [('build_py', 'package',),
('build_ext', 'package')],
'include_dirs': ('build_ext', 'include_dirs'),
}
# -- Creation/initialization methods ------------------------------- # -- Creation/initialization methods -------------------------------
@ -151,6 +138,7 @@ def __init__ (self, attrs=None):
self.name = None self.name = None
self.version = None self.version = None
self.author = None self.author = None
self.author_email = None
self.url = None self.url = None
self.licence = None self.licence = None
self.description = None self.description = None
@ -165,10 +153,13 @@ def __init__ (self, attrs=None):
# than of the Distribution itself. We provide aliases for them in # than of the Distribution itself. We provide aliases for them in
# Distribution as a convenience to the developer. # Distribution as a convenience to the developer.
# dictionary. # dictionary.
# XXX not needed anymore! (I think...) self.packages = None
#self.py_modules = None self.package_dir = None
#self.ext_modules = None self.py_modules = None
#self.package = None self.ext_modules = None
self.ext_package = None
self.include_dirs = None
self.install_path = None
# And now initialize bookkeeping stuff that can't be supplied by # And now initialize bookkeeping stuff that can't be supplied by
# the caller at all. 'command_obj' maps command names to # the caller at all. 'command_obj' maps command names to
@ -188,8 +179,9 @@ def __init__ (self, attrs=None):
# '.get()' rather than a straight lookup. # '.get()' rather than a straight lookup.
self.have_run = {} self.have_run = {}
# Now we'll use the attrs dictionary (from the client) to possibly # Now we'll use the attrs dictionary (ultimately, keyword args from
# override any or all of these distribution options # the client) to possibly override any or all of these distribution
# options.
if attrs: if attrs:
# Pull out the set of command options and work on them # Pull out the set of command options and work on them
@ -206,26 +198,10 @@ def __init__ (self, attrs=None):
# loop over commands # loop over commands
# if any command options # if any command options
# Now work on the rest of the attributes. Note that some of # Now work on the rest of the attributes. Any attribute that's
# these may be aliases for command options, so we might go # not already defined is invalid!
# through some of the above again.
for (key,val) in attrs.items(): for (key,val) in attrs.items():
alias = self.alias_options.get (key) if hasattr (self, key):
if alias:
if type (alias) is ListType:
for (command, cmd_option) in alias:
cmd_obj = self.find_command_obj (command)
cmd_obj.set_option (cmd_option, val)
elif type (alias) is TupleType:
(command, cmd_option) = alias
cmd_obj = self.find_command_obj (command)
cmd_obj.set_option (cmd_option, val)
else:
raise RuntimeError, \
("oops! bad alias option for '%s': " +
"must be tuple or list of tuples") % key
elif hasattr (self, key):
setattr (self, key, val) setattr (self, key, val)
else: else:
raise DistutilsOptionError, \ raise DistutilsOptionError, \
@ -653,7 +629,8 @@ def get_command_name (self):
# splits to ['', 'Foo', '', 'Bar', '', 'Baz', '']. Hence # splits to ['', 'Foo', '', 'Bar', '', 'Baz', '']. Hence
# the 'filter' to strip out the empties. # the 'filter' to strip out the empties.
words = filter (None, re.split (r'([A-Z][a-z]+)', class_name)) words = filter (None, re.split (r'([A-Z][a-z]+)', class_name))
return string.join (map (string.lower, words), "_") self.command_name = string.join (map (string.lower, words), "_")
return self.command_name
def set_undefined_options (self, src_cmd, *option_pairs): def set_undefined_options (self, src_cmd, *option_pairs):
@ -717,6 +694,11 @@ def run_peer (self, command):
# -- External world manipulation ----------------------------------- # -- External world manipulation -----------------------------------
def warn (self, msg):
sys.stderr.write ("warning: %s: %s\n" %
(self.get_command_name(), msg))
def execute (self, func, args, msg=None, level=1): def execute (self, func, args, msg=None, level=1):
"""Perform some action that affects the outside world (eg. """Perform some action that affects the outside world (eg.
by writing to the filesystem). Such actions are special because by writing to the filesystem). Such actions are special because