Mercurial > cpython-lru_cache-weakref
annotate Lib/sysconfig.py @ 58765:2ba7677bfa95 legacy-trunk
testCopysign was defined twice in test_math; combine the definitions
| author | Mark Dickinson <dickinsm@gmail.com> |
|---|---|
| date | Sat, 06 Feb 2010 23:11:25 +0000 |
| parents | 992cae246a0c |
| children | adbb37d3d0e5 |
| 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 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
6 from os.path import pardir, abspath |
|
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': { |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
50 'stdlib': '{userbase}/lib/python/{py_version_short}', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
51 'platstdlib': '{userbase}/lib/python/{py_version_short}', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
52 'purelib': '{userbase}/lib/python/{py_version_short}/site-packages', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
53 'platlib': '{userbase}/lib/python/{py_version_short}/site-packages', |
|
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': { |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
68 'stdlib': '{userbase}/lib/python/{py_version_short}', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
69 'platstdlib': '{userbase}/lib/python/{py_version_short}', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
70 'purelib': '{userbase}/lib/python/{py_version_short}/site-packages', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
71 'platlib': '{userbase}/lib/python/{py_version_short}/site-packages', |
|
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 }, |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
76 } |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
77 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
78 _SCHEME_KEYS = ('stdlib', 'platstdlib', 'purelib', 'platlib', 'include', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
79 'scripts', 'data') |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
80 _PY_VERSION = sys.version.split()[0] |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
81 _PY_VERSION_SHORT = sys.version[:3] |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
82 _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
|
83 _PREFIX = os.path.normpath(sys.prefix) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
84 _EXEC_PREFIX = os.path.normpath(sys.exec_prefix) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
85 _CONFIG_VARS = None |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
86 _USER_BASE = None |
|
58496
6208836fedf9
switched the call order so this call works without suffering from issue #7774
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58450
diff
changeset
|
87 _PROJECT_BASE = abspath(os.path.dirname(sys.executable)) |
|
58450
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
88 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
89 if os.name == "nt" and "pcbuild" in _PROJECT_BASE[-8:].lower(): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
90 _PROJECT_BASE = abspath(os.path.join(_PROJECT_BASE, pardir)) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
91 # PC/VS7.1 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
92 if os.name == "nt" and "\\pc\\v" in _PROJECT_BASE[-10:].lower(): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
93 _PROJECT_BASE = abspath(os.path.join(_PROJECT_BASE, pardir, pardir)) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
94 # PC/AMD64 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
95 if os.name == "nt" and "\\pcbuild\\amd64" in _PROJECT_BASE[-14:].lower(): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
96 _PROJECT_BASE = abspath(os.path.join(_PROJECT_BASE, pardir, pardir)) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
97 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
98 def is_python_build(): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
99 for fn in ("Setup.dist", "Setup.local"): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
100 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
|
101 return True |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
102 return False |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
103 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
104 _PYTHON_BUILD = is_python_build() |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
105 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
106 if _PYTHON_BUILD: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
107 for scheme in ('posix_prefix', 'posix_home'): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
108 _INSTALL_SCHEMES[scheme]['include'] = '{projectbase}/Include' |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
109 _INSTALL_SCHEMES[scheme]['platinclude'] = '{srcdir}' |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
110 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
111 def _subst_vars(s, local_vars): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
112 try: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
113 return s.format(**local_vars) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
114 except KeyError: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
115 try: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
116 return s.format(**os.environ) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
117 except KeyError, var: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
118 raise AttributeError('{%s}' % var) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
119 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
120 def _extend_dict(target_dict, other_dict): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
121 target_keys = target_dict.keys() |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
122 for key, value in other_dict.items(): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
123 if key in target_keys: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
124 continue |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
125 target_dict[key] = value |
|
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 def _expand_vars(scheme, vars): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
128 res = {} |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
129 if vars is None: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
130 vars = {} |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
131 _extend_dict(vars, get_config_vars()) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
132 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
133 for key, value in _INSTALL_SCHEMES[scheme].items(): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
134 if os.name in ('posix', 'nt'): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
135 value = os.path.expanduser(value) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
136 res[key] = os.path.normpath(_subst_vars(value, vars)) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
137 return res |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
138 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
139 def _get_default_scheme(): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
140 if os.name == 'posix': |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
141 # the default scheme for posix is posix_prefix |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
142 return 'posix_prefix' |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
143 return os.name |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
144 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
145 def _getuserbase(): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
146 env_base = os.environ.get("PYTHONUSERBASE", None) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
147 def joinuser(*args): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
148 return os.path.expanduser(os.path.join(*args)) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
149 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
150 # what about 'os2emx', 'riscos' ? |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
151 if os.name == "nt": |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
152 base = os.environ.get("APPDATA") or "~" |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
153 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
|
154 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
155 return env_base if env_base else joinuser("~", ".local") |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
156 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
157 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
158 def _parse_makefile(filename, vars=None): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
159 """Parse a Makefile-style file. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
160 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
161 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
|
162 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
|
163 used instead of a new dictionary. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
164 """ |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
165 import re |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
166 # Regexes needed for parsing Makefile (and similar syntaxes, |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
167 # like old-style Setup files). |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
168 _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
|
169 _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
|
170 _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
|
171 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
172 if vars is None: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
173 vars = {} |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
174 done = {} |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
175 notdone = {} |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
176 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
177 with open(filename) as f: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
178 lines = f.readlines() |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
179 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
180 for line in lines: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
181 if line.startswith('#') or line.strip() == '': |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
182 continue |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
183 m = _variable_rx.match(line) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
184 if m: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
185 n, v = m.group(1, 2) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
186 v = v.strip() |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
187 # `$$' is a literal `$' in make |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
188 tmpv = v.replace('$$', '') |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
189 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
190 if "$" in tmpv: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
191 notdone[n] = v |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
192 else: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
193 try: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
194 v = int(v) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
195 except ValueError: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
196 # insert literal `$' |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
197 done[n] = v.replace('$$', '$') |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
198 else: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
199 done[n] = v |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
200 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
201 # do variable interpolation here |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
202 while notdone: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
203 for name in notdone.keys(): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
204 value = notdone[name] |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
205 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
|
206 if m: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
207 n = m.group(1) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
208 found = True |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
209 if n in done: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
210 item = str(done[n]) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
211 elif n in notdone: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
212 # get it on a subsequent round |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
213 found = False |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
214 elif n in os.environ: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
215 # do it like make: fall back to environment |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
216 item = os.environ[n] |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
217 else: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
218 done[n] = item = "" |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
219 if found: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
220 after = value[m.end():] |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
221 value = value[:m.start()] + item + after |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
222 if "$" in after: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
223 notdone[name] = value |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
224 else: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
225 try: value = int(value) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
226 except ValueError: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
227 done[name] = value.strip() |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
228 else: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
229 done[name] = value |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
230 del notdone[name] |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
231 else: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
232 # 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
|
233 del notdone[name] |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
234 # save the results in the global dictionary |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
235 vars.update(done) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
236 return vars |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
237 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
238 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
239 def _get_makefile_filename(): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
240 if _PYTHON_BUILD: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
241 return os.path.join(_PROJECT_BASE, "Makefile") |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
242 return os.path.join(get_path('stdlib'), "config", "Makefile") |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
243 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
244 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
245 def _init_posix(vars): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
246 """Initialize the module as appropriate for POSIX systems.""" |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
247 # load the installed Makefile: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
248 makefile = _get_makefile_filename() |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
249 try: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
250 _parse_makefile(makefile, vars) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
251 except IOError, e: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
252 msg = "invalid Python installation: unable to open %s" % makefile |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
253 if hasattr(e, "strerror"): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
254 msg = msg + " (%s)" % e.strerror |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
255 raise IOError(msg) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
256 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
257 # load the installed pyconfig.h: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
258 config_h = get_config_h_filename() |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
259 try: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
260 parse_config_h(open(config_h), vars) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
261 except IOError, e: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
262 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
|
263 if hasattr(e, "strerror"): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
264 msg = msg + " (%s)" % e.strerror |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
265 raise IOError(msg) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
266 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
267 # On MacOSX we need to check the setting of the environment variable |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
268 # MACOSX_DEPLOYMENT_TARGET: configure bases some choices on it so |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
269 # it needs to be compatible. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
270 # If it isn't set we set it to the configure-time value |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
271 if sys.platform == 'darwin' and 'MACOSX_DEPLOYMENT_TARGET' in vars: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
272 cfg_target = vars['MACOSX_DEPLOYMENT_TARGET'] |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
273 cur_target = os.getenv('MACOSX_DEPLOYMENT_TARGET', '') |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
274 if cur_target == '': |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
275 cur_target = cfg_target |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
276 os.putenv('MACOSX_DEPLOYMENT_TARGET', cfg_target) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
277 elif map(int, cfg_target.split('.')) > map(int, cur_target.split('.')): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
278 msg = ('$MACOSX_DEPLOYMENT_TARGET mismatch: now "%s" but "%s" ' |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
279 'during configure' % (cur_target, cfg_target)) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
280 raise IOError(msg) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
281 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
282 # 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
|
283 # -- 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
|
284 # the scripts are in another directory. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
285 if _PYTHON_BUILD: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
286 vars['LDSHARED'] = vars['BLDSHARED'] |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
287 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
288 def _init_non_posix(vars): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
289 """Initialize the module as appropriate for NT""" |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
290 # set basic install directories |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
291 vars['LIBDEST'] = get_path('stdlib') |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
292 vars['BINLIBDEST'] = get_path('platstdlib') |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
293 vars['INCLUDEPY'] = get_path('include') |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
294 vars['SO'] = '.pyd' |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
295 vars['EXE'] = '.exe' |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
296 vars['VERSION'] = _PY_VERSION_SHORT_NO_DOT |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
297 vars['BINDIR'] = os.path.dirname(os.path.abspath(sys.executable)) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
298 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
299 # |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
300 # public APIs |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
301 # |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
302 |
|
58646
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
303 |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
304 def parse_config_h(fp, vars=None): |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
305 """Parse a config.h-style file. |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
306 |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
307 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
|
308 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
|
309 used instead of a new dictionary. |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
310 """ |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
311 import re |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
312 if vars is None: |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
313 vars = {} |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
314 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
|
315 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
|
316 |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
317 while True: |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
318 line = fp.readline() |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
319 if not line: |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
320 break |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
321 m = define_rx.match(line) |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
322 if m: |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
323 n, v = m.group(1, 2) |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
324 try: v = int(v) |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
325 except ValueError: pass |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
326 vars[n] = v |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
327 else: |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
328 m = undef_rx.match(line) |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
329 if m: |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
330 vars[m.group(1)] = 0 |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
331 return vars |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
332 |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
333 def get_config_h_filename(): |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
334 """Returns the path of pyconfig.h.""" |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
335 if _PYTHON_BUILD: |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
336 if os.name == "nt": |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
337 inc_dir = os.path.join(_PROJECT_BASE, "PC") |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
338 else: |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
339 inc_dir = _PROJECT_BASE |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
340 else: |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
341 inc_dir = get_path('platinclude') |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
342 return os.path.join(inc_dir, 'pyconfig.h') |
|
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
343 |
|
58450
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
344 def get_scheme_names(): |
|
58646
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
345 """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
|
346 schemes = _INSTALL_SCHEMES.keys() |
|
992cae246a0c
sysconfig.get_scheme_names now returns a sorted tuple
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58646
diff
changeset
|
347 schemes.sort() |
|
992cae246a0c
sysconfig.get_scheme_names now returns a sorted tuple
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58646
diff
changeset
|
348 return tuple(schemes) |
|
58450
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
349 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
350 def get_path_names(): |
|
58646
f3f08ee83c55
module reorganization + missing doctests
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
58496
diff
changeset
|
351 """Returns a tuple containing the paths names.""" |
|
58450
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
352 return _SCHEME_KEYS |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
353 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
354 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
|
355 """Returns a mapping containing an install scheme. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
356 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
357 ``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
|
358 return the default scheme for the current platform. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
359 """ |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
360 if expand: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
361 return _expand_vars(scheme, vars) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
362 else: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
363 return _INSTALL_SCHEMES[scheme] |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
364 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
365 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
|
366 """Returns a path corresponding to the scheme. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
367 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
368 ``scheme`` is the install scheme name. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
369 """ |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
370 return get_paths(scheme, vars, expand)[name] |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
371 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
372 def get_config_vars(*args): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
373 """With no arguments, return a dictionary of all configuration |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
374 variables relevant for the current platform. |
|
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 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
|
377 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
|
378 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
379 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
|
380 each argument in the configuration variable dictionary. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
381 """ |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
382 import re |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
383 global _CONFIG_VARS |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
384 if _CONFIG_VARS is None: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
385 _CONFIG_VARS = {} |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
386 # 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
|
387 # 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
|
388 # Distutils. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
389 _CONFIG_VARS['prefix'] = _PREFIX |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
390 _CONFIG_VARS['exec_prefix'] = _EXEC_PREFIX |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
391 _CONFIG_VARS['py_version'] = _PY_VERSION |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
392 _CONFIG_VARS['py_version_short'] = _PY_VERSION_SHORT |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
393 _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
|
394 _CONFIG_VARS['base'] = _PREFIX |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
395 _CONFIG_VARS['platbase'] = _EXEC_PREFIX |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
396 _CONFIG_VARS['userbase'] = _getuserbase() |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
397 _CONFIG_VARS['projectbase'] = _PROJECT_BASE |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
398 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
399 if os.name in ('nt', 'os2'): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
400 _init_non_posix(_CONFIG_VARS) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
401 if os.name == 'posix': |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
402 _init_posix(_CONFIG_VARS) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
403 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
404 if 'srcdir' not in _CONFIG_VARS: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
405 _CONFIG_VARS['srcdir'] = _PROJECT_BASE |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
406 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
407 # 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
|
408 # 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
|
409 # 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
|
410 # from a different directory. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
411 if _PYTHON_BUILD and os.name == "posix": |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
412 base = _PROJECT_BASE |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
413 if (not os.path.isabs(_CONFIG_VARS['srcdir']) and |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
414 base != os.getcwd()): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
415 # 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
|
416 # as the executable. Assume executable is in the build |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
417 # directory and make srcdir absolute. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
418 srcdir = os.path.join(base, _CONFIG_VARS['srcdir']) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
419 _CONFIG_VARS['srcdir'] = os.path.normpath(srcdir) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
420 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
421 if sys.platform == 'darwin': |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
422 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
|
423 major_version = int(kernel_version.split('.')[0]) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
424 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
425 if major_version < 8: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
426 # 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
|
427 # 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
|
428 # 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
|
429 # using a universal build of python. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
430 for key in ('LDFLAGS', 'BASECFLAGS', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
431 # a number of derived variables. These need to be |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
432 # patched up as well. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
433 'CFLAGS', 'PY_CFLAGS', 'BLDSHARED'): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
434 flags = _CONFIG_VARS[key] |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
435 flags = re.sub('-arch\s+\w+\s', ' ', flags) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
436 flags = re.sub('-isysroot [^ \t]*', ' ', flags) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
437 _CONFIG_VARS[key] = flags |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
438 else: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
439 # Allow the user to override the architecture flags using |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
440 # an environment variable. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
441 # 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
|
442 # is used by several scripting languages distributed with |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
443 # that OS release. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
444 if 'ARCHFLAGS' in os.environ: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
445 arch = os.environ['ARCHFLAGS'] |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
446 for key in ('LDFLAGS', 'BASECFLAGS', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
447 # a number of derived variables. These need to be |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
448 # patched up as well. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
449 'CFLAGS', 'PY_CFLAGS', 'BLDSHARED'): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
450 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
451 flags = _CONFIG_VARS[key] |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
452 flags = re.sub('-arch\s+\w+\s', ' ', flags) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
453 flags = flags + ' ' + arch |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
454 _CONFIG_VARS[key] = flags |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
455 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
456 # 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
|
457 # 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
|
458 # 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
|
459 # than to fail. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
460 # |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
461 # 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
|
462 # binary installer on OSX 10.6: that installer uses |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
463 # 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
|
464 # when you install Xcode. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
465 # |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
466 CFLAGS = _CONFIG_VARS.get('CFLAGS', '') |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
467 m = re.search('-isysroot\s+(\S+)', CFLAGS) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
468 if m is not None: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
469 sdk = m.group(1) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
470 if not os.path.exists(sdk): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
471 for key in ('LDFLAGS', 'BASECFLAGS', |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
472 # a number of derived variables. These need to be |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
473 # patched up as well. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
474 'CFLAGS', 'PY_CFLAGS', 'BLDSHARED'): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
475 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
476 flags = _CONFIG_VARS[key] |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
477 flags = re.sub('-isysroot\s+\S+(\s|$)', ' ', flags) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
478 _CONFIG_VARS[key] = flags |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
479 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
480 if args: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
481 vals = [] |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
482 for name in args: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
483 vals.append(_CONFIG_VARS.get(name)) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
484 return vals |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
485 else: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
486 return _CONFIG_VARS |
|
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 def get_config_var(name): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
489 """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
|
490 'get_config_vars()'. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
491 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
492 Equivalent to get_config_vars().get(name) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
493 """ |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
494 return get_config_vars().get(name) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
495 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
496 def get_platform(): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
497 """Return a string that identifies the current platform. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
498 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
499 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
|
500 platform-specific built distributions. Typically includes the OS name |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
501 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
|
502 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
|
503 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
|
504 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
|
505 important. |
|
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 Examples of returned values: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
508 linux-i586 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
509 linux-alpha (?) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
510 solaris-2.6-sun4u |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
511 irix-5.3 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
512 irix64-6.2 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
513 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
514 Windows will return one of: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
515 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
|
516 win-ia64 (64bit Windows on Itanium) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
517 win32 (all others - specifically, sys.platform is returned) |
|
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 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
|
520 """ |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
521 import re |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
522 if os.name == 'nt': |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
523 # sniff sys.version for architecture. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
524 prefix = " bit (" |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
525 i = sys.version.find(prefix) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
526 if i == -1: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
527 return sys.platform |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
528 j = sys.version.find(")", i) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
529 look = sys.version[i+len(prefix):j].lower() |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
530 if look == 'amd64': |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
531 return 'win-amd64' |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
532 if look == 'itanium': |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
533 return 'win-ia64' |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
534 return sys.platform |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
535 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
536 if os.name != "posix" or not hasattr(os, 'uname'): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
537 # 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
|
538 # Mac OS is M68k or PPC, etc. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
539 return sys.platform |
|
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 # Try to distinguish various flavours of Unix |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
542 osname, host, release, version, machine = os.uname() |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
543 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
544 # Convert the OS name to lowercase, remove '/' characters |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
545 # (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
|
546 osname = osname.lower().replace('/', '') |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
547 machine = machine.replace(' ', '_') |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
548 machine = machine.replace('/', '-') |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
549 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
550 if osname[:5] == "linux": |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
551 # At least on Linux/Intel, 'machine' is the processor -- |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
552 # i386, etc. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
553 # XXX what about Alpha, SPARC, etc? |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
554 return "%s-%s" % (osname, machine) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
555 elif osname[:5] == "sunos": |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
556 if release[0] >= "5": # SunOS 5 == Solaris 2 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
557 osname = "solaris" |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
558 release = "%d.%s" % (int(release[0]) - 3, release[2:]) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
559 # fall through to standard osname-release-machine representation |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
560 elif osname[:4] == "irix": # could be "irix64"! |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
561 return "%s-%s" % (osname, release) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
562 elif osname[:3] == "aix": |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
563 return "%s-%s.%s" % (osname, version, release) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
564 elif osname[:6] == "cygwin": |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
565 osname = "cygwin" |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
566 rel_re = re.compile (r'[\d.]+') |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
567 m = rel_re.match(release) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
568 if m: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
569 release = m.group() |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
570 elif osname[:6] == "darwin": |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
571 # |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
572 # 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
|
573 # distutils' perspective is what MACOSX_DEPLOYMENT_TARGET is set |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
574 # 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
|
575 # 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
|
576 # MACOSX_DEPLOYMENT_TARGET. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
577 cfgvars = get_config_vars() |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
578 macver = os.environ.get('MACOSX_DEPLOYMENT_TARGET') |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
579 if not macver: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
580 macver = cfgvars.get('MACOSX_DEPLOYMENT_TARGET') |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
581 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
582 if 1: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
583 # Always calculate the release of the running machine, |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
584 # 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
|
585 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
586 macrelease = macver |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
587 # 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
|
588 # 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
|
589 # the Gestalt Manager) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
590 try: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
591 f = open('/System/Library/CoreServices/SystemVersion.plist') |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
592 except IOError: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
593 # 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
|
594 # behaviour. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
595 pass |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
596 else: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
597 m = re.search( |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
598 r'<key>ProductUserVisibleVersion</key>\s*' + |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
599 r'<string>(.*?)</string>', f.read()) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
600 f.close() |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
601 if m is not None: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
602 macrelease = '.'.join(m.group(1).split('.')[:2]) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
603 # else: fall back to the default behaviour |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
604 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
605 if not macver: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
606 macver = macrelease |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
607 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
608 if macver: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
609 release = macver |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
610 osname = "macosx" |
|
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 (macrelease + '.') >= '10.4.' and \ |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
613 '-arch' in get_config_vars().get('CFLAGS', '').strip(): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
614 # 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
|
615 # systems before 10.4 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
616 # |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
617 # 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
|
618 # 'universal' instead of 'fat'. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
619 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
620 machine = 'fat' |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
621 cflags = get_config_vars().get('CFLAGS') |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
622 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
623 archs = re.findall('-arch\s+(\S+)', cflags) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
624 archs.sort() |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
625 archs = tuple(archs) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
626 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
627 if len(archs) == 1: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
628 machine = archs[0] |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
629 elif archs == ('i386', 'ppc'): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
630 machine = 'fat' |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
631 elif archs == ('i386', 'x86_64'): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
632 machine = 'intel' |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
633 elif archs == ('i386', 'ppc', 'x86_64'): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
634 machine = 'fat3' |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
635 elif archs == ('ppc64', 'x86_64'): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
636 machine = 'fat64' |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
637 elif archs == ('i386', 'ppc', 'ppc64', 'x86_64'): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
638 machine = 'universal' |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
639 else: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
640 raise ValueError( |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
641 "Don't know machine value for archs=%r"%(archs,)) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
642 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
643 elif machine == 'i386': |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
644 # 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
|
645 # 32-bit variant, even if the executable architecture is |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
646 # the 64-bit variant |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
647 if sys.maxint >= 2**32: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
648 machine = 'x86_64' |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
649 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
650 elif machine in ('PowerPC', 'Power_Macintosh'): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
651 # Pick a sane name for the PPC architecture. |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
652 # See 'i386' case |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
653 if sys.maxint >= 2**32: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
654 machine = 'ppc64' |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
655 else: |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
656 machine = 'ppc' |
|
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 return "%s-%s-%s" % (osname, release, machine) |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
659 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
660 |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
661 def get_python_version(): |
|
fa69e891edf4
taking sysconfig out of distutils
Tarek Ziadé <ziade.tarek@gmail.com>
parents:
diff
changeset
|
662 return _PY_VERSION_SHORT |
