diff options
author | Greg Ward <gward@python.net> | 2000-05-26 00:44:06 (GMT) |
---|---|---|
committer | Greg Ward <gward@python.net> | 2000-05-26 00:44:06 (GMT) |
commit | 8bbba17d3815a44eefbd0cf33db937a56fe50db5 (patch) | |
tree | 323f2b1315dc9c5d24fbded84f47c4a1ec77c48e /Lib/distutils/command/build_py.py | |
parent | 8415edb433a6b6f652cb2be5fc30e9981babde07 (diff) | |
download | cpython-8bbba17d3815a44eefbd0cf33db937a56fe50db5.zip cpython-8bbba17d3815a44eefbd0cf33db937a56fe50db5.tar.gz cpython-8bbba17d3815a44eefbd0cf33db937a56fe50db5.tar.bz2 |
Fixed a couple of long-hidden bugs (amazing what you find when you
attempt to verify the bold assertions in the documentation):
* entries for the "root package" in 'package_dir' didn't work --
fixed by improving the fall-through code in 'get_package_dir()'
* __init__.py files weren't installed when modules-in-packages
were listed individually (ie. in 'py_modules' in the setup script);
fixed by making 'check_package()' return the name of the __init__
file if it exists, and making 'find_modules()' add an entry to
the module list for __init__ if applicable
Diffstat (limited to 'Lib/distutils/command/build_py.py')
-rw-r--r-- | Lib/distutils/command/build_py.py | 39 |
1 files changed, 33 insertions, 6 deletions
diff --git a/Lib/distutils/command/build_py.py b/Lib/distutils/command/build_py.py index 72c6157..92a37f2 100644 --- a/Lib/distutils/command/build_py.py +++ b/Lib/distutils/command/build_py.py @@ -117,8 +117,17 @@ class build_py (Command): tail.insert (0, pdir) return apply (os.path.join, tail) else: - # arg! everything failed, we might as well have not even - # looked in package_dir -- oh well + # Oops, got all the way through 'path' without finding a + # match in package_dir. If package_dir defines a directory + # for the root (nameless) package, then fallback on it; + # otherwise, we might as well have not consulted + # package_dir at all, as we just use the directory implied + # by 'tail' (which should be the same as the original value + # of 'path' at this point). + pdir = self.package_dir.get('') + if pdir is not None: + tail.insert(0, pdir) + if tail: return apply (os.path.join, tail) else: @@ -145,9 +154,16 @@ class build_py (Command): # Require __init__.py for all but the "root package" if package: init_py = os.path.join (package_dir, "__init__.py") - if not os.path.isfile (init_py): + if os.path.isfile (init_py): + return init_py + else: self.warn (("package init file '%s' not found " + "(or not a regular file)") % init_py) + + # Either not in a package at all (__init__.py not expected), or + # __init__.py doesn't exist -- so don't return the filename. + return + # check_package () @@ -177,6 +193,15 @@ class build_py (Command): def find_modules (self): + """Finds individually-specified Python modules, ie. those listed by + module name in 'self.modules'. Returns a list of tuples (package, + module_base, filename): 'package' is a tuple of the path through + package-space to the module; 'module_base' is the bare (no + packages, no dots) module name, and 'filename' is the path to the + ".py" file (relative to the distribution root) that implements the + module. + """ + # Map package names to tuples of useful info about the package: # (package_dir, checked) # package_dir - the directory where we'll find source files for @@ -185,7 +210,7 @@ class build_py (Command): # is valid (exists, contains __init__.py, ... ?) packages = {} - # List of (module, package, filename) tuples to return + # List of (package, module, filename) tuples to return modules = [] # We treat modules-in-packages almost the same as toplevel modules, @@ -205,8 +230,10 @@ class build_py (Command): checked = 0 if not checked: - self.check_package (package, package_dir) + init_py = self.check_package (package, package_dir) packages[package] = (package_dir, 1) + if init_py: + modules.append((package, "__init__", init_py)) # XXX perhaps we should also check for just .pyc files # (so greedy closed-source bastards can distribute Python @@ -215,7 +242,7 @@ class build_py (Command): if not self.check_module (module, module_file): continue - modules.append ((package, module, module_file)) + modules.append ((package, module_base, module_file)) return modules |