blob: ec840575b205e82a871edab60549f87990e87520 [file] [log] [blame]
Benjamin Peterson90f5ba52010-03-11 22:53:45 +00001#! /usr/bin/env python3
Guido van Rossum0b7dfbb1994-01-07 11:43:11 +00002
3# Add some standard cpp magic to a header file
4
5import sys
Guido van Rossum0b7dfbb1994-01-07 11:43:11 +00006
7def main():
Tim Peters70c43782001-01-17 08:48:39 +00008 args = sys.argv[1:]
Andrew M. Kuchlingac6df952003-05-13 18:14:25 +00009 for filename in args:
10 process(filename)
Guido van Rossum0b7dfbb1994-01-07 11:43:11 +000011
Andrew M. Kuchlingac6df952003-05-13 18:14:25 +000012def process(filename):
Tim Peters70c43782001-01-17 08:48:39 +000013 try:
Andrew M. Kuchlingac6df952003-05-13 18:14:25 +000014 f = open(filename, 'r')
Guido van Rossumb940e112007-01-10 16:19:56 +000015 except IOError as msg:
Andrew M. Kuchlingac6df952003-05-13 18:14:25 +000016 sys.stderr.write('%s: can\'t open: %s\n' % (filename, str(msg)))
Tim Peters70c43782001-01-17 08:48:39 +000017 return
18 data = f.read()
19 f.close()
Georg Brandl8efadf52008-05-16 15:23:30 +000020 if data[:2] != '/*':
Andrew M. Kuchlingac6df952003-05-13 18:14:25 +000021 sys.stderr.write('%s does not begin with C comment\n' % filename)
Tim Peters70c43782001-01-17 08:48:39 +000022 return
23 try:
Andrew M. Kuchlingac6df952003-05-13 18:14:25 +000024 f = open(filename, 'w')
Guido van Rossumb940e112007-01-10 16:19:56 +000025 except IOError as msg:
Andrew M. Kuchlingac6df952003-05-13 18:14:25 +000026 sys.stderr.write('%s: can\'t write: %s\n' % (filename, str(msg)))
Tim Peters70c43782001-01-17 08:48:39 +000027 return
Andrew M. Kuchlingac6df952003-05-13 18:14:25 +000028 sys.stderr.write('Processing %s ...\n' % filename)
Tim Peters70c43782001-01-17 08:48:39 +000029 magic = 'Py_'
Andrew M. Kuchlingac6df952003-05-13 18:14:25 +000030 for c in filename:
Walter Dörwaldaaab30e2002-09-11 20:36:02 +000031 if ord(c)<=0x80 and c.isalnum():
32 magic = magic + c.upper()
Tim Peters70c43782001-01-17 08:48:39 +000033 else: magic = magic + '_'
34 sys.stdout = f
Collin Winter6afaeb72007-08-03 17:06:41 +000035 print('#ifndef', magic)
36 print('#define', magic)
37 print('#ifdef __cplusplus')
38 print('extern "C" {')
39 print('#endif')
40 print()
Tim Peters70c43782001-01-17 08:48:39 +000041 f.write(data)
Collin Winter6afaeb72007-08-03 17:06:41 +000042 print()
43 print('#ifdef __cplusplus')
44 print('}')
45 print('#endif')
46 print('#endif /*', '!'+magic, '*/')
Guido van Rossum0b7dfbb1994-01-07 11:43:11 +000047
Andrew M. Kuchlinge236b382004-08-09 17:27:55 +000048if __name__ == '__main__':
49 main()