summaryrefslogtreecommitdiff
path: root/i18npool/source/localedata/data/linkermapfile-check.awk
diff options
context:
space:
mode:
Diffstat (limited to 'i18npool/source/localedata/data/linkermapfile-check.awk')
-rw-r--r--i18npool/source/localedata/data/linkermapfile-check.awk105
1 files changed, 105 insertions, 0 deletions
diff --git a/i18npool/source/localedata/data/linkermapfile-check.awk b/i18npool/source/localedata/data/linkermapfile-check.awk
new file mode 100644
index 000000000000..baa703a3468e
--- /dev/null
+++ b/i18npool/source/localedata/data/linkermapfile-check.awk
@@ -0,0 +1,105 @@
+#!/usr/bin/gawk -f
+# Usage: gawk -f linkermapfile-check.awk *.map *.xml
+# Order of *.map *.xml is important, otherwise all symbols are reported to be
+# missing.
+# Checks if all symbols of all locale data are present in the symbol scoping
+# linker mapfiles. Any output indicates a missing symbol, ../localedata.cxx is
+# grep'ed to indicate the library to which mapfile the symbol should be added.
+# Author: Eike Rathke <er@openoffice.org>
+
+BEGIN {
+ bAnyMissing = 0
+ file = ""
+ nMap = 0
+ nMaps = 0
+ nPublics = 0
+ sPublic[nPublics++] = "getAllCalendars_"
+ sPublic[nPublics++] = "getAllCurrencies_"
+ sPublic[nPublics++] = "getAllFormats0_"
+ bOptional[nPublics] = 1 # getAllFormats1 most times not present
+ sPublic[nPublics++] = "getAllFormats1_"
+ sPublic[nPublics++] = "getBreakIteratorRules_"
+ sPublic[nPublics++] = "getCollationOptions_"
+ sPublic[nPublics++] = "getCollatorImplementation_"
+ sPublic[nPublics++] = "getContinuousNumberingLevels_"
+ sPublic[nPublics++] = "getForbiddenCharacters_"
+ sPublic[nPublics++] = "getLCInfo_"
+ sPublic[nPublics++] = "getLocaleItem_"
+ sPublic[nPublics++] = "getOutlineNumberingLevels_"
+ sPublic[nPublics++] = "getReservedWords_"
+ sPublic[nPublics++] = "getSearchOptions_"
+ sPublic[nPublics++] = "getTransliterations_"
+ sPublic[nPublics++] = "getIndexAlgorithm_"
+ sPublic[nPublics++] = "getUnicodeScripts_"
+ sPublic[nPublics++] = "getFollowPageWords_"
+}
+
+file != FILENAME {
+ file = FILENAME
+ if ( file ~ /\.map$/ )
+ {
+ sMapFile[nMaps] = file
+ nMap = nMaps
+ ++nMaps
+ }
+ else if ( file ~ /\.xml$/ )
+ {
+ bOut = 0
+ n = split( file, arr, /[:\\\/.]/ )
+ locale = arr[n-1]
+ for ( i=0; i<nPublics; ++i )
+ {
+ symbol = sPublic[i] locale ";"
+ bFound = 0
+ for ( j=0; j<nMaps && !bFound; ++j )
+ {
+ if ( sSymbol[j,symbol] )
+ bFound = 1
+ }
+ if ( !bFound && bOptional[i] )
+ {
+ print symbol " not present but optional"
+ bFound = 1
+ }
+ if ( !bFound )
+ {
+ if ( !bOut )
+ {
+ search = "\"" locale "\""
+ while ( !bOut && (getline <"../localedata.cxx") > 0 )
+ {
+ if ( $0 ~ search )
+ {
+ bOut = 1
+ print "../localedata.cxx says this should go into: " $0
+ }
+ }
+ close( "../localedata.cxx" )
+ if ( !bOut )
+ print "../localedata.cxx doesn't indicate to which lib this belongs to:"
+ bOut = 1
+ }
+ print symbol
+ }
+ }
+ if ( bOut)
+ {
+ printf("\n")
+ bAnyMissing = 1
+ }
+ nextfile
+ }
+ else
+ nextfile
+}
+
+# only reached if .map file encountered, read in symbols
+{
+ if ( $1 ~ /;$/ )
+ sSymbol[nMap,$1] = 1
+}
+
+END {
+ if ( !bAnyMissing )
+ print "All good." >>"/dev/stderr"
+}