diff options
Diffstat (limited to 'ext/python/Tools/freeze/.svn/text-base/parsesetup.py.svn-base')
-rw-r--r-- | ext/python/Tools/freeze/.svn/text-base/parsesetup.py.svn-base | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/ext/python/Tools/freeze/.svn/text-base/parsesetup.py.svn-base b/ext/python/Tools/freeze/.svn/text-base/parsesetup.py.svn-base new file mode 100644 index 0000000..856234d --- /dev/null +++ b/ext/python/Tools/freeze/.svn/text-base/parsesetup.py.svn-base @@ -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() |