1160814Ssimon#!/bin/sh 2160814Ssimon 3160814Ssimon[ $# -ne 0 ] || set -x # debug mode without arguments:-) 4160814Ssimon 5160814SsimonTHERE="`echo $0 | sed -e 's|[^/]*$||' 2>/dev/null`.." 6160814Ssimon[ -d "${THERE}" ] || exec "$@" # should never happen... 7160814Ssimon 8160814Ssimon# Alternative to this is to parse ${THERE}/Makefile... 9160814SsimonLIBCRYPTOSO="${THERE}/libcrypto.so" 10160814Ssimonif [ -f "$LIBCRYPTOSO" ]; then 11160814Ssimon while [ -h "$LIBCRYPTOSO" ]; do 12160814Ssimon LIBCRYPTOSO="${THERE}/`ls -l "$LIBCRYPTOSO" | sed -e 's|.*\-> ||'`" 13160814Ssimon done 14160814Ssimon SOSUFFIX=`echo ${LIBCRYPTOSO} | sed -e 's|.*\.so||' 2>/dev/null` 15160814Ssimon LIBSSLSO="${THERE}/libssl.so${SOSUFFIX}" 16160814Ssimonfi 17160814Ssimon 18160814SsimonSYSNAME=`(uname -s) 2>/dev/null`; 19160814Ssimoncase "$SYSNAME" in 20160814SsimonSunOS|IRIX*) 21160814Ssimon # SunOS and IRIX run-time linkers evaluate alternative 22160814Ssimon # variables depending on target ABI... 23160814Ssimon rld_var=LD_LIBRARY_PATH 24160814Ssimon case "`(/usr/bin/file "$LIBCRYPTOSO") 2>/dev/null`" in 25194206Ssimon *ELF\ 64*SPARC*|*ELF\ 64*AMD64*) 26160814Ssimon [ -n "$LD_LIBRARY_PATH_64" ] && rld_var=LD_LIBRARY_PATH_64 27194206Ssimon LD_PRELOAD_64="$LIBCRYPTOSO $LIBSSLSO"; export LD_PRELOAD_64 28194206Ssimon preload_var=LD_PRELOAD_64 29160814Ssimon ;; 30194206Ssimon # Why are newly built .so's preloaded anyway? Because run-time 31194206Ssimon # .so lookup path embedded into application takes precedence 32194206Ssimon # over LD_LIBRARY_PATH and as result application ends up linking 33194206Ssimon # to previously installed .so's. On IRIX instead of preloading 34194206Ssimon # newly built .so's we trick run-time linker to fail to find 35194206Ssimon # the installed .so by setting _RLD_ROOT variable. 36194206Ssimon *ELF\ 32*MIPS*) 37194206Ssimon #_RLD_LIST="$LIBCRYPTOSO:$LIBSSLSO:DEFAULT"; export _RLD_LIST 38194206Ssimon _RLD_ROOT=/no/such/dir; export _RLD_ROOT 39194206Ssimon eval $rld_var=\"/usr/lib'${'$rld_var':+:$'$rld_var'}'\" 40194206Ssimon preload_var=_RLD_LIST 41194206Ssimon ;; 42160814Ssimon *ELF\ N32*MIPS*) 43160814Ssimon [ -n "$LD_LIBRARYN32_PATH" ] && rld_var=LD_LIBRARYN32_PATH 44194206Ssimon #_RLDN32_LIST="$LIBCRYPTOSO:$LIBSSLSO:DEFAULT"; export _RLDN32_LIST 45194206Ssimon _RLDN32_ROOT=/no/such/dir; export _RLDN32_ROOT 46194206Ssimon eval $rld_var=\"/usr/lib32'${'$rld_var':+:$'$rld_var'}'\" 47194206Ssimon preload_var=_RLDN32_LIST 48160814Ssimon ;; 49160814Ssimon *ELF\ 64*MIPS*) 50160814Ssimon [ -n "$LD_LIBRARY64_PATH" ] && rld_var=LD_LIBRARY64_PATH 51194206Ssimon #_RLD64_LIST="$LIBCRYPTOSO:$LIBSSLSO:DEFAULT"; export _RLD64_LIST 52194206Ssimon _RLD64_ROOT=/no/such/dir; export _RLD64_ROOT 53194206Ssimon eval $rld_var=\"/usr/lib64'${'$rld_var':+:$'$rld_var'}'\" 54194206Ssimon preload_var=_RLD64_LIST 55160814Ssimon ;; 56160814Ssimon esac 57194206Ssimon eval $rld_var=\"${THERE}'${'$rld_var':+:$'$rld_var'}'\"; export $rld_var 58160814Ssimon unset rld_var 59160814Ssimon ;; 60160814Ssimon*) LD_LIBRARY_PATH="${THERE}:$LD_LIBRARY_PATH" # Linux, ELF HP-UX 61160814Ssimon DYLD_LIBRARY_PATH="${THERE}:$DYLD_LIBRARY_PATH" # MacOS X 62160814Ssimon SHLIB_PATH="${THERE}:$SHLIB_PATH" # legacy HP-UX 63160814Ssimon LIBPATH="${THERE}:$LIBPATH" # AIX, OS/2 64160814Ssimon export LD_LIBRARY_PATH DYLD_LIBRARY_PATH SHLIB_PATH LIBPATH 65160814Ssimon # Even though $PATH is adjusted [for Windows sake], it doesn't 66160814Ssimon # necessarily does the trick. Trouble is that with introduction 67160814Ssimon # of SafeDllSearchMode in XP/2003 it's more appropriate to copy 68160814Ssimon # .DLLs in vicinity of executable, which is done elsewhere... 69160814Ssimon if [ "$OSTYPE" != msdosdjgpp ]; then 70160814Ssimon PATH="${THERE}:$PATH"; export PATH 71160814Ssimon fi 72160814Ssimon ;; 73160814Ssimonesac 74160814Ssimon 75194206Ssimonif [ -f "$LIBCRYPTOSO" -a -z "$preload_var" ]; then 76160814Ssimon # Following three lines are major excuse for isolating them into 77160814Ssimon # this wrapper script. Original reason for setting LD_PRELOAD 78160814Ssimon # was to make it possible to pass 'make test' when user linked 79160814Ssimon # with -rpath pointing to previous version installation. Wrapping 80160814Ssimon # it into a script makes it possible to do so on multi-ABI 81160814Ssimon # platforms. 82160814Ssimon case "$SYSNAME" in 83205128Ssimon *BSD|QNX) LD_PRELOAD="$LIBCRYPTOSO:$LIBSSLSO" ;; # *BSD, QNX 84160814Ssimon *) LD_PRELOAD="$LIBCRYPTOSO $LIBSSLSO" ;; # SunOS, Linux, ELF HP-UX 85160814Ssimon esac 86160814Ssimon _RLD_LIST="$LIBCRYPTOSO:$LIBSSLSO:DEFAULT" # Tru64, o32 IRIX 87194206Ssimon DYLD_INSERT_LIBRARIES="$LIBCRYPTOSO:$LIBSSLSO" # MacOS X 88194206Ssimon export LD_PRELOAD _RLD_LIST DYLD_INSERT_LIBRARIES 89160814Ssimonfi 90160814Ssimon 91238405Sjkimcmd="$1${EXE_EXT}" 92238405Sjkimshift 93264331Sjkimif [ $# -eq 0 ]; then 94264331Sjkim exec "$cmd" # old sh, such as Tru64 4.x, fails to expand empty "$@" 95264331Sjkimelse 96264331Sjkim exec "$cmd" "$@" 97264331Sjkimfi 98