Viewing file: Install.py (5.88 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
import os, sys from distutils import util from distutils.command import install from distutils.core import DEBUG
class Install(install.install):
command_name = 'install'
user_options = [ ('root=', None, "install everything relative to this alternate root directory"), # Byte-compilation options -- see install_lib.py for details, as # these are duplicated from there (but only install_lib does # anything with them). ('compile', 'c', "compile .py to .pyc [default]"), ('no-compile', None, "don't compile .py files"), ('optimize=', 'O', "also compile with optimization: -O1 for \"python -O\", " "-O2 for \"python -OO\", and -O0 to disable [default: -O0]"),
# Miscellaneous control options ('force', 'f', "force installation (overwrite any existing files)"), ('skip-build', None, "skip rebuilding everything (for testing/debugging)"),
('with-docs', None, 'enable documentation build'), ('without-docs', None, 'disable documentation build [default]'), ]
boolean_options = ['compile', 'force', 'skip-build', 'with-docs']
negative_opt = {'no-compile' : 'compile', 'without-docs' : 'with-docs'}
def initialize_options(self): self.install_lib = '$pythonlibdir' self.install_scripts = '$bindir' self.install_data = '$datadir' self.install_sysconf = '$sysconfdir' self.install_localstate = '$localstatedir' self.install_docs = '$docdir' self.install_tests = '$libdir' self.install_l10n = '$localedir'
self.compile = None self.optimize = None
# This sets the installation base (used by bdist commands) self.root = None
# 'force' forces installation, even if target files are not # out-of-date. 'skip_build' skips running the "build" command, # handy if you know it's not necessary. 'warn_dir' (which is *not* # a user option, it's just there so the bdist_* commands can turn # it off) determines whether we warn about installing to a # directory not in sys.path. self.force = 0 self.skip_build = 0 self.warn_dir = 1
# These are only here as a conduit from the 'build' command to the # 'install_*' commands that do the real work. ('build_base' isn't # actually used anywhere, but it might be useful in future.) They # are not user options, because if the user told the install # command where the build directory is, that wouldn't affect the # build command. self.build_base = None self.build_lib = None
self.with_docs = None return
def finalize_options(self): # Find out the build directories, ie. where to install from. self.set_undefined_options('build', ('build_base', 'build_base'), ('build_lib', 'build_lib'), ('with_docs', 'with_docs'))
# Expand configuration variables, tilde, etc. in the installation # directories. config = self.get_finalized_command('config') config_vars = config.get_config_vars()
for attr in ('install_lib', 'install_scripts', 'install_data', 'install_sysconf', 'install_localstate', 'install_docs', 'install_tests', 'install_l10n'): value = getattr(self, attr) value = util.convert_path(value) value = util.subst_vars(value, config_vars) if self.root is not None: value = util.change_root(self.root, value) setattr(self, attr, value) return
def run(self): # Obviously have to build before we can install if not self.skip_build: self.run_command('build')
# Run all sub-commands (at least those that need to be run) for cmd_name in self.get_sub_commands(): self.run_command(cmd_name)
sys_path = map(os.path.normpath, sys.path) sys_path = map(os.path.normcase, sys_path) libdir = os.path.normcase(os.path.normpath(self.install_lib)) # FIXME: In a new interpreter, sys.path might include the # newly created libdir, in which case the warning here will # be bogus. This happens with Python 2.4 on Windows, which # does not have a site-packages dir until we create one # during the 4Suite install. if self.warn_dir and (libdir not in sys_path): self.warn(("modules installed to %r, which is not in " "Python's module search path (sys.path) -- " "you'll have to change the search path yourself") % self.install_lib) return
def get_source_files(self): files = [] for cmd_name in self.get_sub_commands(): cmd = self.get_finalized_command(cmd_name) files.extend(cmd.get_inputs()) return files
# -- Predicates for sub-command list -------------------------------
def has_sysconf(self): return self.distribution.has_sysconf()
def has_localstate(self): return self.distribution.has_localstate()
def has_docs(self): return self.with_docs and self.distribution.has_docs()
def has_tests(self): return self.distribution.has_tests()
def has_l10n(self): return self.distribution.has_l10n()
# a list of commands this command might have to run to do its work. sub_commands = install.install.sub_commands + [ ('install_sysconf', has_sysconf), ('install_localstate', has_localstate), ('install_docs', has_docs), ('install_tests', has_tests), ('install_l10n', has_l10n), ]
|