Mercurial > cpython-lru_cache-weakref
annotate Lib/sysconfig.py @ 80661:94de77bd0b4b 2.7
Issue #16194: document imp.load_dynamic problems
when read several extension modules from the same binary object file.
| author | Andrew Svetlov <andrew.svetlov@gmail.com> |
|---|---|
| date | Thu, 29 Nov 2012 19:51:28 +0200 |
| parents | 82c4f094f811 |
| children | 1d061f83a6bf |
| rev | line source |
|---|---|
|
58450
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
1 """Provide access to Python's configuration information. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
2 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
3 """ |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
4 import sys |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
5 import os |
|
59501
adbb37d3d0e5
Issue #7880: Fix sysconfig when the python executable is a symbolic link.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58648
diff
changeset
|
6 from os.path import pardir, realpath |
|
58450
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
7 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
8 _INSTALL_SCHEMES = { |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
9 'posix_prefix': { |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
10 'stdlib': '{base}/lib/python{py_version_short}', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
11 'platstdlib': '{platbase}/lib/python{py_version_short}', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
12 'purelib': '{base}/lib/python{py_version_short}/site-packages', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
13 'platlib': '{platbase}/lib/python{py_version_short}/site-packages', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
14 'include': '{base}/include/python{py_version_short}', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
15 'platinclude': '{platbase}/include/python{py_version_short}', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
16 'scripts': '{base}/bin', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
17 'data': '{base}', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
18 }, |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
19 'posix_home': { |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
20 'stdlib': '{base}/lib/python', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
21 'platstdlib': '{base}/lib/python', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
22 'purelib': '{base}/lib/python', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
23 'platlib': '{base}/lib/python', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
24 'include': '{base}/include/python', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
25 'platinclude': '{base}/include/python', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
26 'scripts': '{base}/bin', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
27 'data' : '{base}', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
28 }, |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
29 'nt': { |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
30 'stdlib': '{base}/Lib', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
31 'platstdlib': '{base}/Lib', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
32 'purelib': '{base}/Lib/site-packages', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
33 'platlib': '{base}/Lib/site-packages', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
34 'include': '{base}/Include', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
35 'platinclude': '{base}/Include', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
36 'scripts': '{base}/Scripts', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
37 'data' : '{base}', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
38 }, |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
39 'os2': { |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
40 'stdlib': '{base}/Lib', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
41 'platstdlib': '{base}/Lib', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
42 'purelib': '{base}/Lib/site-packages', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
43 'platlib': '{base}/Lib/site-packages', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
44 'include': '{base}/Include', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
45 'platinclude': '{base}/Include', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
46 'scripts': '{base}/Scripts', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
47 'data' : '{base}', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
48 }, |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
49 'os2_home': { |
|
61764
021f5ec5d2d4
#8759: Fixed user paths in sysconfig for posix and os2 schemes
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
61402
diff
changeset
|
50 'stdlib': '{userbase}/lib/python{py_version_short}', |
|
021f5ec5d2d4
#8759: Fixed user paths in sysconfig for posix and os2 schemes
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
61402
diff
changeset
|
51 'platstdlib': '{userbase}/lib/python{py_version_short}', |
|
021f5ec5d2d4
#8759: Fixed user paths in sysconfig for posix and os2 schemes
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
61402
diff
changeset
|
52 'purelib': '{userbase}/lib/python{py_version_short}/site-packages', |
|
021f5ec5d2d4
#8759: Fixed user paths in sysconfig for posix and os2 schemes
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
61402
diff
changeset
|
53 'platlib': '{userbase}/lib/python{py_version_short}/site-packages', |
|
58450
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
54 'include': '{userbase}/include/python{py_version_short}', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
55 'scripts': '{userbase}/bin', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
56 'data' : '{userbase}', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
57 }, |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
58 'nt_user': { |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
59 'stdlib': '{userbase}/Python{py_version_nodot}', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
60 'platstdlib': '{userbase}/Python{py_version_nodot}', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
61 'purelib': '{userbase}/Python{py_version_nodot}/site-packages', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
62 'platlib': '{userbase}/Python{py_version_nodot}/site-packages', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
63 'include': '{userbase}/Python{py_version_nodot}/Include', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
64 'scripts': '{userbase}/Scripts', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
65 'data' : '{userbase}', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
66 }, |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
67 'posix_user': { |
|
61764
021f5ec5d2d4
#8759: Fixed user paths in sysconfig for posix and os2 schemes
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
61402
diff
changeset
|
68 'stdlib': '{userbase}/lib/python{py_version_short}', |
|
021f5ec5d2d4
#8759: Fixed user paths in sysconfig for posix and os2 schemes
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
61402
diff
changeset
|
69 'platstdlib': '{userbase}/lib/python{py_version_short}', |
|
021f5ec5d2d4
#8759: Fixed user paths in sysconfig for posix and os2 schemes
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
61402
diff
changeset
|
70 'purelib': '{userbase}/lib/python{py_version_short}/site-packages', |
|
021f5ec5d2d4
#8759: Fixed user paths in sysconfig for posix and os2 schemes
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
61402
diff
changeset
|
71 'platlib': '{userbase}/lib/python{py_version_short}/site-packages', |
|
58450
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
72 'include': '{userbase}/include/python{py_version_short}', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
73 'scripts': '{userbase}/bin', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
74 'data' : '{userbase}', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
75 }, |
|
61402
930395b2de90
Issue #8084: ensure that the --user directory
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
59508
diff
changeset
|
76 'osx_framework_user': { |
|
930395b2de90
Issue #8084: ensure that the --user directory
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
59508
diff
changeset
|
77 'stdlib': '{userbase}/lib/python', |
|
930395b2de90
Issue #8084: ensure that the --user directory
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
59508
diff
changeset
|
78 'platstdlib': '{userbase}/lib/python', |
|
930395b2de90
Issue #8084: ensure that the --user directory
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
59508
diff
changeset
|
79 'purelib': '{userbase}/lib/python/site-packages', |
|
930395b2de90
Issue #8084: ensure that the --user directory
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
59508
diff
changeset
|
80 'platlib': '{userbase}/lib/python/site-packages', |
|
930395b2de90
Issue #8084: ensure that the --user directory
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
59508
diff
changeset
|
81 'include': '{userbase}/include', |
|
930395b2de90
Issue #8084: ensure that the --user directory
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
59508
diff
changeset
|
82 'scripts': '{userbase}/bin', |
|
930395b2de90
Issue #8084: ensure that the --user directory
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
59508
diff
changeset
|
83 'data' : '{userbase}', |
|
930395b2de90
Issue #8084: ensure that the --user directory
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
59508
diff
changeset
|
84 }, |
|
58450
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
85 } |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
86 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
87 _SCHEME_KEYS = ('stdlib', 'platstdlib', 'purelib', 'platlib', 'include', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
88 'scripts', 'data') |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
89 _PY_VERSION = sys.version.split()[0] |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
90 _PY_VERSION_SHORT = sys.version[:3] |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
91 _PY_VERSION_SHORT_NO_DOT = _PY_VERSION[0] + _PY_VERSION[2] |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
92 _PREFIX = os.path.normpath(sys.prefix) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
93 _EXEC_PREFIX = os.path.normpath(sys.exec_prefix) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
94 _CONFIG_VARS = None |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
95 _USER_BASE = None |
|
65229
2ffbfbc0d3cb
Merged revisions 85386-85387,85389 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65210
diff
changeset
|
96 |
|
2ffbfbc0d3cb
Merged revisions 85386-85387,85389 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65210
diff
changeset
|
97 def _safe_realpath(path): |
|
2ffbfbc0d3cb
Merged revisions 85386-85387,85389 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65210
diff
changeset
|
98 try: |
|
2ffbfbc0d3cb
Merged revisions 85386-85387,85389 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65210
diff
changeset
|
99 return realpath(path) |
|
2ffbfbc0d3cb
Merged revisions 85386-85387,85389 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65210
diff
changeset
|
100 except OSError: |
|
2ffbfbc0d3cb
Merged revisions 85386-85387,85389 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65210
diff
changeset
|
101 return path |
|
2ffbfbc0d3cb
Merged revisions 85386-85387,85389 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65210
diff
changeset
|
102 |
|
59508
8b246e8560db
Issue #7774: Set sys.executable to an empty string if argv[0] has been
Victor Stinner <victor.stinner@haypocalc.com>
parents:
59506
diff
changeset
|
103 if sys.executable: |
|
65229
2ffbfbc0d3cb
Merged revisions 85386-85387,85389 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65210
diff
changeset
|
104 _PROJECT_BASE = os.path.dirname(_safe_realpath(sys.executable)) |
|
59508
8b246e8560db
Issue #7774: Set sys.executable to an empty string if argv[0] has been
Victor Stinner <victor.stinner@haypocalc.com>
parents:
59506
diff
changeset
|
105 else: |
|
8b246e8560db
Issue #7774: Set sys.executable to an empty string if argv[0] has been
Victor Stinner <victor.stinner@haypocalc.com>
parents:
59506
diff
changeset
|
106 # sys.executable can be empty if argv[0] has been changed and Python is |
|
8b246e8560db
Issue #7774: Set sys.executable to an empty string if argv[0] has been
Victor Stinner <victor.stinner@haypocalc.com>
parents:
59506
diff
changeset
|
107 # unable to retrieve the real program name |
|
65229
2ffbfbc0d3cb
Merged revisions 85386-85387,85389 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65210
diff
changeset
|
108 _PROJECT_BASE = _safe_realpath(os.getcwd()) |
|
58450
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
109 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
110 if os.name == "nt" and "pcbuild" in _PROJECT_BASE[-8:].lower(): |
|
65229
2ffbfbc0d3cb
Merged revisions 85386-85387,85389 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65210
diff
changeset
|
111 _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir)) |
|
58450
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
112 # PC/VS7.1 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
113 if os.name == "nt" and "\\pc\\v" in _PROJECT_BASE[-10:].lower(): |
|
65229
2ffbfbc0d3cb
Merged revisions 85386-85387,85389 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65210
diff
changeset
|
114 _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir, pardir)) |
|
58450
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
115 # PC/AMD64 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
116 if os.name == "nt" and "\\pcbuild\\amd64" in _PROJECT_BASE[-14:].lower(): |
|
65229
2ffbfbc0d3cb
Merged revisions 85386-85387,85389 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65210
diff
changeset
|
117 _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir, pardir)) |
|
58450
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
118 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
119 def is_python_build(): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
120 for fn in ("Setup.dist", "Setup.local"): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
121 if os.path.isfile(os.path.join(_PROJECT_BASE, "Modules", fn)): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
122 return True |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
123 return False |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
124 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
125 _PYTHON_BUILD = is_python_build() |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
126 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
127 if _PYTHON_BUILD: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
128 for scheme in ('posix_prefix', 'posix_home'): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
129 _INSTALL_SCHEMES[scheme]['include'] = '{projectbase}/Include' |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
130 _INSTALL_SCHEMES[scheme]['platinclude'] = '{srcdir}' |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
131 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
132 def _subst_vars(s, local_vars): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
133 try: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
134 return s.format(**local_vars) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
135 except KeyError: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
136 try: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
137 return s.format(**os.environ) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
138 except KeyError, var: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
139 raise AttributeError('{%s}' % var) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
140 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
141 def _extend_dict(target_dict, other_dict): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
142 target_keys = target_dict.keys() |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
143 for key, value in other_dict.items(): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
144 if key in target_keys: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
145 continue |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
146 target_dict[key] = value |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
147 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
148 def _expand_vars(scheme, vars): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
149 res = {} |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
150 if vars is None: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
151 vars = {} |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
152 _extend_dict(vars, get_config_vars()) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
153 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
154 for key, value in _INSTALL_SCHEMES[scheme].items(): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
155 if os.name in ('posix', 'nt'): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
156 value = os.path.expanduser(value) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
157 res[key] = os.path.normpath(_subst_vars(value, vars)) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
158 return res |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
159 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
160 def _get_default_scheme(): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
161 if os.name == 'posix': |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
162 # the default scheme for posix is posix_prefix |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
163 return 'posix_prefix' |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
164 return os.name |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
165 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
166 def _getuserbase(): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
167 env_base = os.environ.get("PYTHONUSERBASE", None) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
168 def joinuser(*args): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
169 return os.path.expanduser(os.path.join(*args)) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
170 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
171 # what about 'os2emx', 'riscos' ? |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
172 if os.name == "nt": |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
173 base = os.environ.get("APPDATA") or "~" |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
174 return env_base if env_base else joinuser(base, "Python") |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
175 |
|
61402
930395b2de90
Issue #8084: ensure that the --user directory
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
59508
diff
changeset
|
176 if sys.platform == "darwin": |
|
930395b2de90
Issue #8084: ensure that the --user directory
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
59508
diff
changeset
|
177 framework = get_config_var("PYTHONFRAMEWORK") |
|
930395b2de90
Issue #8084: ensure that the --user directory
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
59508
diff
changeset
|
178 if framework: |
|
74802
82c4f094f811
Issue #10881: Fix test_site failures with OS X framework builds.
Ned Deily <nad@acm.org>
parents:
74488
diff
changeset
|
179 return env_base if env_base else \ |
|
82c4f094f811
Issue #10881: Fix test_site failures with OS X framework builds.
Ned Deily <nad@acm.org>
parents:
74488
diff
changeset
|
180 joinuser("~", "Library", framework, "%d.%d" |
|
82c4f094f811
Issue #10881: Fix test_site failures with OS X framework builds.
Ned Deily <nad@acm.org>
parents:
74488
diff
changeset
|
181 % (sys.version_info[:2])) |
|
61402
930395b2de90
Issue #8084: ensure that the --user directory
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
59508
diff
changeset
|
182 |
|
58450
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
183 return env_base if env_base else joinuser("~", ".local") |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
184 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
185 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
186 def _parse_makefile(filename, vars=None): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
187 """Parse a Makefile-style file. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
188 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
189 A dictionary containing name/value pairs is returned. If an |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
190 optional dictionary is passed in as the second argument, it is |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
191 used instead of a new dictionary. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
192 """ |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
193 import re |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
194 # Regexes needed for parsing Makefile (and similar syntaxes, |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
195 # like old-style Setup files). |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
196 _variable_rx = re.compile("([a-zA-Z][a-zA-Z0-9_]+)\s*=\s*(.*)") |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
197 _findvar1_rx = re.compile(r"\$\(([A-Za-z][A-Za-z0-9_]*)\)") |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
198 _findvar2_rx = re.compile(r"\${([A-Za-z][A-Za-z0-9_]*)}") |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
199 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
200 if vars is None: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
201 vars = {} |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
202 done = {} |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
203 notdone = {} |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
204 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
205 with open(filename) as f: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
206 lines = f.readlines() |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
207 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
208 for line in lines: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
209 if line.startswith('#') or line.strip() == '': |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
210 continue |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
211 m = _variable_rx.match(line) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
212 if m: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
213 n, v = m.group(1, 2) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
214 v = v.strip() |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
215 # `$$' is a literal `$' in make |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
216 tmpv = v.replace('$$', '') |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
217 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
218 if "$" in tmpv: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
219 notdone[n] = v |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
220 else: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
221 try: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
222 v = int(v) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
223 except ValueError: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
224 # insert literal `$' |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
225 done[n] = v.replace('$$', '$') |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
226 else: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
227 done[n] = v |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
228 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
229 # do variable interpolation here |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
230 while notdone: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
231 for name in notdone.keys(): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
232 value = notdone[name] |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
233 m = _findvar1_rx.search(value) or _findvar2_rx.search(value) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
234 if m: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
235 n = m.group(1) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
236 found = True |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
237 if n in done: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
238 item = str(done[n]) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
239 elif n in notdone: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
240 # get it on a subsequent round |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
241 found = False |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
242 elif n in os.environ: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
243 # do it like make: fall back to environment |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
244 item = os.environ[n] |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
245 else: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
246 done[n] = item = "" |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
247 if found: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
248 after = value[m.end():] |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
249 value = value[:m.start()] + item + after |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
250 if "$" in after: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
251 notdone[name] = value |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
252 else: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
253 try: value = int(value) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
254 except ValueError: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
255 done[name] = value.strip() |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
256 else: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
257 done[name] = value |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
258 del notdone[name] |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
259 else: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
260 # bogus variable reference; just drop it since we can't deal |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
261 del notdone[name] |
|
65210
ad15b89106de
Merged revisions 85353 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
62945
diff
changeset
|
262 # strip spurious spaces |
|
ad15b89106de
Merged revisions 85353 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
62945
diff
changeset
|
263 for k, v in done.items(): |
|
ad15b89106de
Merged revisions 85353 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
62945
diff
changeset
|
264 if isinstance(v, str): |
|
ad15b89106de
Merged revisions 85353 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
62945
diff
changeset
|
265 done[k] = v.strip() |
|
ad15b89106de
Merged revisions 85353 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
62945
diff
changeset
|
266 |
|
58450
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
267 # save the results in the global dictionary |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
268 vars.update(done) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
269 return vars |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
270 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
271 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
272 def _get_makefile_filename(): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
273 if _PYTHON_BUILD: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
274 return os.path.join(_PROJECT_BASE, "Makefile") |
|
67943
d1d9d7e00b4a
- Issue #11171: Fix detection of config/Makefile when --prefix !=
Barry Warsaw <barry@python.org>
parents:
66008
diff
changeset
|
275 return os.path.join(get_path('platstdlib'), "config", "Makefile") |
|
58450
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
276 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
277 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
278 def _init_posix(vars): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
279 """Initialize the module as appropriate for POSIX systems.""" |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
280 # load the installed Makefile: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
281 makefile = _get_makefile_filename() |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
282 try: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
283 _parse_makefile(makefile, vars) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
284 except IOError, e: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
285 msg = "invalid Python installation: unable to open %s" % makefile |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
286 if hasattr(e, "strerror"): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
287 msg = msg + " (%s)" % e.strerror |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
288 raise IOError(msg) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
289 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
290 # load the installed pyconfig.h: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
291 config_h = get_config_h_filename() |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
292 try: |
|
65333
4269267e6e57
Merged revisions 85497 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65229
diff
changeset
|
293 with open(config_h) as f: |
|
4269267e6e57
Merged revisions 85497 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65229
diff
changeset
|
294 parse_config_h(f, vars) |
|
58450
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
295 except IOError, e: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
296 msg = "invalid Python installation: unable to open %s" % config_h |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
297 if hasattr(e, "strerror"): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
298 msg = msg + " (%s)" % e.strerror |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
299 raise IOError(msg) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
300 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
301 # On AIX, there are wrong paths to the linker scripts in the Makefile |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
302 # -- these paths are relative to the Python source, but when installed |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
303 # the scripts are in another directory. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
304 if _PYTHON_BUILD: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
305 vars['LDSHARED'] = vars['BLDSHARED'] |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
306 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
307 def _init_non_posix(vars): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
308 """Initialize the module as appropriate for NT""" |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
309 # set basic install directories |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
310 vars['LIBDEST'] = get_path('stdlib') |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
311 vars['BINLIBDEST'] = get_path('platstdlib') |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
312 vars['INCLUDEPY'] = get_path('include') |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
313 vars['SO'] = '.pyd' |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
314 vars['EXE'] = '.exe' |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
315 vars['VERSION'] = _PY_VERSION_SHORT_NO_DOT |
|
65229
2ffbfbc0d3cb
Merged revisions 85386-85387,85389 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65210
diff
changeset
|
316 vars['BINDIR'] = os.path.dirname(_safe_realpath(sys.executable)) |
|
58450
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
317 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
318 # |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
319 # public APIs |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
320 # |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
321 |
|
58646
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
322 |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
323 def parse_config_h(fp, vars=None): |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
324 """Parse a config.h-style file. |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
325 |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
326 A dictionary containing name/value pairs is returned. If an |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
327 optional dictionary is passed in as the second argument, it is |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
328 used instead of a new dictionary. |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
329 """ |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
330 import re |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
331 if vars is None: |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
332 vars = {} |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
333 define_rx = re.compile("#define ([A-Z][A-Za-z0-9_]+) (.*)\n") |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
334 undef_rx = re.compile("/[*] #undef ([A-Z][A-Za-z0-9_]+) [*]/\n") |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
335 |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
336 while True: |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
337 line = fp.readline() |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
338 if not line: |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
339 break |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
340 m = define_rx.match(line) |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
341 if m: |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
342 n, v = m.group(1, 2) |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
343 try: v = int(v) |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
344 except ValueError: pass |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
345 vars[n] = v |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
346 else: |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
347 m = undef_rx.match(line) |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
348 if m: |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
349 vars[m.group(1)] = 0 |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
350 return vars |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
351 |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
352 def get_config_h_filename(): |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
353 """Returns the path of pyconfig.h.""" |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
354 if _PYTHON_BUILD: |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
355 if os.name == "nt": |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
356 inc_dir = os.path.join(_PROJECT_BASE, "PC") |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
357 else: |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
358 inc_dir = _PROJECT_BASE |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
359 else: |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
360 inc_dir = get_path('platinclude') |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
361 return os.path.join(inc_dir, 'pyconfig.h') |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
362 |
|
58450
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
363 def get_scheme_names(): |
|
58646
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
364 """Returns a tuple containing the schemes names.""" |
|
58648
992cae246a0c
sysconfig.get_scheme_names now returns a sorted tuple
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58646
diff
changeset
|
365 schemes = _INSTALL_SCHEMES.keys() |
|
992cae246a0c
sysconfig.get_scheme_names now returns a sorted tuple
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58646
diff
changeset
|
366 schemes.sort() |
|
992cae246a0c
sysconfig.get_scheme_names now returns a sorted tuple
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58646
diff
changeset
|
367 return tuple(schemes) |
|
58450
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
368 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
369 def get_path_names(): |
|
58646
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
370 """Returns a tuple containing the paths names.""" |
|
58450
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
371 return _SCHEME_KEYS |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
372 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
373 def get_paths(scheme=_get_default_scheme(), vars=None, expand=True): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
374 """Returns a mapping containing an install scheme. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
375 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
376 ``scheme`` is the install scheme name. If not provided, it will |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
377 return the default scheme for the current platform. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
378 """ |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
379 if expand: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
380 return _expand_vars(scheme, vars) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
381 else: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
382 return _INSTALL_SCHEMES[scheme] |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
383 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
384 def get_path(name, scheme=_get_default_scheme(), vars=None, expand=True): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
385 """Returns a path corresponding to the scheme. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
386 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
387 ``scheme`` is the install scheme name. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
388 """ |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
389 return get_paths(scheme, vars, expand)[name] |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
390 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
391 def get_config_vars(*args): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
392 """With no arguments, return a dictionary of all configuration |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
393 variables relevant for the current platform. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
394 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
395 On Unix, this means every variable defined in Python's installed Makefile; |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
396 On Windows and Mac OS it's a much smaller set. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
397 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
398 With arguments, return a list of values that result from looking up |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
399 each argument in the configuration variable dictionary. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
400 """ |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
401 import re |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
402 global _CONFIG_VARS |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
403 if _CONFIG_VARS is None: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
404 _CONFIG_VARS = {} |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
405 # Normalized versions of prefix and exec_prefix are handy to have; |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
406 # in fact, these are the standard versions used most places in the |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
407 # Distutils. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
408 _CONFIG_VARS['prefix'] = _PREFIX |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
409 _CONFIG_VARS['exec_prefix'] = _EXEC_PREFIX |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
410 _CONFIG_VARS['py_version'] = _PY_VERSION |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
411 _CONFIG_VARS['py_version_short'] = _PY_VERSION_SHORT |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
412 _CONFIG_VARS['py_version_nodot'] = _PY_VERSION[0] + _PY_VERSION[2] |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
413 _CONFIG_VARS['base'] = _PREFIX |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
414 _CONFIG_VARS['platbase'] = _EXEC_PREFIX |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
415 _CONFIG_VARS['projectbase'] = _PROJECT_BASE |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
416 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
417 if os.name in ('nt', 'os2'): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
418 _init_non_posix(_CONFIG_VARS) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
419 if os.name == 'posix': |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
420 _init_posix(_CONFIG_VARS) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
421 |
|
61402
930395b2de90
Issue #8084: ensure that the --user directory
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
59508
diff
changeset
|
422 # Setting 'userbase' is done below the call to the |
|
930395b2de90
Issue #8084: ensure that the --user directory
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
59508
diff
changeset
|
423 # init function to enable using 'get_config_var' in |
|
930395b2de90
Issue #8084: ensure that the --user directory
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
59508
diff
changeset
|
424 # the init-function. |
|
930395b2de90
Issue #8084: ensure that the --user directory
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
59508
diff
changeset
|
425 _CONFIG_VARS['userbase'] = _getuserbase() |
|
930395b2de90
Issue #8084: ensure that the --user directory
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
59508
diff
changeset
|
426 |
|
58450
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
427 if 'srcdir' not in _CONFIG_VARS: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
428 _CONFIG_VARS['srcdir'] = _PROJECT_BASE |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
429 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
430 # Convert srcdir into an absolute path if it appears necessary. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
431 # Normally it is relative to the build directory. However, during |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
432 # testing, for example, we might be running a non-installed python |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
433 # from a different directory. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
434 if _PYTHON_BUILD and os.name == "posix": |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
435 base = _PROJECT_BASE |
|
65229
2ffbfbc0d3cb
Merged revisions 85386-85387,85389 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65210
diff
changeset
|
436 try: |
|
2ffbfbc0d3cb
Merged revisions 85386-85387,85389 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65210
diff
changeset
|
437 cwd = os.getcwd() |
|
2ffbfbc0d3cb
Merged revisions 85386-85387,85389 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65210
diff
changeset
|
438 except OSError: |
|
2ffbfbc0d3cb
Merged revisions 85386-85387,85389 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65210
diff
changeset
|
439 cwd = None |
|
58450
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
440 if (not os.path.isabs(_CONFIG_VARS['srcdir']) and |
|
65229
2ffbfbc0d3cb
Merged revisions 85386-85387,85389 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65210
diff
changeset
|
441 base != cwd): |
|
58450
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
442 # srcdir is relative and we are not in the same directory |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
443 # as the executable. Assume executable is in the build |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
444 # directory and make srcdir absolute. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
445 srcdir = os.path.join(base, _CONFIG_VARS['srcdir']) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
446 _CONFIG_VARS['srcdir'] = os.path.normpath(srcdir) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
447 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
448 if sys.platform == 'darwin': |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
449 kernel_version = os.uname()[2] # Kernel version (8.4.3) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
450 major_version = int(kernel_version.split('.')[0]) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
451 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
452 if major_version < 8: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
453 # On Mac OS X before 10.4, check if -arch and -isysroot |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
454 # are in CFLAGS or LDFLAGS and remove them if they are. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
455 # This is needed when building extensions on a 10.3 system |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
456 # using a universal build of python. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
457 for key in ('LDFLAGS', 'BASECFLAGS', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
458 # a number of derived variables. These need to be |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
459 # patched up as well. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
460 'CFLAGS', 'PY_CFLAGS', 'BLDSHARED'): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
461 flags = _CONFIG_VARS[key] |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
462 flags = re.sub('-arch\s+\w+\s', ' ', flags) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
463 flags = re.sub('-isysroot [^ \t]*', ' ', flags) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
464 _CONFIG_VARS[key] = flags |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
465 else: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
466 # Allow the user to override the architecture flags using |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
467 # an environment variable. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
468 # NOTE: This name was introduced by Apple in OSX 10.5 and |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
469 # is used by several scripting languages distributed with |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
470 # that OS release. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
471 if 'ARCHFLAGS' in os.environ: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
472 arch = os.environ['ARCHFLAGS'] |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
473 for key in ('LDFLAGS', 'BASECFLAGS', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
474 # a number of derived variables. These need to be |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
475 # patched up as well. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
476 'CFLAGS', 'PY_CFLAGS', 'BLDSHARED'): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
477 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
478 flags = _CONFIG_VARS[key] |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
479 flags = re.sub('-arch\s+\w+\s', ' ', flags) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
480 flags = flags + ' ' + arch |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
481 _CONFIG_VARS[key] = flags |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
482 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
483 # If we're on OSX 10.5 or later and the user tries to |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
484 # compiles an extension using an SDK that is not present |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
485 # on the current machine it is better to not use an SDK |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
486 # than to fail. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
487 # |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
488 # The major usecase for this is users using a Python.org |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
489 # binary installer on OSX 10.6: that installer uses |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
490 # the 10.4u SDK, but that SDK is not installed by default |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
491 # when you install Xcode. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
492 # |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
493 CFLAGS = _CONFIG_VARS.get('CFLAGS', '') |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
494 m = re.search('-isysroot\s+(\S+)', CFLAGS) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
495 if m is not None: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
496 sdk = m.group(1) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
497 if not os.path.exists(sdk): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
498 for key in ('LDFLAGS', 'BASECFLAGS', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
499 # a number of derived variables. These need to be |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
500 # patched up as well. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
501 'CFLAGS', 'PY_CFLAGS', 'BLDSHARED'): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
502 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
503 flags = _CONFIG_VARS[key] |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
504 flags = re.sub('-isysroot\s+\S+(\s|$)', ' ', flags) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
505 _CONFIG_VARS[key] = flags |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
506 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
507 if args: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
508 vals = [] |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
509 for name in args: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
510 vals.append(_CONFIG_VARS.get(name)) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
511 return vals |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
512 else: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
513 return _CONFIG_VARS |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
514 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
515 def get_config_var(name): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
516 """Return the value of a single variable using the dictionary returned by |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
517 'get_config_vars()'. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
518 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
519 Equivalent to get_config_vars().get(name) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
520 """ |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
521 return get_config_vars().get(name) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
522 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
523 def get_platform(): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
524 """Return a string that identifies the current platform. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
525 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
526 This is used mainly to distinguish platform-specific build directories and |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
527 platform-specific built distributions. Typically includes the OS name |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
528 and version and the architecture (as supplied by 'os.uname()'), |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
529 although the exact information included depends on the OS; eg. for IRIX |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
530 the architecture isn't particularly important (IRIX only runs on SGI |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
531 hardware), but for Linux the kernel version isn't particularly |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
532 important. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
533 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
534 Examples of returned values: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
535 linux-i586 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
536 linux-alpha (?) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
537 solaris-2.6-sun4u |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
538 irix-5.3 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
539 irix64-6.2 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
540 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
541 Windows will return one of: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
542 win-amd64 (64bit Windows on AMD64 (aka x86_64, Intel64, EM64T, etc) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
543 win-ia64 (64bit Windows on Itanium) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
544 win32 (all others - specifically, sys.platform is returned) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
545 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
546 For other non-POSIX platforms, currently just returns 'sys.platform'. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
547 """ |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
548 import re |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
549 if os.name == 'nt': |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
550 # sniff sys.version for architecture. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
551 prefix = " bit (" |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
552 i = sys.version.find(prefix) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
553 if i == -1: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
554 return sys.platform |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
555 j = sys.version.find(")", i) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
556 look = sys.version[i+len(prefix):j].lower() |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
557 if look == 'amd64': |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
558 return 'win-amd64' |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
559 if look == 'itanium': |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
560 return 'win-ia64' |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
561 return sys.platform |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
562 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
563 if os.name != "posix" or not hasattr(os, 'uname'): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
564 # XXX what about the architecture? NT is Intel or Alpha, |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
565 # Mac OS is M68k or PPC, etc. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
566 return sys.platform |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
567 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
568 # Try to distinguish various flavours of Unix |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
569 osname, host, release, version, machine = os.uname() |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
570 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
571 # Convert the OS name to lowercase, remove '/' characters |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
572 # (to accommodate BSD/OS), and translate spaces (for "Power Macintosh") |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
573 osname = osname.lower().replace('/', '') |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
574 machine = machine.replace(' ', '_') |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
575 machine = machine.replace('/', '-') |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
576 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
577 if osname[:5] == "linux": |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
578 # At least on Linux/Intel, 'machine' is the processor -- |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
579 # i386, etc. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
580 # XXX what about Alpha, SPARC, etc? |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
581 return "%s-%s" % (osname, machine) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
582 elif osname[:5] == "sunos": |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
583 if release[0] >= "5": # SunOS 5 == Solaris 2 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
584 osname = "solaris" |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
585 release = "%d.%s" % (int(release[0]) - 3, release[2:]) |
|
74488
4074439c3894
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:
70143
diff
changeset
|
586 # We can't use "platform.architecture()[0]" because a |
|
4074439c3894
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:
70143
diff
changeset
|
587 # bootstrap problem. We use a dict to get an error |
|
4074439c3894
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:
70143
diff
changeset
|
588 # if some suspicious happens. |
|
4074439c3894
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:
70143
diff
changeset
|
589 bitness = {2147483647:"32bit", 9223372036854775807:"64bit"} |
|
4074439c3894
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:
70143
diff
changeset
|
590 machine += ".%s" % bitness[sys.maxint] |
|
58450
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
591 # fall through to standard osname-release-machine representation |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
592 elif osname[:4] == "irix": # could be "irix64"! |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
593 return "%s-%s" % (osname, release) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
594 elif osname[:3] == "aix": |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
595 return "%s-%s.%s" % (osname, version, release) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
596 elif osname[:6] == "cygwin": |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
597 osname = "cygwin" |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
598 rel_re = re.compile (r'[\d.]+') |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
599 m = rel_re.match(release) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
600 if m: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
601 release = m.group() |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
602 elif osname[:6] == "darwin": |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
603 # |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
604 # For our purposes, we'll assume that the system version from |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
605 # distutils' perspective is what MACOSX_DEPLOYMENT_TARGET is set |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
606 # to. This makes the compatibility story a bit more sane because the |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
607 # machine is going to compile and link as if it were |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
608 # MACOSX_DEPLOYMENT_TARGET. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
609 cfgvars = get_config_vars() |
|
70143
9874f213edb2
Issue #9516: avoid errors in sysconfig when MACOSX_DEPLOYMENT_TARGET is set in shell.
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
69767
diff
changeset
|
610 macver = cfgvars.get('MACOSX_DEPLOYMENT_TARGET') |
|
58450
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
611 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
612 if 1: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
613 # Always calculate the release of the running machine, |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
614 # needed to determine if we can build fat binaries or not. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
615 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
616 macrelease = macver |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
617 # Get the system version. Reading this plist is a documented |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
618 # way to get the system version (see the documentation for |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
619 # the Gestalt Manager) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
620 try: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
621 f = open('/System/Library/CoreServices/SystemVersion.plist') |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
622 except IOError: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
623 # We're on a plain darwin box, fall back to the default |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
624 # behaviour. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
625 pass |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
626 else: |
|
66008
a17b21c27a33
Merged revisions 86223-86224,86226,86234 via svnmerge from
Éric Araujo <merwok@netwok.org>
parents:
65333
diff
changeset
|
627 try: |
|
a17b21c27a33
Merged revisions 86223-86224,86226,86234 via svnmerge from
Éric Araujo <merwok@netwok.org>
parents:
65333
diff
changeset
|
628 m = re.search( |
|
a17b21c27a33
Merged revisions 86223-86224,86226,86234 via svnmerge from
Éric Araujo <merwok@netwok.org>
parents:
65333
diff
changeset
|
629 r'<key>ProductUserVisibleVersion</key>\s*' + |
|
a17b21c27a33
Merged revisions 86223-86224,86226,86234 via svnmerge from
Éric Araujo <merwok@netwok.org>
parents:
65333
diff
changeset
|
630 r'<string>(.*?)</string>', f.read()) |
|
a17b21c27a33
Merged revisions 86223-86224,86226,86234 via svnmerge from
Éric Araujo <merwok@netwok.org>
parents:
65333
diff
changeset
|
631 if m is not None: |
|
a17b21c27a33
Merged revisions 86223-86224,86226,86234 via svnmerge from
Éric Araujo <merwok@netwok.org>
parents:
65333
diff
changeset
|
632 macrelease = '.'.join(m.group(1).split('.')[:2]) |
|
a17b21c27a33
Merged revisions 86223-86224,86226,86234 via svnmerge from
Éric Araujo <merwok@netwok.org>
parents:
65333
diff
changeset
|
633 # else: fall back to the default behaviour |
|
a17b21c27a33
Merged revisions 86223-86224,86226,86234 via svnmerge from
Éric Araujo <merwok@netwok.org>
parents:
65333
diff
changeset
|
634 finally: |
|
a17b21c27a33
Merged revisions 86223-86224,86226,86234 via svnmerge from
Éric Araujo <merwok@netwok.org>
parents:
65333
diff
changeset
|
635 f.close() |
|
58450
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
636 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
637 if not macver: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
638 macver = macrelease |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
639 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
640 if macver: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
641 release = macver |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
642 osname = "macosx" |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
643 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
644 if (macrelease + '.') >= '10.4.' and \ |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
645 '-arch' in get_config_vars().get('CFLAGS', '').strip(): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
646 # The universal build will build fat binaries, but not on |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
647 # systems before 10.4 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
648 # |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
649 # Try to detect 4-way universal builds, those have machine-type |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
650 # 'universal' instead of 'fat'. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
651 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
652 machine = 'fat' |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
653 cflags = get_config_vars().get('CFLAGS') |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
654 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
655 archs = re.findall('-arch\s+(\S+)', cflags) |
|
62945
0b071e1efd41
Fix for issue #9164: with this patch sysconfig and distuls don't break
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
61764
diff
changeset
|
656 archs = tuple(sorted(set(archs))) |
|
58450
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
657 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
658 if len(archs) == 1: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
659 machine = archs[0] |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
660 elif archs == ('i386', 'ppc'): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
661 machine = 'fat' |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
662 elif archs == ('i386', 'x86_64'): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
663 machine = 'intel' |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
664 elif archs == ('i386', 'ppc', 'x86_64'): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
665 machine = 'fat3' |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
666 elif archs == ('ppc64', 'x86_64'): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
667 machine = 'fat64' |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
668 elif archs == ('i386', 'ppc', 'ppc64', 'x86_64'): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
669 machine = 'universal' |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
670 else: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
671 raise ValueError( |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
672 "Don't know machine value for archs=%r"%(archs,)) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
673 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
674 elif machine == 'i386': |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
675 # On OSX the machine type returned by uname is always the |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
676 # 32-bit variant, even if the executable architecture is |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
677 # the 64-bit variant |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
678 if sys.maxint >= 2**32: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
679 machine = 'x86_64' |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
680 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
681 elif machine in ('PowerPC', 'Power_Macintosh'): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
682 # Pick a sane name for the PPC architecture. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
683 # See 'i386' case |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
684 if sys.maxint >= 2**32: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
685 machine = 'ppc64' |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
686 else: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
687 machine = 'ppc' |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
688 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
689 return "%s-%s-%s" % (osname, release, machine) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
690 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
691 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
692 def get_python_version(): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
693 return _PY_VERSION_SHORT |
