#!/bin/sh |
|
LINKER="$1" |
shift |
RPATH="" |
LPATH="" |
LPATHS="::" |
LOPTS="" |
|
#Special hack for HP-UX |
LD_PXDB=/dev/null |
export LD_PXDB |
|
#Special hack for SGI |
if test "x$SGI_ABI" = "x"; then |
SGI_ABI=-n32 |
fi |
export SGI_ABI |
|
#set -x |
|
SET_N32="" |
|
case "/$LINKER " in |
*/ld\ *) |
LINKER_IS_LD=yes |
;; |
*) |
LINKER_IS_LD=no |
;; |
esac |
|
DEBUG_FLAGS="" |
COMPILING="yes" |
|
while test "$#" != 0; do |
case $1 in |
-R*) |
if test x$1 = x-R ; then |
tmp="$2" |
shift |
else |
tmp=`echo $1 | sed -e 's/^-R//g'` |
fi |
RPATH="$RPATH:$tmp" |
;; |
-n32) |
SET_N32="-n32" |
;; |
|
-L*) |
if test x$1 = x-L ; then |
tmp="$2" |
shift |
else |
tmp=`echo $1 | sed -e 's/^-L//g'` |
fi |
|
case $LDPATHS in |
*:$tmp:*) |
;; |
*) |
LDPATHS="$LDPATHS$tmp:" |
LDOPTS="$LDOPTS -L$tmp" |
;; |
esac |
;; |
|
-n32) |
SET_N32="-n32" |
;; |
|
|
-Wl,*) |
# Strip '-Wl,' if the linker is ld |
|
if test $LINKER_IS_LD = yes; then |
LDOPTS="$LDOPTS `echo $1|sed -e 's/^-Wl,//'|sed -e 's/,/ /g'`" |
else |
LDOPTS="$LDOPTS $1" |
fi |
;; |
-g|-ggdb3) |
DEBUG_FLAGS="$DEBUG_FLAGS $1" |
;; |
*.s|*.S|*.asm) |
COMPILING="no"; |
LDOPTS="$LDOPTS $1" |
;; |
*) |
LDOPTS="$LDOPTS $1" |
;; |
esac |
shift |
done |
|
if test "x$COMPILING" = "xyes"; then |
LDOPTS="$LDOPTS $DEBUG_FLAGS" |
fi |
|
LDOPTS="$SET_N32 $LDOPTS" |
|
RPATH="$RPATH:${LD_LIBRARY_PATH-}" |
|
OLDIFS="$IFS" |
IFS=: |
set dummy $RPATH |
shift |
IFS="$OLDIFS" |
|
while test x$1 = x -a x$# != x0; do |
shift |
done |
|
if test -x /usr/bin/uname 2>/dev/null; then |
UNAME=`/usr/bin/uname -sr` |
elif test -x /bin/uname 2>/dev/null; then |
UNAME=`/bin/uname -sr` |
else |
UNAME=unknown |
fi |
|
if test x$# != x0 ; then |
|
done="::$1:" |
RPATH="$1" |
shift |
|
while test x$# != x0 ; |
do |
case $done in |
*:$1:*) ;; |
*) |
RPATH="$RPATH:$1" |
done="$done$1:" |
;; |
esac |
shift |
done |
|
case "$LINKER $LDOPTS " in |
*\ -c\ * | cpp\ * | *\ -E\ *) |
LINKING=no |
;; |
|
*) |
LINKING=maybe |
;; |
esac |
|
case "$UNAME" in |
OSF1\ V4.*) |
LDOPTS="$LDOPTS -rpath $RPATH" |
;; |
IRIX\ 6.*) |
LDOPTS="$LDOPTS -rpath $RPATH" |
;; |
IRIX\ 5.*) |
LDOPTS="$LDOPTS -rpath $RPATH" |
;; |
SunOS\ 5.*) |
LDOPTS="$LDOPTS -R$RPATH" |
;; |
Linux\ 1.*) |
LD_LIBRARY_PATH="$RPATH" |
LD_RUN_PATH="$RPATH" |
export LD_LIBRARY_PATH LD_RUN_PATH |
;; |
Linux\ *) |
if test x$LINKING != xno -a "x$RPATH" != x ; then |
LDOPTS="$LDOPTS -Wl,-rpath,$RPATH" |
fi |
;; |
UnixWare\ 7.*) |
if test x$LINKING != xno -a "x$RPATH" != x ; then |
LDOPTS="$LDOPTS -Xlinker -YP, -Xlinker $RPATH" |
fi |
;; |
Darwin\ *|NetBSD\ *) |
if test x$LINKING != xno -a "x$RPATH" != x ; then |
OIFS="$IFS" |
IFS=":" |
RPP="$PATH" |
for RP in $RPATH ; do |
LDOPTS="$LDOPTS -Wl,-rpath,$RP" |
done |
IFS="$OIFS" |
fi |
;; |
*) |
LD_LIBRARY_PATH="$RPATH" |
LD_RUN_PATH="$RPATH" |
export LD_LIBRARY_PATH LD_RUN_PATH |
;; |
esac |
fi |
|
#case "x$UNAME" in |
# AIX*) |
# # AIX cc doesn't work with ulimit set |
# : |
# ;; |
# *) |
# if test "x$NO_ULIMIT" = "x"; then |
# # Limit data segment size to 48MB. |
# ulimit -d 49152 >/dev/null 2>&1 |
# fi |
# ;; |
#esac |
|
case "$UNAME" in |
Darwin\ 1[3-9]*|Darwin\ [2-9][0-9]*) |
# C++ Name mangling changed here, need to be able to interoperate with modern libs |
if test "x$MACOSX_DEPLOYMENT_TARGET" = "x" ; then |
export MACOSX_DEPLOYMENT_TARGET=10.9 |
fi |
;; |
Darwin\ [7-9]*|Darwin\ [1-9][0-9]*) |
# Needs to be 10.3 or better for ld to accept "-undefined dynamic_lookup" |
if test "x$MACOSX_DEPLOYMENT_TARGET" = "x" ; then |
export MACOSX_DEPLOYMENT_TARGET=10.3 |
fi |
;; |
*) |
;; |
esac |
|
#echo $LINKER $LDOPTS |
|
# exec $LINKER $LDOPTS |
# Used to be exec, but Digital-Unix's stupid sh has buggy variable-expansion. |
# /grubba |
# eval $LINKER $LDOPTS |
# Used to be eval, but then quoting won't work. |
# /grubba 1998-12-16 |
$LINKER $LDOPTS |
exit $? |
|