diff --git a/src/cmd/6l/l.h b/src/cmd/6l/l.h index 2d3cd535a1..8479156463 100644 --- a/src/cmd/6l/l.h +++ b/src/cmd/6l/l.h @@ -288,6 +288,7 @@ EXTERN vlong INITDAT; EXTERN int32 INITRND; EXTERN vlong INITTEXT; EXTERN char* INITENTRY; /* entry point */ +EXTERN char* PKGDIR; EXTERN Biobuf bso; EXTERN int32 bsssize; EXTERN int cbc; diff --git a/src/cmd/6l/obj.c b/src/cmd/6l/obj.c index 3a4208cd22..b65c7f313b 100644 --- a/src/cmd/6l/obj.c +++ b/src/cmd/6l/obj.c @@ -87,6 +87,7 @@ main(int argc, char *argv[]) INITDAT = -1; INITRND = -1; INITENTRY = 0; + PKGDIR = nil; ARGBEGIN { default: @@ -122,6 +123,11 @@ main(int argc, char *argv[]) if(a) INITRND = atolwhex(a); break; + case 'P': + a = ARGF(); + if(a) + PKGDIR = a; + break; case 'x': /* produce export table */ doexp = 1; if(argv[1] != nil && argv[1][0] != '-' && !isobjfile(argv[1])) @@ -684,9 +690,10 @@ addlib(char *src, char *obj) } if(search) { - // try dot and then try goroot. - // going to have to do better (probably a command line flag) later. + // try dot, -P "pkgdir", and then goroot. snprint(pname, sizeof pname, ".%s", name); + if(access(pname, AEXIST) < 0 && PKGDIR != nil) + snprint(pname, sizeof pname, "%s/%s", PKGDIR, name); if(access(pname, AEXIST) < 0) snprint(pname, sizeof pname, "%s/pkg/%s", goroot, name); strcpy(name, pname); diff --git a/src/cmd/gotest/gotest b/src/cmd/gotest/gotest index 2cb08c5290..12db03bf30 100755 --- a/src/cmd/gotest/gotest +++ b/src/cmd/gotest/gotest @@ -13,6 +13,7 @@ GC=${GC:-${O}g} GL=${GL:-${O}l} export GC GL GC="$GC -I _obj" +GL="$GL -P _obj" gofiles="" loop=true