#!/usr/bin/gawk -f # ************************************************************* # # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # # ************************************************************* # 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 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 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" }