aboutsummaryrefslogtreecommitdiffstats
path: root/setuptools/command/depends.py
diff options
context:
space:
mode:
authorPJ Eby <distutils-sig@python.org>2005-08-06 19:29:49 +0000
committerPJ Eby <distutils-sig@python.org>2005-08-06 19:29:49 +0000
commit8afe820f59c3b63795bd235f2800b0e1329eb7e1 (patch)
treea1d513446260cf010850a1a1e52a7d1815bb40a2 /setuptools/command/depends.py
parent8a29467d941a7983d5f6eadc5c0e1624417944b6 (diff)
downloadexternal_python_setuptools-8afe820f59c3b63795bd235f2800b0e1329eb7e1.tar.gz
external_python_setuptools-8afe820f59c3b63795bd235f2800b0e1329eb7e1.tar.bz2
external_python_setuptools-8afe820f59c3b63795bd235f2800b0e1329eb7e1.zip
Got rid of the no-longer meaningful "depends" command. Consolidated the
replacement of the "install" command so that installation is always via easy_install, but doesn't use the previous kludgy intereception technique. Allow ``extra_path`` to be set, but ignore it, so that when easy_install wraps a package that uses it, there won't be any confusion as to the desired installation location. --HG-- branch : setuptools extra : convert_revision : svn%3A6015fed2-1504-0410-9fe1-9d1591cc4771/sandbox/trunk/setuptools%4041181
Diffstat (limited to 'setuptools/command/depends.py')
-rw-r--r--setuptools/command/depends.py149
1 files changed, 0 insertions, 149 deletions
diff --git a/setuptools/command/depends.py b/setuptools/command/depends.py
deleted file mode 100644
index cd8442b7..00000000
--- a/setuptools/command/depends.py
+++ /dev/null
@@ -1,149 +0,0 @@
-import os
-import sys
-
-from distutils.cmd import Command
-
-
-class depends(Command):
- """Download and install dependencies, if needed"""
-
- description = "download and install dependencies, if needed"
-
- user_options = [
- ('temp=', 't',
- "directory where dependencies will be downloaded and built"),
- ('ignore-extra-args', 'i',
- "ignore options that won't be passed to child setup scripts"),
- ]
-
- path_attrs = [
- # Note: these must be in *reverse* order, as they are pushed onto the
- # *front* of a copy of sys.path.
- ('install', 'install_libbase'), # installation base if extra_path
- ('install_lib', 'install_dir'), # where modules are installed
- ]
-
- # Command options that can be safely passed to dependencies' setup scripts
- safe_opts = {
- 'install': [
- 'prefix', 'exec-prefix', 'home', 'install-base',
- 'install-platbase', 'root', 'optimize', 'force', 'verbose', 'quiet'
- ],
- 'build': ['compiler', 'debug', 'force', 'verbose', 'quiet'],
- }
-
- # Options with string arguments that are *not* directories or files, and
- # so should *not* have absolute-path fixups applied.
- non_fs_opts = {'build': ['compiler']}
-
- def initialize_options(self):
- self.temp = None; self.ignore_extra_args = None
-
- def finalize_options(self):
- self.set_undefined_options('build',('build_temp', 'temp'))
- self.set_search_path()
- self.set_subcommand_args()
-
- def set_subcommand_args(self):
- safe = {'install':[]} # ensure we at least perform an install
- unsafe = {}
- copts = self.distribution.get_cmdline_options()
-
- if 'depends' in copts:
- del copts['depends']
-
- for cmd,opts in copts.items():
- safe_opts = self.safe_opts.get(cmd,())
- non_fs_opts = self.non_fs_opts.get(cmd,())
-
- for opt,val in opts.items():
- if opt in safe_opts:
- cmdline = safe.setdefault(cmd,[])
- if val is not None and opt not in non_fs_opts:
- val = os.path.abspath(val)
- else:
- cmdline = unsafe.setdefault(cmd,[])
-
- cmdline.append('--'+opt)
- if val is not None:
- cmdline.append(val)
-
- self.safe_options = safe
- self.unsafe_options = unsafe
-
- def set_search_path(self):
- """Determine paths to check for installed dependencies"""
- path = sys.path[:] # copy sys path
- for cmd,attr in self.path_attrs:
- dir = getattr(self.get_finalized_command(cmd),attr,None)
- if dir and dir not in path:
- path.insert(0,dir) # prepend
- self.search_path = path
-
- def run(self):
- self.announce("checking for installed dependencies")
-
- needed = [
- dep for dep in self.distribution.requires if self.is_needed(dep)
- ]
-
- if not needed:
- self.announce("all dependencies are present and up-to-date")
- return
-
- argv = [sys.executable,'setup.py']
- for cmd,line in self.safe_options.items():
- argv.append(cmd); argv.extend(line)
-
- self.announce(
- "dependencies will be installed using:\n "+' '.join(argv)+'\n'
- )
-
- # Alert for unsupported commands/options, unless '-i' was used
- if self.unsafe_options:
- self.warn_unsafe_options_used()
- if not self.ignore_extra_args:
- raise SystemExit(
- "Unsupported options for building dependencies; please"
- " add 'depends -i'\nto your command line if you want to"
- " force the build to proceed.\nOtherwise, you will need"
- " to omit the unsupported options,\nor install the"
- " dependencies manually."
- )
-
- # Alert the user to missing items
- fmt = "\t%s\t%s\n"
- items = [fmt % (dep.full_name(), dep.homepage) for dep in needed]
- items.insert(0,"Please install the following packages *first*:\n")
- items.append('')
- raise SystemExit('\n'.join(items)) # dump msg to stderr and exit
-
- def warn_unsafe_options_used(self):
- lines = []; write = lines.append
- write("the following command options are not supported for building")
- write("dependencies, and will be IGNORED:")
- for cmd,line in self.unsafe_options.items():
- write('\t%s %s' % (cmd, ' '.join(line)))
- write('')
- self.warn('\n'.join(lines))
-
- def is_needed(self,dep):
- """Does the specified dependency need to be installed/updated?"""
- self.announce("searching for "+dep.full_name())
- version = dep.get_version(self.search_path)
-
- if version is None:
- self.announce(name+" not found!")
- return True
-
- if str(version)=="unknown":
- status = dep.name+" is installed"
- else:
- status = dep.name+" version "+str(version)+" found"
-
- if dep.version_ok(version):
- self.announce(status+" (OK)")
- return False
- else:
- self.announce(status+" (update needed)")
- return True