1// Copyright 2012 The Go Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5package main 6 7import ( 8 "bytes" 9 "fmt" 10 "os" 11 "sort" 12) 13 14/* 15 * Helpers for building cmd/go and cmd/cgo. 16 */ 17 18// mkzdefaultcc writes zdefaultcc.go: 19// 20// package main 21// const defaultCC = <defaultcc> 22// const defaultCXX = <defaultcxx> 23// const defaultPkgConfig = <defaultpkgconfig> 24// 25// It is invoked to write cmd/go/zdefaultcc.go 26// but we also write cmd/cgo/zdefaultcc.go 27func mkzdefaultcc(dir, file string) { 28 outGo := fmt.Sprintf( 29 "// auto generated by go tool dist\n"+ 30 "\n"+ 31 "package cfg\n"+ 32 "\n"+ 33 "const DefaultCC = `%s`\n"+ 34 "const DefaultCXX = `%s`\n"+ 35 "const DefaultPkgConfig = `%s`\n", 36 defaultcctarget, defaultcxxtarget, defaultpkgconfigtarget) 37 38 writefile(outGo, file, writeSkipSame) 39 40 // Convert file name to replace: turn go/internal/cfg into cgo. 41 outCgo := fmt.Sprintf( 42 "// auto generated by go tool dist\n"+ 43 "\n"+ 44 "package main\n"+ 45 "\n"+ 46 "const defaultCC = `%s`\n"+ 47 "const defaultCXX = `%s`\n"+ 48 "const defaultPkgConfig = `%s`\n", 49 defaultcctarget, defaultcxxtarget, defaultpkgconfigtarget) 50 51 i := len(file) - len("go/internal/cfg/zdefaultcc.go") 52 file = file[:i] + "cgo/zdefaultcc.go" 53 writefile(outCgo, file, writeSkipSame) 54} 55 56// mkzcgo writes zosarch.go for cmd/go. 57func mkzosarch(dir, file string) { 58 // sort for deterministic zosarch.go file 59 var list []string 60 for plat := range cgoEnabled { 61 list = append(list, plat) 62 } 63 sort.Strings(list) 64 65 var buf bytes.Buffer 66 buf.WriteString("// auto generated by go tool dist\n\n") 67 buf.WriteString("package cfg\n\n") 68 fmt.Fprintf(&buf, "var OSArchSupportsCgo = map[string]bool{\n") 69 for _, plat := range list { 70 fmt.Fprintf(&buf, "\t%q: %v,\n", plat, cgoEnabled[plat]) 71 } 72 fmt.Fprintf(&buf, "}\n") 73 writefile(buf.String(), file, writeSkipSame) 74} 75 76// mkzcgo writes zcgo.go for the go/build package: 77// 78// package build 79// var cgoEnabled = map[string]bool{} 80// 81// It is invoked to write go/build/zcgo.go. 82func mkzcgo(dir, file string) { 83 // sort for deterministic zcgo.go file 84 var list []string 85 for plat, hasCgo := range cgoEnabled { 86 if hasCgo { 87 list = append(list, plat) 88 } 89 } 90 sort.Strings(list) 91 92 var buf bytes.Buffer 93 94 fmt.Fprintf(&buf, 95 "// auto generated by go tool dist\n"+ 96 "\n"+ 97 "package build\n"+ 98 "\n"+ 99 "const defaultCGO_ENABLED = %q\n\n"+ 100 "var cgoEnabled = map[string]bool{\n", os.Getenv("CGO_ENABLED")) 101 for _, plat := range list { 102 fmt.Fprintf(&buf, "\t%q: true,\n", plat) 103 } 104 fmt.Fprintf(&buf, "}") 105 106 writefile(buf.String(), file, writeSkipSame) 107} 108