works on Linux 2.6
diff --git a/bin/9l b/bin/9l
index 39e6eb1..62e106e 100755
--- a/bin/9l
+++ b/bin/9l
@@ -27,7 +27,7 @@
 	for i
 	do
 		case "$i" in
-		*.o)
+		*.[ao])
 			ofiles="$ofiles $i"
 			;;
 		esac
@@ -58,11 +58,15 @@
 		workq=""
 		for i in $w
 		do
+			# can't trust the libraries about using
+			# libthread - we might not be linking with
+			# those object files.
 			a=`
 				nm $PLAN9/lib/lib$i.a |
 				grep '__p9l_autolib_[a-zA-Z0-9+-]*$' |
 				sed 's/.*__p9l_autolib_//' |
-				sort -u
+				sort -u |
+				grep -v thread
 			`
 			okayfn="true"
 			for j in $a
@@ -131,9 +135,9 @@
 	libsl="$libsl -l9"
 
 	# cycle: lib9 expects p9main, which is defined in libthread.  oops.
-	if $havethread
+	if havethread
 	then
-		libsl="$libsl -lthread"
+		libsl="$libsl -lthread -l9"
 	fi
 
 	if [ "x$needdraw" = xtrue ]
diff --git a/src/Makefile b/src/Makefile
index 9ced533..4c890ed 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -1,6 +1,6 @@
 ../bin/mk: mkmk.sh
 	SYSNAME=`uname` export SYSNAME; \
-	OBJTYPE=`uname -m | sed 's;i.86;386;; s;/.*;;; s; ;;g' | sed 's/ppc64/power/g' | sed 's/ppc/power/g'` export OBJTYPE; \
+	OBJTYPE=`uname -m | sed 's;i.86;386;; s;/.*;;; s; ;;g; s/PowerMacintosh/power/; s/ppc64/power/g; s/ppc/power/g'` export OBJTYPE; \
 	PATH=`pwd`/../bin:$$PATH export PATH; \
 	PLAN9=`pwd`/.. export PLAN9; \
 	sh -x mkmk.sh
diff --git a/src/cmd/grap/mkfile b/src/cmd/grap/mkfile
index 03633f3..12006fd 100644
--- a/src/cmd/grap/mkfile
+++ b/src/cmd/grap/mkfile
@@ -18,18 +18,16 @@
 HFILES=grap.h\
 	y.tab.h\
 
-YFILES=grap.y\
-
-LFILES=grapl.lx\
+YFILES=grap.y
+LFILES=grapl.lx
 
 <$PLAN9/src/mkone
-YFLAGS = -d -S
-LEX=9lex
+YFLAGS=-d -S
 
 grap.c:	y.tab.c
 	mv $prereq $target
 
-grapl.c:	$LFILES
+grapl.c:D: $LFILES
 	$LEX -t $prereq > $target
 
 clean:V:
diff --git a/src/cmd/mkfile b/src/cmd/mkfile
index c50d4e1..21070f0 100644
--- a/src/cmd/mkfile
+++ b/src/cmd/mkfile
@@ -25,5 +25,13 @@
 $PLAN9/bin/lex: $PLAN9/bin/yacc
 	cd lex; mk install
 
+# This should not be necessary.
+$PLAN9/bin/yacc: $O.yacc
+	install -c $O.yacc $PLAN9/bin/yacc
+$O.yacc: yacc.$O
+	$LD -o $target $prereq
+yacc.$O: yacc.c
+	$CC $CFLAGS yacc.c
+
 CLEANFILES=$CLEANFILES bc.tab.[ch] units.tab.[ch] delatex.c
 
diff --git a/src/cmd/pic/mkfile b/src/cmd/pic/mkfile
index 10199f8..8619220 100644
--- a/src/cmd/pic/mkfile
+++ b/src/cmd/pic/mkfile
@@ -25,12 +25,11 @@
 
 <$PLAN9/src/mkone
 YFLAGS=-S -d
-LEX=9lex
 
 picy.c:	y.tab.c
 	mv $prereq $target
 
-picl.c:	picl.lx
+picl.c:D: picl.lx
 	$LEX -t $prereq > $target
 
 clean:V:
diff --git a/src/cmd/plot/libplot/subr.c b/src/cmd/plot/libplot/subr.c
index eb0b513..2b41990 100644
--- a/src/cmd/plot/libplot/subr.c
+++ b/src/cmd/plot/libplot/subr.c
@@ -13,7 +13,6 @@
 struct penvir *e0 = E, *e1 = &E[1], *esave;
 int
 bcolor(char *s){
-	int c;
 	while (*s != 0) {
 		switch (*s) {
 		case '0': case '1': case '2': case '3': case '4':
diff --git a/src/cmd/postscript/common/bbox.c b/src/cmd/postscript/common/bbox.c
index 66a114c..67dabf3 100644
--- a/src/cmd/postscript/common/bbox.c
+++ b/src/cmd/postscript/common/bbox.c
@@ -11,6 +11,7 @@
  */
 
 #include <stdio.h>
+#include <string.h>
 #include <ctype.h>
 #include <sys/types.h>
 #include <fcntl.h>
diff --git a/src/cmd/postscript/common/getopt.c b/src/cmd/postscript/common/getopt.c
index e348cb2..018885f 100644
--- a/src/cmd/postscript/common/getopt.c
+++ b/src/cmd/postscript/common/getopt.c
@@ -1,18 +1,13 @@
-#ifndef _POSIX_SOURCE
-#include <u.h>
-#include <libc.h>
-#endif
 #include	<stdio.h>
+#include <string.h>
 #define ERR(str, chr)       if(opterr){fprintf(stderr, "%s%s%c\n", argv[0], str, chr);}
 int     opterr = 1;
 int     optind = 1;
 int	optopt;
 char    *optarg;
-char    *strchr();
 
 int
-getopt (argc, argv, opts)
-char **argv, *opts;
+getopt (int argc, char **argv, char *opts)
 {
 	static int sp = 1;
 	register int c;
@@ -22,7 +17,7 @@
 		if (optind >= argc ||
 		   argv[optind][0] != '-' || argv[optind][1] == '\0')
 			return EOF;
-		else if (strcmp(argv[optind], "--") == NULL) {
+		else if (strcmp(argv[optind], "--") == 0) {
 			optind++;
 			return EOF;
 		}
diff --git a/src/cmd/postscript/common/misc.c b/src/cmd/postscript/common/misc.c
index e965a6e..dd34c6d 100644
--- a/src/cmd/postscript/common/misc.c
+++ b/src/cmd/postscript/common/misc.c
@@ -5,6 +5,7 @@
  */
 
 #include <stdio.h>
+#include <stdlib.h>
 #include <ctype.h>
 #include <sys/types.h>
 #include <fcntl.h>
diff --git a/src/cmd/postscript/common/mkfile b/src/cmd/postscript/common/mkfile
index 121b739..6e270bc 100644
--- a/src/cmd/postscript/common/mkfile
+++ b/src/cmd/postscript/common/mkfile
@@ -20,4 +20,4 @@
 
 <$PLAN9/src/mklib
 
-CFLAGS=-c -D$SYSTEM -D_POSIX_SOURCE
+CFLAGS=-c -D$SYSTEM 
diff --git a/src/cmd/vac/vac.c b/src/cmd/vac/vac.c
index 39a7d73..53a66be 100644
--- a/src/cmd/vac/vac.c
+++ b/src/cmd/vac/vac.c
@@ -115,7 +115,6 @@
 	char *host = nil;
 	int statsflag = 0;
 
-	threadlinklibrary();
 	atexit(cleanup);
 
 	ARGBEGIN{
diff --git a/src/mkhdr b/src/mkhdr
index 1640698..6456aec 100644
--- a/src/mkhdr
+++ b/src/mkhdr
@@ -29,6 +29,7 @@
 CLEANFILES=
 NUKEFILES=
 YACC=9 yacc
+LEX=9 lex
 YFLAGS=-d
 LIB=
 SHORTLIB=9
diff --git a/src/mklib b/src/mklib
index a896ac9..6e38e2f 100644
--- a/src/mklib
+++ b/src/mklib
@@ -2,7 +2,7 @@
 
 $LIB(%):N: %
 $LIB:	${OFILES:%=$LIB(%)}
-	$AR rvc $LIB `membername $newprereq`
+	$AR rvc $LIB $newmember
 
 &:n:	&.$O
 	$AR rvc $LIB $stem.$O
diff --git a/src/mkmk.sh b/src/mkmk.sh
index 4b56a98..5ff530f 100644
--- a/src/mkmk.sh
+++ b/src/mkmk.sh
@@ -135,7 +135,7 @@
 9c  utf/utfrrune.c
 9c  utf/utfrune.c
 9c  utf/utfutf.c
-9ar rvc $PLAN9/lib/lib9.a *.o
+9ar rvc $PLAN9/lib/lib9.a _exits.o _p9dialparse.o _p9dir.o announce.o argv0.o atexit.o atoi.o atol.o atoll.o atnotify.o await.o cistrcmp.o cistrncmp.o cistrstr.o cleanname.o convD2M.o convM2D.o convM2S.o convS2M.o create.o ctime.o date.o dial.o dirfstat.o dirfwstat.o dirmodefmt.o dirread.o dirstat.o dirwstat.o dup.o encodefmt.o errstr.o exec.o execl.o fcallfmt.o get9root.o getcallerpc-$OBJTYPE.o getenv.o getfields.o getns.o getuser.o getwd.o jmp.o lrand.o lnrand.o main.o malloc.o malloctag.o mallocz.o nan.o needsrcquote.o needstack.o netmkaddr.o notify.o nrand.o nulldir.o open.o opentemp.o pipe.o post9p.o postnote.o qlock.o quote.o rand.o read9pmsg.o readn.o rfork.o seek.o sendfd.o sleep.o strdup.o strecpy.o sysfatal.o sysname.o time.o tokenize.o truerand.o u16.o u32.o u64.o unsharp.o wait.o waitpid.o dofmt.o fltfmt.o fmt.o fmtfd.o fmtfdflush.o fmtlock2.o fmtprint.o fmtquote.o fmtrune.o fmtstr.o fmtvprint.o fprint.o nan64.o print.o runefmtstr.o runeseprint.o runesmprint.o runesnprint.o runesprint.o runevseprint.o runevsmprint.o runevsnprint.o seprint.o smprint.o snprint.o sprint.o strtod.o vfprint.o vseprint.o vsmprint.o vsnprint.o charstod.o pow10.o rune.o runestrcat.o runestrchr.o runestrcmp.o runestrcpy.o runestrdup.o runestrlen.o runestrecpy.o runestrncat.o runestrncmp.o runestrncpy.o runestrrchr.o runestrstr.o runetype.o utfecpy.o utflen.o utfnlen.o utfrrune.o utfrune.o utfutf.o
 cd ..
 cd libbio
 9c  bbuffered.c
@@ -155,7 +155,7 @@
 9c  bseek.c
 9c  bvprint.c
 9c  bwrite.c
-9ar rvc $PLAN9/lib/libbio.a *.o
+9ar rvc $PLAN9/lib/libbio.a bbuffered.o bfildes.o bflush.o bgetc.o bgetrune.o bgetd.o binit.o boffset.o bprint.o bputc.o bputrune.o brdline.o brdstr.o bread.o bseek.o bvprint.o bwrite.o
 cd ..
 cd libregexp
 9c  regcomp.c
@@ -165,7 +165,7 @@
 9c  regaux.c
 9c  rregexec.c
 9c  rregsub.c
-9ar rvc $PLAN9/lib/libregexp9.a *.o
+9ar rvc $PLAN9/lib/libregexp9.a regcomp.o regerror.o regexec.o regsub.o regaux.o rregexec.o rregsub.o
 cd ..
 cd cmd/mk
 9c  arc.c