107 lines
2.9 KiB
Python
107 lines
2.9 KiB
Python
|
"""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$"
|
||
|
|
||
|
|
||
|
def _init_posix():
|
||
|
import os
|
||
|
import re
|
||
|
import sys
|
||
|
|
||
|
g = globals()
|
||
|
|
||
|
version = sys.version[:3]
|
||
|
config_dir = os.path.join(
|
||
|
sys.exec_prefix, "lib", "python" + version, "config")
|
||
|
|
||
|
# load the installed config.h:
|
||
|
define_rx = re.compile("#define ([A-Z][A-Z0-9_]+) (.*)\n")
|
||
|
undef_rx = re.compile("/[*] #undef ([A-Z][A-Z0-9_]+) [*]/\n")
|
||
|
fp = open(os.path.join(config_dir, "config.h"))
|
||
|
|
||
|
while 1:
|
||
|
line = fp.readline()
|
||
|
if not line:
|
||
|
break
|
||
|
m = define_rx.match(line)
|
||
|
if m:
|
||
|
n, v = m.group(1, 2)
|
||
|
if v == "1":
|
||
|
g[n] = 1
|
||
|
else:
|
||
|
g[n] = v
|
||
|
else:
|
||
|
m = undef_rx.match(line)
|
||
|
if m:
|
||
|
g[m.group(1)] = 0
|
||
|
|
||
|
# load the installed Makefile.pre.in:
|
||
|
variable_rx = re.compile("([a-zA-Z][a-zA-Z0-9_]+)\s*=\s*(.*)\n")
|
||
|
done = {}
|
||
|
notdone = {}
|
||
|
fp = open(os.path.join(config_dir, "Makefile"))
|
||
|
|
||
|
while 1:
|
||
|
line = fp.readline()
|
||
|
if not line:
|
||
|
break
|
||
|
m = variable_rx.match(line)
|
||
|
if m:
|
||
|
n, v = m.group(1, 2)
|
||
|
if "$" in v:
|
||
|
notdone[n] = v
|
||
|
else:
|
||
|
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:
|
||
|
done[name] = 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:
|
||
|
done[name] = value
|
||
|
del notdone[name]
|
||
|
else:
|
||
|
del notdone[name]
|
||
|
|
||
|
# save the results in the global dictionary
|
||
|
g.update(done)
|
||
|
|
||
|
|
||
|
import os
|
||
|
exec "_init_%s()" % os.name
|
||
|
del os
|
||
|
del _init_posix
|