#!/bin/sh

test -f $PLAN9/config && . $PLAN9/config
libsl=""
frameworks=""
doautolib=true
doautoframework=true
verbose=false

nmflags=""
extralibs="-lm"
tag="${SYSNAME:-`uname`}-${OBJTYPE:-`uname -m`}"
case "$tag" in
*FreeBSD*)
	ld=${CC9:-gcc}
	userpath=true
	extralibs="$extralibs -lutil"
	case "`uname -r`" in
	5.2.*)
		extralibs="$extralibs -lkse"
		;;
	[5-9].*)
		extralibs="$extralibs -lpthread"
		;;
	esac
	;;
*DragonFly*|*BSD*)
	ld=${CC9:-gcc}
	userpath=true
	extralibs="$extralibs -lutil"
	;;
*OSF1*)
	ld=${CC9:-cc}
	userpath=true
	extralibs="$extralibs -lutil"
	nmflags="-B"
	;;
*Linux*)
	ld=${CC9:-gcc}
	userpath=true
	extralibs="$extralibs -lutil -lresolv"
	case "${SYSVERSION:-`uname -r`}" in
	2.6.* | 3.*)
		extralibs="$extralibs -lpthread"
		;;
	esac
	;;
*Darwin*x86_64*)
	ld="${CC9:-gcc} -m64"
	;;
*Darwin*)
	ld="${CC9:-gcc} -m32"
	;;
*SunOS*)
	ld="${CC9:-cc} -g"
	extralibs="$extralibs -lrt -lpthread -lsocket -lnsl"
	# Record paths to shared libraries to avoid needing LD_LIBRARY_PATH 
	for i in "$libsl $@"
	do
		case "$i" in
		-L*)
			s=`echo $i | sed 's/-L/-R/'`
			extralibs="$extralibs $s"
			;;
		esac
	done
	case "${SYSVERSION:-`uname -r`}" in
	5.[67])
		echo do not know how to link right thread library on "$tag" 1>&2
		;;
	5.8)
		# Some trickery is needed to force use of
		# alternate thread lib from /usr/lib/lwp
		# Likely, this only works with sun cc,
		# for other compiler/loader we would need other flags.
		ld="$ld -i"
		extralibs="$extralibs /usr/lib/lwp/libthread.so -R/usr/lib/lwp:/usr/lib"
		;;
	esac
	;;
*AIX*)
	ld=${CC9:-gcc}
	nmflags="-B"
	;;
*)
	echo do not know how to link on "$tag" 1>&2
	exit 1
esac

if [ "x$1" = "x-l" ]
then
	shift
	doautolib=false
	doautoframework=false
elif [ "x$1" = "x-v" ]
then
	shift
	verbose=true
fi

target=a.out
if [ "x$1" = "x-o" ]
then
	target=$2
fi

if $doautolib
then
	ofiles=""
	lpaths="$PLAN9/lib"
	for i
	do
		case "$i" in
		*.[ao])
			ofiles="$ofiles $i"
			;;
		-L*)
			l=`echo $i | sed 's/-L//'`
			lpaths="$lpaths $l"
		esac
	done
	
	if $verbose
	then
		echo "ofiles $ofiles"
		echo "lpaths $lpaths"
	fi

	autolibs=""
	if [ "x$ofiles" != "x" ]
	then
		a=`
			nm $nmflags $ofiles |
			grep '__p9l_autolib_[a-zA-Z0-9+-]*$' |
			sed 's/.*__p9l_autolib_//' |
			sort -u
		`
		for i in $a
		do
			autolibs="$autolibs $i"
			eval "need$i=true"
		done
	fi
	if $verbose
	then
		echo "autolibs1 $autolibs"
	fi

	# fetch dependencies out of libraries
	workq="$autolibs"
	while [ "x$workq" != "x" ]
	do
		w="$workq"
		workq=""
		for i in $w
		do
			# can't trust the libraries about using
			# libthread or libdraw - we might not be linking with
			# those object files.
			a=""
			for lpath in $lpaths
			do
				b=`
					nm $lpath/lib$i.a 2>/dev/null |
					grep '__p9l_autolib_[a-zA-Z0-9+-]*$' |
					sed 's/.*__p9l_autolib_//' |
					sort -u |
					egrep -v '^(thread|draw)$'
				`
				a="$a $b"
			done
			# fix up libraries that really need draw
			if [ "x$i" = "xmemdraw" -o "x$i" = "xmemlayer" -o "x$i" = "xframe" ]
			then
				a="$a draw"
			fi
			okayfn="true"
			for j in $a
			do
				if eval "[ x\$need$j = x ]"
				then
					autolibs="$autolibs $j"
					workq="$workq $j"
					eval "need$j=true"
				fi
				if [ $j != $i ]
				then
					okayfn="$okayfn && have$j"
				fi
			done
			if $verbose
			then
				echo "can$i: $okayfn"
			fi
			eval "can$i() { $okayfn; }"
		done
	done
	if $verbose
	then
		echo "autolibs $autolibs"
	fi

	for i in $autolibs
	do
		eval "have$i() { false; }"
	done
	havethread() { false; }
	havesec() { false; }
	canmemlayer() { havedraw; }

	# now find correct order
	libsl=""
	while [ "x$autolibs" != x ]
	do
		stillneed=""
		didnothing=true
		for i in $autolibs
		do
			if eval "can$i"
			then
				libsl="-l$i $libsl"
				eval "have$i() { true; }"
				didnothing=false
			else
				stillneed="$stillneed $i"
			fi
		done
		# break cycle by setting the last library on the list
		# to have no dependencies
		if $didnothing
		then
			j="xxx"
			for i in $autolibs
			do
				j=$i
			done
			echo "dependency cycle: $autolibs; breaking with $j"
			eval "can$j() { true; }"
		fi
		autolibs="$stillneed"
	done
	if $verbose
	then
		echo "liborder $libsl"
	fi
	libsl="$libsl -l9"

	# cycle: lib9 expects p9main, which is defined in libthread.  oops.
	if havethread
	then
		libsl="$libsl -lthread -l9"
	fi

	# cycle: lib9 netcrypt uses libsec
	if havesec
	then
		libsl="$libsl -lsec -l9"
	fi

	if [ "x$needndb" = xtrue -a '(' -f /usr/lib/libresolv.a -o -f /usr/lib/libresolv.dylib ')' ]
	then
		libsl="$libsl -lresolv"
	fi

	if [ "x$needX11" = xtrue -a "x$WSYSTYPE" != xnowsys ]
	then
		if [ "x$X11" = "x" ]
		then
			X11=/usr/X11R6
		fi
		# Don't say -L with a non-existent directory: Xcode complains.
		# x86_64 seems to put its 64-bit libraries in lib64.
		if [ "${OBJTYPE:-`uname -m`}" = "x86_64" -a -d "$X11/lib64" ]
		then
			libsl="$libsl -L$X11/lib64"
		fi
		if [ -d "$X11/lib" ]
		then
			libsl="$libsl -L$X11/lib"
		fi
		libsl="$libsl -lX11"
	fi
fi
if $doautoframework
then
	ofiles=""
	for i
	do
		case "$i" in
		*.[ao])
			ofiles="$ofiles $i"
			;;
		esac
	done

	# echo "ofiles $ofiles"
	autoframeworks=""
	if [ "x$ofiles" != "x" ]
	then
		a=`
			nm $ofiles |
			grep '__p9l_autoframework_[a-zA-Z0-9+-]*$' |
			sed 's/.*__p9l_autoframework_//' |
			sort -u
		`
		for i in $a
		do
			autoframeworks="$autoframeworks $i"
			eval "need$i=true"
		done
	fi

	if $verbose
	then
		echo "autoframeworks $autoframeworks"
	fi

	for i in $autoframeworks
	do
		eval "have$i() { false; }"
	done

	frameworks=""
	for i in $autoframeworks
	do	
		frameworks="-framework $i $frameworks"
	done
fi

case "$userpath" in
true)
	for i in "$libsl $@"
	do
		case "$i" in
		-L*)
			s=`echo $i | sed 's/-L/-Wl,-rpath,/'`
			extralibs="$extralibs $s"
			;;
		esac
	done
	;;
esac

if $verbose
then
	echo $ld -L$PLAN9/lib "$@" $libsl $extralibs $frameworks
fi

xtmp=/tmp/9l.$$.$USER.out
xxout() {
	sed 's/.*: In function `[^:]*: *//' $xtmp | egrep . | 
	egrep -v 'is (often|almost always) misused|is dangerous, better use' 
	rm -f $xtmp
}

if $ld -L$PLAN9/lib "$@" $libsl $extralibs $frameworks >$xtmp 2>&1
then
	xxout
	exit 0
else
	xxout
	rm -f $target
	exit 1
fi

