]>
git.saurik.com Git - wxWidgets.git/blob - src/png/scripts/checksym.awk
2 # Check a list of symbols against the master definition
3 # (official) list. Arguments:
5 # awk -f checksym.awk official-def list-to-check
7 # Output is a file in the current directory called 'symbols.new',
8 # the value of the awk variable "of" (which can be changed on the
9 # command line if required.) stdout holds error messages. Error
10 # code indicates success or failure.
12 # NOTE: this is a pure, old fashioned, awk script. It will
17 master=
"" # master file
18 official
[1] =
"" # defined symbols from master file
19 symbol
[1] =
"" # defined symbols from png.h
20 removed
[1] =
"" # removed symbols from png.h
21 lasto =
0 # last ordinal value from png.h
22 mastero =
0 # highest ordinal in master file
23 symbolo =
0 # highest ordinal in png.h
24 missing =
"error"# log an error on missing symbols
25 of=
"symbols.new" # default to a fixed name
28 # Read existing definitions from the master file (the first
29 # file on the command line.) This must be a def file and it
30 # has definition lines (others are ignored) of the form:
37 FILENAME==master
&& NF==
2 && $2~
/^@
/ && $1!~
/^
;/ {
40 if (official
[o
] ==
"") {
42 if (o
> mastero
) mastero = o
45 print master
": duplicated symbol:", official
[o
] ":", $0
47 print master
": bad export line format:", $0
50 FILENAME==master
&& $1==
";missing" && NF==
2{
51 # This allows the master file to control how missing symbols
52 # are handled; symbols that aren't in either the master or
53 # the new file. Valid values are 'ignore', 'warning' and
61 # Read new definitions, these are free form but the lines must
62 # just be symbol definitions. Lines will be commented out for
63 # 'removed' symbols, introduced in png.h using PNG_REMOVED rather
64 # than PNG_EXPORT. Use symbols.dfn or pngwin.dfn to generate the
67 # symbol @ordinal # two fields, exported symbol
68 # ; symbol @ordinal # three fields, removed symbol
69 # ; @ordinal # two fields, the last ordinal
70 NF==
2 && $1 ==
";" && $2 ~
/^@
[1-9][0-9]*$
/ { # last ordinal
72 if (lasto ==
0 || lasto == o
)
75 print "png.h: duplicated last ordinal:", lasto
, o
80 NF==
3 && $1 ==
";" && $3 ~
/^@
[1-9][0-9]*$
/ { # removed symbol
82 if (removed
[o
] ==
"" || removed
[o
] ==
$2) {
84 if (o
> symbolo
) symbolo = o
86 print "png.h: duplicated removed symbol", o
": '" removed
[o
] "' != '" $2 "'"
91 NF==
2 && $2 ~
/^@
[1-9][0-9]*$
/ { # exported symbol
93 if (symbol
[o
] ==
"" || symbol
[o
] ==
$1) {
95 if (o
> symbolo
) symbolo = o
97 print "png.h: duplicated symbol", o
": '" symbol
[o
] "' != '" $1 "'"
102 next # skip all other lines
105 # At the end check for symbols marked as both duplicated and removed
107 if (symbolo
> lasto
) {
108 print "highest symbol ordinal in png.h,", symbolo
", exceeds last ordinal from png.h", lasto
111 if (mastero
> lasto
) {
112 print "highest symbol ordinal in", master
",", mastero
", exceeds last ordinal from png.h", lasto
116 # Add a standard header to symbols.new:
117 print ";Version INSERT-VERSION-HERE" >of
118 print ";--------------------------------------------------------------" >of
119 print "; LIBPNG symbol list as a Win32 DEF file" >of
120 print "; Contains all the symbols that can be exported from libpng" >of
121 print ";--------------------------------------------------------------" >of
126 for (o=
1; o
<=lasto
; ++o
) {
127 if (symbol
[o
] ==
"" && removed
[o
] ==
"") {
128 if (unexported ==
0) unexported = o
129 if (official
[o
] ==
"") {
130 # missing in export list too, so ok
131 if (o
< lasto
) continue
134 if (unexported
!= 0) {
135 # Symbols in the .def but not in the new file are errors, but
136 # the 'unexported' symbols aren't in either. By default this
137 # is an error too (see the setting of 'missing' at the start),
138 # but this can be reset on the command line or by stuff in the
139 # file - see the comments above.
140 if (missing
!= "ignore") {
141 if (o
-1 > unexported
)
142 print "png.h:", missing
": missing symbols:", unexported
"-" o
-1
144 print "png.h:", missing
": missing symbol:", unexported
145 if (missing
!= "warning")
150 if (symbol
[o
] != "" && removed
[o
] != "") {
151 print "png.h: symbol", o
, "both exported as '" symbol
[o
] "' and removed as '" removed
[o
] "'"
153 } else if (symbol
[o
] != official
[o
]) {
154 # either the symbol is missing somewhere or it changed
157 print "png.h: symbol", o
, "is exported as '" official
[o
] "' in", master
158 else if (official
[o
] ==
"")
159 print "png.h: exported symbol", o
, "'" symbol
[o
] "' not present in", master
161 print "png.h: exported symbol", o
, "'" symbol
[o
] "' exists as '" official
[o
] "' in", master
164 # Finally generate symbols.new
166 print " " symbol
[o
], "@" o
> of
170 print "*** A new list is in", of
, "***"