blob: 0bf8756d84e16f3459ed821b76a97e46e7b34502 [file] [log] [blame]
Eric S. Raymond1bb515b2001-03-18 11:27:58 +00001import re
Guido van Rossum00ff4331994-10-03 16:33:08 +00002
3
4# Write the config.c file
5
Guido van Rossumefdf1072000-07-28 10:34:48 +00006never = ['marshal', '__main__', '__builtin__', 'sys', 'exceptions']
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 import sys
42 if not sys.argv[3:]:
Guido van Rossum96bf7e82007-02-09 23:27:01 +000043 print('usage: python makeconfig.py config.c.in outputfile', end=' ')
44 print('modulename ...')
Tim Peters182b5ac2004-07-18 06:16:08 +000045 sys.exit(2)
46 if sys.argv[1] == '-':
47 infp = sys.stdin
48 else:
49 infp = open(sys.argv[1])
50 if sys.argv[2] == '-':
51 outfp = sys.stdout
52 else:
53 outfp = open(sys.argv[2], 'w')
54 makeconfig(infp, outfp, sys.argv[3:])
55 if outfp != sys.stdout:
56 outfp.close()
57 if infp != sys.stdin:
58 infp.close()
Guido van Rossum00ff4331994-10-03 16:33:08 +000059
60if __name__ == '__main__':
Tim Peters182b5ac2004-07-18 06:16:08 +000061 test()