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)
// 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)
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)
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 {
"src/internal/coverage/rtcov",
"src/math/bits",
"src/unsafe",
- filepath.Join("pkg", runtime.GOOS+"_"+runtime.GOARCH),
filepath.Join("pkg/tool", goHostOS+"_"+goHostArch),
"pkg/include",
} {