Skip to content

Commit

Permalink
cmd/gc: if $GOROOT_FINAL is set, rewrite file names in object files
Browse files Browse the repository at this point in the history
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
  • Loading branch information
rsc committed Mar 5, 2012
1 parent c0a842e commit 6e3a793
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 1 deletion.
3 changes: 3 additions & 0 deletions src/cmd/dist/build.c
Expand Up @@ -1351,6 +1351,9 @@ cmdbootstrap(int argc, char **argv)
goversion = findgoversion();
setup();

xsetenv("GOROOT", goroot);
xsetenv("GOROOT_FINAL", goroot_final);

// For the main bootstrap, building for host os/arch.
oldgoos = goos;
oldgoarch = goarch;
Expand Down
32 changes: 31 additions & 1 deletion src/cmd/gc/obj.c
Expand Up @@ -126,10 +126,37 @@ outhist(Biobuf *b)
{
Hist *h;
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) {
p = h->name;
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 variable is set, then, we know already,
// pathname is started with windows drive specifier
Expand Down Expand Up @@ -161,9 +188,12 @@ outhist(Biobuf *b)
outzfile(b, p);
}
}

}
zhist(b, h->line, h->offset);
if(tofree) {
free(tofree);
tofree = nil;
}
}
}

Expand Down
2 changes: 2 additions & 0 deletions test/run
Expand Up @@ -29,6 +29,8 @@ export GOTRACEBACK=0
export LANG=C
unset GREP_OPTIONS # in case user has a non-standard set

unset GOROOT_FINAL # breaks ./ imports

failed=0

PATH=${GOBIN:-$GOROOT/bin}:`pwd`:/bin:/usr/bin:/usr/local/bin
Expand Down

0 comments on commit 6e3a793

Please sign in to comment.