59 lines
2.3 KiB
Python
59 lines
2.3 KiB
Python
#------------------------------------------------------------------------
|
|
#
|
|
# PyGUI - Distutils hackery
|
|
#
|
|
#------------------------------------------------------------------------
|
|
|
|
import os, sys
|
|
from glob import glob
|
|
from distutils.dist import Distribution
|
|
|
|
if sys.version_info >= (3, 0):
|
|
try:
|
|
from distutils.command.build_py import build_py_2to3 as build_py
|
|
except ImportError:
|
|
raise ImportError("build_py_2to3 not found in distutils - it is required for Python 3.x")
|
|
else:
|
|
from distutils.command.build_py import build_py
|
|
|
|
#------------------------------------------------------------------------
|
|
|
|
class pygui_build_py(build_py):
|
|
"""
|
|
An extension of the distutils build_py command that supports
|
|
gathering .py files for a package from multiple source directories.
|
|
|
|
It provides a new option 'package_subdirs' that is a mapping from
|
|
a package name to a list of directory paths:
|
|
|
|
package_subdirs = {'package_name': ['source_dir', ...], ...}
|
|
|
|
The directory paths are interpreted relative to the primary source
|
|
directory for the package. In addition to .py files from the primary
|
|
source directory, any .py files from the specified directories will be
|
|
copied into the package during installation.
|
|
"""
|
|
|
|
Distribution.package_subdirs = {}
|
|
|
|
def initialize_options(self):
|
|
build_py.initialize_options(self)
|
|
self.package_subdirs = {}
|
|
|
|
def finalize_options(self):
|
|
build_py.finalize_options(self)
|
|
self.package_subdirs = self.distribution.package_subdirs
|
|
|
|
def find_package_modules(self, package, package_dir):
|
|
#print "distutils_extensions: Searching subdirectories of package", repr(package) ###
|
|
modules = build_py.find_package_modules(self, package, package_dir)
|
|
subdirs = self.package_subdirs.get(package, ())
|
|
for subdir in subdirs:
|
|
#print "Looking in subdir", repr(subdir), "of", repr(package_dir) ###
|
|
module_files = glob(os.path.join(package_dir, subdir, "*.py"))
|
|
for f in module_files:
|
|
module = os.path.splitext(os.path.basename(f))[0]
|
|
#print "Found module", repr(module), "in", repr(f) ###
|
|
modules.append((package, module, f))
|
|
return modules
|