mirror of
https://github.com/python/cpython.git
synced 2025-07-24 19:54:21 +00:00
Merged revisions 62774-62775,62785,62787-62788 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r62774 | georg.brandl | 2008-05-06 19:11:42 +0200 (Tue, 06 May 2008) | 2 lines #2773: fix description of 'g' and 'G' formatting spec. ........ r62775 | georg.brandl | 2008-05-06 19:20:54 +0200 (Tue, 06 May 2008) | 2 lines > != (!<). ........ r62785 | benjamin.peterson | 2008-05-07 00:18:11 +0200 (Wed, 07 May 2008) | 2 lines Fix logic error in Python/_warnings.c and add a test to verify ........ r62787 | benjamin.peterson | 2008-05-07 00:31:52 +0200 (Wed, 07 May 2008) | 2 lines Make the Python implementation of warnings compatible with the C implementation regarding non-callable showwarning ........ r62788 | christian.heimes | 2008-05-07 00:41:46 +0200 (Wed, 07 May 2008) | 1 line Implemented PEP 370 ........
This commit is contained in:
parent
1bf7108fd5
commit
8dc226fccd
13 changed files with 458 additions and 74 deletions
|
@ -15,6 +15,9 @@ from distutils.file_util import write_file
|
|||
from distutils.util import convert_path, subst_vars, change_root
|
||||
from distutils.util import get_platform
|
||||
from distutils.errors import DistutilsOptionError
|
||||
from site import USER_BASE
|
||||
from site import USER_SITE
|
||||
|
||||
|
||||
if sys.version < "2.2":
|
||||
WINDOWS_SCHEME = {
|
||||
|
@ -48,7 +51,21 @@ INSTALL_SCHEMES = {
|
|||
'scripts': '$base/bin',
|
||||
'data' : '$base',
|
||||
},
|
||||
'unix_user': {
|
||||
'purelib': '$usersite',
|
||||
'platlib': '$usersite',
|
||||
'headers': '$userbase/include/python$py_version_short/$dist_name',
|
||||
'scripts': '$userbase/bin',
|
||||
'data' : '$userbase',
|
||||
},
|
||||
'nt': WINDOWS_SCHEME,
|
||||
'nt_user': {
|
||||
'purelib': '$usersite',
|
||||
'platlib': '$usersite',
|
||||
'headers': '$userbase/Python$py_version_nodot/Include/$dist_name',
|
||||
'scripts': '$userbase/Scripts',
|
||||
'data' : '$userbase',
|
||||
},
|
||||
'mac': {
|
||||
'purelib': '$base/Lib/site-packages',
|
||||
'platlib': '$base/Lib/site-packages',
|
||||
|
@ -56,13 +73,27 @@ INSTALL_SCHEMES = {
|
|||
'scripts': '$base/Scripts',
|
||||
'data' : '$base',
|
||||
},
|
||||
'mac_user': {
|
||||
'purelib': '$usersite',
|
||||
'platlib': '$usersite',
|
||||
'headers': '$userbase/$py_version_short/include/$dist_name',
|
||||
'scripts': '$userbase/bin',
|
||||
'data' : '$userbase',
|
||||
},
|
||||
'os2': {
|
||||
'purelib': '$base/Lib/site-packages',
|
||||
'platlib': '$base/Lib/site-packages',
|
||||
'headers': '$base/Include/$dist_name',
|
||||
'scripts': '$base/Scripts',
|
||||
'data' : '$base',
|
||||
}
|
||||
},
|
||||
'os2_home': {
|
||||
'purelib': '$usersite',
|
||||
'platlib': '$usersite',
|
||||
'headers': '$userbase/include/python$py_version_short/$dist_name',
|
||||
'scripts': '$userbase/bin',
|
||||
'data' : '$userbase',
|
||||
},
|
||||
}
|
||||
|
||||
# The keys to an installation scheme; if any new types of files are to be
|
||||
|
@ -83,6 +114,8 @@ class install (Command):
|
|||
"(Unix only) prefix for platform-specific files"),
|
||||
('home=', None,
|
||||
"(Unix only) home directory to install under"),
|
||||
('user', None,
|
||||
"install in user site-package '%s'" % USER_SITE),
|
||||
|
||||
# Or, just set the base director(y|ies)
|
||||
('install-base=', None,
|
||||
|
@ -134,7 +167,7 @@ class install (Command):
|
|||
"filename in which to record list of installed files"),
|
||||
]
|
||||
|
||||
boolean_options = ['compile', 'force', 'skip-build']
|
||||
boolean_options = ['compile', 'force', 'skip-build', 'user']
|
||||
negative_opt = {'no-compile' : 'compile'}
|
||||
|
||||
|
||||
|
@ -145,6 +178,7 @@ class install (Command):
|
|||
self.prefix = None
|
||||
self.exec_prefix = None
|
||||
self.home = None
|
||||
self.user = 0
|
||||
|
||||
# These select only the installation base; it's up to the user to
|
||||
# specify the installation scheme (currently, that means supplying
|
||||
|
@ -163,6 +197,8 @@ class install (Command):
|
|||
self.install_lib = None # set to either purelib or platlib
|
||||
self.install_scripts = None
|
||||
self.install_data = None
|
||||
self.install_userbase = USER_BASE
|
||||
self.install_usersite = USER_SITE
|
||||
|
||||
self.compile = None
|
||||
self.optimize = None
|
||||
|
@ -238,6 +274,11 @@ class install (Command):
|
|||
raise DistutilsOptionError(
|
||||
"must supply either home or prefix/exec-prefix -- not both")
|
||||
|
||||
if self.user and (self.prefix or self.exec_prefix or self.home or
|
||||
self.install_base or self.install_platbase):
|
||||
raise DistutilsOptionError("can't combine user with with prefix/"
|
||||
"exec_prefix/home or install_(plat)base")
|
||||
|
||||
# Next, stuff that's wrong (or dubious) only on certain platforms.
|
||||
if os.name != "posix":
|
||||
if self.exec_prefix:
|
||||
|
@ -273,10 +314,13 @@ class install (Command):
|
|||
'dist_fullname': self.distribution.get_fullname(),
|
||||
'py_version': py_version,
|
||||
'py_version_short': py_version[0:3],
|
||||
'py_version_nodot': py_version[0] + py_version[2],
|
||||
'sys_prefix': prefix,
|
||||
'prefix': prefix,
|
||||
'sys_exec_prefix': exec_prefix,
|
||||
'exec_prefix': exec_prefix,
|
||||
'userbase': self.install_userbase,
|
||||
'usersite': self.install_usersite,
|
||||
}
|
||||
self.expand_basedirs()
|
||||
|
||||
|
@ -298,6 +342,10 @@ class install (Command):
|
|||
|
||||
self.dump_dirs("post-expand_dirs()")
|
||||
|
||||
# Create directories in the home dir:
|
||||
if self.user:
|
||||
self.create_home_path()
|
||||
|
||||
# Pick the actual directory to install all modules to: either
|
||||
# install_purelib or install_platlib, depending on whether this
|
||||
# module distribution is pure or not. Of course, if the user
|
||||
|
@ -312,7 +360,8 @@ class install (Command):
|
|||
# Convert directories from Unix /-separated syntax to the local
|
||||
# convention.
|
||||
self.convert_paths('lib', 'purelib', 'platlib',
|
||||
'scripts', 'data', 'headers')
|
||||
'scripts', 'data', 'headers',
|
||||
'userbase', 'usersite')
|
||||
|
||||
# Well, we're not actually fully completely finalized yet: we still
|
||||
# have to deal with 'extra_path', which is the hack for allowing
|
||||
|
@ -369,7 +418,13 @@ class install (Command):
|
|||
"installation scheme is incomplete")
|
||||
return
|
||||
|
||||
if self.home is not None:
|
||||
if self.user:
|
||||
if self.install_userbase is None:
|
||||
raise DistutilsPlatformError(
|
||||
"User base directory is not specified")
|
||||
self.install_base = self.install_platbase = self.install_userbase
|
||||
self.select_scheme("unix_user")
|
||||
elif self.home is not None:
|
||||
self.install_base = self.install_platbase = self.home
|
||||
self.select_scheme("unix_home")
|
||||
else:
|
||||
|
@ -391,7 +446,13 @@ class install (Command):
|
|||
|
||||
|
||||
def finalize_other(self): # Windows and Mac OS for now
|
||||
if self.home is not None:
|
||||
if self.user:
|
||||
if self.install_userbase is None:
|
||||
raise DistutilsPlatformError(
|
||||
"User base directory is not specified")
|
||||
self.install_base = self.install_platbase = self.install_userbase
|
||||
self.select_scheme(os.name + "_user")
|
||||
elif self.home is not None:
|
||||
self.install_base = self.install_platbase = self.home
|
||||
self.select_scheme("unix_home")
|
||||
else:
|
||||
|
@ -419,7 +480,7 @@ class install (Command):
|
|||
for attr in attrs:
|
||||
val = getattr(self, attr)
|
||||
if val is not None:
|
||||
if os.name == 'posix':
|
||||
if os.name == 'posix' or os.name == 'nt':
|
||||
val = os.path.expanduser(val)
|
||||
val = subst_vars(val, self.config_vars)
|
||||
setattr(self, attr, val)
|
||||
|
@ -479,6 +540,16 @@ class install (Command):
|
|||
attr = "install_" + name
|
||||
setattr(self, attr, change_root(self.root, getattr(self, attr)))
|
||||
|
||||
def create_home_path(self):
|
||||
"""Create directories under ~
|
||||
"""
|
||||
if not self.user:
|
||||
return
|
||||
home = convert_path(os.path.expanduser("~"))
|
||||
for name, path in self.config_vars.iteritems():
|
||||
if path.startswith(home) and not os.path.isdir(path):
|
||||
self.debug_print("os.makedirs('%s', 0o700)" % path)
|
||||
os.makedirs(path, 0o700)
|
||||
|
||||
# -- Command execution methods -------------------------------------
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue