separate local path lookup from standard package directories

R=ken
OCL=30760
CL=30779
diff --git a/src/cmd/gc/lex.c b/src/cmd/gc/lex.c
index a5b4244..05671cc 100644
--- a/src/cmd/gc/lex.c
+++ b/src/cmd/gc/lex.c
@@ -213,6 +213,19 @@
 	(*pp)->dir = dir;
 }
 
+// is this path a local name?  begins with ./ or ../ or /
+int
+islocalname(Strlit *name)
+{
+	if(name->len >= 1 && name->s[0] == '/')
+		return 1;
+	if(name->len >= 2 && strncmp(name->s, "./", 2) == 0)
+		return 1;
+	if(name->len >= 3 && strncmp(name->s, "../", 3) == 0)
+		return 1;
+	return 0;
+}
+
 int
 findpkg(Strlit *name)
 {
@@ -225,9 +238,19 @@
 		goarch = getenv("GOARCH");
 	}
 
-	// try .a before .6.  important for building libraries:
-	// if there is an array.6 in the array.a library,
-	// want to find all of array.a, not just array.6.
+	if(islocalname(name)) {
+		// try .a before .6.  important for building libraries:
+		// if there is an array.6 in the array.a library,
+		// want to find all of array.a, not just array.6.
+		snprint(namebuf, sizeof(namebuf), "%Z.a", name);
+		if(access(namebuf, 0) >= 0)
+			return 1;
+		snprint(namebuf, sizeof(namebuf), "%Z.%c", name, thechar);
+		if(access(namebuf, 0) >= 0)
+			return 1;
+		return 0;
+	}
+
 	for(p = idirs; p != nil; p = p->link) {
 		snprint(namebuf, sizeof(namebuf), "%s/%Z.a", p->dir, name);
 		if(access(namebuf, 0) >= 0)
@@ -236,13 +259,6 @@
 		if(access(namebuf, 0) >= 0)
 			return 1;
 	}
-
-	snprint(namebuf, sizeof(namebuf), "%Z.a", name);
-	if(access(namebuf, 0) >= 0)
-		return 1;
-	snprint(namebuf, sizeof(namebuf), "%Z.%c", name, thechar);
-	if(access(namebuf, 0) >= 0)
-		return 1;
 	if(goroot != nil) {
 		snprint(namebuf, sizeof(namebuf), "%s/pkg/%s_%s/%Z.a", goroot, goos, goarch, name);
 		if(access(namebuf, 0) >= 0)