blob: 06cbb600ca77bb12446e4ceb67c5147cfd38d54b [file] [log] [blame]
Eric S. Raymond1bb515b2001-03-18 11:27:58 +00001import re
Georg Brandl10603802010-11-26 08:10:41 +00002import sys
Guido van Rossum00ff4331994-10-03 16:33:08 +00003
4# Write the config.c file
5
Georg Brandleae1b282009-05-22 17:00:17 +00006never = ['marshal', '__main__', '__builtin__', 'sys', 'exceptions', '_warnings']
Guido van Rossum00ff4331994-10-03 16:33:08 +00007
Guido van Rossum8bd73821999-09-30 14:12:44 +00008def makeconfig(infp, outfp, modules, with_ifdef=0):
Tim Peters182b5ac2004-07-18 06:16:08 +00009 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')
Guido van Rossum00ff4331994-10-03 16:33:08 +000036
37
38# Test program.
39
40def test():
Tim Peters182b5ac2004-07-18 06:16:08 +000041 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()
Guido van Rossum00ff4331994-10-03 16:33:08 +000058
59if __name__ == '__main__':
Tim Peters182b5ac2004-07-18 06:16:08 +000060 test()