annotate Lib/sysconfig.py @ 87690:66c1c9f32567 default tip

Add use_weakref option to functools.lru_cache The use_weakref option makes lru_cache create weak references to the function arguments when creating the cache key, which prevents them from staying in the memory forever even after all other references to them are gone. This is a proof of concept for http://bugs.python.org/issue19859
author Radomir Dopieralski <devel@sheep.art.pl>
date Tue, 03 Dec 2013 16:02:48 +0100
parents 25f856d500e3
children
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
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
4 import sys
59502
135cd8064d6f Merged revisions 78828 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 58652
diff changeset
5 from os.path import pardir, realpath
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
6
64855
96db640674cb Issue 9877: expose sysconfig.get_makefile_filename() in the public API.
Barry Warsaw <barry@python.org>
parents: 64850
diff changeset
7 __all__ = [
96db640674cb Issue 9877: expose sysconfig.get_makefile_filename() in the public API.
Barry Warsaw <barry@python.org>
parents: 64850
diff changeset
8 '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
9 'get_config_var',
96db640674cb Issue 9877: expose sysconfig.get_makefile_filename() in the public API.
Barry Warsaw <barry@python.org>
parents: 64850
diff changeset
10 'get_config_vars',
96db640674cb Issue 9877: expose sysconfig.get_makefile_filename() in the public API.
Barry Warsaw <barry@python.org>
parents: 64850
diff changeset
11 'get_makefile_filename',
96db640674cb Issue 9877: expose sysconfig.get_makefile_filename() in the public API.
Barry Warsaw <barry@python.org>
parents: 64850
diff changeset
12 'get_path',
96db640674cb Issue 9877: expose sysconfig.get_makefile_filename() in the public API.
Barry Warsaw <barry@python.org>
parents: 64850
diff changeset
13 'get_path_names',
96db640674cb Issue 9877: expose sysconfig.get_makefile_filename() in the public API.
Barry Warsaw <barry@python.org>
parents: 64850
diff changeset
14 'get_paths',
96db640674cb Issue 9877: expose sysconfig.get_makefile_filename() in the public API.
Barry Warsaw <barry@python.org>
parents: 64850
diff changeset
15 'get_platform',
96db640674cb Issue 9877: expose sysconfig.get_makefile_filename() in the public API.
Barry Warsaw <barry@python.org>
parents: 64850
diff changeset
16 'get_python_version',
96db640674cb Issue 9877: expose sysconfig.get_makefile_filename() in the public API.
Barry Warsaw <barry@python.org>
parents: 64850
diff changeset
17 'get_scheme_names',
96db640674cb Issue 9877: expose sysconfig.get_makefile_filename() in the public API.
Barry Warsaw <barry@python.org>
parents: 64850
diff changeset
18 'parse_config_h',
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
19 ]
61897
4e00914ec447 added the list of public APIs in sysconfig
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 61896
diff changeset
20
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
21 _INSTALL_SCHEMES = {
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
22 'posix_prefix': {
77675
e989e7586da6 Packaging removal: also revert introduction of sysconfig.cfg.
Éric Araujo <merwok@netwok.org>
parents: 77665
diff changeset
23 'stdlib': '{installed_base}/lib/python{py_version_short}',
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
24 'platstdlib': '{platbase}/lib/python{py_version_short}',
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
25 'purelib': '{base}/lib/python{py_version_short}/site-packages',
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
26 'platlib': '{platbase}/lib/python{py_version_short}/site-packages',
66429
a763ed3d6e8c Final patch for issue 9807.
Barry Warsaw <barry@python.org>
parents: 66373
diff changeset
27 'include':
77675
e989e7586da6 Packaging removal: also revert introduction of sysconfig.cfg.
Éric Araujo <merwok@netwok.org>
parents: 77665
diff changeset
28 '{installed_base}/include/python{py_version_short}{abiflags}',
66429
a763ed3d6e8c Final patch for issue 9807.
Barry Warsaw <barry@python.org>
parents: 66373
diff changeset
29 'platinclude':
77675
e989e7586da6 Packaging removal: also revert introduction of sysconfig.cfg.
Éric Araujo <merwok@netwok.org>
parents: 77665
diff changeset
30 '{installed_platbase}/include/python{py_version_short}{abiflags}',
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
31 'scripts': '{base}/bin',
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
32 'data': '{base}',
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
33 },
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
34 'posix_home': {
77675
e989e7586da6 Packaging removal: also revert introduction of sysconfig.cfg.
Éric Araujo <merwok@netwok.org>
parents: 77665
diff changeset
35 'stdlib': '{installed_base}/lib/python',
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
36 'platstdlib': '{base}/lib/python',
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
37 'purelib': '{base}/lib/python',
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
38 'platlib': '{base}/lib/python',
77675
e989e7586da6 Packaging removal: also revert introduction of sysconfig.cfg.
Éric Araujo <merwok@netwok.org>
parents: 77665
diff changeset
39 'include': '{installed_base}/include/python',
e989e7586da6 Packaging removal: also revert introduction of sysconfig.cfg.
Éric Araujo <merwok@netwok.org>
parents: 77665
diff changeset
40 'platinclude': '{installed_base}/include/python',
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
41 'scripts': '{base}/bin',
77675
e989e7586da6 Packaging removal: also revert introduction of sysconfig.cfg.
Éric Araujo <merwok@netwok.org>
parents: 77665
diff changeset
42 'data': '{base}',
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
43 },
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
44 'nt': {
77675
e989e7586da6 Packaging removal: also revert introduction of sysconfig.cfg.
Éric Araujo <merwok@netwok.org>
parents: 77665
diff changeset
45 'stdlib': '{installed_base}/Lib',
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
46 'platstdlib': '{base}/Lib',
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
47 'purelib': '{base}/Lib/site-packages',
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
48 'platlib': '{base}/Lib/site-packages',
77675
e989e7586da6 Packaging removal: also revert introduction of sysconfig.cfg.
Éric Araujo <merwok@netwok.org>
parents: 77665
diff changeset
49 'include': '{installed_base}/Include',
e989e7586da6 Packaging removal: also revert introduction of sysconfig.cfg.
Éric Araujo <merwok@netwok.org>
parents: 77665
diff changeset
50 'platinclude': '{installed_base}/Include',
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
51 'scripts': '{base}/Scripts',
77675
e989e7586da6 Packaging removal: also revert introduction of sysconfig.cfg.
Éric Araujo <merwok@netwok.org>
parents: 77665
diff changeset
52 'data': '{base}',
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
53 },
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
54 'nt_user': {
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
55 'stdlib': '{userbase}/Python{py_version_nodot}',
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
56 'platstdlib': '{userbase}/Python{py_version_nodot}',
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
57 'purelib': '{userbase}/Python{py_version_nodot}/site-packages',
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
58 'platlib': '{userbase}/Python{py_version_nodot}/site-packages',
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
59 'include': '{userbase}/Python{py_version_nodot}/Include',
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
60 'scripts': '{userbase}/Scripts',
77675
e989e7586da6 Packaging removal: also revert introduction of sysconfig.cfg.
Éric Araujo <merwok@netwok.org>
parents: 77665
diff changeset
61 'data': '{userbase}',
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
62 },
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
63 'posix_user': {
61765
18dcd903c55e Merged revisions 81371 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 61403
diff changeset
64 'stdlib': '{userbase}/lib/python{py_version_short}',
18dcd903c55e Merged revisions 81371 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 61403
diff changeset
65 'platstdlib': '{userbase}/lib/python{py_version_short}',
18dcd903c55e Merged revisions 81371 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 61403
diff changeset
66 'purelib': '{userbase}/lib/python{py_version_short}/site-packages',
18dcd903c55e Merged revisions 81371 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 61403
diff changeset
67 'platlib': '{userbase}/lib/python{py_version_short}/site-packages',
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
68 'include': '{userbase}/include/python{py_version_short}',
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
69 'scripts': '{userbase}/bin',
77675
e989e7586da6 Packaging removal: also revert introduction of sysconfig.cfg.
Éric Araujo <merwok@netwok.org>
parents: 77665
diff changeset
70 'data': '{userbase}',
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
71 },
61403
3fae7cb49209 Merged revisions 80967 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 59532
diff changeset
72 'osx_framework_user': {
3fae7cb49209 Merged revisions 80967 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 59532
diff changeset
73 'stdlib': '{userbase}/lib/python',
3fae7cb49209 Merged revisions 80967 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 59532
diff changeset
74 'platstdlib': '{userbase}/lib/python',
3fae7cb49209 Merged revisions 80967 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 59532
diff changeset
75 'purelib': '{userbase}/lib/python/site-packages',
3fae7cb49209 Merged revisions 80967 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 59532
diff changeset
76 'platlib': '{userbase}/lib/python/site-packages',
3fae7cb49209 Merged revisions 80967 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 59532
diff changeset
77 'include': '{userbase}/include',
3fae7cb49209 Merged revisions 80967 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 59532
diff changeset
78 'scripts': '{userbase}/bin',
77675
e989e7586da6 Packaging removal: also revert introduction of sysconfig.cfg.
Éric Araujo <merwok@netwok.org>
parents: 77665
diff changeset
79 'data': '{userbase}',
61403
3fae7cb49209 Merged revisions 80967 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 59532
diff changeset
80 },
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
81 }
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
82
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
83 _SCHEME_KEYS = ('stdlib', 'platstdlib', 'purelib', 'platlib', 'include',
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
84 'scripts', 'data')
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
85
77154
294f8aeb4d4b Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74492
diff changeset
86 # FIXME don't rely on sys.version here, its format is an implementation detail
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
87 # 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
88 _PY_VERSION = sys.version.split()[0]
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
89 _PY_VERSION_SHORT = sys.version[:3]
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
90 _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
91 _PREFIX = os.path.normpath(sys.prefix)
77154
294f8aeb4d4b Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74492
diff changeset
92 _BASE_PREFIX = os.path.normpath(sys.base_prefix)
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
93 _EXEC_PREFIX = os.path.normpath(sys.exec_prefix)
77154
294f8aeb4d4b Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74492
diff changeset
94 _BASE_EXEC_PREFIX = os.path.normpath(sys.base_exec_prefix)
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
95 _CONFIG_VARS = None
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
96 _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
97
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
98
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
99 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
100 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
101 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
102 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
103 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
104
59532
236fb0af4404 Merged revisions 78835-78837 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 59507
diff changeset
105 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
106 _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
107 else:
236fb0af4404 Merged revisions 78835-78837 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 59507
diff changeset
108 # 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
109 # 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
110 _PROJECT_BASE = _safe_realpath(os.getcwd())
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
111
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
112 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
113 _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
114 # PC/VS7.1
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
115 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
116 _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
117 # PC/AMD64
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
118 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
119 _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
120
77886
cfbe51e66749 - Issue #14330: For cross builds, don't use host python, use host search paths
doko@ubuntu.com
parents: 77755
diff changeset
121 # set for cross builds
77888
86ac09f118be - Issue #14330: For cross builds, don't use host python, use host search paths
doko@ubuntu.com
parents: 77886
diff changeset
122 if "_PYTHON_PROJECT_BASE" in os.environ:
86ac09f118be - Issue #14330: For cross builds, don't use host python, use host search paths
doko@ubuntu.com
parents: 77886
diff changeset
123 _PROJECT_BASE = _safe_realpath(os.environ["_PYTHON_PROJECT_BASE"])
77886
cfbe51e66749 - Issue #14330: For cross builds, don't use host python, use host search paths
doko@ubuntu.com
parents: 77755
diff changeset
124
77154
294f8aeb4d4b Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74492
diff changeset
125 def _is_python_source_dir(d):
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
126 for fn in ("Setup.dist", "Setup.local"):
77154
294f8aeb4d4b Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74492
diff changeset
127 if os.path.isfile(os.path.join(d, "Modules", fn)):
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
128 return True
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
129 return False
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
130
77154
294f8aeb4d4b Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74492
diff changeset
131 _sys_home = getattr(sys, '_home', None)
77167
564caa2c61ae Addressed some buildbot errors and comments on the checkin by Antoine on python-dev.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 77154
diff changeset
132 if _sys_home and os.name == 'nt' and \
564caa2c61ae Addressed some buildbot errors and comments on the checkin by Antoine on python-dev.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 77154
diff changeset
133 _sys_home.lower().endswith(('pcbuild', 'pcbuild\\amd64')):
77154
294f8aeb4d4b Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74492
diff changeset
134 _sys_home = os.path.dirname(_sys_home)
77182
a45c86f5ba96 Fixed _sys_home computation and added diagnostics for Windows buildbot failures.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 77167
diff changeset
135 if _sys_home.endswith('pcbuild'): # must be amd64
a45c86f5ba96 Fixed _sys_home computation and added diagnostics for Windows buildbot failures.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 77167
diff changeset
136 _sys_home = os.path.dirname(_sys_home)
77154
294f8aeb4d4b Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74492
diff changeset
137 def is_python_build(check_home=False):
294f8aeb4d4b Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74492
diff changeset
138 if check_home and _sys_home:
294f8aeb4d4b Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74492
diff changeset
139 return _is_python_source_dir(_sys_home)
294f8aeb4d4b Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74492
diff changeset
140 return _is_python_source_dir(_PROJECT_BASE)
294f8aeb4d4b Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74492
diff changeset
141
294f8aeb4d4b Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74492
diff changeset
142 _PYTHON_BUILD = is_python_build(True)
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
143
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
144 if _PYTHON_BUILD:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
145 for scheme in ('posix_prefix', 'posix_home'):
64850
3a4afaa96ac3 Reverted changes which were inadvertently committed.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 64849
diff changeset
146 _INSTALL_SCHEMES[scheme]['include'] = '{srcdir}/Include'
62336
e43ab52b57b2 Fix for issue #8577: without this patch test_distutils
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61897
diff changeset
147 _INSTALL_SCHEMES[scheme]['platinclude'] = '{projectbase}/.'
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
148
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
149
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
150 def _subst_vars(s, local_vars):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
151 try:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
152 return s.format(**local_vars)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
153 except KeyError:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
154 try:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
155 return s.format(**os.environ)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
156 except KeyError as var:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
157 raise AttributeError('{%s}' % var)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
158
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
159 def _extend_dict(target_dict, other_dict):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
160 target_keys = target_dict.keys()
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
161 for key, value in other_dict.items():
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
162 if key in target_keys:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
163 continue
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
164 target_dict[key] = value
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
165
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
166
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
167 def _expand_vars(scheme, vars):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
168 res = {}
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
169 if vars is None:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
170 vars = {}
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
171 _extend_dict(vars, get_config_vars())
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
172
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
173 for key, value in _INSTALL_SCHEMES[scheme].items():
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
174 if os.name in ('posix', 'nt'):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
175 value = os.path.expanduser(value)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
176 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
177 return res
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
178
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
179
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
180 def _get_default_scheme():
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
181 if os.name == 'posix':
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
182 # 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
183 return 'posix_prefix'
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
184 return os.name
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
185
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
186
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
187 def _getuserbase():
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
188 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
189
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
190 def joinuser(*args):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
191 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
192
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
193 if os.name == "nt":
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
194 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
195 if env_base:
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
196 return env_base
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
197 else:
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
198 return joinuser(base, "Python")
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
199
61403
3fae7cb49209 Merged revisions 80967 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 59532
diff changeset
200 if sys.platform == "darwin":
3fae7cb49209 Merged revisions 80967 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 59532
diff changeset
201 framework = get_config_var("PYTHONFRAMEWORK")
3fae7cb49209 Merged revisions 80967 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 59532
diff changeset
202 if framework:
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
203 if env_base:
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
204 return env_base
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
205 else:
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
206 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
207 sys.version_info[:2])
61403
3fae7cb49209 Merged revisions 80967 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 59532
diff changeset
208
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
209 if env_base:
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
210 return env_base
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
211 else:
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
212 return joinuser("~", ".local")
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
213
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 def _parse_makefile(filename, vars=None):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
216 """Parse a Makefile-style file.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
217
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
218 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
219 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
220 used instead of a new dictionary.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
221 """
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
222 # 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
223 # like old-style Setup files).
86213
406529adf156 Issue #19205: Don't import the 're' module in site and sysconfig module to
Christian Heimes <christian@cheimes.de>
parents: 84150
diff changeset
224 import re
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
225 _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
226 _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
227 _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
228
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
229 if vars is None:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
230 vars = {}
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
231 done = {}
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
232 notdone = {}
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
233
65605
1a08f4a9eafd Issue #6011: sysconfig and distutils.sysconfig use the surrogateescape error
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65331
diff changeset
234 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
235 lines = f.readlines()
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
236
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
237 for line in lines:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
238 if line.startswith('#') or line.strip() == '':
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
239 continue
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
240 m = _variable_rx.match(line)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
241 if m:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
242 n, v = m.group(1, 2)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
243 v = v.strip()
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
244 # `$$' is a literal `$' in make
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
245 tmpv = v.replace('$$', '')
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
246
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
247 if "$" in tmpv:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
248 notdone[n] = v
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
249 else:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
250 try:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
251 v = int(v)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
252 except ValueError:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
253 # insert literal `$'
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
254 done[n] = v.replace('$$', '$')
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
255 else:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
256 done[n] = v
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
257
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
258 # do variable interpolation here
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
259 variables = list(notdone.keys())
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
260
63108
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
261 # 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
262 # 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
263 # 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
264 # 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
265 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
266
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
267 while len(variables) > 0:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
268 for name in tuple(variables):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
269 value = notdone[name]
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
270 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
271 if m is not None:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
272 n = m.group(1)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
273 found = True
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
274 if n in done:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
275 item = str(done[n])
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
276 elif n in notdone:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
277 # get it on a subsequent round
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
278 found = False
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
279 elif n in os.environ:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
280 # 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
281 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
282
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
283 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
284 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
285 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
286 item = ""
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
287
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
288 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
289 found = False
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
290
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
291 else:
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
292 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
293
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
294 else:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
295 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
296
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
297 if found:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
298 after = value[m.end():]
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
299 value = value[:m.start()] + item + after
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
300 if "$" in after:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
301 notdone[name] = value
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
302 else:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
303 try:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
304 value = int(value)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
305 except ValueError:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
306 done[name] = value.strip()
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
307 else:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
308 done[name] = value
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
309 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
310
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
311 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
312 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
313
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
314 name = name[3:]
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
315 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
316 done[name] = value
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
317
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
318 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
319 # 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
320 # 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
321 done[name] = value
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
322 variables.remove(name)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
323
65206
25d078739c2a Issue #9437: Fix building C extensions with non-default LDFLAGS.
Antoine Pitrou <solipsis@pitrou.net>
parents: 64855
diff changeset
324 # strip spurious spaces
25d078739c2a Issue #9437: Fix building C extensions with non-default LDFLAGS.
Antoine Pitrou <solipsis@pitrou.net>
parents: 64855
diff changeset
325 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
326 if isinstance(v, str):
25d078739c2a Issue #9437: Fix building C extensions with non-default LDFLAGS.
Antoine Pitrou <solipsis@pitrou.net>
parents: 64855
diff changeset
327 done[k] = v.strip()
25d078739c2a Issue #9437: Fix building C extensions with non-default LDFLAGS.
Antoine Pitrou <solipsis@pitrou.net>
parents: 64855
diff changeset
328
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
329 # save the results in the global dictionary
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
330 vars.update(done)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
331 return vars
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
332
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
333
64855
96db640674cb Issue 9877: expose sysconfig.get_makefile_filename() in the public API.
Barry Warsaw <barry@python.org>
parents: 64850
diff changeset
334 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
335 """Return the path of the Makefile."""
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
336 if _PYTHON_BUILD:
77154
294f8aeb4d4b Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74492
diff changeset
337 return os.path.join(_sys_home or _PROJECT_BASE, "Makefile")
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
338 if hasattr(sys, 'abiflags'):
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
339 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
340 else:
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
341 config_dir_name = 'config'
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
342 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
343
72975
70160b53117f Issue #13150: sysconfig no longer parses the Makefile and config.h files
Antoine Pitrou <solipsis@pitrou.net>
parents: 72854
diff changeset
344 def _generate_posix_vars():
70160b53117f Issue #13150: sysconfig no longer parses the Makefile and config.h files
Antoine Pitrou <solipsis@pitrou.net>
parents: 72854
diff changeset
345 """Generate the Python module containing build-time variables."""
70160b53117f Issue #13150: sysconfig no longer parses the Makefile and config.h files
Antoine Pitrou <solipsis@pitrou.net>
parents: 72854
diff changeset
346 import pprint
70160b53117f Issue #13150: sysconfig no longer parses the Makefile and config.h files
Antoine Pitrou <solipsis@pitrou.net>
parents: 72854
diff changeset
347 vars = {}
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
348 # 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
349 makefile = get_makefile_filename()
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
350 try:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
351 _parse_makefile(makefile, vars)
81039
7d69d04522e3 Replace IOError with OSError (#16715)
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80524
diff changeset
352 except OSError as e:
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
353 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
354 if hasattr(e, "strerror"):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
355 msg = msg + " (%s)" % e.strerror
81039
7d69d04522e3 Replace IOError with OSError (#16715)
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80524
diff changeset
356 raise OSError(msg)
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
357 # load the installed pyconfig.h:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
358 config_h = get_config_h_filename()
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
359 try:
65331
46956a25c264 Explicitly close some files (from issue #10093)
Antoine Pitrou <solipsis@pitrou.net>
parents: 65226
diff changeset
360 with open(config_h) as f:
46956a25c264 Explicitly close some files (from issue #10093)
Antoine Pitrou <solipsis@pitrou.net>
parents: 65226
diff changeset
361 parse_config_h(f, vars)
81039
7d69d04522e3 Replace IOError with OSError (#16715)
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80524
diff changeset
362 except OSError as e:
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
363 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
364 if hasattr(e, "strerror"):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
365 msg = msg + " (%s)" % e.strerror
81039
7d69d04522e3 Replace IOError with OSError (#16715)
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 80524
diff changeset
366 raise OSError(msg)
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
367 # 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
368 # -- 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
369 # the scripts are in another directory.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
370 if _PYTHON_BUILD:
86492
c554194240fc Issue #18235: Fix the sysconfig variables LDSHARED and BLDSHARED under AIX.
Antoine Pitrou <solipsis@pitrou.net>
parents: 82870
diff changeset
371 vars['BLDSHARED'] = vars['LDSHARED']
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
372
79778
66959d419369 Issue #15298: fix an OS X bootstrap issue with _sysconfigdata.py.
Trent Nelson <trent@trent.me>
parents: 79744
diff changeset
373 # There's a chicken-and-egg situation on OS X with regards to the
66959d419369 Issue #15298: fix an OS X bootstrap issue with _sysconfigdata.py.
Trent Nelson <trent@trent.me>
parents: 79744
diff changeset
374 # _sysconfigdata module after the changes introduced by #15298:
66959d419369 Issue #15298: fix an OS X bootstrap issue with _sysconfigdata.py.
Trent Nelson <trent@trent.me>
parents: 79744
diff changeset
375 # get_config_vars() is called by get_platform() as part of the
66959d419369 Issue #15298: fix an OS X bootstrap issue with _sysconfigdata.py.
Trent Nelson <trent@trent.me>
parents: 79744
diff changeset
376 # `make pybuilddir.txt` target -- which is a precursor to the
66959d419369 Issue #15298: fix an OS X bootstrap issue with _sysconfigdata.py.
Trent Nelson <trent@trent.me>
parents: 79744
diff changeset
377 # _sysconfigdata.py module being constructed. Unfortunately,
66959d419369 Issue #15298: fix an OS X bootstrap issue with _sysconfigdata.py.
Trent Nelson <trent@trent.me>
parents: 79744
diff changeset
378 # get_config_vars() eventually calls _init_posix(), which attempts
79805
1250498db562 Issue #15298: refactor previous fix from 66959d419369.
Trent Nelson <trent@trent.me>
parents: 79778
diff changeset
379 # to import _sysconfigdata, which we won't have built yet. In order
1250498db562 Issue #15298: refactor previous fix from 66959d419369.
Trent Nelson <trent@trent.me>
parents: 79778
diff changeset
380 # for _init_posix() to work, if we're on Darwin, just mock up the
1250498db562 Issue #15298: refactor previous fix from 66959d419369.
Trent Nelson <trent@trent.me>
parents: 79778
diff changeset
381 # _sysconfigdata module manually and populate it with the build vars.
1250498db562 Issue #15298: refactor previous fix from 66959d419369.
Trent Nelson <trent@trent.me>
parents: 79778
diff changeset
382 # This is more than sufficient for ensuring the subsequent call to
1250498db562 Issue #15298: refactor previous fix from 66959d419369.
Trent Nelson <trent@trent.me>
parents: 79778
diff changeset
383 # get_platform() succeeds.
1250498db562 Issue #15298: refactor previous fix from 66959d419369.
Trent Nelson <trent@trent.me>
parents: 79778
diff changeset
384 name = '_sysconfigdata'
1250498db562 Issue #15298: refactor previous fix from 66959d419369.
Trent Nelson <trent@trent.me>
parents: 79778
diff changeset
385 if 'darwin' in sys.platform:
84150
1e141c2cc0d7 Issue #17177: Stop using imp in sysconfig
Brett Cannon <brett@python.org>
parents: 82871
diff changeset
386 import types
1e141c2cc0d7 Issue #17177: Stop using imp in sysconfig
Brett Cannon <brett@python.org>
parents: 82871
diff changeset
387 module = types.ModuleType(name)
79805
1250498db562 Issue #15298: refactor previous fix from 66959d419369.
Trent Nelson <trent@trent.me>
parents: 79778
diff changeset
388 module.build_time_vars = vars
1250498db562 Issue #15298: refactor previous fix from 66959d419369.
Trent Nelson <trent@trent.me>
parents: 79778
diff changeset
389 sys.modules[name] = module
1250498db562 Issue #15298: refactor previous fix from 66959d419369.
Trent Nelson <trent@trent.me>
parents: 79778
diff changeset
390
1250498db562 Issue #15298: refactor previous fix from 66959d419369.
Trent Nelson <trent@trent.me>
parents: 79778
diff changeset
391 pybuilddir = 'build/lib.%s-%s' % (get_platform(), sys.version[:3])
1250498db562 Issue #15298: refactor previous fix from 66959d419369.
Trent Nelson <trent@trent.me>
parents: 79778
diff changeset
392 if hasattr(sys, "gettotalrefcount"):
1250498db562 Issue #15298: refactor previous fix from 66959d419369.
Trent Nelson <trent@trent.me>
parents: 79778
diff changeset
393 pybuilddir += '-pydebug'
1250498db562 Issue #15298: refactor previous fix from 66959d419369.
Trent Nelson <trent@trent.me>
parents: 79778
diff changeset
394 os.makedirs(pybuilddir, exist_ok=True)
1250498db562 Issue #15298: refactor previous fix from 66959d419369.
Trent Nelson <trent@trent.me>
parents: 79778
diff changeset
395 destfile = os.path.join(pybuilddir, name + '.py')
1250498db562 Issue #15298: refactor previous fix from 66959d419369.
Trent Nelson <trent@trent.me>
parents: 79778
diff changeset
396
72975
70160b53117f Issue #13150: sysconfig no longer parses the Makefile and config.h files
Antoine Pitrou <solipsis@pitrou.net>
parents: 72854
diff changeset
397 with open(destfile, 'w', encoding='utf8') as f:
73017
677e625e2ef1 Issue #13150: Add a comment in _sysconfigdata to explain the origin of this file
Victor Stinner <victor.stinner@haypocalc.com>
parents: 72975
diff changeset
398 f.write('# system configuration generated and used by'
677e625e2ef1 Issue #13150: Add a comment in _sysconfigdata to explain the origin of this file
Victor Stinner <victor.stinner@haypocalc.com>
parents: 72975
diff changeset
399 ' the sysconfig module\n')
72975
70160b53117f Issue #13150: sysconfig no longer parses the Makefile and config.h files
Antoine Pitrou <solipsis@pitrou.net>
parents: 72854
diff changeset
400 f.write('build_time_vars = ')
70160b53117f Issue #13150: sysconfig no longer parses the Makefile and config.h files
Antoine Pitrou <solipsis@pitrou.net>
parents: 72854
diff changeset
401 pprint.pprint(vars, stream=f)
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
402
79744
24d52d3060e8 Issue #15298: ensure _sysconfigdata is generated in build directory,
Trent Nelson <trent@trent.me>
parents: 78295
diff changeset
403 # Create file used for sys.path fixup -- see Modules/getpath.c
24d52d3060e8 Issue #15298: ensure _sysconfigdata is generated in build directory,
Trent Nelson <trent@trent.me>
parents: 78295
diff changeset
404 with open('pybuilddir.txt', 'w', encoding='ascii') as f:
24d52d3060e8 Issue #15298: ensure _sysconfigdata is generated in build directory,
Trent Nelson <trent@trent.me>
parents: 78295
diff changeset
405 f.write(pybuilddir)
24d52d3060e8 Issue #15298: ensure _sysconfigdata is generated in build directory,
Trent Nelson <trent@trent.me>
parents: 78295
diff changeset
406
72975
70160b53117f Issue #13150: sysconfig no longer parses the Makefile and config.h files
Antoine Pitrou <solipsis@pitrou.net>
parents: 72854
diff changeset
407 def _init_posix(vars):
70160b53117f Issue #13150: sysconfig no longer parses the Makefile and config.h files
Antoine Pitrou <solipsis@pitrou.net>
parents: 72854
diff changeset
408 """Initialize the module as appropriate for POSIX systems."""
70160b53117f Issue #13150: sysconfig no longer parses the Makefile and config.h files
Antoine Pitrou <solipsis@pitrou.net>
parents: 72854
diff changeset
409 # _sysconfigdata is generated at build time, see _generate_posix_vars()
70160b53117f Issue #13150: sysconfig no longer parses the Makefile and config.h files
Antoine Pitrou <solipsis@pitrou.net>
parents: 72854
diff changeset
410 from _sysconfigdata import build_time_vars
70160b53117f Issue #13150: sysconfig no longer parses the Makefile and config.h files
Antoine Pitrou <solipsis@pitrou.net>
parents: 72854
diff changeset
411 vars.update(build_time_vars)
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
412
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
413 def _init_non_posix(vars):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
414 """Initialize the module as appropriate for NT"""
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
415 # set basic install directories
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
416 vars['LIBDEST'] = get_path('stdlib')
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
417 vars['BINLIBDEST'] = get_path('platstdlib')
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
418 vars['INCLUDEPY'] = get_path('include')
82869
8f91014c8f00 - Issue #16754: Fix the incorrect shared library extension on linux. Introduce
doko@ubuntu.com
parents: 81844
diff changeset
419 vars['EXT_SUFFIX'] = '.pyd'
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
420 vars['EXE'] = '.exe'
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
421 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
422 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
423
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
424 #
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
425 # public APIs
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
58652
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
428
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
429 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
430 """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
431
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
432 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
433 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
434 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
435 """
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
436 if vars is None:
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
437 vars = {}
86213
406529adf156 Issue #19205: Don't import the 're' module in site and sysconfig module to
Christian Heimes <christian@cheimes.de>
parents: 84150
diff changeset
438 import re
58652
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
439 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
440 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
441
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
442 while True:
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
443 line = fp.readline()
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
444 if not line:
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
445 break
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
446 m = define_rx.match(line)
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
447 if m:
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
448 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
449 try:
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
450 v = int(v)
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
451 except ValueError:
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
452 pass
58652
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
453 vars[n] = v
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
454 else:
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
455 m = undef_rx.match(line)
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
456 if m:
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
457 vars[m.group(1)] = 0
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
458 return vars
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
459
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
460
58652
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
461 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
462 """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
463 if _PYTHON_BUILD:
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
464 if os.name == "nt":
77154
294f8aeb4d4b Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74492
diff changeset
465 inc_dir = os.path.join(_sys_home or _PROJECT_BASE, "PC")
58652
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
466 else:
77154
294f8aeb4d4b Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74492
diff changeset
467 inc_dir = _sys_home or _PROJECT_BASE
58652
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
468 else:
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
469 inc_dir = get_path('platinclude')
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
470 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
471
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
472
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
473 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
474 """Return a tuple containing the schemes names."""
77675
e989e7586da6 Packaging removal: also revert introduction of sysconfig.cfg.
Éric Araujo <merwok@netwok.org>
parents: 77665
diff changeset
475 return tuple(sorted(_INSTALL_SCHEMES))
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
476
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
477
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
478 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
479 """Return a tuple containing the paths names."""
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
480 return _SCHEME_KEYS
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
481
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
482
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
483 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
484 """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
485
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
486 ``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
487 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
488 """
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
489 if expand:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
490 return _expand_vars(scheme, vars)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
491 else:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
492 return _INSTALL_SCHEMES[scheme]
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
493
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
494
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
495 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
496 """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
497
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
498 ``scheme`` is the install scheme name.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
499 """
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
500 return get_paths(scheme, vars, expand)[name]
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
501
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
502
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
503 def get_config_vars(*args):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
504 """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
505 variables relevant for the current platform.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
506
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
507 On Unix, this means every variable defined in Python's installed Makefile;
78216
d76b83803e7e Issue #15184: Ensure consistent results of OS X configuration
Ned Deily <nad@acm.org>
parents: 78126
diff changeset
508 On Windows it's a much smaller set.
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
509
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
510 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
511 each argument in the configuration variable dictionary.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
512 """
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
513 global _CONFIG_VARS
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
514 if _CONFIG_VARS is None:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
515 _CONFIG_VARS = {}
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
516 # 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
517 # in fact, these are the standard versions used most places in the
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
518 # Distutils.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
519 _CONFIG_VARS['prefix'] = _PREFIX
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
520 _CONFIG_VARS['exec_prefix'] = _EXEC_PREFIX
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
521 _CONFIG_VARS['py_version'] = _PY_VERSION
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
522 _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
523 _CONFIG_VARS['py_version_nodot'] = _PY_VERSION[0] + _PY_VERSION[2]
77154
294f8aeb4d4b Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74492
diff changeset
524 _CONFIG_VARS['installed_base'] = _BASE_PREFIX
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
525 _CONFIG_VARS['base'] = _PREFIX
77154
294f8aeb4d4b Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74492
diff changeset
526 _CONFIG_VARS['installed_platbase'] = _BASE_EXEC_PREFIX
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
527 _CONFIG_VARS['platbase'] = _EXEC_PREFIX
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
528 _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
529 try:
cead04b3c5ed sys.abiflags may not be defined on all platforms.
Barry Warsaw <barry@python.org>
parents: 66429
diff changeset
530 _CONFIG_VARS['abiflags'] = sys.abiflags
cead04b3c5ed sys.abiflags may not be defined on all platforms.
Barry Warsaw <barry@python.org>
parents: 66429
diff changeset
531 except AttributeError:
cead04b3c5ed sys.abiflags may not be defined on all platforms.
Barry Warsaw <barry@python.org>
parents: 66429
diff changeset
532 # 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
533 _CONFIG_VARS['abiflags'] = ''
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
534
79480
15949f34e08f #16135: Removal of OS/2 support (Python code partial cleanup)
Jesus Cea <jcea@jcea.es>
parents: 78295
diff changeset
535 if os.name == 'nt':
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
536 _init_non_posix(_CONFIG_VARS)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
537 if os.name == 'posix':
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
538 _init_posix(_CONFIG_VARS)
87345
331b7a8bb830 A fix for issue 19555 on Windows.
Barry Warsaw <barry@python.org>
parents: 87325
diff changeset
539 # For backward compatibility, see issue19555
331b7a8bb830 A fix for issue 19555 on Windows.
Barry Warsaw <barry@python.org>
parents: 87325
diff changeset
540 SO = _CONFIG_VARS.get('EXT_SUFFIX')
331b7a8bb830 A fix for issue 19555 on Windows.
Barry Warsaw <barry@python.org>
parents: 87325
diff changeset
541 if SO is not None:
331b7a8bb830 A fix for issue 19555 on Windows.
Barry Warsaw <barry@python.org>
parents: 87325
diff changeset
542 _CONFIG_VARS['SO'] = SO
61403
3fae7cb49209 Merged revisions 80967 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 59532
diff changeset
543 # 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
544 # 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
545 # the init-function.
3fae7cb49209 Merged revisions 80967 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 59532
diff changeset
546 _CONFIG_VARS['userbase'] = _getuserbase()
3fae7cb49209 Merged revisions 80967 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 59532
diff changeset
547
78295
d2f448dbc30d Issue #15364: Fix sysconfig.get_config_var('srcdir') to be an absolute path.
Richard Oudkerk <shibturn@gmail.com>
parents: 78216
diff changeset
548 # Always convert srcdir to an absolute path
d2f448dbc30d Issue #15364: Fix sysconfig.get_config_var('srcdir') to be an absolute path.
Richard Oudkerk <shibturn@gmail.com>
parents: 78216
diff changeset
549 srcdir = _CONFIG_VARS.get('srcdir', _PROJECT_BASE)
d2f448dbc30d Issue #15364: Fix sysconfig.get_config_var('srcdir') to be an absolute path.
Richard Oudkerk <shibturn@gmail.com>
parents: 78216
diff changeset
550 if os.name == 'posix':
d2f448dbc30d Issue #15364: Fix sysconfig.get_config_var('srcdir') to be an absolute path.
Richard Oudkerk <shibturn@gmail.com>
parents: 78216
diff changeset
551 if _PYTHON_BUILD:
d2f448dbc30d Issue #15364: Fix sysconfig.get_config_var('srcdir') to be an absolute path.
Richard Oudkerk <shibturn@gmail.com>
parents: 78216
diff changeset
552 # If srcdir is a relative path (typically '.' or '..')
d2f448dbc30d Issue #15364: Fix sysconfig.get_config_var('srcdir') to be an absolute path.
Richard Oudkerk <shibturn@gmail.com>
parents: 78216
diff changeset
553 # then it should be interpreted relative to the directory
d2f448dbc30d Issue #15364: Fix sysconfig.get_config_var('srcdir') to be an absolute path.
Richard Oudkerk <shibturn@gmail.com>
parents: 78216
diff changeset
554 # containing Makefile.
d2f448dbc30d Issue #15364: Fix sysconfig.get_config_var('srcdir') to be an absolute path.
Richard Oudkerk <shibturn@gmail.com>
parents: 78216
diff changeset
555 base = os.path.dirname(get_makefile_filename())
d2f448dbc30d Issue #15364: Fix sysconfig.get_config_var('srcdir') to be an absolute path.
Richard Oudkerk <shibturn@gmail.com>
parents: 78216
diff changeset
556 srcdir = os.path.join(base, srcdir)
d2f448dbc30d Issue #15364: Fix sysconfig.get_config_var('srcdir') to be an absolute path.
Richard Oudkerk <shibturn@gmail.com>
parents: 78216
diff changeset
557 else:
d2f448dbc30d Issue #15364: Fix sysconfig.get_config_var('srcdir') to be an absolute path.
Richard Oudkerk <shibturn@gmail.com>
parents: 78216
diff changeset
558 # srcdir is not meaningful since the installation is
d2f448dbc30d Issue #15364: Fix sysconfig.get_config_var('srcdir') to be an absolute path.
Richard Oudkerk <shibturn@gmail.com>
parents: 78216
diff changeset
559 # spread about the filesystem. We choose the
d2f448dbc30d Issue #15364: Fix sysconfig.get_config_var('srcdir') to be an absolute path.
Richard Oudkerk <shibturn@gmail.com>
parents: 78216
diff changeset
560 # directory containing the Makefile since we know it
d2f448dbc30d Issue #15364: Fix sysconfig.get_config_var('srcdir') to be an absolute path.
Richard Oudkerk <shibturn@gmail.com>
parents: 78216
diff changeset
561 # exists.
d2f448dbc30d Issue #15364: Fix sysconfig.get_config_var('srcdir') to be an absolute path.
Richard Oudkerk <shibturn@gmail.com>
parents: 78216
diff changeset
562 srcdir = os.path.dirname(get_makefile_filename())
d2f448dbc30d Issue #15364: Fix sysconfig.get_config_var('srcdir') to be an absolute path.
Richard Oudkerk <shibturn@gmail.com>
parents: 78216
diff changeset
563 _CONFIG_VARS['srcdir'] = _safe_realpath(srcdir)
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
564
81844
502b139b3b19 Issue #13590: OS X Xcode 4 - improve support for universal extension modules
Ned Deily <nad@acm.org>
parents: 74491
diff changeset
565 # OS X platforms require special customization to handle
502b139b3b19 Issue #13590: OS X Xcode 4 - improve support for universal extension modules
Ned Deily <nad@acm.org>
parents: 74491
diff changeset
566 # multi-architecture, multi-os-version installers
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
567 if sys.platform == 'darwin':
81844
502b139b3b19 Issue #13590: OS X Xcode 4 - improve support for universal extension modules
Ned Deily <nad@acm.org>
parents: 74491
diff changeset
568 import _osx_support
502b139b3b19 Issue #13590: OS X Xcode 4 - improve support for universal extension modules
Ned Deily <nad@acm.org>
parents: 74491
diff changeset
569 _osx_support.customize_config_vars(_CONFIG_VARS)
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
570
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
571 if args:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
572 vals = []
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
573 for name in args:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
574 vals.append(_CONFIG_VARS.get(name))
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
575 return vals
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
576 else:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
577 return _CONFIG_VARS
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
578
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
579
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
580 def get_config_var(name):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
581 """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
582 'get_config_vars()'.
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 Equivalent to get_config_vars().get(name)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
585 """
87325
fedc2b8fbb6e - Issue #19555: Restore sysconfig.get_config_var('SO'), with a
Barry Warsaw <barry@python.org>
parents: 86493
diff changeset
586 if name == 'SO':
fedc2b8fbb6e - Issue #19555: Restore sysconfig.get_config_var('SO'), with a
Barry Warsaw <barry@python.org>
parents: 86493
diff changeset
587 import warnings
87578
25f856d500e3 Issue #19760: Silence sysconfig's 'SO' key deprecation warnings in tests.
Serhiy Storchaka <storchaka@gmail.com>
parents: 87345
diff changeset
588 warnings.warn('SO is deprecated, use EXT_SUFFIX', DeprecationWarning, 2)
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
589 return get_config_vars().get(name)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
590
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
591
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
592 def get_platform():
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
593 """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
594
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
595 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
596 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
597 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
598 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
599 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
600 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
601 important.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
602
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
603 Examples of returned values:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
604 linux-i586
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
605 linux-alpha (?)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
606 solaris-2.6-sun4u
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
607 irix-5.3
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
608 irix64-6.2
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
609
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
610 Windows will return one of:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
611 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
612 win-ia64 (64bit Windows on Itanium)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
613 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
614
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
615 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
616 """
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
617 if os.name == 'nt':
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
618 # sniff sys.version for architecture.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
619 prefix = " bit ("
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
620 i = sys.version.find(prefix)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
621 if i == -1:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
622 return sys.platform
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
623 j = sys.version.find(")", i)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
624 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
625 if look == 'amd64':
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
626 return 'win-amd64'
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
627 if look == 'itanium':
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
628 return 'win-ia64'
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
629 return sys.platform
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
630
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
631 if os.name != "posix" or not hasattr(os, 'uname'):
78216
d76b83803e7e Issue #15184: Ensure consistent results of OS X configuration
Ned Deily <nad@acm.org>
parents: 78126
diff changeset
632 # XXX what about the architecture? NT is Intel or Alpha
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
633 return sys.platform
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
634
77886
cfbe51e66749 - Issue #14330: For cross builds, don't use host python, use host search paths
doko@ubuntu.com
parents: 77755
diff changeset
635 # Set for cross builds explicitly
cfbe51e66749 - Issue #14330: For cross builds, don't use host python, use host search paths
doko@ubuntu.com
parents: 77755
diff changeset
636 if "_PYTHON_HOST_PLATFORM" in os.environ:
cfbe51e66749 - Issue #14330: For cross builds, don't use host python, use host search paths
doko@ubuntu.com
parents: 77755
diff changeset
637 return os.environ["_PYTHON_HOST_PLATFORM"]
cfbe51e66749 - Issue #14330: For cross builds, don't use host python, use host search paths
doko@ubuntu.com
parents: 77755
diff changeset
638
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
639 # Try to distinguish various flavours of Unix
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
640 osname, host, release, version, machine = os.uname()
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
641
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
642 # 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
643 # (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
644 osname = osname.lower().replace('/', '')
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
645 machine = machine.replace(' ', '_')
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
646 machine = machine.replace('/', '-')
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
647
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
648 if osname[:5] == "linux":
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
649 # 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
650 # i386, etc.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
651 # XXX what about Alpha, SPARC, etc?
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
652 return "%s-%s" % (osname, machine)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
653 elif osname[:5] == "sunos":
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
654 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
655 osname = "solaris"
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
656 release = "%d.%s" % (int(release[0]) - 3, release[2:])
74489
37efae3bf912 Yet another emergency fix for #13803 bootstrap issue: Under Solaris, distutils doesn't include bitness in the directory name
Jesus Cea <jcea@jcea.es>
parents: 70352
diff changeset
657 # We can't use "platform.architecture()[0]" because a
37efae3bf912 Yet another emergency fix for #13803 bootstrap issue: Under Solaris, distutils doesn't include bitness in the directory name
Jesus Cea <jcea@jcea.es>
parents: 70352
diff changeset
658 # bootstrap problem. We use a dict to get an error
37efae3bf912 Yet another emergency fix for #13803 bootstrap issue: Under Solaris, distutils doesn't include bitness in the directory name
Jesus Cea <jcea@jcea.es>
parents: 70352
diff changeset
659 # if some suspicious happens.
37efae3bf912 Yet another emergency fix for #13803 bootstrap issue: Under Solaris, distutils doesn't include bitness in the directory name
Jesus Cea <jcea@jcea.es>
parents: 70352
diff changeset
660 bitness = {2147483647:"32bit", 9223372036854775807:"64bit"}
74491
147ad02875fa And yet another emergency fix for #13803 bootstrap issue: Under Solaris, distutils doesn't include bitness in the directory name
Jesus Cea <jcea@jcea.es>
parents: 74489
diff changeset
661 machine += ".%s" % bitness[sys.maxsize]
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
662 # 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
663 elif osname[:4] == "irix": # could be "irix64"!
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
664 return "%s-%s" % (osname, release)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
665 elif osname[:3] == "aix":
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
666 return "%s-%s.%s" % (osname, version, release)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
667 elif osname[:6] == "cygwin":
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
668 osname = "cygwin"
86213
406529adf156 Issue #19205: Don't import the 're' module in site and sysconfig module to
Christian Heimes <christian@cheimes.de>
parents: 84150
diff changeset
669 import re
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
670 rel_re = re.compile(r'[\d.]+')
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
671 m = rel_re.match(release)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
672 if m:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
673 release = m.group()
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
674 elif osname[:6] == "darwin":
81844
502b139b3b19 Issue #13590: OS X Xcode 4 - improve support for universal extension modules
Ned Deily <nad@acm.org>
parents: 74491
diff changeset
675 import _osx_support
502b139b3b19 Issue #13590: OS X Xcode 4 - improve support for universal extension modules
Ned Deily <nad@acm.org>
parents: 74491
diff changeset
676 osname, release, machine = _osx_support.get_platform_osx(
502b139b3b19 Issue #13590: OS X Xcode 4 - improve support for universal extension modules
Ned Deily <nad@acm.org>
parents: 74491
diff changeset
677 get_config_vars(),
502b139b3b19 Issue #13590: OS X Xcode 4 - improve support for universal extension modules
Ned Deily <nad@acm.org>
parents: 74491
diff changeset
678 osname, release, machine)
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
679
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
680 return "%s-%s-%s" % (osname, release, machine)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
681
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
682
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
683 def get_python_version():
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
684 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
685
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
686
61896
703287a99939 Made sysconfig a script that displays useful information - #8770
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 61765
diff changeset
687 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
688 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
689 if index == 0:
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
690 print('%s: ' % (title))
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
691 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
692
61896
703287a99939 Made sysconfig a script that displays useful information - #8770
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 61765
diff changeset
693
703287a99939 Made sysconfig a script that displays useful information - #8770
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 61765
diff changeset
694 def _main():
66373
66e0f5c65158 r84925 followup: add docstring for get_makefile_filename (+PEP 257 fixes)
Éric Araujo <merwok@netwok.org>
parents: 65993
diff changeset
695 """Display all information sysconfig detains."""
72975
70160b53117f Issue #13150: sysconfig no longer parses the Makefile and config.h files
Antoine Pitrou <solipsis@pitrou.net>
parents: 72854
diff changeset
696 if '--generate-posix-vars' in sys.argv:
70160b53117f Issue #13150: sysconfig no longer parses the Makefile and config.h files
Antoine Pitrou <solipsis@pitrou.net>
parents: 72854
diff changeset
697 _generate_posix_vars()
70160b53117f Issue #13150: sysconfig no longer parses the Makefile and config.h files
Antoine Pitrou <solipsis@pitrou.net>
parents: 72854
diff changeset
698 return
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
699 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
700 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
701 print('Current installation scheme: "%s"' % _get_default_scheme())
70411
e5ff8ca071ee Minor cleanup in sysconfig.
Éric Araujo <merwok@netwok.org>
parents: 70194
diff changeset
702 print()
61896
703287a99939 Made sysconfig a script that displays useful information - #8770
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 61765
diff changeset
703 _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
704 print()
61896
703287a99939 Made sysconfig a script that displays useful information - #8770
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 61765
diff changeset
705 _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
706
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
707
61896
703287a99939 Made sysconfig a script that displays useful information - #8770
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 61765
diff changeset
708 if __name__ == '__main__':
703287a99939 Made sysconfig a script that displays useful information - #8770
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 61765
diff changeset
709 _main()