1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
"""Prototype sysconfig module that loads information when run as a script,
but only defines constants when imported.
This should be run as a script as one of the last steps of the Python
installation process.
Written by: Fred L. Drake, Jr.
Email: <fdrake@acm.org>
Initial date: 17-Dec-1998
"""
__version__ = "$Revision$"
import os
import re
import string
import sys
def get_config_h_filename():
return os.path.join(sys.exec_prefix, "lib", "python" + sys.version[:3],
"config", "config.h")
def get_makefile_filename():
return os.path.join(sys.exec_prefix, "lib", "python" + sys.version[:3],
"config", "Makefile")
def parse_config_h(fp, g=None):
if g is None:
g = {}
define_rx = re.compile("#define ([A-Z][A-Z0-9_]+) (.*)\n")
undef_rx = re.compile("/[*] #undef ([A-Z][A-Z0-9_]+) [*]/\n")
#
while 1:
line = fp.readline()
if not line:
break
m = define_rx.match(line)
if m:
n, v = m.group(1, 2)
try: v = string.atoi(v)
except ValueError: pass
g[n] = v
else:
m = undef_rx.match(line)
if m:
g[m.group(1)] = 0
return g
def parse_makefile(fp, g=None):
if g is None:
g = {}
variable_rx = re.compile("([a-zA-Z][a-zA-Z0-9_]+)\s*=\s*(.*)\n")
done = {}
notdone = {}
#
while 1:
line = fp.readline()
if not line:
break
m = variable_rx.match(line)
if m:
n, v = m.group(1, 2)
v = string.strip(v)
if "$" in v:
notdone[n] = v
else:
try: v = string.atoi(v)
except ValueError: pass
done[n] = v
# do variable interpolation here
findvar1_rx = re.compile(r"\$\(([A-Za-z][A-Za-z0-9_]*)\)")
findvar2_rx = re.compile(r"\${([A-Za-z][A-Za-z0-9_]*)}")
while notdone:
for name in notdone.keys():
value = notdone[name]
m = findvar1_rx.search(value)
if not m:
m = findvar2_rx.search(value)
if m:
n = m.group(1)
if done.has_key(n):
after = value[m.end():]
value = value[:m.start()] + done[n] + after
if "$" in after:
notdone[name] = value
else:
try: value = string.atoi(value)
except ValueError: pass
done[name] = string.strip(value)
del notdone[name]
elif notdone.has_key(n):
# get it on a subsequent round
pass
else:
done[n] = ""
after = value[m.end():]
value = value[:m.start()] + after
if "$" in after:
notdone[name] = value
else:
try: value = string.atoi(value)
except ValueError: pass
done[name] = string.strip(value)
del notdone[name]
else:
# bogus variable reference; just drop it since we can't deal
del notdone[name]
# save the results in the global dictionary
g.update(done)
return g
def _init_posix():
g = globals()
# load the installed config.h:
parse_config_h(open(get_config_h_filename()), g)
# load the installed Makefile.pre.in:
parse_makefile(open(get_makefile_filename()), g)
try:
exec "_init_" + os.name
except NameError:
# not needed for this platform
pass
else:
exec "_init_%s()" % os.name
del _init_posix
|