Source file
src/cmd/dist/buildgo.go
1
2
3
4
5 package main
6
7 import (
8 "bytes"
9 "fmt"
10 "os"
11 "path/filepath"
12 "sort"
13 "strings"
14 )
15
16
19
20
21
22
23
24
25
26
27
28
29 func mkzdefaultcc(dir, file string) {
30 if strings.Contains(file, filepath.FromSlash("go/internal/cfg")) {
31 var buf bytes.Buffer
32 fmt.Fprintf(&buf, "// Code generated by go tool dist; DO NOT EDIT.\n")
33 fmt.Fprintln(&buf)
34 fmt.Fprintf(&buf, "package cfg\n")
35 fmt.Fprintln(&buf)
36 fmt.Fprintf(&buf, "const DefaultPkgConfig = `%s`\n", defaultpkgconfig)
37 buf.WriteString(defaultCCFunc("DefaultCC", defaultcc))
38 buf.WriteString(defaultCCFunc("DefaultCXX", defaultcxx))
39 writefile(buf.String(), file, writeSkipSame)
40 return
41 }
42
43 var buf bytes.Buffer
44 fmt.Fprintf(&buf, "// Code generated by go tool dist; DO NOT EDIT.\n")
45 fmt.Fprintln(&buf)
46 fmt.Fprintf(&buf, "package main\n")
47 fmt.Fprintln(&buf)
48 fmt.Fprintf(&buf, "const defaultPkgConfig = `%s`\n", defaultpkgconfig)
49 buf.WriteString(defaultCCFunc("defaultCC", defaultcc))
50 buf.WriteString(defaultCCFunc("defaultCXX", defaultcxx))
51 writefile(buf.String(), file, writeSkipSame)
52 }
53
54 func defaultCCFunc(name string, defaultcc map[string]string) string {
55 var buf bytes.Buffer
56
57 fmt.Fprintf(&buf, "func %s(goos, goarch string) string {\n", name)
58 fmt.Fprintf(&buf, "\tswitch goos+`/`+goarch {\n")
59 var keys []string
60 for k := range defaultcc {
61 if k != "" {
62 keys = append(keys, k)
63 }
64 }
65 sort.Strings(keys)
66 for _, k := range keys {
67 fmt.Fprintf(&buf, "\tcase %q:\n\t\treturn %q\n", k, defaultcc[k])
68 }
69 fmt.Fprintf(&buf, "\t}\n")
70 fmt.Fprintf(&buf, "\treturn %q\n", defaultcc[""])
71 fmt.Fprintf(&buf, "}\n")
72
73 return buf.String()
74 }
75
76
77 func mkzosarch(dir, file string) {
78
79 var list []string
80 for plat := range cgoEnabled {
81 list = append(list, plat)
82 }
83 sort.Strings(list)
84
85 var buf bytes.Buffer
86 fmt.Fprintf(&buf, "// Code generated by go tool dist; DO NOT EDIT.\n\n")
87 fmt.Fprintf(&buf, "package cfg\n\n")
88 fmt.Fprintf(&buf, "var OSArchSupportsCgo = map[string]bool{\n")
89 for _, plat := range list {
90 fmt.Fprintf(&buf, "\t%q: %v,\n", plat, cgoEnabled[plat])
91 }
92 fmt.Fprintf(&buf, "}\n")
93
94 writefile(buf.String(), file, writeSkipSame)
95 }
96
97
98
99
100
101
102
103 func mkzcgo(dir, file string) {
104
105 var list []string
106 for plat, hasCgo := range cgoEnabled {
107 if hasCgo {
108 list = append(list, plat)
109 }
110 }
111 sort.Strings(list)
112
113 var buf bytes.Buffer
114 fmt.Fprintf(&buf, "// Code generated by go tool dist; DO NOT EDIT.\n")
115 fmt.Fprintln(&buf)
116 fmt.Fprintf(&buf, "package build\n")
117 fmt.Fprintln(&buf)
118 fmt.Fprintf(&buf, "const defaultCGO_ENABLED = %q\n", os.Getenv("CGO_ENABLED"))
119 fmt.Fprintln(&buf)
120 fmt.Fprintf(&buf, "var cgoEnabled = map[string]bool{\n")
121 for _, plat := range list {
122 fmt.Fprintf(&buf, "\t%q: true,\n", plat)
123 }
124 fmt.Fprintf(&buf, "}\n")
125
126 writefile(buf.String(), file, writeSkipSame)
127 }
128
View as plain text