symbian-qemu-0.9.1-12/python-2.6.1/Tools/freeze/parsesetup.py
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     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()