Home | History | Annotate | Download | only in freeze
      1 import re
      2 import sys
      3 
      4 # Write the config.c file
      5 
      6 never = ['marshal', '__main__', '__builtin__', 'sys', 'exceptions', '_warnings']
      7 
      8 def makeconfig(infp, outfp, modules, with_ifdef=0):
      9     m1 = re.compile('-- ADDMODULE MARKER 1 --')
     10     m2 = re.compile('-- ADDMODULE MARKER 2 --')
     11     while 1:
     12         line = infp.readline()
     13         if not line: break
     14         outfp.write(line)
     15         if m1 and m1.search(line):
     16             m1 = None
     17             for mod in modules:
     18                 if mod in never:
     19                     continue
     20                 if with_ifdef:
     21                     outfp.write("#ifndef init%s\n"%mod)
     22                 outfp.write('extern void init%s(void);\n' % mod)
     23                 if with_ifdef:
     24                     outfp.write("#endif\n")
     25         elif m2 and m2.search(line):
     26             m2 = None
     27             for mod in modules:
     28                 if mod in never:
     29                     continue
     30                 outfp.write('\t{"%s", init%s},\n' %
     31                             (mod, mod))
     32     if m1:
     33         sys.stderr.write('MARKER 1 never found\n')
     34     elif m2:
     35         sys.stderr.write('MARKER 2 never found\n')
     36 
     37 
     38 # Test program.
     39 
     40 def test():
     41     if not sys.argv[3:]:
     42         print 'usage: python makeconfig.py config.c.in outputfile',
     43         print 'modulename ...'
     44         sys.exit(2)
     45     if sys.argv[1] == '-':
     46         infp = sys.stdin
     47     else:
     48         infp = open(sys.argv[1])
     49     if sys.argv[2] == '-':
     50         outfp = sys.stdout
     51     else:
     52         outfp = open(sys.argv[2], 'w')
     53     makeconfig(infp, outfp, sys.argv[3:])
     54     if outfp != sys.stdout:
     55         outfp.close()
     56     if infp != sys.stdin:
     57         infp.close()
     58 
     59 if __name__ == '__main__':
     60     test()
     61