#!/bin/sh

TMP=${MPRTMP-/tmp}
MPRAWK=${MPRAWK-awk}
lddfile=$TMP/mprso.ldd.$$
nmfile=$TMP/mprso.nm.$$

case "$#" in
1)	aout=`mprwhich -s "$1"` || exit 1;;
*)	echo usage: mprso a.out >&2
	exit 1;;
esac

case "$LD_PRELOAD" in
*libmpr.so*)
	echo mprso: warning: setting LD_PRELOAD=libmpr.so is NOT recommended >&2;;
esac

status=1
trap 'rm -f $lddfile $nmfile; trap 0; exit $status' 0 1 2 15

mprnm "$aout" 2>/dev/null >$nmfile
if grep '	mprbt$' $nmfile >/dev/null; then
	status=0
	exit
fi

case `file "$aout"` in
*ELF*"dynamically linked"*)
	if (cat $nmfile; mprnm -D "$aout" 2>/dev/null) | egrep '	(malloc|realloc)$' >/dev/null; then
		echo mprso: warning: "$aout" already includes malloc/realloc >&2
	fi;;
*)	echo "mprso: error: $aout is static but is not linked with libmpr.a" >&2
	exit;;
esac

unset MPRFI
if ldd "$aout" >$lddfile 2>&1; then
	:
else
	echo "mprso: error: ldd $aout failed: please check LD_LIBRARY_PATH" >&2
	cat $lddfile >&2
	exit
fi

if grep 'not found$' $lddfile >/dev/null; then
	echo "mprso: error: 'ldd $aout' failed: please check LD_LIBRARY_PATH" >&2
	cat $lddfile >&2
	exit
fi

if grep libmpr.so $lddfile >/dev/null; then
	echo "mprso=true; export mprso"
	status=0
	exit
fi

if LD_PRELOAD="${MPRLD_PRELOAD-libmpr.so}${LD_PRELOAD:+:}$LD_PRELOAD" ldd "$aout" >$lddfile 2>&1; then
	:
else
	echo "mprso: error: 'LD_PRELOAD=${MPRLD_PRELOAD-libmpr.so}${LD_PRELOAD:+:}$LD_PRELOAD ldd $aout' failed: please check LD_LIBRARY_PATH" >&2
	cat $lddfile >&2
	exit
fi

if grep 'not found$' $lddfile >/dev/null; then
	echo "mprso: error: 'LD_PRELOAD=${MPRLD_PRELOAD-libmpr.so}${LD_PRELOAD:+:}$LD_PRELOAD ldd $aout' failed: please check LD_LIBRARY_PATH" >&2
	cat $lddfile >&2
	exit
fi

case `file "$aout"` in
*"not stripped")
	;;
*stripped)
	echo "mprso: warning: $aout is a stripped executable" >&2;;
esac

echo "mprso=true; export mprso"
echo "MPRLD_PRELOAD=${MPRLD_PRELOAD-libmpr.so}; export MPRLD_PRELOAD"
status=0
