diff options
Diffstat (limited to 'distutils/command/install.py')
-rw-r--r-- | distutils/command/install.py | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/distutils/command/install.py b/distutils/command/install.py new file mode 100644 index 000000000..5f11b3d22 --- /dev/null +++ b/distutils/command/install.py @@ -0,0 +1,102 @@ +from types import StringType +from distutils.command.install import * +from distutils.command.install import install as old_install +from distutils.util import convert_path +from distutils.file_util import write_file +from distutils.errors import DistutilsOptionError +from scipy_distutils import log + +#install support for Numeric.pth setup + +def _quote_name_when_has_spaces(name): + if ' ' in name and name[0] not in ['"',"'"]: + name = '"%s"' % (name) + return name + +class install(old_install): + + 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) + + if self.path_file: + self.create_path_file() + + # write list of installed files, if requested. + if self.record: + outputs = self.get_outputs() + if self.root: # strip any package prefix + root_len = len(self.root) + for counter in xrange(len(outputs)): + outputs[counter] = outputs[counter][root_len:] + outputs = map(_quote_name_when_has_spaces,outputs) + self.execute(write_file, + (self.record, outputs), + "writing list of installed files to '%s'" % + self.record) + + sys_path = map(os.path.normpath, sys.path) + sys_path = map(os.path.normcase, sys_path) + install_lib = os.path.normcase(os.path.normpath(self.install_lib)) + if (self.warn_dir and + not (self.path_file and self.install_path_file) and + install_lib not in sys_path): + log.debug(("modules installed to '%s', which is not in " + "Python's module search path (sys.path) -- " + "you'll have to change the search path yourself"), + self.install_lib) + + # run () + + + def finalize_options (self): + old_install.finalize_options(self) + self.install_lib = self.install_libbase + + def handle_extra_path (self): + if self.extra_path is None: + self.extra_path = self.distribution.extra_path + + if self.extra_path is not None: + if type(self.extra_path) is StringType: + self.extra_path = string.split(self.extra_path, ',') + if len(self.extra_path) == 1: + path_file = extra_dirs = self.extra_path[0] + elif len(self.extra_path) == 2: + (path_file, extra_dirs) = self.extra_path + else: + raise DistutilsOptionError, \ + "'extra_path' option must be a list, tuple, or " + \ + "comma-separated string with 1 or 2 elements" + + # convert to local form in case Unix notation used (as it + # should be in setup scripts) + extra_dirs = convert_path(extra_dirs) + + else: + path_file = None + extra_dirs = '' + + # XXX should we warn if path_file and not extra_dirs? (in which + # case the path file would be harmless but pointless) + self.path_file = path_file + self.extra_dirs = '' + self.pth_file = extra_dirs + + # handle_extra_path () + + def create_path_file (self): + filename = os.path.join(self.install_libbase, + self.path_file + ".pth") + if self.install_path_file: + self.execute(write_file, + (filename, [self.pth_file]), + "creating %s" % filename) + else: + log.warn("path file '%s' not created" % filename) |