summaryrefslogtreecommitdiff
path: root/Build/source/libs/libpng/libpng-1.5.16/scripts/checksym.awk
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/libpng/libpng-1.5.16/scripts/checksym.awk')
-rwxr-xr-xBuild/source/libs/libpng/libpng-1.5.16/scripts/checksym.awk173
1 files changed, 173 insertions, 0 deletions
diff --git a/Build/source/libs/libpng/libpng-1.5.16/scripts/checksym.awk b/Build/source/libs/libpng/libpng-1.5.16/scripts/checksym.awk
new file mode 100755
index 00000000000..fe3af55e05e
--- /dev/null
+++ b/Build/source/libs/libpng/libpng-1.5.16/scripts/checksym.awk
@@ -0,0 +1,173 @@
+#!/bin/awk -f
+# Check a list of symbols against the master definition
+# (official) list. Arguments:
+#
+# awk -f checksym.awk official-def list-to-check
+#
+# Output is a file in the current directory called 'symbols.new',
+# the value of the awk variable "of" (which can be changed on the
+# command line if required.) stdout holds error messages. Error
+# code indicates success or failure.
+#
+# NOTE: this is a pure, old fashioned, awk script. It will
+# work with any awk
+
+BEGIN{
+ err=0
+ master="" # master file
+ official[1] = "" # defined symbols from master file
+ symbol[1] = "" # defined symbols from png.h
+ removed[1] = "" # removed symbols from png.h
+ lasto = 0 # last ordinal value from png.h
+ mastero = 0 # highest ordinal in master file
+ symbolo = 0 # highest ordinal in png.h
+ missing = "error"# log an error on missing symbols
+ of="symbols.new" # default to a fixed name
+}
+
+# Read existing definitions from the master file (the first
+# file on the command line.) This must be a def file and it
+# has definition lines (others are ignored) of the form:
+#
+# symbol @ordinal
+#
+master == "" {
+ master = FILENAME
+}
+FILENAME==master && NF==2 && $2~/^@/ && $1!~/^;/ {
+ o=0+substr($2,2)
+ if (o > 0) {
+ if (official[o] == "") {
+ official[o] = $1
+ if (o > mastero) mastero = o
+ next
+ } else
+ print master ": duplicated symbol:", official[o] ":", $0
+ } else
+ print master ": bad export line format:", $0
+ err = 1
+}
+FILENAME==master && $1==";missing" && NF==2{
+ # This allows the master file to control how missing symbols
+ # are handled; symbols that aren't in either the master or
+ # the new file. Valid values are 'ignore', 'warning' and
+ # 'error'
+ missing = $2
+}
+FILENAME==master {
+ next
+}
+
+# Read new definitions, these are free form but the lines must
+# just be symbol definitions. Lines will be commented out for
+# 'removed' symbols, introduced in png.h using PNG_REMOVED rather
+# than PNG_EXPORT. Use symbols.dfn or pngwin.dfn to generate the
+# input file.
+#
+# symbol @ordinal # two fields, exported symbol
+# ; symbol @ordinal # three fields, removed symbol
+# ; @ordinal # two fields, the last ordinal
+NF==2 && $1 == ";" && $2 ~ /^@[1-9][0-9]*$/ { # last ordinal
+ o=0+substr($2,2)
+ if (lasto == 0 || lasto == o)
+ lasto=o
+ else {
+ print "png.h: duplicated last ordinal:", lasto, o
+ err = 1
+ }
+ next
+}
+NF==3 && $1 == ";" && $3 ~ /^@[1-9][0-9]*$/ { # removed symbol
+ o=0+substr($3,2)
+ if (removed[o] == "" || removed[o] == $2) {
+ removed[o] = $2
+ if (o > symbolo) symbolo = o
+ } else {
+ print "png.h: duplicated removed symbol", o ": '" removed[o] "' != '" $2 "'"
+ err = 1
+ }
+ next
+}
+NF==2 && $2 ~ /^@[1-9][0-9]*$/ { # exported symbol
+ o=0+substr($2,2)
+ if (symbol[o] == "" || symbol[o] == $1) {
+ symbol[o] = $1
+ if (o > symbolo) symbolo = o
+ } else {
+ print "png.h: duplicated symbol", o ": '" symbol[o] "' != '" $1 "'"
+ err = 1
+ }
+}
+{
+ next # skip all other lines
+}
+
+# At the end check for symbols marked as both duplicated and removed
+END{
+ if (symbolo > lasto) {
+ print "highest symbol ordinal in png.h,", symbolo ", exceeds last ordinal from png.h", lasto
+ err = 1
+ }
+ if (mastero > lasto) {
+ print "highest symbol ordinal in", master ",", mastero ", exceeds last ordinal from png.h", lasto
+ err = 1
+ }
+ unexported=0
+ # Add a standard header to symbols.new:
+ print ";Version INSERT-VERSION-HERE" >of
+ print ";--------------------------------------------------------------" >of
+ print "; LIBPNG symbol list as a Win32 DEF file" >of
+ print "; Contains all the symbols that can be exported from libpng" >of
+ print ";--------------------------------------------------------------" >of
+ print "LIBRARY" >of
+ print "" >of
+ print "EXPORTS" >of
+
+ for (o=1; o<=lasto; ++o) {
+ if (symbol[o] == "" && removed[o] == "") {
+ if (unexported == 0) unexported = o
+ if (official[o] == "") {
+ # missing in export list too, so ok
+ if (o < lasto) continue
+ }
+ }
+ if (unexported != 0) {
+ # Symbols in the .def but not in the new file are errors, but
+ # the 'unexported' symbols aren't in either. By default this
+ # is an error too (see the setting of 'missing' at the start),
+ # but this can be reset on the command line or by stuff in the
+ # file - see the comments above.
+ if (missing != "ignore") {
+ if (o-1 > unexported)
+ print "png.h:", missing ": missing symbols:", unexported "-" o-1
+ else
+ print "png.h:", missing ": missing symbol:", unexported
+ if (missing != "warning")
+ err = 1
+ }
+ unexported = 0
+ }
+ if (symbol[o] != "" && removed[o] != "") {
+ print "png.h: symbol", o, "both exported as '" symbol[o] "' and removed as '" removed[o] "'"
+ err = 1
+ } else if (symbol[o] != official[o]) {
+ # either the symbol is missing somewhere or it changed
+ err = 1
+ if (symbol[o] == "")
+ print "png.h: symbol", o, "is exported as '" official[o] "' in", master
+ else if (official[o] == "")
+ print "png.h: exported symbol", o, "'" symbol[o] "' not present in", master
+ else
+ print "png.h: exported symbol", o, "'" symbol[o] "' exists as '" official[o] "' in", master
+ }
+
+ # Finally generate symbols.new
+ if (symbol[o] != "")
+ print " " symbol[o], "@" o > of
+ }
+
+ if (err != 0) {
+ print "*** A new list is in", of, "***"
+ exit 1
+ }
+}