1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
#!/usr/bin/env python
#
# Copyright 2004 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
# GNU Radio is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3, or (at your option)
# any later version.
#
# GNU Radio is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNU Radio; see the file COPYING. If not, write to
# the Free Software Foundation, Inc., 51 Franklin Street,
# Boston, MA 02110-1301, USA.
#
import sys
import re
def write_header (f):
f.write ('''/* -*- c++ -*- */
/*
* Copyright 2004 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
* GNU Radio is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3, or (at your option)
* any later version.
*
* GNU Radio is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GNU Radio; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street,
* Boston, MA 02110-1301, USA.
*/
#ifndef INCLUDED_GNURADIO_SWIG_BUG_WORKAROUND_H
#define INCLUDED_GNURADIO_SWIG_BUG_WORKAROUND_H
/*
* This include files works around a bug in SWIG 1.3.21 and 22
* where it fails to emit these declarations when doing
* %import "gnuradio.i"
*/
''')
def write_trailer (f):
f.write ('''
#endif /* INCLUDED_GNURADIO_SWIG_BUG_WORKAROUND_H */
''')
def doit (input, output):
re_RULES_BEGIN = re.compile ('RULES \(BEGIN\)')
re_RULES_END = re.compile ('RULES \(END\)')
re_RETURN = re.compile ('^\s*return')
re_NOT_ID = re.compile ('[^a-zA-Z0-9_]')
words = {}
write_header (output)
for line in input:
if re_RULES_BEGIN.search (line):
break
for line in input:
if re_RULES_END.search (line):
break
if not re_RETURN.match (line):
continue
line = re_NOT_ID.sub (' ', line)
line = re.sub (' +', ' ', line)
for w in line.split (' '):
words[w] = 1
for w in ('', 'return', 'void', 'x'):
del words[w]
wl = words.keys()
wl.sort ()
for w in wl:
output.write ('class ' + w + ';\n')
write_trailer (output)
def main ():
if len (sys.argv) != 3:
sys.stderr.write ("usage: %s gnuradio_swig_python.cc gnuradio_swig_bug_workaround.h\n"
% (sys.argv[0],))
sys.exit (1)
input_filename = sys.argv[1]
output_filename = sys.argv[2]
input = open (input_filename, "r")
output = open (output_filename, "w")
doit (input, output)
if __name__ == '__main__':
main ()
|