library=
major=
minor=
+unused=
srcdir=.
+plain=
done=
while [ -z "$done" ] && [ $# -gt 0 ] ; do
case "$1" in
minor="$1"
shift
;;
+ -i)
+ ignore=yes
+ shift
+ ;;
+ -p)
+ plain=yes
+ shift
+ ;;
--)
shift
done=yes
;;
*)
- echo 'Usage: shlib-build -l <lib> -M <major> -m <minor> -- ...' >&2
+ echo 'Usage: shlib-build (-p -f <file> | [-i] -l <lib> -M <major> -m <minor>) -- ...' >&2
exit 1
;;
esac
done
-if [ -z "$library" ] ; then
- echo 'Usage: shlib-install -l <lib> -M <major> -m <minor>' >&2
+if [ -z "$library" ] && [ -z "$plain" ] || \
+ [ -z "$filename" ] && [ "x$plain" != "x" ] ; then
+ echo 'Usage: shlib-build (-p -f <file> | [-i] -l <lib> -M <major> -m <minor>) -- ...' >&2
exit 1
fi
fi
case $sysname in
rs_aix*)
- if [ -f "$srcdir/$library.exp" ] ; then
- export="-bE:$srcdir/$library.exp"
+ if [ -z "$plain" ] && [ -f "$srcdir/$library.map" ] ; then
+ cat $srcdir/$library.map | \
+ awk '/local:/ {inglobal=0};
+ inglobal { sub(/;/,""); print };
+ /global:/ { inglobal=1};' \
+ > $library.exp
+ export="-bE:$library.exp"
fi
echo "$linker $export -o $filename $*"
$linker $export -o "$filename" "$@"
;;
sun*_5*)
- if [ -f "$srcdir/$library.map" ] ; then
- export="-Wl,-M$srcdir/$library.map"
+ if [ -z "$plain" ] && [ -f "$srcdir/$library.map" ] ; then
+ if [ -z "$ignore" ] ; then
+ export="-Wl,-M$srcdir/$library.map"
+ else
+ # add "= EXTERN" to every symbol, so we don't get errors about
+ # undefined symbols
+ cat "$srcdir/$library.map" | \
+ sed -e 's/\([a-zA-Z_]\);$/\1 = EXTERN;/' > "$library.real.map"
+ export="-Wl,-M$library.real.map"
+ fi
fi
if [ -z "$soname" ] ; then
echo "$linker $export -o $filename $*"
fi
;;
*_linux*)
- if [ -f "$srcdir/$library.map" ] ; then
+ if [ -z "$plain" ] && [ -f "$srcdir/$library.map" ] ; then
export="-Wl,--version-script=$srcdir/$library.map"
fi
if [ -z "$soname" ] ; then
fi
;;
hp_ux*)
- if [ -f "$srcdir/$library.hp" ] ; then
+ if [ -z "$plain" ] && [ -f "$srcdir/$library.hp" ] ; then
export="-c $srcdir/$library.hp"
fi
echo "$linker $export -o $filename $*"
$linker $export -o "$filename" "$@"
;;
+*darwin*)
+ if [ -z "$plain" ] && [ -f "$srcdir/$library.map" ] ; then
+ # For 10.4 and later, the Mac exports list is a list of symbols,
+ # prefixed with an '_'
+ cat $srcdir/$library.map | \
+ awk '/local:/ {inglobal=0};
+ /^[\t ]+#/ {next};
+ inglobal { sub(/;/,""); sub(/[\t ]+/,"_"); print };
+ /global:/ { inglobal=1};' \
+ > $library.exp
+ export="-Wl,-exported_symbols_list,$library.exp"
+ if [ ! -z "$ignore" ] ; then
+ export="$export,-undefined,dynamic_lookup"
+ fi
+ fi
+ echo "$linker $export -o $filename $*"
+ $linker $export -o "$filename" "$@"
+ ;;
*)
echo "$linker -o $filename $*"
$linker -o "$filename" "$@"