]> git.proxmox.com Git - mirror_edk2.git/blob - AppPkg/Applications/Python/Python-2.7.2/Tools/freeze/parsesetup.py
EmbeddedPkg: Extend NvVarStoreFormattedLib LIBRARY_CLASS
[mirror_edk2.git] / AppPkg / Applications / Python / Python-2.7.2 / Tools / freeze / parsesetup.py
1 # Parse Makefiles and Python Setup(.in) files.
2
3 import re
4
5
6 # Extract variable definitions from a Makefile.
7 # Return a dictionary mapping names to values.
8 # May raise IOError.
9
10 makevardef = re.compile('^([a-zA-Z0-9_]+)[ \t]*=(.*)')
11
12 def getmakevars(filename):
13 variables = {}
14 fp = open(filename)
15 pendingline = ""
16 try:
17 while 1:
18 line = fp.readline()
19 if pendingline:
20 line = pendingline + line
21 pendingline = ""
22 if not line:
23 break
24 if line.endswith('\\\n'):
25 pendingline = line[:-2]
26 matchobj = makevardef.match(line)
27 if not matchobj:
28 continue
29 (name, value) = matchobj.group(1, 2)
30 # Strip trailing comment
31 i = value.find('#')
32 if i >= 0:
33 value = value[:i]
34 value = value.strip()
35 variables[name] = value
36 finally:
37 fp.close()
38 return variables
39
40
41 # Parse a Python Setup(.in) file.
42 # Return two dictionaries, the first mapping modules to their
43 # definitions, the second mapping variable names to their values.
44 # May raise IOError.
45
46 setupvardef = re.compile('^([a-zA-Z0-9_]+)=(.*)')
47
48 def getsetupinfo(filename):
49 modules = {}
50 variables = {}
51 fp = open(filename)
52 pendingline = ""
53 try:
54 while 1:
55 line = fp.readline()
56 if pendingline:
57 line = pendingline + line
58 pendingline = ""
59 if not line:
60 break
61 # Strip comments
62 i = line.find('#')
63 if i >= 0:
64 line = line[:i]
65 if line.endswith('\\\n'):
66 pendingline = line[:-2]
67 continue
68 matchobj = setupvardef.match(line)
69 if matchobj:
70 (name, value) = matchobj.group(1, 2)
71 variables[name] = value.strip()
72 else:
73 words = line.split()
74 if words:
75 modules[words[0]] = words[1:]
76 finally:
77 fp.close()
78 return modules, variables
79
80
81 # Test the above functions.
82
83 def test():
84 import sys
85 import os
86 if not sys.argv[1:]:
87 print 'usage: python parsesetup.py Makefile*|Setup* ...'
88 sys.exit(2)
89 for arg in sys.argv[1:]:
90 base = os.path.basename(arg)
91 if base[:8] == 'Makefile':
92 print 'Make style parsing:', arg
93 v = getmakevars(arg)
94 prdict(v)
95 elif base[:5] == 'Setup':
96 print 'Setup style parsing:', arg
97 m, v = getsetupinfo(arg)
98 prdict(m)
99 prdict(v)
100 else:
101 print arg, 'is neither a Makefile nor a Setup file'
102 print '(name must begin with "Makefile" or "Setup")'
103
104 def prdict(d):
105 keys = d.keys()
106 keys.sort()
107 for key in keys:
108 value = d[key]
109 print "%-15s" % key, str(value)
110
111 if __name__ == '__main__':
112 test()