mirror of
https://github.com/golang/go.git
synced 2025-05-16 21:04:38 +00:00
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
This commit is contained in:
parent
c0a842e57f
commit
6e3a7930eb
3
src/cmd/dist/build.c
vendored
3
src/cmd/dist/build.c
vendored
@ -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)
|
|||||||
{
|
{
|
||||||
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)
|
|||||||
outzfile(b, p);
|
outzfile(b, p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
zhist(b, h->line, h->offset);
|
zhist(b, h->line, h->offset);
|
||||||
|
if(tofree) {
|
||||||
|
free(tofree);
|
||||||
|
tofree = nil;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
2
test/run
2
test/run
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user