|
#!/bin/sh |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mktemp() { |
|
echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$" |
|
} |
|
|
|
if [ $# -lt 2 ]; then |
|
echo "Usage: makedef <version_script> <objects>" >&2 |
|
exit 0 |
|
fi |
|
|
|
vscript=$1 |
|
shift |
|
|
|
if [ ! -f "$vscript" ]; then |
|
echo "Version script does not exist" >&2 |
|
exit 1 |
|
fi |
|
|
|
for object in "$@"; do |
|
if [ ! -f "$object" ]; then |
|
echo "Object does not exist: ${object}" >&2 |
|
exit 1 |
|
fi |
|
done |
|
|
|
|
|
|
|
libname=$(mktemp -u "library").lib |
|
|
|
trap 'rm -f -- $libname' EXIT |
|
|
|
if [ -n "$AR" ]; then |
|
$AR rcs ${libname} $@ >/dev/null |
|
else |
|
lib.exe -out:${libname} $@ >/dev/null |
|
fi |
|
if [ $? != 0 ]; then |
|
echo "Could not create temporary library." >&2 |
|
exit 1 |
|
fi |
|
|
|
IFS=' |
|
' |
|
|
|
prefix="$EXTERN_PREFIX" |
|
|
|
started=0 |
|
regex="none" |
|
|
|
for line in $(cat ${vscript} | tr '\t' ' '); do |
|
|
|
echo "${line}" | grep -q '^ \+global:' |
|
if [ $? = 0 ]; then |
|
started=1 |
|
line=$(echo "${line}" | sed -e 's/^ \{1,\}global: *//') |
|
else |
|
echo "${line}" | grep -q '^ \+local:' |
|
if [ $? = 0 ]; then |
|
started=0 |
|
fi |
|
fi |
|
|
|
if [ ${started} = 0 ]; then |
|
continue |
|
fi |
|
|
|
|
|
IFS=';' |
|
|
|
|
|
line=$(echo "${line}" | sed -e 's/\*/.\\+/g') |
|
for exp in ${line}; do |
|
|
|
exp=$(echo "${exp}" | sed -e 's/^ *//' -e 's/ *$//') |
|
|
|
if [ "${regex}" = "none" ]; then |
|
regex="${exp}" |
|
else |
|
regex="${regex};${exp}" |
|
fi |
|
done |
|
|
|
IFS=' |
|
' |
|
done |
|
|
|
if [ -n "$NM" ]; then |
|
|
|
dump=$(eval "$NM --defined-only -g ${libname}" | |
|
grep -v : | |
|
grep -v ^$ | |
|
cut -d' ' -f3 | |
|
sed -e "s/^${prefix}//") |
|
else |
|
dump=$(dumpbin.exe -linkermember:1 ${libname} | |
|
sed -e '/public symbols/,$!d' -e '/^ \{1,\}Summary/,$d' -e "s/ \{1,\}${prefix}/ /" -e 's/ \{1,\}/ /g' | |
|
tail -n +2 | |
|
cut -d' ' -f3) |
|
fi |
|
|
|
rm ${libname} |
|
|
|
IFS=';' |
|
list="" |
|
for exp in ${regex}; do |
|
list="${list}"' |
|
'$(echo "${dump}" | |
|
grep "^${exp}" | |
|
sed -e 's/^/ /') |
|
done |
|
|
|
echo "EXPORTS" |
|
echo "${list}" | sort | uniq | tail -n +2 |
|
|