Benjamin Peterson | 90f5ba5 | 2010-03-11 22:53:45 +0000 | [diff] [blame] | 1 | #! /usr/bin/env python3 |
Guido van Rossum | 0b7dfbb | 1994-01-07 11:43:11 +0000 | [diff] [blame] | 2 | |
| 3 | # Add some standard cpp magic to a header file |
| 4 | |
| 5 | import sys |
Guido van Rossum | 0b7dfbb | 1994-01-07 11:43:11 +0000 | [diff] [blame] | 6 | |
| 7 | def main(): |
Tim Peters | 70c4378 | 2001-01-17 08:48:39 +0000 | [diff] [blame] | 8 | args = sys.argv[1:] |
Andrew M. Kuchling | ac6df95 | 2003-05-13 18:14:25 +0000 | [diff] [blame] | 9 | for filename in args: |
| 10 | process(filename) |
Guido van Rossum | 0b7dfbb | 1994-01-07 11:43:11 +0000 | [diff] [blame] | 11 | |
Andrew M. Kuchling | ac6df95 | 2003-05-13 18:14:25 +0000 | [diff] [blame] | 12 | def process(filename): |
Tim Peters | 70c4378 | 2001-01-17 08:48:39 +0000 | [diff] [blame] | 13 | try: |
Andrew M. Kuchling | ac6df95 | 2003-05-13 18:14:25 +0000 | [diff] [blame] | 14 | f = open(filename, 'r') |
Guido van Rossum | b940e11 | 2007-01-10 16:19:56 +0000 | [diff] [blame] | 15 | except IOError as msg: |
Andrew M. Kuchling | ac6df95 | 2003-05-13 18:14:25 +0000 | [diff] [blame] | 16 | sys.stderr.write('%s: can\'t open: %s\n' % (filename, str(msg))) |
Tim Peters | 70c4378 | 2001-01-17 08:48:39 +0000 | [diff] [blame] | 17 | return |
Serhiy Storchaka | afbb7a3 | 2019-03-30 08:32:18 +0200 | [diff] [blame] | 18 | with f: |
| 19 | data = f.read() |
Georg Brandl | 8efadf5 | 2008-05-16 15:23:30 +0000 | [diff] [blame] | 20 | if data[:2] != '/*': |
Andrew M. Kuchling | ac6df95 | 2003-05-13 18:14:25 +0000 | [diff] [blame] | 21 | sys.stderr.write('%s does not begin with C comment\n' % filename) |
Tim Peters | 70c4378 | 2001-01-17 08:48:39 +0000 | [diff] [blame] | 22 | return |
| 23 | try: |
Andrew M. Kuchling | ac6df95 | 2003-05-13 18:14:25 +0000 | [diff] [blame] | 24 | f = open(filename, 'w') |
Guido van Rossum | b940e11 | 2007-01-10 16:19:56 +0000 | [diff] [blame] | 25 | except IOError as msg: |
Andrew M. Kuchling | ac6df95 | 2003-05-13 18:14:25 +0000 | [diff] [blame] | 26 | sys.stderr.write('%s: can\'t write: %s\n' % (filename, str(msg))) |
Tim Peters | 70c4378 | 2001-01-17 08:48:39 +0000 | [diff] [blame] | 27 | return |
Serhiy Storchaka | afbb7a3 | 2019-03-30 08:32:18 +0200 | [diff] [blame] | 28 | with f: |
| 29 | sys.stderr.write('Processing %s ...\n' % filename) |
| 30 | magic = 'Py_' |
| 31 | for c in filename: |
| 32 | if ord(c)<=0x80 and c.isalnum(): |
| 33 | magic = magic + c.upper() |
| 34 | else: magic = magic + '_' |
| 35 | print('#ifndef', magic, file=f) |
| 36 | print('#define', magic, file=f) |
| 37 | print('#ifdef __cplusplus', file=f) |
| 38 | print('extern "C" {', file=f) |
| 39 | print('#endif', file=f) |
| 40 | print(file=f) |
| 41 | f.write(data) |
| 42 | print(file=f) |
| 43 | print('#ifdef __cplusplus', file=f) |
| 44 | print('}', file=f) |
| 45 | print('#endif', file=f) |
| 46 | print('#endif /*', '!'+magic, '*/', file=f) |
Guido van Rossum | 0b7dfbb | 1994-01-07 11:43:11 +0000 | [diff] [blame] | 47 | |
Andrew M. Kuchling | e236b38 | 2004-08-09 17:27:55 +0000 | [diff] [blame] | 48 | if __name__ == '__main__': |
| 49 | main() |