symbian-qemu-0.9.1-12/python-2.6.1/Tools/freeze/parsesetup.py
changeset 1 2fb8b9db1c86
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symbian-qemu-0.9.1-12/python-2.6.1/Tools/freeze/parsesetup.py	Fri Jul 31 15:01:17 2009 +0100
@@ -0,0 +1,112 @@
+# Parse Makefiles and Python Setup(.in) files.
+
+import re
+
+
+# Extract variable definitions from a Makefile.
+# Return a dictionary mapping names to values.
+# May raise IOError.
+
+makevardef = re.compile('^([a-zA-Z0-9_]+)[ \t]*=(.*)')
+
+def getmakevars(filename):
+    variables = {}
+    fp = open(filename)
+    pendingline = ""
+    try:
+        while 1:
+            line = fp.readline()
+            if pendingline:
+                line = pendingline + line
+                pendingline = ""
+            if not line:
+                break
+            if line.endswith('\\\n'):
+                pendingline = line[:-2]
+            matchobj = makevardef.match(line)
+            if not matchobj:
+                continue
+            (name, value) = matchobj.group(1, 2)
+            # Strip trailing comment
+            i = value.find('#')
+            if i >= 0:
+                value = value[:i]
+            value = value.strip()
+            variables[name] = value
+    finally:
+        fp.close()
+    return variables
+
+
+# Parse a Python Setup(.in) file.
+# Return two dictionaries, the first mapping modules to their
+# definitions, the second mapping variable names to their values.
+# May raise IOError.
+
+setupvardef = re.compile('^([a-zA-Z0-9_]+)=(.*)')
+
+def getsetupinfo(filename):
+    modules = {}
+    variables = {}
+    fp = open(filename)
+    pendingline = ""
+    try:
+        while 1:
+            line = fp.readline()
+            if pendingline:
+                line = pendingline + line
+                pendingline = ""
+            if not line:
+                break
+            # Strip comments
+            i = line.find('#')
+            if i >= 0:
+                line = line[:i]
+            if line.endswith('\\\n'):
+                pendingline = line[:-2]
+                continue
+            matchobj = setupvardef.match(line)
+            if matchobj:
+                (name, value) = matchobj.group(1, 2)
+                variables[name] = value.strip()
+            else:
+                words = line.split()
+                if words:
+                    modules[words[0]] = words[1:]
+    finally:
+        fp.close()
+    return modules, variables
+
+
+# Test the above functions.
+
+def test():
+    import sys
+    import os
+    if not sys.argv[1:]:
+        print 'usage: python parsesetup.py Makefile*|Setup* ...'
+        sys.exit(2)
+    for arg in sys.argv[1:]:
+        base = os.path.basename(arg)
+        if base[:8] == 'Makefile':
+            print 'Make style parsing:', arg
+            v = getmakevars(arg)
+            prdict(v)
+        elif base[:5] == 'Setup':
+            print 'Setup style parsing:', arg
+            m, v = getsetupinfo(arg)
+            prdict(m)
+            prdict(v)
+        else:
+            print arg, 'is neither a Makefile nor a Setup file'
+            print '(name must begin with "Makefile" or "Setup")'
+
+def prdict(d):
+    keys = d.keys()
+    keys.sort()
+    for key in keys:
+        value = d[key]
+        print "%-15s" % key, str(value)
+
+if __name__ == '__main__':
+    test()