1*b1cdbd2cSJim Jagielski#!/bin/sh 2*b1cdbd2cSJim Jagielski# ************************************************************* 3*b1cdbd2cSJim Jagielski# 4*b1cdbd2cSJim Jagielski# Licensed to the Apache Software Foundation (ASF) under one 5*b1cdbd2cSJim Jagielski# or more contributor license agreements. See the NOTICE file 6*b1cdbd2cSJim Jagielski# distributed with this work for additional information 7*b1cdbd2cSJim Jagielski# regarding copyright ownership. The ASF licenses this file 8*b1cdbd2cSJim Jagielski# to you under the Apache License, Version 2.0 (the 9*b1cdbd2cSJim Jagielski# "License"); you may not use this file except in compliance 10*b1cdbd2cSJim Jagielski# with the License. You may obtain a copy of the License at 11*b1cdbd2cSJim Jagielski# 12*b1cdbd2cSJim Jagielski# http://www.apache.org/licenses/LICENSE-2.0 13*b1cdbd2cSJim Jagielski# 14*b1cdbd2cSJim Jagielski# Unless required by applicable law or agreed to in writing, 15*b1cdbd2cSJim Jagielski# software distributed under the License is distributed on an 16*b1cdbd2cSJim Jagielski# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17*b1cdbd2cSJim Jagielski# KIND, either express or implied. See the License for the 18*b1cdbd2cSJim Jagielski# specific language governing permissions and limitations 19*b1cdbd2cSJim Jagielski# under the License. 20*b1cdbd2cSJim Jagielski# 21*b1cdbd2cSJim Jagielski# ************************************************************* 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski# This script is needed in the process of generating exported 24*b1cdbd2cSJim Jagielski# symbols list out of map files on Mac OS X (see also #i69351#) 25*b1cdbd2cSJim Jagielski# The magic generating the regular expression from the temporary 26*b1cdbd2cSJim Jagielski# mapfile containing only star and question mark symbols 27*b1cdbd2cSJim Jagielski# 28*b1cdbd2cSJim Jagielski# The script has to be called as follows: 29*b1cdbd2cSJim Jagielski# nm -gx <file>.o | addsym-macosx.sh <file-with-wildcard-symbols> <temporary-file-where-to-write-the-search-expression-to> 30*b1cdbd2cSJim Jagielski# See tg_shl.mk for an example of how to use the script 31*b1cdbd2cSJim Jagielski# 32*b1cdbd2cSJim Jagielski# Replace every * with .* and every ? with . to get awk expression 33*b1cdbd2cSJim Jagielski# Put ^ at the beginning of every expression 34*b1cdbd2cSJim Jagielski# Put $ at the beginning of every expression 35*b1cdbd2cSJim Jagielski# Connect them all on one line, separated by | 36*b1cdbd2cSJim Jagielski# Remove | at the end of this regular expression because the last end 37*b1cdbd2cSJim Jagielski# of line was also replaced by | 38*b1cdbd2cSJim Jagielski 39*b1cdbd2cSJim Jagielskicat $1 | sed 's#*#.*#g 40*b1cdbd2cSJim Jagielskis#?#.#g 41*b1cdbd2cSJim Jagielskis#^#^# 42*b1cdbd2cSJim Jagielskis#$#$#' | tr '\n' '|' | sed "s#|\$##" >$2 43*b1cdbd2cSJim Jagielski 44*b1cdbd2cSJim Jagielski# Please note that the awk expression expects to get the output of 'nm -gx'! 45*b1cdbd2cSJim Jagielski# On Panther we have to filter out symbols with a value "1f" otherwise external 46*b1cdbd2cSJim Jagielski# symbols will erroneously be added to the generated export symbols list file. 47*b1cdbd2cSJim Jagielskiawk -v SYMBOLSREGEXP="`cat $2`" ' 48*b1cdbd2cSJim Jagielskimatch ($6,SYMBOLSREGEXP) > 0 && $6 !~ /_GLOBAL_/ { if (($2 != 1) && ( $2 != "1f" ) ) print $6 }' 49*b1cdbd2cSJim Jagielski 50