Commit 6e3a7930 authored by Russ Cox's avatar Russ Cox

cmd/gc: if $GOROOT_FINAL is set, rewrite file names in object files

GOROOT_FINAL is a build parameter that means "eventually
the Go tree will be installed here".  Make the file name information
match that eventual location.

Fixes #3180.

R=ken, ken
CC=golang-dev
https://golang.org/cl/5742043
parent c0a842e5
...@@ -1351,6 +1351,9 @@ cmdbootstrap(int argc, char **argv) ...@@ -1351,6 +1351,9 @@ cmdbootstrap(int argc, char **argv)
goversion = findgoversion(); goversion = findgoversion();
setup(); setup();
xsetenv("GOROOT", goroot);
xsetenv("GOROOT_FINAL", goroot_final);
// For the main bootstrap, building for host os/arch. // For the main bootstrap, building for host os/arch.
oldgoos = goos; oldgoos = goos;
oldgoarch = goarch; oldgoarch = goarch;
......
...@@ -126,10 +126,37 @@ outhist(Biobuf *b) ...@@ -126,10 +126,37 @@ outhist(Biobuf *b)
{ {
Hist *h; Hist *h;
char *p, ds[] = {'c', ':', '/', 0}; char *p, ds[] = {'c', ':', '/', 0};
char *tofree;
int n;
static int first = 1;
static char *goroot, *goroot_final;
if(first) {
// Decide whether we need to rewrite paths from $GOROOT to $GOROOT_FINAL.
first = 0;
goroot = getenv("GOROOT");
goroot_final = getenv("GOROOT_FINAL");
if(goroot == nil)
goroot = "";
if(goroot_final == nil)
goroot_final = goroot;
if(strcmp(goroot, goroot_final) == 0) {
goroot = nil;
goroot_final = nil;
}
}
tofree = nil;
for(h = hist; h != H; h = h->link) { for(h = hist; h != H; h = h->link) {
p = h->name; p = h->name;
if(p) { if(p) {
if(goroot != nil) {
n = strlen(goroot);
if(strncmp(p, goroot, strlen(goroot)) == 0 && p[n] == '/') {
tofree = smprint("%s%s", goroot_final, p+n);
p = tofree;
}
}
if(windows) { if(windows) {
// if windows variable is set, then, we know already, // if windows variable is set, then, we know already,
// pathname is started with windows drive specifier // pathname is started with windows drive specifier
...@@ -161,9 +188,12 @@ outhist(Biobuf *b) ...@@ -161,9 +188,12 @@ outhist(Biobuf *b)
outzfile(b, p); outzfile(b, p);
} }
} }
} }
zhist(b, h->line, h->offset); zhist(b, h->line, h->offset);
if(tofree) {
free(tofree);
tofree = nil;
}
} }
} }
......
...@@ -29,6 +29,8 @@ export GOTRACEBACK=0 ...@@ -29,6 +29,8 @@ export GOTRACEBACK=0
export LANG=C export LANG=C
unset GREP_OPTIONS # in case user has a non-standard set unset GREP_OPTIONS # in case user has a non-standard set
unset GOROOT_FINAL # breaks ./ imports
failed=0 failed=0
PATH=${GOBIN:-$GOROOT/bin}:`pwd`:/bin:/usr/bin:/usr/local/bin PATH=${GOBIN:-$GOROOT/bin}:`pwd`:/bin:/usr/bin:/usr/local/bin
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment