summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorGreg Ward <gward@python.net>1998-12-18 23:46:33 (GMT)
committerGreg Ward <gward@python.net>1998-12-18 23:46:33 (GMT)
commit1190ee3d033eac619c06fb0feb6e2a4e5ebce078 (patch)
tree309a7981919fdfce4ce9f9778b460ba4a7af37c8 /Lib
parenta37e244536409729997cc40dea1d7b28b878836c (diff)
downloadcpython-1190ee3d033eac619c06fb0feb6e2a4e5ebce078.zip
cpython-1190ee3d033eac619c06fb0feb6e2a4e5ebce078.tar.gz
cpython-1190ee3d033eac619c06fb0feb6e2a4e5ebce078.tar.bz2
Fred's sysconfig module.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/distutils/sysconfig.py106
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