sdksyms.sh revision ed6184df
1#!/bin/sh
2
3cat > sdksyms.c << EOF
4/* This file is automatically generated by sdksyms.sh. */
5#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
6
7#ifdef HAVE_XORG_CONFIG_H
8#include <xorg-config.h>
9#endif
10
11
12/* These must be included first */
13#include "misc.h"
14#include "miscstruct.h"
15
16
17/* render/Makefile.am */
18#include "picture.h"
19#include "mipict.h"
20#include "glyphstr.h"
21#include "picturestr.h"
22
23
24/* fb/Makefile.am */
25#include "fb.h"
26#include "fbrop.h"
27#include "fboverlay.h"
28#include "fbpict.h"
29/* wfb is still a module
30#include "wfbrename.h"
31 */
32
33
34/* miext/shadow/Makefile.am -- module */
35/*
36#include "shadow.h"
37 */
38
39
40/* miext/damage/Makefile.am */
41#include "damage.h"
42#include "damagestr.h"
43
44/* miext/sync/Makefile.am */
45#include "misync.h"
46#include "misyncstr.h"
47#if HAVE_XSHMFENCE
48#include "misyncshm.h"
49#endif
50
51/* Xext/Makefile.am -- half is module, half is builtin */
52#ifdef XV
53#include "xvdix.h"
54#include "xvmcext.h"
55#endif
56#include "geext.h"
57#ifdef MITSHM
58#include "shmint.h"
59#endif
60#include "syncsdk.h"
61#ifdef XINERAMA
62# include "panoramiXsrv.h"
63# include "panoramiX.h"
64#endif
65
66/* glx/Makefile.am */
67#ifdef GLX
68#include "vndserver.h"
69#endif
70
71/* hw/xfree86/int10/Makefile.am -- module */
72/*
73#include "xf86int10.h"
74#include "vbe.h"
75#include "vbeModes.h"
76 */
77
78
79/* hw/xfree86/i2c/Makefile.am -- "mostly" modules */
80#include "xf86i2c.h"
81/*
82#include "bt829.h"
83#include "fi1236.h"
84#include "msp3430.h"
85#include "tda8425.h"
86#include "tda9850.h"
87#include "tda9885.h"
88#include "uda1380.h"
89#include "i2c_def.h"
90 */
91
92
93/* hw/xfree86/modes/Makefile.am */
94#include "xf86Crtc.h"
95#include "xf86Modes.h"
96#include "xf86RandR12.h"
97/* #include "xf86Rename.h" */
98
99
100/* hw/xfree86/ddc/Makefile.am */
101#include "edid.h"
102#include "xf86DDC.h"
103
104
105/* hw/xfree86/dri2/Makefile.am -- module */
106#ifdef DRI2
107# include "dri2.h"
108#endif
109
110# include "dri3.h"
111
112/* hw/xfree86/vgahw/Makefile.am -- module */
113/*
114#include "vgaHW.h"
115 */
116
117
118/* hw/xfree86/fbdevhw/Makefile.am -- module */
119/*
120#include "fbdevhw.h"
121 */
122
123
124/* hw/xfree86/common/Makefile.am */
125#include "compiler.h"
126#include "xf86.h"
127#include "xf86Module.h"
128#include "xf86Opt.h"
129#ifdef XSERVER_LIBPCIACCESS
130 #include "xf86VGAarbiter.h"
131#endif
132#include "xf86Priv.h"
133#include "xf86Privstr.h"
134#include "xf86cmap.h"
135#include "xf86fbman.h"
136#include "xf86str.h"
137#include "xf86Xinput.h"
138#include "xisb.h"
139#ifdef XV
140# include "xf86xv.h"
141# include "xf86xvmc.h"
142# include "xf86xvpriv.h"
143#endif
144#include "xorgVersion.h"
145#if defined(__sparc__) || defined(__sparc)
146# include "xf86sbusBus.h"
147#endif
148
149
150/* hw/xfree86/ramdac/Makefile.am */
151#include "xf86Cursor.h"
152
153
154/* hw/xfree86/shadowfb/Makefile.am -- module */
155/*
156#include "shadowfb.h"
157 */
158
159
160/* hw/xfree86/os-support/solaris/Makefile.am */
161#if defined(sun386)
162# include "agpgart.h"
163#endif
164
165
166/* hw/xfree86/os-support/Makefile.am */
167#include "xf86_OSproc.h"
168#include "xf86_OSlib.h"
169
170
171/* hw/xfree86/os-support/bus/Makefile.am */
172#ifdef XSERVER_LIBPCIACCESS
173# include "xf86Pci.h"
174#endif
175#if defined(__sparc__) || defined(__sparc)
176# include "xf86Sbus.h"
177#endif
178
179
180/* hw/xfree86/parser/Makefile.am */
181#include "xf86Parser.h"
182#include "xf86Optrec.h"
183
184
185/* hw/xfree86/dri/Makefile.am -- module */
186#ifdef XF86DRI
187# include "dri.h"
188# include "sarea.h"
189# include "dristruct.h"
190#endif
191
192
193/* mi/Makefile.am */
194#include "micmap.h"
195#include "miline.h"
196#include "mipointer.h"
197#include "mi.h"
198#include "migc.h"
199#include "mipointrst.h"
200#include "mizerarc.h"
201#include "micoord.h"
202#include "mifillarc.h"
203#include "mistruct.h"
204#include "mioverlay.h"
205
206
207/* randr/Makefile.am */
208#include "randrstr.h"
209#include "rrtransform.h"
210
211
212/* dbe/Makefile.am -- module */
213#ifdef DBE
214#include "dbestruct.h"
215#endif
216
217
218/* exa/Makefile.am -- module */
219/*
220#include "exa.h"
221 */
222
223#ifdef COMPOSITE
224#include "compositeext.h"
225#endif
226
227/* xfixes/Makefile.am */
228#include "xfixes.h"
229
230
231/* include/Makefile.am */
232#include "XIstubs.h"
233#include "Xprintf.h"
234#include "closestr.h"
235#include "closure.h"
236#include "colormap.h"
237#include "colormapst.h"
238#include "hotplug.h"
239#include "client.h"
240#include "cursor.h"
241#include "cursorstr.h"
242#include "dix.h"
243#include "dixaccess.h"
244#include "dixevents.h"
245#define _FONTPROTO_H
246#include "dixfont.h"
247#include "dixfontstr.h"
248#include "dixgrabs.h"
249#include "dixstruct.h"
250#include "exevents.h"
251#include "extension.h"
252#include "extnsionst.h"
253#include "fourcc.h"
254#include "gc.h"
255#include "gcstruct.h"
256#include "globals.h"
257#include "input.h"
258#include "inputstr.h"
259/* already included */
260/*
261#include "misc.h"
262#include "miscstruct.h"
263 */
264#include "opaque.h"
265#include "os.h"
266#include "pixmap.h"
267#include "pixmapstr.h"
268#include "privates.h"
269#include "property.h"
270#include "propertyst.h"
271#include "ptrveloc.h"
272#include "region.h"
273#include "regionstr.h"
274#include "registry.h"
275#include "resource.h"
276#include "rgb.h"
277#include "screenint.h"
278#include "scrnintstr.h"
279#include "selection.h"
280#include "servermd.h"
281#include "validate.h"
282#include "window.h"
283#include "windowstr.h"
284#include "xace.h"
285#include "xkbfile.h"
286#include "xkbsrv.h"
287#include "xkbstr.h"
288#include "xkbrules.h"
289#include "xserver-properties.h"
290
291EOF
292
293topdir=$(readlink -f $1)
294shift
295LC_ALL=C
296export LC_ALL
297${CPP:-cpp} "$@" sdksyms.c > /dev/null || exit $?
298${CPP:-cpp} "$@" sdksyms.c | ${AWK:-awk} -v topdir=$topdir '
299function basename(file) {
300    sub(".*/", "", file)
301    return file
302}
303BEGIN {
304    sdk = 0;
305    print("/*");
306    print(" * These symbols are referenced to ensure they");
307    print(" * will be available in the X Server binary.");
308    print(" */");
309    print("_X_HIDDEN void *xorg_symbols[] = {");
310
311    printf("sdksyms.c:") > "sdksyms.dep";
312}
313/^# [0-9]+ "/ {
314    # Match preprocessor linemarkers which have the form:
315    # # linenum "filename" flags
316    #
317    # Only process text for sdk exports where the linemarker filename has a
318    # relative path, or an absolute path matching $top_srcdir.
319    #
320
321    # canonicalize filename
322    if ($3 in canonicalized) {
323	c = canonicalized[$3]
324    } else {
325	cmd = "readlink -f " $3
326	cmd | getline c
327	close(cmd)
328        canonicalized[$3] = c
329    }
330    # note that index() starts at 1; 0 means no match.
331    sdk = $3 !~ /^"\// || index(c, topdir) == 1;
332
333    if (sdk && $3 ~ /\.h"$/) {
334	# remove quotes
335	gsub(/"/, "", $3);
336	line = $2;
337	header = basename($3);
338	if (! headers[$3]) {
339	    printf(" \\\n  %s", $3) >> "sdksyms.dep";
340	    headers[$3] = 1;
341	}
342    }
343    next;
344}
345
346/^extern[ 	]/  {
347    if (sdk) {
348	n = 3;
349
350        # skip line numbers GCC 5 adds before __attribute__
351        while ($n == "" || $0 ~ /^# [0-9]+ "/) {
352           getline;
353           n = 1;
354        }
355
356	# skip attribute, if any
357	while ($n ~ /^(__attribute__|__global)/ ||
358	    # skip modifiers, if any
359	    $n ~ /^\*?(unsigned|const|volatile|struct|_X_EXPORT)$/ ||
360	    # skip pointer
361	    $n ~ /^[a-zA-Z0-9_]*\*$/) {
362	    n++;
363            # skip line numbers GCC 5 adds after __attribute__
364            while ($n == "" || $0 ~ /^# [0-9]+ "/) {
365               getline;
366               n = 1;
367            }
368        }
369	# hack: pid_t becomes __pid_t on NetBSD, same for uint32_t -> __uint32_t.
370	# GCC 5 inserts additional lines around this.
371        if (($1 == "__pid_t" || $1 == "__uint32_t") && NF == 1) {
372            getline;
373            n++;
374            # skip line numbers GCC 5 adds (after typedef return type?)
375            while ($n == "" || $0 ~ /^# [0-9]+ "/) {
376               getline;
377               n = 1;
378            }
379	}
380
381	# type specifier may not be set, as in
382	#   extern _X_EXPORT unsigned name(...)
383	if ($n !~ /[^a-zA-Z0-9_]/)
384	    n++;
385
386	# go back if we are at the parameter list already
387	if ($n ~ /^[(]([^*].*)?$/)
388	    n--;
389
390	# match
391	#    extern _X_EXPORT type (* name[])(...)
392	if ($n ~ /^[^a-zA-Z0-9_]+$/)
393	    n++;
394
395	# match
396	#	extern _X_EXPORT const name *const ...
397	if ($n ~ /^([^a-zA-Z0-9_]+)?const$/)
398	    n++;
399
400	# actual name may be in the next line, as in
401	#   extern _X_EXPORT type
402	# possibly ending with a *
403	#   name(...)
404	if ($n == "" || $n ~ /^\*+$/) {
405	    getline;
406	    n = 1;
407	    # indent may have inserted a blank link
408	    if ($0 == "")
409		getline;
410	}
411
412	# dont modify $0 or $n
413	symbol = $n;
414
415	# remove starting non word chars
416	sub(/^[^a-zA-Z0-9_]+/, "",symbol);
417
418	# remove from first non word to end of line
419	sub(/[^a-zA-Z0-9_].*/, "", symbol);
420
421	#print;
422	if (symbol != "")
423	    printf("    (void *) &%-50s /* %s:%s */\n", symbol ",", header, line);
424    }
425}
426
427{
428    line++;
429}
430
431END {
432    print("};");
433
434    print("") >> "sdksyms.dep";
435}' > _sdksyms.c
436
437STATUS=$?
438
439cat _sdksyms.c >> sdksyms.c
440rm _sdksyms.c
441
442[ $? != 0 ] && exit $?
443
444exit $STATUS
445