diff options
| author | Tarek Ziad? <tarek@ziade.org> | 2010-02-23 16:54:32 -0500 |
|---|---|---|
| committer | Tarek Ziad? <tarek@ziade.org> | 2010-02-23 16:54:32 -0500 |
| commit | a8a74f9731b52d6dde434feec991cdf7524a24a3 (patch) | |
| tree | 9d57c4fdd07691071d73842254747c356ab31769 /src | |
| parent | e46c08c3af77789a30c5a871d05942e0407aed1d (diff) | |
| download | disutils2-a8a74f9731b52d6dde434feec991cdf7524a24a3.tar.gz | |
now sysconfig uses a sysconfig.cfg file
Diffstat (limited to 'src')
| -rw-r--r-- | src/distutils2/_backport/sysconfig.cfg | 95 | ||||
| -rw-r--r-- | src/distutils2/_backport/sysconfig.py | 135 | ||||
| -rw-r--r-- | src/distutils2/_backport/tests/test_sysconfig.py | 11 | ||||
| -rw-r--r-- | src/distutils2/command/install.py | 102 | ||||
| -rw-r--r-- | src/distutils2/tests/test_install.py | 44 | ||||
| -rw-r--r-- | src/distutils2/util.py | 5 |
6 files changed, 166 insertions, 226 deletions
diff --git a/src/distutils2/_backport/sysconfig.cfg b/src/distutils2/_backport/sysconfig.cfg new file mode 100644 index 0000000..42b0873 --- /dev/null +++ b/src/distutils2/_backport/sysconfig.cfg @@ -0,0 +1,95 @@ +[globals] +# These are the useful categories that are sometimes referenced at runtime +# and are referenced from pkgutils.open() +config = {confdir}/{distribution.name} # Configuration files +appdata = {datadir}/{distribution.name} # Non-writable data that is independent of architecture (images, many xml/text files) +appdata.arch = {libdir}/{distribution.name} # Non-writable data that is different depending on architecture (some binary data formats) +appdata.persistent = {statedir}/lib/{distribution.name} # Data that the app writes and keeps data that can't just be thrown out (databases) +appdata.disposable = {statedir}/cache/{distribution.name} # Data that the app writes but can be thrown out and the app will keep working (cache) +help = {datadir}/{distribution.name} # Note, these help files are used at runtime +icon = {datadir}/pixmaps +scripts = {base}/bin + +# Non runtime files. These are valid categories for markingfiles for +# install but they should not be referenced by the app at runtime. +doc = {datadir}/doc/{distribution.name} # These type of files are only viewed if the user explicitly opens them with another program +info = {datadir}/info # GNU info documentation files +man = {datadir}/man # Man page location + +[posix_prefix] +# Configuration directories. Some of these come straight out of the +# configure script. They are for implementing the other variables, not to +# be used directly in resource_locations +confdir = /etc +datadir = /usr/share +libdir = /usr/lib # or /usr/lib64 on a multilib system +statedir = /var +local = ~/.local/{distribution.name} # User resource directory + +stdlib = {base}/lib/python{py_version_short} +platstdlib = {platbase}/lib/python{py_version_short} +purelib = {base}/lib/python{py_version_short}/site-packages +platlib = {platbase}/lib/python{py_version_short}/site-packages +include = {base}/include/python{py_version_short} +platinclude = {platbase}/include/python{py_version_short} +data = {base} + + +[posix_home] +stdlib = {base}/lib/python +platstdlib = {base}/lib/python +purelib = {base}/lib/python +platlib = {base}/lib/python +include = {base}/include/python +platinclude = {base}/include/python +scripts = {base}/bin +data = {base} + +[nt] +stdlib = {base}/Lib +platstdlib = {base}/Lib +purelib = {base}/Lib/site-packages +platlib = {base}/Lib/site-packages +include = {base}/Include +platinclude = {base}/Include +scripts = {base}/Scripts +data = {base} + +[os2] +stdlib = {base}/Lib +platstdlib = {base}/Lib +purelib = {base}/Lib/site-packages +platlib = {base}/Lib/site-packages +include = {base}/Include +platinclude = {base}/Include +scripts = {base}/Scripts +data = {base} + +[os2_home] +stdlib = {userbase}/lib/python/{py_version_short} +platstdlib = {userbase}/lib/python/{py_version_short} +purelib = {userbase}/lib/python/{py_version_short}/site-packages +platlib = {userbase}/lib/python/{py_version_short}/site-packages +include = {userbase}/include/python{py_version_short} +scripts = {userbase}/bin +data = {userbase} + +[nt_user] +stdlib = {userbase}/Python{py_version_nodot} +platstdlib = {userbase}/Python{py_version_nodot} +purelib = {userbase}/Python{py_version_nodot}/site-packages +platlib = {userbase}/Python{py_version_nodot}/site-packages +include = {userbase}/Python{py_version_nodot}/Include +scripts = {userbase}/Scripts +data = {userbase} + +[posix_user] +stdlib = {userbase}/lib/python/{py_version_short} +platstdlib = {userbase}/lib/python/{py_version_short} +purelib = {userbase}/lib/python/{py_version_short}/site-packages +platlib = {userbase}/lib/python/{py_version_short}/site-packages +include = {userbase}/include/python{py_version_short} +scripts = {userbase}/bin +data = {userbase} + + diff --git a/src/distutils2/_backport/sysconfig.py b/src/distutils2/_backport/sysconfig.py index fd362b1..00ef5cc 100644 --- a/src/distutils2/_backport/sysconfig.py +++ b/src/distutils2/_backport/sysconfig.py @@ -3,85 +3,37 @@ """ import sys import os +import re from os.path import pardir, abspath +from ConfigParser import ConfigParser + +_PREFIX = os.path.normpath(sys.prefix) +_EXEC_PREFIX = os.path.normpath(sys.exec_prefix) + +# let's read the configuration file +# XXX _CONFIG_DIR will be set by the Makefile later +_CONFIG_DIR = os.path.normpath(os.path.dirname(__file__)) +_CONFIG_FILE = os.path.join(_CONFIG_DIR, 'sysconfig.cfg') +_SCHEMES = ConfigParser() +_SCHEMES.read(_CONFIG_FILE) + +def _expand_globals(): + globals = _SCHEMES.items('globals') + sections = _SCHEMES.sections() + for section in sections: + if section == 'globals': + continue + for option, value in globals: + if _SCHEMES.has_option(section, option): + continue + _SCHEMES.set(section, option, value) + _SCHEMES.remove_section('globals') + +_expand_globals() -_INSTALL_SCHEMES = { - 'posix_prefix': { - 'stdlib': '%(base)s/lib/python%(py_version_short)s', - 'platstdlib': '%(platbase)s/lib/python%(py_version_short)s', - 'purelib': '%(base)s/lib/python%(py_version_short)s/site-packages', - 'platlib': '%(platbase)s/lib/python%(py_version_short)s/site-packages', - 'include': '%(base)s/include/python%(py_version_short)s', - 'platinclude': '%(platbase)s/include/python%(py_version_short)s', - 'scripts': '%(base)s/bin', - 'data': '%(base)s', - }, - 'posix_home': { - 'stdlib': '%(base)s/lib/python', - 'platstdlib': '%(base)s/lib/python', - 'purelib': '%(base)s/lib/python', - 'platlib': '%(base)s/lib/python', - 'include': '%(base)s/include/python', - 'platinclude': '%(base)s/include/python', - 'scripts': '%(base)s/bin', - 'data' : '%(base)s', - }, - 'nt': { - 'stdlib': '%(base)s/Lib', - 'platstdlib': '%(base)s/Lib', - 'purelib': '%(base)s/Lib/site-packages', - 'platlib': '%(base)s/Lib/site-packages', - 'include': '%(base)s/Include', - 'platinclude': '%(base)s/Include', - 'scripts': '%(base)s/Scripts', - 'data' : '%(base)s', - }, - 'os2': { - 'stdlib': '%(base)s/Lib', - 'platstdlib': '%(base)s/Lib', - 'purelib': '%(base)s/Lib/site-packages', - 'platlib': '%(base)s/Lib/site-packages', - 'include': '%(base)s/Include', - 'platinclude': '%(base)s/Include', - 'scripts': '%(base)s/Scripts', - 'data' : '%(base)s', - }, - 'os2_home': { - 'stdlib': '%(userbase)s/lib/python/%(py_version_short)s', - 'platstdlib': '%(userbase)s/lib/python/%(py_version_short)s', - 'purelib': '%(userbase)s/lib/python/%(py_version_short)s/site-packages', - 'platlib': '%(userbase)s/lib/python/%(py_version_short)s/site-packages', - 'include': '%(userbase)s/include/python%(py_version_short)s', - 'scripts': '%(userbase)s/bin', - 'data' : '%(userbase)s', - }, - 'nt_user': { - 'stdlib': '%(userbase)s/Python%(py_version_nodot)s', - 'platstdlib': '%(userbase)s/Python%(py_version_nodot)s', - 'purelib': '%(userbase)s/Python%(py_version_nodot)s/site-packages', - 'platlib': '%(userbase)s/Python%(py_version_nodot)s/site-packages', - 'include': '%(userbase)s/Python%(py_version_nodot)s/Include', - 'scripts': '%(userbase)s/Scripts', - 'data' : '%(userbase)s', - }, - 'posix_user': { - 'stdlib': '%(userbase)s/lib/python/%(py_version_short)s', - 'platstdlib': '%(userbase)s/lib/python/%(py_version_short)s', - 'purelib': '%(userbase)s/lib/python/%(py_version_short)s/site-packages', - 'platlib': '%(userbase)s/lib/python/%(py_version_short)s/site-packages', - 'include': '%(userbase)s/include/python%(py_version_short)s', - 'scripts': '%(userbase)s/bin', - 'data' : '%(userbase)s', - }, - } - -_SCHEME_KEYS = ('stdlib', 'platstdlib', 'purelib', 'platlib', 'include', - 'scripts', 'data') _PY_VERSION = sys.version.split()[0] _PY_VERSION_SHORT = sys.version[:3] _PY_VERSION_SHORT_NO_DOT = _PY_VERSION[0] + _PY_VERSION[2] -_PREFIX = os.path.normpath(sys.prefix) -_EXEC_PREFIX = os.path.normpath(sys.exec_prefix) _CONFIG_VARS = None _USER_BASE = None _PROJECT_BASE = abspath(os.path.dirname(sys.executable)) @@ -105,17 +57,21 @@ _PYTHON_BUILD = is_python_build() if _PYTHON_BUILD: for scheme in ('posix_prefix', 'posix_home'): - _INSTALL_SCHEMES[scheme]['include'] = '{projectbase}/Include' - _INSTALL_SCHEMES[scheme]['platinclude'] = '{srcdir}' - -def _subst_vars(s, local_vars): - try: - return s % local_vars - except KeyError: - try: - return s % os.environ - except KeyError, var: - raise AttributeError('%s' % var) + _SCHEMES.set(scheme, 'include', '{projectbase}/Include') + _SCHEMES.set(scheme, 'platinclude', '{srcdir}') + +_VAR_REPL = re.compile(r'\{(.*?)\}') + +def _subst_vars(path, local_vars): + # simple curly-braces replacement + def _replacer(matchobj): + name = matchobj.group(1) + if name in local_vars: + return local_vars[name] + elif name in os.environ: + return os.environ[name] + return matchobj.group(0) + return _VAR_REPL.sub(_replacer, path) def _extend_dict(target_dict, other_dict): target_keys = target_dict.keys() @@ -130,7 +86,7 @@ def _expand_vars(scheme, vars): vars = {} _extend_dict(vars, get_config_vars()) - for key, value in _INSTALL_SCHEMES[scheme].items(): + for key, value in _SCHEMES.items(scheme): if os.name in ('posix', 'nt'): value = os.path.expanduser(value) res[key] = os.path.normpath(_subst_vars(value, vars)) @@ -352,13 +308,14 @@ def get_config_h_filename(): def get_scheme_names(): """Returns a tuple containing the schemes names.""" - schemes = _INSTALL_SCHEMES.keys() + schemes = _SCHEMES.sections() schemes.sort() return tuple(schemes) def get_path_names(): """Returns a tuple containing the paths names.""" - return _SCHEME_KEYS + # xxx see if we want a static list + return _SCHEMES.options('posix_prefix') def get_paths(scheme=_get_default_scheme(), vars=None, expand=True): """Returns a mapping containing an install scheme. @@ -369,7 +326,7 @@ def get_paths(scheme=_get_default_scheme(), vars=None, expand=True): if expand: return _expand_vars(scheme, vars) else: - return _INSTALL_SCHEMES[scheme] + return dict(_SCHEMES.items(scheme)) def get_path(name, scheme=_get_default_scheme(), vars=None, expand=True): """Returns a path corresponding to the scheme. diff --git a/src/distutils2/_backport/tests/test_sysconfig.py b/src/distutils2/_backport/tests/test_sysconfig.py index 3236cc4..1961991 100644 --- a/src/distutils2/_backport/tests/test_sysconfig.py +++ b/src/distutils2/_backport/tests/test_sysconfig.py @@ -14,7 +14,7 @@ from test.test_support import run_unittest, TESTFN import distutils2._backport.sysconfig from distutils2._backport.sysconfig import (get_paths, get_platform, get_config_vars, - get_path, get_path_names, _INSTALL_SCHEMES, + get_path, get_path_names, _get_default_scheme, _expand_vars, get_scheme_names) @@ -85,9 +85,6 @@ class TestSysConfig(unittest2.TestCase): elif os.path.isdir(path): shutil.rmtree(path) - def test_get_path_names(self): - self.assertEquals(get_path_names(), distutils2._backport.sysconfig._SCHEME_KEYS) - def test_get_paths(self): scheme = get_paths() default_scheme = _get_default_scheme() @@ -98,12 +95,6 @@ class TestSysConfig(unittest2.TestCase): scheme.sort() self.assertEquals(scheme, wanted) - def test_get_path(self): - # xxx make real tests here - for scheme in _INSTALL_SCHEMES: - for name in _INSTALL_SCHEMES[scheme]: - res = get_path(name, scheme) - def test_get_config_vars(self): cvars = get_config_vars() self.assertIsInstance(cvars, dict) diff --git a/src/distutils2/command/install.py b/src/distutils2/command/install.py index 94c1d1c..004dca8 100644 --- a/src/distutils2/command/install.py +++ b/src/distutils2/command/install.py @@ -6,11 +6,10 @@ __revision__ = "$Id: install.py 77949 2010-02-03 15:38:12Z tarek.ziade $" import sys import os -try: - from sysconfig import get_config_vars, get_paths, get_path, get_config_var -except ImportError: - from distutils2._backport.sysconfig import (get_config_vars, get_paths, - get_path, get_config_var) + +from distutils2._backport import sysconfig +from distutils2._backport.sysconfig import (get_config_vars, get_paths, + get_path, get_config_var) from distutils2 import log from distutils2.core import Command @@ -20,96 +19,6 @@ from distutils2.util import write_file from distutils2.util import convert_path, change_root, get_platform from distutils2.errors import DistutilsOptionError -# kept for backward compat, will be removed in 3.2 -if sys.version < "2.2": - WINDOWS_SCHEME = { - 'purelib': '$base', - 'platlib': '$base', - 'headers': '$base/Include/$dist_name', - 'scripts': '$base/Scripts', - 'data' : '$base', - } -else: - WINDOWS_SCHEME = { - 'purelib': '$base/Lib/site-packages', - 'platlib': '$base/Lib/site-packages', - 'headers': '$base/Include/$dist_name', - 'scripts': '$base/Scripts', - 'data' : '$base', - } - -INSTALL_SCHEMES = { - 'unix_prefix': { - 'purelib': '$base/lib/python$py_version_short/site-packages', - 'platlib': '$platbase/lib/python$py_version_short/site-packages', - 'headers': '$base/include/python$py_version_short/$dist_name', - 'scripts': '$base/bin', - 'data' : '$base', - }, - 'unix_home': { - 'purelib': '$base/lib/python', - 'platlib': '$base/lib/python', - 'headers': '$base/include/python/$dist_name', - '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', - 'headers': '$base/Include/$dist_name', - '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', - }, - } - -SCHEME_KEYS = ('purelib', 'platlib', 'headers', 'scripts', 'data') -# end of backward compat - -def _subst_vars(s, local_vars): - try: - return s % local_vars - except KeyError: - try: - return s % os.environ - except KeyError, var: - raise AttributeError('%s' % var) - class install(Command): description = "install everything from build directory" @@ -502,7 +411,8 @@ class install(Command): if val is not None: if os.name == 'posix' or os.name == 'nt': val = os.path.expanduser(val) - val = _subst_vars(val, self.config_vars) + # see if we want to push this work in sysconfig XXX + val = sysconfig._subst_vars(val, self.config_vars) setattr(self, attr, val) def expand_basedirs(self): diff --git a/src/distutils2/tests/test_install.py b/src/distutils2/tests/test_install.py index 1e726d2..9f63abc 100644 --- a/src/distutils2/tests/test_install.py +++ b/src/distutils2/tests/test_install.py @@ -6,18 +6,13 @@ import sys import unittest2 import site -try: - import sysconfig - from sysconfig import (get_scheme_names, _CONFIG_VARS, _INSTALL_SCHEMES, - get_config_var, get_path) -except ImportError: - from distutils2._backport import sysconfig - from distutils2._backport.sysconfig import (get_scheme_names, - get_config_vars, - _INSTALL_SCHEMES, - get_config_var, get_path) - - _CONFIG_VARS=get_config_vars() +from distutils2._backport import sysconfig +from distutils2._backport.sysconfig import (get_scheme_names, + get_config_vars, + _SCHEMES, + get_config_var, get_path) + +_CONFIG_VARS = get_config_vars() from distutils2.tests import captured_stdout @@ -48,23 +43,20 @@ class InstallTestCase(support.TempdirManager, build_lib=os.path.join(builddir, "lib"), ) + old_posix_prefix = _SCHEMES.get('posix_prefix', 'platinclude') + old_posix_home = _SCHEMES.get('posix_home', 'platinclude') + new_path = '{platbase}/include/python{py_version_short}' + _SCHEMES.set('posix_prefix', 'platinclude', new_path) + _SCHEMES.set('posix_home', 'platinclude', '{platbase}/include/python') - posix_prefix = _INSTALL_SCHEMES['posix_prefix'] - old_posix_prefix = posix_prefix['platinclude'] - posix_prefix['platinclude'] = \ - '%(platbase)s/include/python{py_version_short}' - - posix_home = _INSTALL_SCHEMES['posix_home'] - old_posix_home = posix_home['platinclude'] - posix_home['platinclude'] = '%(base)s/include/python' try: cmd = install(dist) cmd.home = destination cmd.ensure_finalized() finally: - posix_home['platinclude'] = old_posix_home - posix_prefix['platinclude'] = old_posix_prefix + _SCHEMES.set('posix_prefix', 'platinclude', old_posix_prefix) + _SCHEMES.set('posix_home', 'platinclude', old_posix_home) self.assertEqual(cmd.install_base, destination) self.assertEqual(cmd.install_platbase, destination) @@ -95,9 +87,8 @@ class InstallTestCase(support.TempdirManager, self.user_base = os.path.join(self.tmpdir, 'B') self.user_site = os.path.join(self.tmpdir, 'S') _CONFIG_VARS['userbase'] = self.user_base - scheme = _INSTALL_SCHEMES['%s_user' % os.name] - scheme['purelib'] = self.user_site - + scheme = '%s_user' % os.name + _SCHEMES.set(scheme, 'purelib', self.user_site) def _expanduser(path): if path[0] == '~': path = os.path.normpath(self.tmpdir) + path[1:] @@ -110,7 +101,7 @@ class InstallTestCase(support.TempdirManager, self._test_user_site() finally: _CONFIG_VARS['userbase'] = self.old_user_base - scheme['purelib'] = self.old_user_site + _SCHEMES.set(scheme, 'purelib', self.old_user_site) os.path.expanduser = self.old_expand def _test_user_site(self): @@ -202,7 +193,6 @@ class InstallTestCase(support.TempdirManager, cmd.root = install_dir cmd.record = os.path.join(pkgdir, 'RECORD') cmd.ensure_finalized() - cmd.run() # let's check the RECORD file was created with one diff --git a/src/distutils2/util.py b/src/distutils2/util.py index 17f3881..5110697 100644 --- a/src/distutils2/util.py +++ b/src/distutils2/util.py @@ -14,10 +14,7 @@ from distutils2 import log from distutils2.version import LooseVersion from distutils2.errors import DistutilsByteCompileError -try: - _sysconfig = __import__('sysconfig') # from the standard lib -except ImportError: - from distutils2._backport import sysconfig as _sysconfig +from distutils2._backport import sysconfig as _sysconfig _PLATFORM = None |
