annotate Lib/sysconfig.py @ 84007:dbfbdf2b5c19 3.3

Fix #17967: For ftp urls CWD to target instead of hopping to each directory towards target. This fixes a bug where target is accessible, but parent directories are restricted.
author Senthil Kumaran <senthil@uthcode.com>
date Sat, 01 Jun 2013 08:27:06 -0700
parents 14f0c9e595a5
children c554194240fc f6a6b4eed5b0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
1 """Access to Python's configuration information."""
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
2
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
3 import os
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
4 import re
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
5 import sys
59502
135cd8064d6f Merged revisions 78828 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents: 58652
diff changeset
6 from os.path import pardir, realpath
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
7
64855
96db640674cb Issue 9877: expose sysconfig.get_makefile_filename() in the public API.
Barry Warsaw <barry@python.org>
parents: 64850
diff changeset
8 __all__ = [
96db640674cb Issue 9877: expose sysconfig.get_makefile_filename() in the public API.
Barry Warsaw <barry@python.org>
parents: 64850
diff changeset
9 '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
10 'get_config_var',
96db640674cb Issue 9877: expose sysconfig.get_makefile_filename() in the public API.
Barry Warsaw <barry@python.org>
parents: 64850
diff changeset
11 'get_config_vars',
96db640674cb Issue 9877: expose sysconfig.get_makefile_filename() in the public API.
Barry Warsaw <barry@python.org>
parents: 64850
diff changeset
12 'get_makefile_filename',
96db640674cb Issue 9877: expose sysconfig.get_makefile_filename() in the public API.
Barry Warsaw <barry@python.org>
parents: 64850
diff changeset
13 'get_path',
96db640674cb Issue 9877: expose sysconfig.get_makefile_filename() in the public API.
Barry Warsaw <barry@python.org>
parents: 64850
diff changeset
14 'get_path_names',
96db640674cb Issue 9877: expose sysconfig.get_makefile_filename() in the public API.
Barry Warsaw <barry@python.org>
parents: 64850
diff changeset
15 'get_paths',
96db640674cb Issue 9877: expose sysconfig.get_makefile_filename() in the public API.
Barry Warsaw <barry@python.org>
parents: 64850
diff changeset
16 'get_platform',
96db640674cb Issue 9877: expose sysconfig.get_makefile_filename() in the public API.
Barry Warsaw <barry@python.org>
parents: 64850
diff changeset
17 'get_python_version',
96db640674cb Issue 9877: expose sysconfig.get_makefile_filename() in the public API.
Barry Warsaw <barry@python.org>
parents: 64850
diff changeset
18 'get_scheme_names',
96db640674cb Issue 9877: expose sysconfig.get_makefile_filename() in the public API.
Barry Warsaw <barry@python.org>
parents: 64850
diff changeset
19 'parse_config_h',
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
20 ]
61897
4e00914ec447 added the list of public APIs in sysconfig
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 61896
diff changeset
21
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
22 _INSTALL_SCHEMES = {
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
23 'posix_prefix': {
77675
e989e7586da6 Packaging removal: also revert introduction of sysconfig.cfg.
Éric Araujo <merwok@netwok.org>
parents: 77665
diff changeset
24 '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
25 'platstdlib': '{platbase}/lib/python{py_version_short}',
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
26 '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
27 '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
28 'include':
77675
e989e7586da6 Packaging removal: also revert introduction of sysconfig.cfg.
Éric Araujo <merwok@netwok.org>
parents: 77665
diff changeset
29 '{installed_base}/include/python{py_version_short}{abiflags}',
66429
a763ed3d6e8c Final patch for issue 9807.
Barry Warsaw <barry@python.org>
parents: 66373
diff changeset
30 'platinclude':
77675
e989e7586da6 Packaging removal: also revert introduction of sysconfig.cfg.
Éric Araujo <merwok@netwok.org>
parents: 77665
diff changeset
31 '{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
32 'scripts': '{base}/bin',
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
33 'data': '{base}',
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
34 },
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
35 'posix_home': {
77675
e989e7586da6 Packaging removal: also revert introduction of sysconfig.cfg.
Éric Araujo <merwok@netwok.org>
parents: 77665
diff changeset
36 'stdlib': '{installed_base}/lib/python',
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
37 'platstdlib': '{base}/lib/python',
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
38 'purelib': '{base}/lib/python',
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
39 'platlib': '{base}/lib/python',
77675
e989e7586da6 Packaging removal: also revert introduction of sysconfig.cfg.
Éric Araujo <merwok@netwok.org>
parents: 77665
diff changeset
40 'include': '{installed_base}/include/python',
e989e7586da6 Packaging removal: also revert introduction of sysconfig.cfg.
Éric Araujo <merwok@netwok.org>
parents: 77665
diff changeset
41 'platinclude': '{installed_base}/include/python',
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
42 'scripts': '{base}/bin',
77675
e989e7586da6 Packaging removal: also revert introduction of sysconfig.cfg.
Éric Araujo <merwok@netwok.org>
parents: 77665
diff changeset
43 'data': '{base}',
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
44 },
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
45 'nt': {
77675
e989e7586da6 Packaging removal: also revert introduction of sysconfig.cfg.
Éric Araujo <merwok@netwok.org>
parents: 77665
diff changeset
46 'stdlib': '{installed_base}/Lib',
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
47 'platstdlib': '{base}/Lib',
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
48 'purelib': '{base}/Lib/site-packages',
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
49 'platlib': '{base}/Lib/site-packages',
77675
e989e7586da6 Packaging removal: also revert introduction of sysconfig.cfg.
Éric Araujo <merwok@netwok.org>
parents: 77665
diff changeset
50 'include': '{installed_base}/Include',
e989e7586da6 Packaging removal: also revert introduction of sysconfig.cfg.
Éric Araujo <merwok@netwok.org>
parents: 77665
diff changeset
51 'platinclude': '{installed_base}/Include',
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
52 'scripts': '{base}/Scripts',
77675
e989e7586da6 Packaging removal: also revert introduction of sysconfig.cfg.
Éric Araujo <merwok@netwok.org>
parents: 77665
diff changeset
53 'data': '{base}',
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
54 },
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
55 'os2': {
77675
e989e7586da6 Packaging removal: also revert introduction of sysconfig.cfg.
Éric Araujo <merwok@netwok.org>
parents: 77665
diff changeset
56 'stdlib': '{installed_base}/Lib',
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
57 'platstdlib': '{base}/Lib',
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
58 'purelib': '{base}/Lib/site-packages',
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
59 'platlib': '{base}/Lib/site-packages',
77675
e989e7586da6 Packaging removal: also revert introduction of sysconfig.cfg.
Éric Araujo <merwok@netwok.org>
parents: 77665
diff changeset
60 'include': '{installed_base}/Include',
e989e7586da6 Packaging removal: also revert introduction of sysconfig.cfg.
Éric Araujo <merwok@netwok.org>
parents: 77665
diff changeset
61 'platinclude': '{installed_base}/Include',
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
62 'scripts': '{base}/Scripts',
77675
e989e7586da6 Packaging removal: also revert introduction of sysconfig.cfg.
Éric Araujo <merwok@netwok.org>
parents: 77665
diff changeset
63 'data': '{base}',
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
64 },
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
65 'os2_home': {
61765
18dcd903c55e Merged revisions 81371 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 61403
diff changeset
66 'stdlib': '{userbase}/lib/python{py_version_short}',
18dcd903c55e Merged revisions 81371 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 61403
diff changeset
67 'platstdlib': '{userbase}/lib/python{py_version_short}',
18dcd903c55e Merged revisions 81371 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 61403
diff changeset
68 '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
69 '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
70 'include': '{userbase}/include/python{py_version_short}',
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
71 'scripts': '{userbase}/bin',
77675
e989e7586da6 Packaging removal: also revert introduction of sysconfig.cfg.
Éric Araujo <merwok@netwok.org>
parents: 77665
diff changeset
72 'data': '{userbase}',
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
73 },
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
74 'nt_user': {
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
75 'stdlib': '{userbase}/Python{py_version_nodot}',
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
76 'platstdlib': '{userbase}/Python{py_version_nodot}',
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
77 '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
78 '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
79 'include': '{userbase}/Python{py_version_nodot}/Include',
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
80 'scripts': '{userbase}/Scripts',
77675
e989e7586da6 Packaging removal: also revert introduction of sysconfig.cfg.
Éric Araujo <merwok@netwok.org>
parents: 77665
diff changeset
81 'data': '{userbase}',
58558
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 'posix_user': {
61765
18dcd903c55e Merged revisions 81371 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 61403
diff changeset
84 'stdlib': '{userbase}/lib/python{py_version_short}',
18dcd903c55e Merged revisions 81371 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 61403
diff changeset
85 'platstdlib': '{userbase}/lib/python{py_version_short}',
18dcd903c55e Merged revisions 81371 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 61403
diff changeset
86 '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
87 '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
88 'include': '{userbase}/include/python{py_version_short}',
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
89 'scripts': '{userbase}/bin',
77675
e989e7586da6 Packaging removal: also revert introduction of sysconfig.cfg.
Éric Araujo <merwok@netwok.org>
parents: 77665
diff changeset
90 'data': '{userbase}',
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
91 },
61403
3fae7cb49209 Merged revisions 80967 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 59532
diff changeset
92 'osx_framework_user': {
3fae7cb49209 Merged revisions 80967 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 59532
diff changeset
93 'stdlib': '{userbase}/lib/python',
3fae7cb49209 Merged revisions 80967 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 59532
diff changeset
94 'platstdlib': '{userbase}/lib/python',
3fae7cb49209 Merged revisions 80967 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 59532
diff changeset
95 'purelib': '{userbase}/lib/python/site-packages',
3fae7cb49209 Merged revisions 80967 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 59532
diff changeset
96 'platlib': '{userbase}/lib/python/site-packages',
3fae7cb49209 Merged revisions 80967 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 59532
diff changeset
97 'include': '{userbase}/include',
3fae7cb49209 Merged revisions 80967 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 59532
diff changeset
98 'scripts': '{userbase}/bin',
77675
e989e7586da6 Packaging removal: also revert introduction of sysconfig.cfg.
Éric Araujo <merwok@netwok.org>
parents: 77665
diff changeset
99 'data': '{userbase}',
61403
3fae7cb49209 Merged revisions 80967 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 59532
diff changeset
100 },
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
101 }
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
102
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
103 _SCHEME_KEYS = ('stdlib', 'platstdlib', 'purelib', 'platlib', 'include',
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
104 'scripts', 'data')
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
105
77154
294f8aeb4d4b Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74492
diff changeset
106 # 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
107 # 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
108 _PY_VERSION = sys.version.split()[0]
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
109 _PY_VERSION_SHORT = sys.version[:3]
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
110 _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
111 _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
112 _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
113 _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
114 _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
115 _CONFIG_VARS = None
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
116 _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
117
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
118
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 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
120 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
121 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
122 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
123 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
124
59532
236fb0af4404 Merged revisions 78835-78837 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 59507
diff changeset
125 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
126 _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
127 else:
236fb0af4404 Merged revisions 78835-78837 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 59507
diff changeset
128 # 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
129 # 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
130 _PROJECT_BASE = _safe_realpath(os.getcwd())
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
131
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
132 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
133 _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
134 # PC/VS7.1
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
135 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
136 _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
137 # PC/AMD64
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
138 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
139 _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
140
77886
cfbe51e66749 - Issue #14330: For cross builds, don't use host python, use host search paths
doko@ubuntu.com
parents: 77755
diff changeset
141 # 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
142 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
143 _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
144
77154
294f8aeb4d4b Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74492
diff changeset
145 def _is_python_source_dir(d):
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
146 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
147 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
148 return True
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
149 return False
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
150
77154
294f8aeb4d4b Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74492
diff changeset
151 _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
152 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
153 _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
154 _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
155 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
156 _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
157 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
158 if check_home and _sys_home:
294f8aeb4d4b Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74492
diff changeset
159 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
160 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
161
294f8aeb4d4b Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74492
diff changeset
162 _PYTHON_BUILD = is_python_build(True)
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
163
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
164 if _PYTHON_BUILD:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
165 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
166 _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
167 _INSTALL_SCHEMES[scheme]['platinclude'] = '{projectbase}/.'
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
168
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
169
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
170 def _subst_vars(s, local_vars):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
171 try:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
172 return s.format(**local_vars)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
173 except KeyError:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
174 try:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
175 return s.format(**os.environ)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
176 except KeyError as var:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
177 raise AttributeError('{%s}' % var)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
178
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
179 def _extend_dict(target_dict, other_dict):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
180 target_keys = target_dict.keys()
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
181 for key, value in other_dict.items():
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
182 if key in target_keys:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
183 continue
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
184 target_dict[key] = value
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 _expand_vars(scheme, vars):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
188 res = {}
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
189 if vars is None:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
190 vars = {}
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
191 _extend_dict(vars, get_config_vars())
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 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
194 if os.name in ('posix', 'nt'):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
195 value = os.path.expanduser(value)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
196 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
197 return res
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
198
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
199
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
200 def _get_default_scheme():
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
201 if os.name == 'posix':
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
202 # 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
203 return 'posix_prefix'
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
204 return os.name
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
205
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
206
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
207 def _getuserbase():
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
208 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
209
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
210 def joinuser(*args):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
211 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
212
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
213 # what about 'os2emx', 'riscos' ?
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
214 if os.name == "nt":
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
215 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
216 if env_base:
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
217 return env_base
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
218 else:
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
219 return joinuser(base, "Python")
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
220
61403
3fae7cb49209 Merged revisions 80967 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 59532
diff changeset
221 if sys.platform == "darwin":
3fae7cb49209 Merged revisions 80967 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 59532
diff changeset
222 framework = get_config_var("PYTHONFRAMEWORK")
3fae7cb49209 Merged revisions 80967 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 59532
diff changeset
223 if framework:
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
224 if env_base:
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
225 return env_base
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
226 else:
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
227 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
228 sys.version_info[:2])
61403
3fae7cb49209 Merged revisions 80967 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 59532
diff changeset
229
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
230 if env_base:
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
231 return env_base
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
232 else:
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
233 return joinuser("~", ".local")
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
234
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
235
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
236 def _parse_makefile(filename, vars=None):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
237 """Parse a Makefile-style file.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
238
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
239 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
240 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
241 used instead of a new dictionary.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
242 """
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
243 # 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
244 # like old-style Setup files).
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
245 _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
246 _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
247 _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
248
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
249 if vars is None:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
250 vars = {}
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
251 done = {}
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
252 notdone = {}
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
253
65605
1a08f4a9eafd Issue #6011: sysconfig and distutils.sysconfig use the surrogateescape error
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65331
diff changeset
254 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
255 lines = f.readlines()
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
256
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
257 for line in lines:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
258 if line.startswith('#') or line.strip() == '':
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
259 continue
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
260 m = _variable_rx.match(line)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
261 if m:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
262 n, v = m.group(1, 2)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
263 v = v.strip()
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
264 # `$$' is a literal `$' in make
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
265 tmpv = v.replace('$$', '')
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
266
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
267 if "$" in tmpv:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
268 notdone[n] = v
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
269 else:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
270 try:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
271 v = int(v)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
272 except ValueError:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
273 # insert literal `$'
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
274 done[n] = v.replace('$$', '$')
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
275 else:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
276 done[n] = v
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
277
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
278 # do variable interpolation here
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
279 variables = list(notdone.keys())
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
280
63108
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
281 # 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
282 # 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
283 # 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
284 # 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
285 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
286
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
287 while len(variables) > 0:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
288 for name in tuple(variables):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
289 value = notdone[name]
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
290 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
291 if m is not None:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
292 n = m.group(1)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
293 found = True
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
294 if n in done:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
295 item = str(done[n])
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
296 elif n in notdone:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
297 # get it on a subsequent round
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
298 found = False
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
299 elif n in os.environ:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
300 # 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
301 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
302
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
303 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
304 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
305 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
306 item = ""
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
307
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
308 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
309 found = False
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 else:
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
312 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
313
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
314 else:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
315 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
316
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
317 if found:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
318 after = value[m.end():]
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
319 value = value[:m.start()] + item + after
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
320 if "$" in after:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
321 notdone[name] = value
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
322 else:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
323 try:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
324 value = int(value)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
325 except ValueError:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
326 done[name] = value.strip()
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
327 else:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
328 done[name] = value
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
329 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
330
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
331 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
332 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
333
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
334 name = name[3:]
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
335 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
336 done[name] = value
9c766cd211db Without this patch the value of sysconfig.get_config_var('LDSHARED')
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 62950
diff changeset
337
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
338 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
339 # 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
340 # 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
341 done[name] = value
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
342 variables.remove(name)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
343
65206
25d078739c2a Issue #9437: Fix building C extensions with non-default LDFLAGS.
Antoine Pitrou <solipsis@pitrou.net>
parents: 64855
diff changeset
344 # strip spurious spaces
25d078739c2a Issue #9437: Fix building C extensions with non-default LDFLAGS.
Antoine Pitrou <solipsis@pitrou.net>
parents: 64855
diff changeset
345 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
346 if isinstance(v, str):
25d078739c2a Issue #9437: Fix building C extensions with non-default LDFLAGS.
Antoine Pitrou <solipsis@pitrou.net>
parents: 64855
diff changeset
347 done[k] = v.strip()
25d078739c2a Issue #9437: Fix building C extensions with non-default LDFLAGS.
Antoine Pitrou <solipsis@pitrou.net>
parents: 64855
diff changeset
348
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
349 # save the results in the global dictionary
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
350 vars.update(done)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
351 return vars
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
352
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
353
64855
96db640674cb Issue 9877: expose sysconfig.get_makefile_filename() in the public API.
Barry Warsaw <barry@python.org>
parents: 64850
diff changeset
354 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
355 """Return the path of the Makefile."""
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
356 if _PYTHON_BUILD:
77154
294f8aeb4d4b Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74492
diff changeset
357 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
358 if hasattr(sys, 'abiflags'):
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
359 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
360 else:
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
361 config_dir_name = 'config'
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
362 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
363
72975
70160b53117f Issue #13150: sysconfig no longer parses the Makefile and config.h files
Antoine Pitrou <solipsis@pitrou.net>
parents: 72854
diff changeset
364 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
365 """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
366 import pprint
70160b53117f Issue #13150: sysconfig no longer parses the Makefile and config.h files
Antoine Pitrou <solipsis@pitrou.net>
parents: 72854
diff changeset
367 vars = {}
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
368 # 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
369 makefile = get_makefile_filename()
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
370 try:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
371 _parse_makefile(makefile, vars)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
372 except IOError as e:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
373 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
374 if hasattr(e, "strerror"):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
375 msg = msg + " (%s)" % e.strerror
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
376 raise IOError(msg)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
377 # load the installed pyconfig.h:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
378 config_h = get_config_h_filename()
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
379 try:
65331
46956a25c264 Explicitly close some files (from issue #10093)
Antoine Pitrou <solipsis@pitrou.net>
parents: 65226
diff changeset
380 with open(config_h) as f:
46956a25c264 Explicitly close some files (from issue #10093)
Antoine Pitrou <solipsis@pitrou.net>
parents: 65226
diff changeset
381 parse_config_h(f, vars)
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
382 except IOError as e:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
383 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
384 if hasattr(e, "strerror"):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
385 msg = msg + " (%s)" % e.strerror
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
386 raise IOError(msg)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
387 # 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
388 # -- 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
389 # the scripts are in another directory.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
390 if _PYTHON_BUILD:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
391 vars['LDSHARED'] = vars['BLDSHARED']
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
392
79778
66959d419369 Issue #15298: fix an OS X bootstrap issue with _sysconfigdata.py.
Trent Nelson <trent@trent.me>
parents: 79744
diff changeset
393 # 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
394 # _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
395 # 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
396 # `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
397 # _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
398 # 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
399 # 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
400 # 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
401 # _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
402 # 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
403 # get_platform() succeeds.
1250498db562 Issue #15298: refactor previous fix from 66959d419369.
Trent Nelson <trent@trent.me>
parents: 79778
diff changeset
404 name = '_sysconfigdata'
1250498db562 Issue #15298: refactor previous fix from 66959d419369.
Trent Nelson <trent@trent.me>
parents: 79778
diff changeset
405 if 'darwin' in sys.platform:
1250498db562 Issue #15298: refactor previous fix from 66959d419369.
Trent Nelson <trent@trent.me>
parents: 79778
diff changeset
406 import imp
1250498db562 Issue #15298: refactor previous fix from 66959d419369.
Trent Nelson <trent@trent.me>
parents: 79778
diff changeset
407 module = imp.new_module(name)
1250498db562 Issue #15298: refactor previous fix from 66959d419369.
Trent Nelson <trent@trent.me>
parents: 79778
diff changeset
408 module.build_time_vars = vars
1250498db562 Issue #15298: refactor previous fix from 66959d419369.
Trent Nelson <trent@trent.me>
parents: 79778
diff changeset
409 sys.modules[name] = module
1250498db562 Issue #15298: refactor previous fix from 66959d419369.
Trent Nelson <trent@trent.me>
parents: 79778
diff changeset
410
1250498db562 Issue #15298: refactor previous fix from 66959d419369.
Trent Nelson <trent@trent.me>
parents: 79778
diff changeset
411 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
412 if hasattr(sys, "gettotalrefcount"):
1250498db562 Issue #15298: refactor previous fix from 66959d419369.
Trent Nelson <trent@trent.me>
parents: 79778
diff changeset
413 pybuilddir += '-pydebug'
1250498db562 Issue #15298: refactor previous fix from 66959d419369.
Trent Nelson <trent@trent.me>
parents: 79778
diff changeset
414 os.makedirs(pybuilddir, exist_ok=True)
1250498db562 Issue #15298: refactor previous fix from 66959d419369.
Trent Nelson <trent@trent.me>
parents: 79778
diff changeset
415 destfile = os.path.join(pybuilddir, name + '.py')
1250498db562 Issue #15298: refactor previous fix from 66959d419369.
Trent Nelson <trent@trent.me>
parents: 79778
diff changeset
416
72975
70160b53117f Issue #13150: sysconfig no longer parses the Makefile and config.h files
Antoine Pitrou <solipsis@pitrou.net>
parents: 72854
diff changeset
417 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
418 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
419 ' 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
420 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
421 pprint.pprint(vars, stream=f)
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
422
79744
24d52d3060e8 Issue #15298: ensure _sysconfigdata is generated in build directory,
Trent Nelson <trent@trent.me>
parents: 78295
diff changeset
423 # 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
424 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
425 f.write(pybuilddir)
24d52d3060e8 Issue #15298: ensure _sysconfigdata is generated in build directory,
Trent Nelson <trent@trent.me>
parents: 78295
diff changeset
426
72975
70160b53117f Issue #13150: sysconfig no longer parses the Makefile and config.h files
Antoine Pitrou <solipsis@pitrou.net>
parents: 72854
diff changeset
427 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
428 """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
429 # _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
430 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
431 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
432
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
433 def _init_non_posix(vars):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
434 """Initialize the module as appropriate for NT"""
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
435 # set basic install directories
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
436 vars['LIBDEST'] = get_path('stdlib')
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
437 vars['BINLIBDEST'] = get_path('platstdlib')
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
438 vars['INCLUDEPY'] = get_path('include')
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
439 vars['SO'] = '.pyd'
82869
8f91014c8f00 - Issue #16754: Fix the incorrect shared library extension on linux. Introduce
doko@ubuntu.com
parents: 81844
diff changeset
440 vars['EXT_SUFFIX'] = '.pyd'
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
441 vars['EXE'] = '.exe'
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
442 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
443 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
444
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
445 #
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
446 # public APIs
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
447 #
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
448
58652
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
449
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
450 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
451 """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
452
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
453 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
454 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
455 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
456 """
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
457 if vars is None:
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
458 vars = {}
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
459 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
460 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
461
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
462 while True:
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
463 line = fp.readline()
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
464 if not line:
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
465 break
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
466 m = define_rx.match(line)
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
467 if m:
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
468 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
469 try:
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
470 v = int(v)
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
471 except ValueError:
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
472 pass
58652
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
473 vars[n] = v
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
474 else:
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
475 m = undef_rx.match(line)
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
476 if m:
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
477 vars[m.group(1)] = 0
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
478 return vars
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
479
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
480
58652
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
481 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
482 """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
483 if _PYTHON_BUILD:
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
484 if os.name == "nt":
77154
294f8aeb4d4b Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74492
diff changeset
485 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
486 else:
77154
294f8aeb4d4b Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74492
diff changeset
487 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
488 else:
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
489 inc_dir = get_path('platinclude')
d3127f6de16c Merged revisions 77919,77921-77922 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 58558
diff changeset
490 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
491
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
492
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
493 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
494 """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
495 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
496
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 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
499 """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
500 return _SCHEME_KEYS
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
501
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
502
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
503 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
504 """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
505
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
506 ``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
507 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
508 """
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
509 if expand:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
510 return _expand_vars(scheme, vars)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
511 else:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
512 return _INSTALL_SCHEMES[scheme]
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
513
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
514
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
515 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
516 """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
517
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
518 ``scheme`` is the install scheme name.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
519 """
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
520 return get_paths(scheme, vars, expand)[name]
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
521
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
522
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
523 def get_config_vars(*args):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
524 """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
525 variables relevant for the current platform.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
526
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
527 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
528 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
529
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
530 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
531 each argument in the configuration variable dictionary.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
532 """
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
533 global _CONFIG_VARS
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
534 if _CONFIG_VARS is None:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
535 _CONFIG_VARS = {}
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
536 # 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
537 # 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
538 # Distutils.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
539 _CONFIG_VARS['prefix'] = _PREFIX
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
540 _CONFIG_VARS['exec_prefix'] = _EXEC_PREFIX
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
541 _CONFIG_VARS['py_version'] = _PY_VERSION
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
542 _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
543 _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
544 _CONFIG_VARS['installed_base'] = _BASE_PREFIX
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
545 _CONFIG_VARS['base'] = _PREFIX
77154
294f8aeb4d4b Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents: 74492
diff changeset
546 _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
547 _CONFIG_VARS['platbase'] = _EXEC_PREFIX
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
548 _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
549 try:
cead04b3c5ed sys.abiflags may not be defined on all platforms.
Barry Warsaw <barry@python.org>
parents: 66429
diff changeset
550 _CONFIG_VARS['abiflags'] = sys.abiflags
cead04b3c5ed sys.abiflags may not be defined on all platforms.
Barry Warsaw <barry@python.org>
parents: 66429
diff changeset
551 except AttributeError:
cead04b3c5ed sys.abiflags may not be defined on all platforms.
Barry Warsaw <barry@python.org>
parents: 66429
diff changeset
552 # 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
553 _CONFIG_VARS['abiflags'] = ''
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
554
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
555 if os.name in ('nt', 'os2'):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
556 _init_non_posix(_CONFIG_VARS)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
557 if os.name == 'posix':
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
558 _init_posix(_CONFIG_VARS)
61403
3fae7cb49209 Merged revisions 80967 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 59532
diff changeset
559 # 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
560 # 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
561 # the init-function.
3fae7cb49209 Merged revisions 80967 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 59532
diff changeset
562 _CONFIG_VARS['userbase'] = _getuserbase()
3fae7cb49209 Merged revisions 80967 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 59532
diff changeset
563
78295
d2f448dbc30d Issue #15364: Fix sysconfig.get_config_var('srcdir') to be an absolute path.
Richard Oudkerk <shibturn@gmail.com>
parents: 78216
diff changeset
564 # 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
565 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
566 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
567 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
568 # 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
569 # 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
570 # 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
571 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
572 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
573 else:
d2f448dbc30d Issue #15364: Fix sysconfig.get_config_var('srcdir') to be an absolute path.
Richard Oudkerk <shibturn@gmail.com>
parents: 78216
diff changeset
574 # 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
575 # 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
576 # 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
577 # exists.
d2f448dbc30d Issue #15364: Fix sysconfig.get_config_var('srcdir') to be an absolute path.
Richard Oudkerk <shibturn@gmail.com>
parents: 78216
diff changeset
578 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
579 _CONFIG_VARS['srcdir'] = _safe_realpath(srcdir)
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
580
81844
502b139b3b19 Issue #13590: OS X Xcode 4 - improve support for universal extension modules
Ned Deily <nad@acm.org>
parents: 74491
diff changeset
581 # 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
582 # multi-architecture, multi-os-version installers
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
583 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
584 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
585 _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
586
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
587 if args:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
588 vals = []
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
589 for name in args:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
590 vals.append(_CONFIG_VARS.get(name))
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
591 return vals
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
592 else:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
593 return _CONFIG_VARS
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
594
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
595
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
596 def get_config_var(name):
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
597 """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
598 'get_config_vars()'.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
599
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
600 Equivalent to get_config_vars().get(name)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
601 """
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
602 return get_config_vars().get(name)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
603
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
604
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
605 def get_platform():
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
606 """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
607
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
608 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
609 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
610 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
611 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
612 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
613 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
614 important.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
615
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
616 Examples of returned values:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
617 linux-i586
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
618 linux-alpha (?)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
619 solaris-2.6-sun4u
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
620 irix-5.3
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
621 irix64-6.2
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
622
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
623 Windows will return one of:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
624 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
625 win-ia64 (64bit Windows on Itanium)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
626 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
627
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
628 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
629 """
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
630 if os.name == 'nt':
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
631 # sniff sys.version for architecture.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
632 prefix = " bit ("
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
633 i = sys.version.find(prefix)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
634 if i == -1:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
635 return sys.platform
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
636 j = sys.version.find(")", i)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
637 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
638 if look == 'amd64':
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
639 return 'win-amd64'
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
640 if look == 'itanium':
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
641 return 'win-ia64'
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
642 return sys.platform
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
643
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
644 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
645 # 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
646 return sys.platform
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
647
77886
cfbe51e66749 - Issue #14330: For cross builds, don't use host python, use host search paths
doko@ubuntu.com
parents: 77755
diff changeset
648 # 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
649 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
650 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
651
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
652 # Try to distinguish various flavours of Unix
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
653 osname, host, release, version, machine = os.uname()
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
654
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
655 # 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
656 # (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
657 osname = osname.lower().replace('/', '')
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
658 machine = machine.replace(' ', '_')
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
659 machine = machine.replace('/', '-')
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
660
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
661 if osname[:5] == "linux":
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
662 # 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
663 # i386, etc.
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
664 # XXX what about Alpha, SPARC, etc?
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
665 return "%s-%s" % (osname, machine)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
666 elif osname[:5] == "sunos":
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
667 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
668 osname = "solaris"
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
669 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
670 # 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
671 # 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
672 # 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
673 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
674 machine += ".%s" % bitness[sys.maxsize]
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
675 # 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
676 elif osname[:4] == "irix": # could be "irix64"!
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
677 return "%s-%s" % (osname, release)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
678 elif osname[:3] == "aix":
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
679 return "%s-%s.%s" % (osname, version, release)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
680 elif osname[:6] == "cygwin":
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
681 osname = "cygwin"
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
682 rel_re = re.compile(r'[\d.]+')
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
683 m = rel_re.match(release)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
684 if m:
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
685 release = m.group()
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
686 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
687 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
688 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
689 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
690 osname, release, machine)
58558
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
691
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
692 return "%s-%s-%s" % (osname, release, machine)
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
693
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
694
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
695 def get_python_version():
5aa90248a99f Merged revisions 77704,77752 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff changeset
696 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
697
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
698
61896
703287a99939 Made sysconfig a script that displays useful information - #8770
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 61765
diff changeset
699 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
700 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
701 if index == 0:
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
702 print('%s: ' % (title))
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
703 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
704
61896
703287a99939 Made sysconfig a script that displays useful information - #8770
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 61765
diff changeset
705
703287a99939 Made sysconfig a script that displays useful information - #8770
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 61765
diff changeset
706 def _main():
66373
66e0f5c65158 r84925 followup: add docstring for get_makefile_filename (+PEP 257 fixes)
Éric Araujo <merwok@netwok.org>
parents: 65993
diff changeset
707 """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
708 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
709 _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
710 return
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
711 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
712 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
713 print('Current installation scheme: "%s"' % _get_default_scheme())
70411
e5ff8ca071ee Minor cleanup in sysconfig.
Éric Araujo <merwok@netwok.org>
parents: 70194
diff changeset
714 print()
61896
703287a99939 Made sysconfig a script that displays useful information - #8770
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 61765
diff changeset
715 _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
716 print()
61896
703287a99939 Made sysconfig a script that displays useful information - #8770
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 61765
diff changeset
717 _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
718
70194
1a31c3be88b1 initial import of the packaging package in the standard library
Tarek Ziade <tarek@ziade.org>
parents: 70144
diff changeset
719
61896
703287a99939 Made sysconfig a script that displays useful information - #8770
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 61765
diff changeset
720 if __name__ == '__main__':
703287a99939 Made sysconfig a script that displays useful information - #8770
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 61765
diff changeset
721 _main()