annotate Lib/sysconfig.py @ 70817:dd775b1561ba

Fix markup.
author Georg Brandl <georg@python.org>
date Tue, 14 Jun 2011 21:09:55 +0200
parents 04e7989e032c
children ed0bc92fed68
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
1 """Access to Python's configuration information."""
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
2
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
3 import os
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
4 import re
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
5 import sys
59502
135cd8064d6f Merged revisions 78828 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 58652
diff changeset
6 from os.path import pardir, realpath
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
7 from configparser import RawConfigParser
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
8
64855
96db640674cb Issue 9877: expose sysconfig.get_makefile_filename() in the public API.
Barry Warsaw <barry@python.org>
parents: 64850
diff changeset
9 __all__ = [
96db640674cb Issue 9877: expose sysconfig.get_makefile_filename() in the public API.
Barry Warsaw <barry@python.org>
parents: 64850
diff changeset
10 'get_config_h_filename',
96db640674cb Issue 9877: expose sysconfig.get_makefile_filename() in the public API.
Barry Warsaw <barry@python.org>
parents: 64850
diff changeset
11 'get_config_var',
96db640674cb Issue 9877: expose sysconfig.get_makefile_filename() in the public API.
Barry Warsaw <barry@python.org>
parents: 64850
diff changeset
12 'get_config_vars',
96db640674cb Issue 9877: expose sysconfig.get_makefile_filename() in the public API.
Barry Warsaw <barry@python.org>
parents: 64850
diff changeset
13 'get_makefile_filename',
96db640674cb Issue 9877: expose sysconfig.get_makefile_filename() in the public API.
Barry Warsaw <barry@python.org>
parents: 64850
diff changeset
14 'get_path',
96db640674cb Issue 9877: expose sysconfig.get_makefile_filename() in the public API.
Barry Warsaw <barry@python.org>
parents: 64850
diff changeset
15 'get_path_names',
96db640674cb Issue 9877: expose sysconfig.get_makefile_filename() in the public API.
Barry Warsaw <barry@python.org>
parents: 64850
diff changeset
16 'get_paths',
96db640674cb Issue 9877: expose sysconfig.get_makefile_filename() in the public API.
Barry Warsaw <barry@python.org>
parents: 64850
diff changeset
17 'get_platform',
96db640674cb Issue 9877: expose sysconfig.get_makefile_filename() in the public API.
Barry Warsaw <barry@python.org>
parents: 64850
diff changeset
18 'get_python_version',
96db640674cb Issue 9877: expose sysconfig.get_makefile_filename() in the public API.
Barry Warsaw <barry@python.org>
parents: 64850
diff changeset
19 'get_scheme_names',
96db640674cb Issue 9877: expose sysconfig.get_makefile_filename() in the public API.
Barry Warsaw <barry@python.org>
parents: 64850
diff changeset
20 'parse_config_h',
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
21 ]
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
22
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
23 # let's read the configuration file
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
24 # XXX _CONFIG_DIR will be set by the Makefile later
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
25 _CONFIG_DIR = os.path.normpath(os.path.dirname(__file__))
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
26 _CONFIG_FILE = os.path.join(_CONFIG_DIR, 'sysconfig.cfg')
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
27 _SCHEMES = RawConfigParser()
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
28 _SCHEMES.read(_CONFIG_FILE)
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
29 _VAR_REPL = re.compile(r'\{([^{]*?)\}')
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
30
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
31
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
32 def _expand_globals(config):
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
33 if config.has_section('globals'):
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
34 globals = config.items('globals')
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
35 else:
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
36 globals = tuple()
61897
4e00914ec447 added the list of public APIs in sysconfig
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 61896
diff changeset
37
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
38 sections = config.sections()
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
39 for section in sections:
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
40 if section == 'globals':
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
41 continue
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
42 for option, value in globals:
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
43 if config.has_option(section, option):
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
44 continue
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
45 config.set(section, option, value)
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
46 config.remove_section('globals')
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
47
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
48 # now expanding local variables defined in the cfg file
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
49 #
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
50 for section in config.sections():
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
51 variables = dict(config.items(section))
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
52
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
53 def _replacer(matchobj):
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
54 name = matchobj.group(1)
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
55 if name in variables:
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
56 return variables[name]
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
57 return matchobj.group(0)
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
58
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
59 for option, value in config.items(section):
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
60 config.set(section, option, _VAR_REPL.sub(_replacer, value))
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
61
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
62 _expand_globals(_SCHEMES)
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
63
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
64 # FIXME don't rely on sys.version here, its format is an implementatin detail
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
65 # of CPython, use sys.version_info or sys.hexversion
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
66 _PY_VERSION = sys.version.split()[0]
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
67 _PY_VERSION_SHORT = sys.version[:3]
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
68 _PY_VERSION_SHORT_NO_DOT = _PY_VERSION[0] + _PY_VERSION[2]
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
69 _PREFIX = os.path.normpath(sys.prefix)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
70 _EXEC_PREFIX = os.path.normpath(sys.exec_prefix)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
71 _CONFIG_VARS = None
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
72 _USER_BASE = None
65226
ded61e26b841 Issue #6612: Fix site and sysconfig to catch os.getcwd() error, eg. if the
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65206
diff changeset
73
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
74
65226
ded61e26b841 Issue #6612: Fix site and sysconfig to catch os.getcwd() error, eg. if the
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65206
diff changeset
75 def _safe_realpath(path):
ded61e26b841 Issue #6612: Fix site and sysconfig to catch os.getcwd() error, eg. if the
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65206
diff changeset
76 try:
ded61e26b841 Issue #6612: Fix site and sysconfig to catch os.getcwd() error, eg. if the
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65206
diff changeset
77 return realpath(path)
ded61e26b841 Issue #6612: Fix site and sysconfig to catch os.getcwd() error, eg. if the
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65206
diff changeset
78 except OSError:
ded61e26b841 Issue #6612: Fix site and sysconfig to catch os.getcwd() error, eg. if the
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65206
diff changeset
79 return path
ded61e26b841 Issue #6612: Fix site and sysconfig to catch os.getcwd() error, eg. if the
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65206
diff changeset
80
59532
236fb0af4404 Merged revisions 78835-78837 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 59507
diff changeset
81 if sys.executable:
65226
ded61e26b841 Issue #6612: Fix site and sysconfig to catch os.getcwd() error, eg. if the
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65206
diff changeset
82 _PROJECT_BASE = os.path.dirname(_safe_realpath(sys.executable))
59532
236fb0af4404 Merged revisions 78835-78837 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 59507
diff changeset
83 else:
236fb0af4404 Merged revisions 78835-78837 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 59507
diff changeset
84 # sys.executable can be empty if argv[0] has been changed and Python is
236fb0af4404 Merged revisions 78835-78837 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 59507
diff changeset
85 # unable to retrieve the real program name
65226
ded61e26b841 Issue #6612: Fix site and sysconfig to catch os.getcwd() error, eg. if the
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65206
diff changeset
86 _PROJECT_BASE = _safe_realpath(os.getcwd())
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
87
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
88 if os.name == "nt" and "pcbuild" in _PROJECT_BASE[-8:].lower():
65226
ded61e26b841 Issue #6612: Fix site and sysconfig to catch os.getcwd() error, eg. if the
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65206
diff changeset
89 _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir))
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
90 # PC/VS7.1
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
91 if os.name == "nt" and "\\pc\\v" in _PROJECT_BASE[-10:].lower():
65226
ded61e26b841 Issue #6612: Fix site and sysconfig to catch os.getcwd() error, eg. if the
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65206
diff changeset
92 _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir, pardir))
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
93 # PC/AMD64
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
94 if os.name == "nt" and "\\pcbuild\\amd64" in _PROJECT_BASE[-14:].lower():
65226
ded61e26b841 Issue #6612: Fix site and sysconfig to catch os.getcwd() error, eg. if the
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65206
diff changeset
95 _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir, pardir))
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
96
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
97
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
98 def is_python_build():
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
99 for fn in ("Setup.dist", "Setup.local"):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
100 if os.path.isfile(os.path.join(_PROJECT_BASE, "Modules", fn)):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
101 return True
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
102 return False
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
103
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
104 _PYTHON_BUILD = is_python_build()
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
105
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
106 if _PYTHON_BUILD:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
107 for scheme in ('posix_prefix', 'posix_home'):
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
108 _SCHEMES.set(scheme, 'include', '{srcdir}/Include')
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
109 _SCHEMES.set(scheme, 'platinclude', '{projectbase}/.')
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
110
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
111
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
112 def _subst_vars(path, local_vars):
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
113 """In the string `path`, replace tokens like {some.thing} with the
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
114 corresponding value from the map `local_vars`.
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
115
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
116 If there is no corresponding value, leave the token unchanged.
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
117 """
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
118 def _replacer(matchobj):
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
119 name = matchobj.group(1)
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
120 if name in local_vars:
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
121 return local_vars[name]
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
122 elif name in os.environ:
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
123 return os.environ[name]
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
124 return matchobj.group(0)
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
125 return _VAR_REPL.sub(_replacer, path)
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
126
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
127
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
128 def _extend_dict(target_dict, other_dict):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
129 target_keys = target_dict.keys()
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
130 for key, value in other_dict.items():
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
131 if key in target_keys:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
132 continue
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
133 target_dict[key] = value
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
134
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
135
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
136 def _expand_vars(scheme, vars):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
137 res = {}
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
138 if vars is None:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
139 vars = {}
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
140 _extend_dict(vars, get_config_vars())
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
141
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
142 for key, value in _SCHEMES.items(scheme):
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
143 if os.name in ('posix', 'nt'):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
144 value = os.path.expanduser(value)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
145 res[key] = os.path.normpath(_subst_vars(value, vars))
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
146 return res
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
147
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
148
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
149 def format_value(value, vars):
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
150 def _replacer(matchobj):
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
151 name = matchobj.group(1)
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
152 if name in vars:
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
153 return vars[name]
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
154 return matchobj.group(0)
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
155 return _VAR_REPL.sub(_replacer, value)
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
156
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
157
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
158 def _get_default_scheme():
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
159 if os.name == 'posix':
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
160 # the default scheme for posix is posix_prefix
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
161 return 'posix_prefix'
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
162 return os.name
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
163
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
164
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
165 def _getuserbase():
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
166 env_base = os.environ.get("PYTHONUSERBASE", None)
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
167
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
168 def joinuser(*args):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
169 return os.path.expanduser(os.path.join(*args))
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
170
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
171 # what about 'os2emx', 'riscos' ?
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
172 if os.name == "nt":
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
173 base = os.environ.get("APPDATA") or "~"
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
174 if env_base:
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
175 return env_base
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
176 else:
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
177 return joinuser(base, "Python")
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
178
61403
3fae7cb49209 Merged revisions 80967 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 59532
diff changeset
179 if sys.platform == "darwin":
3fae7cb49209 Merged revisions 80967 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 59532
diff changeset
180 framework = get_config_var("PYTHONFRAMEWORK")
3fae7cb49209 Merged revisions 80967 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 59532
diff changeset
181 if framework:
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
182 if env_base:
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
183 return env_base
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
184 else:
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
185 return joinuser("~", "Library", framework, "%d.%d" %
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
186 sys.version_info[:2])
61403
3fae7cb49209 Merged revisions 80967 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 59532
diff changeset
187
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
188 if env_base:
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
189 return env_base
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
190 else:
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
191 return joinuser("~", ".local")
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
192
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
193
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
194 def _parse_makefile(filename, vars=None):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
195 """Parse a Makefile-style file.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
196
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
197 A dictionary containing name/value pairs is returned. If an
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
198 optional dictionary is passed in as the second argument, it is
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
199 used instead of a new dictionary.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
200 """
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
201 # Regexes needed for parsing Makefile (and similar syntaxes,
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
202 # like old-style Setup files).
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
203 _variable_rx = re.compile("([a-zA-Z][a-zA-Z0-9_]+)\s*=\s*(.*)")
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
204 _findvar1_rx = re.compile(r"\$\(([A-Za-z][A-Za-z0-9_]*)\)")
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
205 _findvar2_rx = re.compile(r"\${([A-Za-z][A-Za-z0-9_]*)}")
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
206
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
207 if vars is None:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
208 vars = {}
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
209 done = {}
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
210 notdone = {}
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
211
65605
1a08f4a9eafd Issue #6011: sysconfig and distutils.sysconfig use the surrogateescape error
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65331
diff changeset
212 with open(filename, errors="surrogateescape") as f:
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
213 lines = f.readlines()
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
214
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
215 for line in lines:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
216 if line.startswith('#') or line.strip() == '':
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
217 continue
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
218 m = _variable_rx.match(line)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
219 if m:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
220 n, v = m.group(1, 2)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
221 v = v.strip()
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
222 # `$$' is a literal `$' in make
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
223 tmpv = v.replace('$$', '')
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
224
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
225 if "$" in tmpv:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
226 notdone[n] = v
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
227 else:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
228 try:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
229 v = int(v)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
230 except ValueError:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
231 # insert literal `$'
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
232 done[n] = v.replace('$$', '$')
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
233 else:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
234 done[n] = v
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
235
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
236 # do variable interpolation here
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
237 variables = list(notdone.keys())
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
238
63108
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
239 # Variables with a 'PY_' prefix in the makefile. These need to
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
240 # be made available without that prefix through sysconfig.
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
241 # Special care is needed to ensure that variable expansion works, even
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
242 # if the expansion uses the name without a prefix.
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
243 renamed_variables = ('CFLAGS', 'LDFLAGS', 'CPPFLAGS')
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
244
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
245 while len(variables) > 0:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
246 for name in tuple(variables):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
247 value = notdone[name]
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
248 m = _findvar1_rx.search(value) or _findvar2_rx.search(value)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
249 if m is not None:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
250 n = m.group(1)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
251 found = True
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
252 if n in done:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
253 item = str(done[n])
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
254 elif n in notdone:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
255 # get it on a subsequent round
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
256 found = False
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
257 elif n in os.environ:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
258 # do it like make: fall back to environment
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
259 item = os.environ[n]
63108
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
260
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
261 elif n in renamed_variables:
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
262 if (name.startswith('PY_') and
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
263 name[3:] in renamed_variables):
63108
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
264 item = ""
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
265
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
266 elif 'PY_' + n in notdone:
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
267 found = False
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
268
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
269 else:
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
270 item = str(done['PY_' + n])
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
271
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
272 else:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
273 done[n] = item = ""
63108
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
274
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
275 if found:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
276 after = value[m.end():]
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
277 value = value[:m.start()] + item + after
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
278 if "$" in after:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
279 notdone[name] = value
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
280 else:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
281 try:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
282 value = int(value)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
283 except ValueError:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
284 done[name] = value.strip()
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
285 else:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
286 done[name] = value
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
287 variables.remove(name)
63108
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
288
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
289 if name.startswith('PY_') \
70352
4a7bb2ef636a Issue #12070: Fix the Makefile parser of the sysconfig module to handle
Victor Stinner <victor.stinner@haypocalc.com>
parents: 70144
diff changeset
290 and name[3:] in renamed_variables:
63108
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
291
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
292 name = name[3:]
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
293 if name not in done:
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
294 done[name] = value
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
295
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
296 else:
70352
4a7bb2ef636a Issue #12070: Fix the Makefile parser of the sysconfig module to handle
Victor Stinner <victor.stinner@haypocalc.com>
parents: 70144
diff changeset
297 # bogus variable reference (e.g. "prefix=$/opt/python");
4a7bb2ef636a Issue #12070: Fix the Makefile parser of the sysconfig module to handle
Victor Stinner <victor.stinner@haypocalc.com>
parents: 70144
diff changeset
298 # just drop it since we can't deal
4a7bb2ef636a Issue #12070: Fix the Makefile parser of the sysconfig module to handle
Victor Stinner <victor.stinner@haypocalc.com>
parents: 70144
diff changeset
299 done[name] = value
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
300 variables.remove(name)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
301
65206
25d078739c2a Issue #9437: Fix building C extensions with non-default LDFLAGS.
Antoine Pitrou <solipsis@pitrou.net>
parents: 64855
diff changeset
302 # strip spurious spaces
25d078739c2a Issue #9437: Fix building C extensions with non-default LDFLAGS.
Antoine Pitrou <solipsis@pitrou.net>
parents: 64855
diff changeset
303 for k, v in done.items():
25d078739c2a Issue #9437: Fix building C extensions with non-default LDFLAGS.
Antoine Pitrou <solipsis@pitrou.net>
parents: 64855
diff changeset
304 if isinstance(v, str):
25d078739c2a Issue #9437: Fix building C extensions with non-default LDFLAGS.
Antoine Pitrou <solipsis@pitrou.net>
parents: 64855
diff changeset
305 done[k] = v.strip()
25d078739c2a Issue #9437: Fix building C extensions with non-default LDFLAGS.
Antoine Pitrou <solipsis@pitrou.net>
parents: 64855
diff changeset
306
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
307 # save the results in the global dictionary
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
308 vars.update(done)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
309 return vars
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
310
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
311
64855
96db640674cb Issue 9877: expose sysconfig.get_makefile_filename() in the public API.
Barry Warsaw <barry@python.org>
parents: 64850
diff changeset
312 def get_makefile_filename():
66373
66e0f5c65158 r84925 followup: add docstring for get_makefile_filename (+PEP 257 fixes)
Éric Araujo <merwok@netwok.org>
parents: 65993
diff changeset
313 """Return the path of the Makefile."""
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
314 if _PYTHON_BUILD:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
315 return os.path.join(_PROJECT_BASE, "Makefile")
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
316 if hasattr(sys, 'abiflags'):
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
317 config_dir_name = 'config-%s%s' % (_PY_VERSION_SHORT, sys.abiflags)
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
318 else:
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
319 config_dir_name = 'config'
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
320 return os.path.join(get_path('stdlib'), config_dir_name, 'Makefile')
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
321
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
322
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
323 def _init_posix(vars):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
324 """Initialize the module as appropriate for POSIX systems."""
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
325 # load the installed Makefile:
64855
96db640674cb Issue 9877: expose sysconfig.get_makefile_filename() in the public API.
Barry Warsaw <barry@python.org>
parents: 64850
diff changeset
326 makefile = get_makefile_filename()
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
327 try:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
328 _parse_makefile(makefile, vars)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
329 except IOError as e:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
330 msg = "invalid Python installation: unable to open %s" % makefile
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
331 if hasattr(e, "strerror"):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
332 msg = msg + " (%s)" % e.strerror
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
333 raise IOError(msg)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
334 # load the installed pyconfig.h:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
335 config_h = get_config_h_filename()
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
336 try:
65331
46956a25c264 Explicitly close some files (from issue #10093)
Antoine Pitrou <solipsis@pitrou.net>
parents: 65226
diff changeset
337 with open(config_h) as f:
46956a25c264 Explicitly close some files (from issue #10093)
Antoine Pitrou <solipsis@pitrou.net>
parents: 65226
diff changeset
338 parse_config_h(f, vars)
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
339 except IOError as e:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
340 msg = "invalid Python installation: unable to open %s" % config_h
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
341 if hasattr(e, "strerror"):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
342 msg = msg + " (%s)" % e.strerror
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
343 raise IOError(msg)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
344 # On AIX, there are wrong paths to the linker scripts in the Makefile
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
345 # -- these paths are relative to the Python source, but when installed
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
346 # the scripts are in another directory.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
347 if _PYTHON_BUILD:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
348 vars['LDSHARED'] = vars['BLDSHARED']
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
349
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
350
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
351 def _init_non_posix(vars):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
352 """Initialize the module as appropriate for NT"""
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
353 # set basic install directories
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
354 vars['LIBDEST'] = get_path('stdlib')
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
355 vars['BINLIBDEST'] = get_path('platstdlib')
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
356 vars['INCLUDEPY'] = get_path('include')
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
357 vars['SO'] = '.pyd'
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
358 vars['EXE'] = '.exe'
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
359 vars['VERSION'] = _PY_VERSION_SHORT_NO_DOT
65226
ded61e26b841 Issue #6612: Fix site and sysconfig to catch os.getcwd() error, eg. if the
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65206
diff changeset
360 vars['BINDIR'] = os.path.dirname(_safe_realpath(sys.executable))
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
361
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
362 #
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
363 # public APIs
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
364 #
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
365
58652
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
366
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
367 def parse_config_h(fp, vars=None):
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
368 """Parse a config.h-style file.
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
369
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
370 A dictionary containing name/value pairs is returned. If an
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
371 optional dictionary is passed in as the second argument, it is
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
372 used instead of a new dictionary.
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
373 """
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
374 if vars is None:
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
375 vars = {}
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
376 define_rx = re.compile("#define ([A-Z][A-Za-z0-9_]+) (.*)\n")
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
377 undef_rx = re.compile("/[*] #undef ([A-Z][A-Za-z0-9_]+) [*]/\n")
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
378
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
379 while True:
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
380 line = fp.readline()
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
381 if not line:
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
382 break
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
383 m = define_rx.match(line)
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
384 if m:
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
385 n, v = m.group(1, 2)
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
386 try:
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
387 v = int(v)
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
388 except ValueError:
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
389 pass
58652
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
390 vars[n] = v
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
391 else:
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
392 m = undef_rx.match(line)
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
393 if m:
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
394 vars[m.group(1)] = 0
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
395 return vars
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
396
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
397
58652
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
398 def get_config_h_filename():
66373
66e0f5c65158 r84925 followup: add docstring for get_makefile_filename (+PEP 257 fixes)
Éric Araujo <merwok@netwok.org>
parents: 65993
diff changeset
399 """Return the path of pyconfig.h."""
58652
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
400 if _PYTHON_BUILD:
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
401 if os.name == "nt":
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
402 inc_dir = os.path.join(_PROJECT_BASE, "PC")
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
403 else:
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
404 inc_dir = _PROJECT_BASE
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
405 else:
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
406 inc_dir = get_path('platinclude')
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
407 return os.path.join(inc_dir, 'pyconfig.h')
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
408
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
409
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
410 def get_scheme_names():
66373
66e0f5c65158 r84925 followup: add docstring for get_makefile_filename (+PEP 257 fixes)
Éric Araujo <merwok@netwok.org>
parents: 65993
diff changeset
411 """Return a tuple containing the schemes names."""
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
412 return tuple(sorted(_SCHEMES.sections()))
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
413
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
414
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
415 def get_path_names():
66373
66e0f5c65158 r84925 followup: add docstring for get_makefile_filename (+PEP 257 fixes)
Éric Araujo <merwok@netwok.org>
parents: 65993
diff changeset
416 """Return a tuple containing the paths names."""
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
417 # xxx see if we want a static list
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
418 return _SCHEMES.options('posix_prefix')
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
419
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
420
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
421 def get_paths(scheme=_get_default_scheme(), vars=None, expand=True):
66373
66e0f5c65158 r84925 followup: add docstring for get_makefile_filename (+PEP 257 fixes)
Éric Araujo <merwok@netwok.org>
parents: 65993
diff changeset
422 """Return a mapping containing an install scheme.
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
423
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
424 ``scheme`` is the install scheme name. If not provided, it will
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
425 return the default scheme for the current platform.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
426 """
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
427 if expand:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
428 return _expand_vars(scheme, vars)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
429 else:
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
430 return dict(_SCHEMES.items(scheme))
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
431
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
432
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
433 def get_path(name, scheme=_get_default_scheme(), vars=None, expand=True):
66373
66e0f5c65158 r84925 followup: add docstring for get_makefile_filename (+PEP 257 fixes)
Éric Araujo <merwok@netwok.org>
parents: 65993
diff changeset
434 """Return a path corresponding to the scheme.
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
435
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
436 ``scheme`` is the install scheme name.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
437 """
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
438 return get_paths(scheme, vars, expand)[name]
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
439
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
440
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
441 def get_config_vars(*args):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
442 """With no arguments, return a dictionary of all configuration
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
443 variables relevant for the current platform.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
444
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
445 On Unix, this means every variable defined in Python's installed Makefile;
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
446 On Windows and Mac OS it's a much smaller set.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
447
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
448 With arguments, return a list of values that result from looking up
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
449 each argument in the configuration variable dictionary.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
450 """
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
451 global _CONFIG_VARS
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
452 if _CONFIG_VARS is None:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
453 _CONFIG_VARS = {}
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
454 # Normalized versions of prefix and exec_prefix are handy to have;
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
455 # in fact, these are the standard versions used most places in the
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
456 # packaging module.
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
457 _CONFIG_VARS['prefix'] = _PREFIX
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
458 _CONFIG_VARS['exec_prefix'] = _EXEC_PREFIX
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
459 _CONFIG_VARS['py_version'] = _PY_VERSION
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
460 _CONFIG_VARS['py_version_short'] = _PY_VERSION_SHORT
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
461 _CONFIG_VARS['py_version_nodot'] = _PY_VERSION[0] + _PY_VERSION[2]
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
462 _CONFIG_VARS['base'] = _PREFIX
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
463 _CONFIG_VARS['platbase'] = _EXEC_PREFIX
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
464 _CONFIG_VARS['projectbase'] = _PROJECT_BASE
66438
cead04b3c5ed sys.abiflags may not be defined on all platforms.
Barry Warsaw <barry@python.org>
parents: 66429
diff changeset
465 try:
cead04b3c5ed sys.abiflags may not be defined on all platforms.
Barry Warsaw <barry@python.org>
parents: 66429
diff changeset
466 _CONFIG_VARS['abiflags'] = sys.abiflags
cead04b3c5ed sys.abiflags may not be defined on all platforms.
Barry Warsaw <barry@python.org>
parents: 66429
diff changeset
467 except AttributeError:
cead04b3c5ed sys.abiflags may not be defined on all platforms.
Barry Warsaw <barry@python.org>
parents: 66429
diff changeset
468 # sys.abiflags may not be defined on all platforms.
cead04b3c5ed sys.abiflags may not be defined on all platforms.
Barry Warsaw <barry@python.org>
parents: 66429
diff changeset
469 _CONFIG_VARS['abiflags'] = ''
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
470
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
471 if os.name in ('nt', 'os2'):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
472 _init_non_posix(_CONFIG_VARS)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
473 if os.name == 'posix':
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
474 _init_posix(_CONFIG_VARS)
61403
3fae7cb49209 Merged revisions 80967 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 59532
diff changeset
475 # Setting 'userbase' is done below the call to the
3fae7cb49209 Merged revisions 80967 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 59532
diff changeset
476 # init function to enable using 'get_config_var' in
3fae7cb49209 Merged revisions 80967 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 59532
diff changeset
477 # the init-function.
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
478 if sys.version >= '2.6':
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
479 _CONFIG_VARS['userbase'] = _getuserbase()
61403
3fae7cb49209 Merged revisions 80967 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 59532
diff changeset
480
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
481 if 'srcdir' not in _CONFIG_VARS:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
482 _CONFIG_VARS['srcdir'] = _PROJECT_BASE
62342
356d0ea8ea34 Fix for buildbot failure in r81999.
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62336
diff changeset
483 else:
65226
ded61e26b841 Issue #6612: Fix site and sysconfig to catch os.getcwd() error, eg. if the
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65206
diff changeset
484 _CONFIG_VARS['srcdir'] = _safe_realpath(_CONFIG_VARS['srcdir'])
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
485
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
486 # Convert srcdir into an absolute path if it appears necessary.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
487 # Normally it is relative to the build directory. However, during
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
488 # testing, for example, we might be running a non-installed python
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
489 # from a different directory.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
490 if _PYTHON_BUILD and os.name == "posix":
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
491 base = _PROJECT_BASE
65226
ded61e26b841 Issue #6612: Fix site and sysconfig to catch os.getcwd() error, eg. if the
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65206
diff changeset
492 try:
ded61e26b841 Issue #6612: Fix site and sysconfig to catch os.getcwd() error, eg. if the
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65206
diff changeset
493 cwd = os.getcwd()
ded61e26b841 Issue #6612: Fix site and sysconfig to catch os.getcwd() error, eg. if the
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65206
diff changeset
494 except OSError:
ded61e26b841 Issue #6612: Fix site and sysconfig to catch os.getcwd() error, eg. if the
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65206
diff changeset
495 cwd = None
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
496 if (not os.path.isabs(_CONFIG_VARS['srcdir']) and
65226
ded61e26b841 Issue #6612: Fix site and sysconfig to catch os.getcwd() error, eg. if the
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65206
diff changeset
497 base != cwd):
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
498 # srcdir is relative and we are not in the same directory
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
499 # as the executable. Assume executable is in the build
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
500 # directory and make srcdir absolute.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
501 srcdir = os.path.join(base, _CONFIG_VARS['srcdir'])
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
502 _CONFIG_VARS['srcdir'] = os.path.normpath(srcdir)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
503
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
504 if sys.platform == 'darwin':
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
505 kernel_version = os.uname()[2] # Kernel version (8.4.3)
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
506 major_version = int(kernel_version.split('.')[0])
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
507
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
508 if major_version < 8:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
509 # On Mac OS X before 10.4, check if -arch and -isysroot
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
510 # are in CFLAGS or LDFLAGS and remove them if they are.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
511 # This is needed when building extensions on a 10.3 system
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
512 # using a universal build of python.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
513 for key in ('LDFLAGS', 'BASECFLAGS',
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
514 # a number of derived variables. These need to be
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
515 # patched up as well.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
516 'CFLAGS', 'PY_CFLAGS', 'BLDSHARED'):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
517 flags = _CONFIG_VARS[key]
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
518 flags = re.sub('-arch\s+\w+\s', ' ', flags)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
519 flags = re.sub('-isysroot [^ \t]*', ' ', flags)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
520 _CONFIG_VARS[key] = flags
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
521 else:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
522 # Allow the user to override the architecture flags using
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
523 # an environment variable.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
524 # NOTE: This name was introduced by Apple in OSX 10.5 and
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
525 # is used by several scripting languages distributed with
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
526 # that OS release.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
527 if 'ARCHFLAGS' in os.environ:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
528 arch = os.environ['ARCHFLAGS']
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
529 for key in ('LDFLAGS', 'BASECFLAGS',
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
530 # a number of derived variables. These need to be
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
531 # patched up as well.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
532 'CFLAGS', 'PY_CFLAGS', 'BLDSHARED'):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
533
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
534 flags = _CONFIG_VARS[key]
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
535 flags = re.sub('-arch\s+\w+\s', ' ', flags)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
536 flags = flags + ' ' + arch
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
537 _CONFIG_VARS[key] = flags
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
538
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
539 # If we're on OSX 10.5 or later and the user tries to
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
540 # compiles an extension using an SDK that is not present
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
541 # on the current machine it is better to not use an SDK
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
542 # than to fail.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
543 #
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
544 # The major usecase for this is users using a Python.org
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
545 # binary installer on OSX 10.6: that installer uses
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
546 # the 10.4u SDK, but that SDK is not installed by default
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
547 # when you install Xcode.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
548 #
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
549 CFLAGS = _CONFIG_VARS.get('CFLAGS', '')
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
550 m = re.search('-isysroot\s+(\S+)', CFLAGS)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
551 if m is not None:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
552 sdk = m.group(1)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
553 if not os.path.exists(sdk):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
554 for key in ('LDFLAGS', 'BASECFLAGS',
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
555 # a number of derived variables. These need to be
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
556 # patched up as well.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
557 'CFLAGS', 'PY_CFLAGS', 'BLDSHARED'):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
559 flags = _CONFIG_VARS[key]
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
560 flags = re.sub('-isysroot\s+\S+(\s|$)', ' ', flags)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
561 _CONFIG_VARS[key] = flags
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
562
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
563 if args:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
564 vals = []
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
565 for name in args:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
566 vals.append(_CONFIG_VARS.get(name))
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
567 return vals
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
568 else:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
569 return _CONFIG_VARS
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
570
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
571
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
572 def get_config_var(name):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
573 """Return the value of a single variable using the dictionary returned by
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
574 'get_config_vars()'.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
575
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
576 Equivalent to get_config_vars().get(name)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
577 """
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
578 return get_config_vars().get(name)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
579
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
580
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
581 def get_platform():
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
582 """Return a string that identifies the current platform.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
583
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
584 This is used mainly to distinguish platform-specific build directories and
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
585 platform-specific built distributions. Typically includes the OS name
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
586 and version and the architecture (as supplied by 'os.uname()'),
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
587 although the exact information included depends on the OS; eg. for IRIX
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
588 the architecture isn't particularly important (IRIX only runs on SGI
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
589 hardware), but for Linux the kernel version isn't particularly
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
590 important.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
591
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
592 Examples of returned values:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
593 linux-i586
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
594 linux-alpha (?)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
595 solaris-2.6-sun4u
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
596 irix-5.3
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
597 irix64-6.2
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
598
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
599 Windows will return one of:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
600 win-amd64 (64bit Windows on AMD64 (aka x86_64, Intel64, EM64T, etc)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
601 win-ia64 (64bit Windows on Itanium)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
602 win32 (all others - specifically, sys.platform is returned)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
603
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
604 For other non-POSIX platforms, currently just returns 'sys.platform'.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
605 """
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
606 if os.name == 'nt':
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
607 # sniff sys.version for architecture.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
608 prefix = " bit ("
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
609 i = sys.version.find(prefix)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
610 if i == -1:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
611 return sys.platform
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
612 j = sys.version.find(")", i)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
613 look = sys.version[i+len(prefix):j].lower()
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
614 if look == 'amd64':
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
615 return 'win-amd64'
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
616 if look == 'itanium':
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
617 return 'win-ia64'
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
618 return sys.platform
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
619
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
620 if os.name != "posix" or not hasattr(os, 'uname'):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
621 # XXX what about the architecture? NT is Intel or Alpha,
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
622 # Mac OS is M68k or PPC, etc.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
623 return sys.platform
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
624
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
625 # Try to distinguish various flavours of Unix
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
626 osname, host, release, version, machine = os.uname()
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
627
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
628 # Convert the OS name to lowercase, remove '/' characters
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
629 # (to accommodate BSD/OS), and translate spaces (for "Power Macintosh")
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
630 osname = osname.lower().replace('/', '')
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
631 machine = machine.replace(' ', '_')
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
632 machine = machine.replace('/', '-')
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
633
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
634 if osname[:5] == "linux":
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
635 # At least on Linux/Intel, 'machine' is the processor --
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
636 # i386, etc.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
637 # XXX what about Alpha, SPARC, etc?
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
638 return "%s-%s" % (osname, machine)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
639 elif osname[:5] == "sunos":
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
640 if release[0] >= "5": # SunOS 5 == Solaris 2
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
641 osname = "solaris"
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
642 release = "%d.%s" % (int(release[0]) - 3, release[2:])
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
643 # fall through to standard osname-release-machine representation
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
644 elif osname[:4] == "irix": # could be "irix64"!
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
645 return "%s-%s" % (osname, release)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
646 elif osname[:3] == "aix":
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
647 return "%s-%s.%s" % (osname, version, release)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
648 elif osname[:6] == "cygwin":
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
649 osname = "cygwin"
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
650 rel_re = re.compile(r'[\d.]+')
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
651 m = rel_re.match(release)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
652 if m:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
653 release = m.group()
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
654 elif osname[:6] == "darwin":
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
655 #
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
656 # For our purposes, we'll assume that the system version from
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
657 # distutils' perspective is what MACOSX_DEPLOYMENT_TARGET is set
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
658 # to. This makes the compatibility story a bit more sane because the
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
659 # machine is going to compile and link as if it were
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
660 # MACOSX_DEPLOYMENT_TARGET.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
661 cfgvars = get_config_vars()
70144
5b108229a978 Issue #9516: avoid errors in sysconfig when MACOSX_DEPLOYMENT_TARGET is set in shell.
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 69606
diff changeset
662 macver = cfgvars.get('MACOSX_DEPLOYMENT_TARGET')
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
663
70411
e5ff8ca071ee Minor cleanup in sysconfig.
Éric Araujo <merwok@netwok.org>
parents: 70194
diff changeset
664 if True:
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
665 # Always calculate the release of the running machine,
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
666 # needed to determine if we can build fat binaries or not.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
667
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
668 macrelease = macver
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
669 # Get the system version. Reading this plist is a documented
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
670 # way to get the system version (see the documentation for
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
671 # the Gestalt Manager)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
672 try:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
673 f = open('/System/Library/CoreServices/SystemVersion.plist')
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
674 except IOError:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
675 # We're on a plain darwin box, fall back to the default
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
676 # behaviour.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
677 pass
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
678 else:
65993
3bf86785cd9c Always close files in distutils code and tests (#10252).
Éric Araujo <merwok@netwok.org>
parents: 65605
diff changeset
679 try:
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
680 m = re.search(r'<key>ProductUserVisibleVersion</key>\s*'
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
681 r'<string>(.*?)</string>', f.read())
65993
3bf86785cd9c Always close files in distutils code and tests (#10252).
Éric Araujo <merwok@netwok.org>
parents: 65605
diff changeset
682 finally:
3bf86785cd9c Always close files in distutils code and tests (#10252).
Éric Araujo <merwok@netwok.org>
parents: 65605
diff changeset
683 f.close()
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
684 if m is not None:
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
685 macrelease = '.'.join(m.group(1).split('.')[:2])
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
686 # else: fall back to the default behaviour
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
687
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
688 if not macver:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
689 macver = macrelease
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
690
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
691 if macver:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
692 release = macver
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
693 osname = "macosx"
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
694
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
695 if ((macrelease + '.') >= '10.4.' and
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
696 '-arch' in get_config_vars().get('CFLAGS', '').strip()):
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
697 # The universal build will build fat binaries, but not on
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
698 # systems before 10.4
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
699 #
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
700 # Try to detect 4-way universal builds, those have machine-type
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
701 # 'universal' instead of 'fat'.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
702
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
703 machine = 'fat'
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
704 cflags = get_config_vars().get('CFLAGS')
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
705
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
706 archs = re.findall('-arch\s+(\S+)', cflags)
62950
ce935e71bd07 Fix for issue 9164
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62908
diff changeset
707 archs = tuple(sorted(set(archs)))
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
708
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
709 if len(archs) == 1:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
710 machine = archs[0]
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
711 elif archs == ('i386', 'ppc'):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
712 machine = 'fat'
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
713 elif archs == ('i386', 'x86_64'):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
714 machine = 'intel'
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
715 elif archs == ('i386', 'ppc', 'x86_64'):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
716 machine = 'fat3'
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
717 elif archs == ('ppc64', 'x86_64'):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
718 machine = 'fat64'
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
719 elif archs == ('i386', 'ppc', 'ppc64', 'x86_64'):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
720 machine = 'universal'
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
721 else:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
722 raise ValueError(
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
723 "Don't know machine value for archs=%r" % (archs,))
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
724
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
725 elif machine == 'i386':
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
726 # On OSX the machine type returned by uname is always the
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
727 # 32-bit variant, even if the executable architecture is
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
728 # the 64-bit variant
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
729 if sys.maxsize >= 2**32:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
730 machine = 'x86_64'
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
731
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
732 elif machine in ('PowerPC', 'Power_Macintosh'):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
733 # Pick a sane name for the PPC architecture.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
734 # See 'i386' case
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
735 if sys.maxsize >= 2**32:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
736 machine = 'ppc64'
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
737 else:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
738 machine = 'ppc'
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
739
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
740 return "%s-%s-%s" % (osname, release, machine)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
741
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
742
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
743 def get_python_version():
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
744 return _PY_VERSION_SHORT
61896
703287a99939 Made sysconfig a script that displays useful information - #8770
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 61765
diff changeset
745
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
746
61896
703287a99939 Made sysconfig a script that displays useful information - #8770
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 61765
diff changeset
747 def _print_dict(title, data):
703287a99939 Made sysconfig a script that displays useful information - #8770
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 61765
diff changeset
748 for index, (key, value) in enumerate(sorted(data.items())):
703287a99939 Made sysconfig a script that displays useful information - #8770
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 61765
diff changeset
749 if index == 0:
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
750 print('%s: ' % (title))
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
751 print('\t%s = "%s"' % (key, value))
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
752
61896
703287a99939 Made sysconfig a script that displays useful information - #8770
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 61765
diff changeset
753
703287a99939 Made sysconfig a script that displays useful information - #8770
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 61765
diff changeset
754 def _main():
66373
66e0f5c65158 r84925 followup: add docstring for get_makefile_filename (+PEP 257 fixes)
Éric Araujo <merwok@netwok.org>
parents: 65993
diff changeset
755 """Display all information sysconfig detains."""
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
756 print('Platform: "%s"' % get_platform())
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
757 print('Python version: "%s"' % get_python_version())
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
758 print('Current installation scheme: "%s"' % _get_default_scheme())
70411
e5ff8ca071ee Minor cleanup in sysconfig.
Éric Araujo <merwok@netwok.org>
parents: 70194
diff changeset
759 print()
61896
703287a99939 Made sysconfig a script that displays useful information - #8770
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 61765
diff changeset
760 _print_dict('Paths', get_paths())
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
761 print()
61896
703287a99939 Made sysconfig a script that displays useful information - #8770
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 61765
diff changeset
762 _print_dict('Variables', get_config_vars())
703287a99939 Made sysconfig a script that displays useful information - #8770
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 61765
diff changeset
763
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
764
61896
703287a99939 Made sysconfig a script that displays useful information - #8770
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 61765
diff changeset
765 if __name__ == '__main__':
703287a99939 Made sysconfig a script that displays useful information - #8770
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 61765
diff changeset
766 _main()