diff options
author | Greg Ward <gward@python.net> | 1998-12-18 23:46:33 (GMT) |
---|---|---|
committer | Greg Ward <gward@python.net> | 1998-12-18 23:46:33 (GMT) |
commit | 1190ee3d033eac619c06fb0feb6e2a4e5ebce078 (patch) | |
tree | 309a7981919fdfce4ce9f9778b460ba4a7af37c8 /Lib | |
parent | a37e244536409729997cc40dea1d7b28b878836c (diff) | |
download | cpython-1190ee3d033eac619c06fb0feb6e2a4e5ebce078.zip cpython-1190ee3d033eac619c06fb0feb6e2a4e5ebce078.tar.gz cpython-1190ee3d033eac619c06fb0feb6e2a4e5ebce078.tar.bz2 |
Fred's sysconfig module.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/distutils/sysconfig.py | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py new file mode 100644 index 0000000..b5fe187 --- /dev/null +++ b/Lib/distutils/sysconfig.py @@ -0,0 +1,106 @@ +"""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 |