diff --git a/src/cmd/dist/build.go b/src/cmd/dist/build.go index 2662f80780a6b61e047f9f96666f96619dbeaa73..c36a12e5e9996ad979f8fdda64c20c21e57ddf12 100644 --- a/src/cmd/dist/build.go +++ b/src/cmd/dist/build.go @@ -463,11 +463,16 @@ func setup() { xmkdir(p) } - p := pathf("%s/pkg/%s_%s", goroot, gohostos, gohostarch) + goosGoarch := pathf("%s/pkg/%s_%s", goroot, gohostos, gohostarch) if rebuildall { - xremoveall(p) + xremoveall(goosGoarch) } - xmkdirall(p) + xmkdirall(goosGoarch) + xatexit(func() { + if files := xreaddir(goosGoarch); len(files) == 0 { + xremove(goosGoarch) + } + }) if goos != gohostos || goarch != gohostarch { p := pathf("%s/pkg/%s_%s", goroot, goos, goarch) @@ -480,7 +485,15 @@ func setup() { // Create object directory. // We used to use it for C objects. // Now we use it for the build cache, to separate dist's cache - // from any other cache the user might have. + // from any other cache the user might have, and for the location + // to build the bootstrap versions of the standard library. + obj := pathf("%s/pkg/obj", goroot) + if !isdir(obj) { + xmkdir(obj) + } + xatexit(func() { xremove(obj) }) + + // Create build cache directory. objGobuild := pathf("%s/pkg/obj/go-build", goroot) if rebuildall { xremoveall(objGobuild) @@ -488,9 +501,7 @@ func setup() { xmkdirall(objGobuild) xatexit(func() { xremoveall(objGobuild) }) - // Create alternate driectory for intermediate - // standard library .a's to be placed rather than - // the final build's install locations. + // Create directory for bootstrap versions of standard library .a files. objGoBootstrap := pathf("%s/pkg/obj/go-bootstrap", goroot) if rebuildall { xremoveall(objGoBootstrap) diff --git a/src/cmd/dist/util.go b/src/cmd/dist/util.go index 319866a3b81935a010251b21afa9fb8deb12d8a1..fe36230207fa4579b737d729e84212969e031fd0 100644 --- a/src/cmd/dist/util.go +++ b/src/cmd/dist/util.go @@ -309,27 +309,6 @@ func xreaddir(dir string) []string { return names } -// xreaddirfiles replaces dst with a list of the names of the files in dir. -// The names are relative to dir; they are not full paths. -func xreaddirfiles(dir string) []string { - f, err := os.Open(dir) - if err != nil { - fatalf("%v", err) - } - defer f.Close() - infos, err := f.Readdir(-1) - if err != nil { - fatalf("reading %s: %v", dir, err) - } - var names []string - for _, fi := range infos { - if !fi.IsDir() { - names = append(names, fi.Name()) - } - } - return names -} - // xworkdir creates a new temporary directory to hold object files // and returns the name of that directory. func xworkdir() string { diff --git a/src/cmd/go/go_test.go b/src/cmd/go/go_test.go index c51f2120256253e68ba3798a5014f53a072f8624..ef22499b87add3cd362524aa0a85107d0e1c3216 100644 --- a/src/cmd/go/go_test.go +++ b/src/cmd/go/go_test.go @@ -914,7 +914,6 @@ func TestNewReleaseRebuildsStalePackagesInGOPATH(t *testing.T) { "src/internal/coverage/rtcov", "src/math/bits", "src/unsafe", - filepath.Join("pkg", runtime.GOOS+"_"+runtime.GOARCH), filepath.Join("pkg/tool", goHostOS+"_"+goHostArch), "pkg/include", } {