* python/py-utils.c (gdb_pymodule_addobject): Cast away const.
[deliverable/binutils-gdb.git] / gdb / observer.sh
CommitLineData
7a464420
AC
1#!/bin/sh -e
2
6e2c7fa1
DJ
3# Make certain that the script is not running in an internationalized
4# environment.
c2c8d75b
AS
5LANG=C ; export LANG
6LC_ALL=C ; export LC_ALL
6e2c7fa1 7
7a464420
AC
8if test $# -ne 3
9then
10 echo "Usage: $0 <h|inc> <observer.texi> <observer.out>" 1>&2
11 exit 0
12fi
13
14lang=$1 ; shift
15texi=$1 ; shift
15c3c5c6 16o=$1
99efcb59
AS
17case $lang in
18 h) tmp=htmp ;;
19 inc) tmp=itmp ;;
20esac
21otmp="`echo $1 | sed -e 's,\.[^.]*$,,'`.$tmp"; shift
15c3c5c6
EZ
22echo "Creating ${otmp}" 1>&2
23rm -f ${otmp}
7a464420
AC
24
25# Can use any of the following: cat cmp cp diff echo egrep expr false
26# grep install-info ln ls mkdir mv pwd rm rmdir sed sleep sort tar
27# test touch true
28
15c3c5c6 29cat <<EOF >>${otmp}
7a464420
AC
30/* GDB Notifications to Observers.
31
28e7fd62 32 Copyright (C) 2004-2013 Free Software Foundation, Inc.
7a464420
AC
33
34 This file is part of GDB.
35
36 This program is free software; you can redistribute it and/or modify
37 it under the terms of the GNU General Public License as published by
50efebf8 38 the Free Software Foundation; either version 3 of the License, or
7a464420 39 (at your option) any later version.
50efebf8 40
7a464420
AC
41 This program is distributed in the hope that it will be useful,
42 but WITHOUT ANY WARRANTY; without even the implied warranty of
43 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
44 GNU General Public License for more details.
50efebf8 45
7a464420 46 You should have received a copy of the GNU General Public License
50efebf8 47 along with this program. If not, see <http://www.gnu.org/licenses/>.
7a464420
AC
48
49 --
50
51 This file was generated using observer.sh and observer.texi. */
52
53EOF
54
55
56case $lang in
15c3c5c6 57 h) cat <<EOF >>${otmp}
7a464420
AC
58#ifndef OBSERVER_H
59#define OBSERVER_H
60
61struct observer;
62struct bpstats;
84acb35a 63struct so_list;
06d3b283 64struct objfile;
683f2885 65struct thread_info;
619cebe8 66struct inferior;
134a2066 67struct trace_state_variable;
7a464420
AC
68EOF
69 ;;
70esac
71
5711a8b0
EZ
72# We are about to set IFS=:, so DOS-style file names with a drive
73# letter and a colon will be in trouble.
74
f3e25dcb 75if test -n "$DJGPP"
5711a8b0
EZ
76then
77 texi=`echo $texi | sed -e 's,^\([a-zA-Z]\):/,/dev/\1/,'`
78fi
7a464420
AC
79
80# generate a list of events that can be observed
81
82IFS=:
83sed -n '
84/@deftypefun void/{
350c2e5b 85# Save original line for later processing into the actual parameter
7a464420 86 h
350c2e5b
JB
87# Convert from: @deftypefun void EVENT (TYPE @var{PARAM},...)
88# to event and formals: EVENT:TYPE PARAM, ...:
7a464420
AC
89 s/^.* void \([a-z_][a-z_]*\) (\(.*\))$/\1:\2/
90 s/@var{//g
91 s/}//g
350c2e5b 92# Switch to held
7a464420 93 x
350c2e5b
JB
94# Convert from: @deftypefun void FUNC (TYPE @var{PARAM},...)
95# to actuals: PARAM, ...
7a464420
AC
96 s/^[^{]*[{]*//
97 s/[}]*[^}]*$//
98 s/}[^{]*{/, /g
350c2e5b
JB
99# Combine held (EVENT:TYPE PARAM, ...:) and pattern (PARAM, ...) into
100# FUNC:TYPE PARAM, ...:PARAM, ...
7a464420
AC
101 H
102 x
103 s/\n/:/g
104 p
105}
106' $texi | while read event formal actual
107do
108 case $lang in
15c3c5c6 109 h) cat <<EOF >>${otmp}
7a464420
AC
110
111/* ${event} notifications. */
112
113typedef void (observer_${event}_ftype) (${formal});
114
115extern struct observer *observer_attach_${event} (observer_${event}_ftype *f);
116extern void observer_detach_${event} (struct observer *observer);
117extern void observer_notify_${event} (${formal});
118EOF
119 ;;
120
121 inc)
15c3c5c6 122 cat <<EOF >>${otmp}
7a464420
AC
123
124/* ${event} notifications. */
125
126static struct observer_list *${event}_subject = NULL;
127
781b42b0
TT
128EOF
129 if test "$formal" != "void"; then
130 cat<<EOF >>${otmp}
7a464420
AC
131struct ${event}_args { `echo "${formal}" | sed -e 's/,/;/g'`; };
132
781b42b0
TT
133EOF
134 fi
135 cat <<EOF >>${otmp}
7a464420
AC
136static void
137observer_${event}_notification_stub (const void *data, const void *args_data)
138{
139 observer_${event}_ftype *notify = (observer_${event}_ftype *) data;
7fc7e0c3
SDJ
140EOF
141
142 notify_args=`echo ${actual} | sed -e 's/\([a-z0-9_][a-z0-9_]*\)/args->\1/g'`
143
144 if test ! -z "${notify_args}"; then
145 cat<<EOF >>${otmp}
7a464420 146 const struct ${event}_args *args = args_data;
7fc7e0c3
SDJ
147EOF
148 fi
149 cat <<EOF >>${otmp}
150 notify (${notify_args});
7a464420
AC
151}
152
153struct observer *
154observer_attach_${event} (observer_${event}_ftype *f)
155{
156 return generic_observer_attach (&${event}_subject,
157 &observer_${event}_notification_stub,
158 (void *) f);
159}
160
161void
162observer_detach_${event} (struct observer *observer)
163{
164 generic_observer_detach (&${event}_subject, observer);
165}
166
167void
168observer_notify_${event} (${formal})
169{
781b42b0
TT
170EOF
171 if test "$formal" != "void"; then
172 cat<<EOF >>${otmp}
7a464420
AC
173 struct ${event}_args args;
174 `echo ${actual} | sed -e 's/\([a-z0-9_][a-z0-9_]*\)/args.\1 = \1/g'`;
781b42b0
TT
175
176EOF
177 else
178 echo "char *args = NULL;" >> ${otmp}
179 fi
180 cat<<EOF >>${otmp}
2b4855ab
AC
181 if (observer_debug)
182 fprintf_unfiltered (gdb_stdlog, "observer_notify_${event}() called\n");
7a464420
AC
183 generic_observer_notify (${event}_subject, &args);
184}
185EOF
186 ;;
187 esac
188done
189
190
191case $lang in
15c3c5c6 192 h) cat <<EOF >>${otmp}
7a464420
AC
193
194#endif /* OBSERVER_H */
195EOF
196esac
197
198
15c3c5c6
EZ
199echo Moving ${otmp} to ${o}
200mv ${otmp} ${o}
This page took 0.799434 seconds and 4 git commands to generate.