Commit Diff


commit - e9a569a96aa4b4b4f18a6d8ade511ee7812c30a6
commit + ead3e31153b4258073dd16f990e0bc1842646562
blob - cc6ec8ed7e6f52c9b861165e5bcf7d38761b5ebb
blob + cbd67ce97043d68c12cdef3598b3dd3ee5235ef4
--- bin/9c
+++ bin/9c
@@ -27,7 +27,7 @@ case "$tag" in
 		cflags="$ngflags -g3 -no-cpp-precomp" ;;
 *HP-UX*)	cc=cc; cflags="-g -O -c -Ae" ;;
 *Linux*)	usegcc 
-		case "`uname -r`" in
+		case "${SYSVERSION:-`uname -r`}" in
 		2.6.*)
 			cflags="$cflags -D__Linux26__"
 			;;
@@ -53,12 +53,20 @@ case "$tag" in
 	exit 1
 esac
 
+# N.B. Must use temp file to avoid pipe; pipe loses status.
+xtmp=/tmp/9c.$$.$USER.out
+status=x
 case "$tag" in
 *SunOS*-cc)
-	exec $cc -DPLAN9PORT -I$PLAN9/include $cflags "$@" 2>&1 | 
+	$cc -DPLAN9PORT -I$PLAN9/include $cflags "$@" 2>&1 | 
 		/bin/sed 's/\"\([^\"][^\"]*\)\", line \([0-9][0-9]*\)/\1:\2/g' 1>&2
+	status=$?
 	;;
 *)
-	exec $cc -DPLAN9PORT -I$PLAN9/include $cflags "$@"
+	$cc -DPLAN9PORT -I$PLAN9/include $cflags "$@"
+	status=$?
 	;;
-esac
+esac >$xtmp 2>&1
+grep -v '__p9l_autolib_' $xtmp
+rm -f $xtmp
+exit $status
blob - 4df0ef8de35d694ed09c0ea530ff432d016f5aa6
blob + be4014418ad963ccfc05e81af83abe4ff4fe399c
--- bin/9l
+++ bin/9l
@@ -1,5 +1,115 @@
 #!/bin/sh
 
+libsl=""
+
+doautolib=1
+verbose=0
+
+if [ "x$1" = "x-l" ]
+then
+	shift
+	doautolib=0
+elif [ "x$1" = "x-v" ]
+then
+	shift
+	verbose=1
+fi
+
+if [ $doautolib = 1 ]
+then
+	ofiles=""
+	for i
+	do
+		case "$i" in
+		[^-]*.o)
+			ofiles="$ofiles $i"
+			;;
+		esac
+	done
+	
+	# echo "ofiles $ofiles"
+	autolibs=""
+	if [ "x$ofiles" != "x" ]
+	then
+		autolibs=`
+			nm $ofiles |
+			grep '__p9l_autolib_[a-zA-Z0-9+-]*$' |
+			sed 's/.* __p9l_autolib_//' |
+			sort -u
+		`
+	fi
+	# echo "autolibs $autolibs"
+	
+	libsl=""
+	special="mp draw 9pclient mux thread bio"	# order matters
+	for i in $special
+	do
+		eval "need$i=0"
+	done
+	
+	for i in $autolibs
+	do
+		case "$i" in
+		9pclient)
+			need9pclient=1
+			needmux=1
+			needthread=1
+			;;
+		bio)
+			needbio=1
+			;;
+		draw)
+			needdraw=1
+			;;
+		mp)
+			needmp=1
+			;;
+		mux)
+			needmux=1
+			needthread=1
+			;;
+		plumb)
+			need9pclient=1
+			needmux=1
+			needthread=1
+			libsl="$libsl -lplumb"
+			;;
+		sec)
+			needmp=1
+			libsl="$libsl -lsec"
+			;;
+		thread)
+			needthread=1
+			;;
+		venti)
+			libsl="$libsl -lventi"
+			needthread=1
+			;;
+		*)
+			libsl="$libsl -l$i"
+			;;
+		esac
+	done
+	
+	for i in $special
+	do
+		if eval "[ \$need$i = 1 ]"
+		then
+			libsl="$libsl -l$i"
+		fi
+	done
+	libsl="$libsl -l9"
+	
+	if [ $needdraw = 1 ]
+	then
+		if [ "x$X11" = "x" ]
+		then
+			X11=/usr/X11R6
+		fi
+		libsl="$libsl -L$X11/lib -lX11"
+	fi
+fi
+
 extralibs="-lm"
 tag="${SYSNAME:-`uname`}-${OBJTYPE:-`uname -m`}"
 case "$tag" in
@@ -36,4 +146,8 @@ case "$tag" in
 	exit 1
 esac
 
-exec $ld -L$PLAN9/lib "$@" $extralibs
+if [ $verbose = 1 ]
+then
+	echo $ld -L$PLAN9/lib "$@" $libsl $extralibs
+fi
+exec $ld -L$PLAN9/lib "$@" $libsl $extralibs