...
Run Format

Source file src/cmd/dist/buildgo.go

Documentation: cmd/dist

  // Copyright 2012 The Go Authors. All rights reserved.
  // Use of this source code is governed by a BSD-style
  // license that can be found in the LICENSE file.
  
  package main
  
  import (
  	"bytes"
  	"fmt"
  	"os"
  	"sort"
  )
  
  /*
   * Helpers for building cmd/go and cmd/cgo.
   */
  
  // mkzdefaultcc writes zdefaultcc.go:
  //
  //	package main
  //	const defaultCC = <defaultcc>
  //	const defaultCXX = <defaultcxx>
  //	const defaultPkgConfig = <defaultpkgconfig>
  //
  // It is invoked to write cmd/go/zdefaultcc.go
  // but we also write cmd/cgo/zdefaultcc.go
  func mkzdefaultcc(dir, file string) {
  	outGo := fmt.Sprintf(
  		"// auto generated by go tool dist\n"+
  			"\n"+
  			"package cfg\n"+
  			"\n"+
  			"const DefaultCC = `%s`\n"+
  			"const DefaultCXX = `%s`\n"+
  			"const DefaultPkgConfig = `%s`\n",
  		defaultcctarget, defaultcxxtarget, defaultpkgconfigtarget)
  
  	writefile(outGo, file, writeSkipSame)
  
  	// Convert file name to replace: turn go/internal/cfg into cgo.
  	outCgo := fmt.Sprintf(
  		"// auto generated by go tool dist\n"+
  			"\n"+
  			"package main\n"+
  			"\n"+
  			"const defaultCC = `%s`\n"+
  			"const defaultCXX = `%s`\n"+
  			"const defaultPkgConfig = `%s`\n",
  		defaultcctarget, defaultcxxtarget, defaultpkgconfigtarget)
  
  	i := len(file) - len("go/internal/cfg/zdefaultcc.go")
  	file = file[:i] + "cgo/zdefaultcc.go"
  	writefile(outCgo, file, writeSkipSame)
  }
  
  // mkzcgo writes zosarch.go for cmd/go.
  func mkzosarch(dir, file string) {
  	// sort for deterministic zosarch.go file
  	var list []string
  	for plat := range cgoEnabled {
  		list = append(list, plat)
  	}
  	sort.Strings(list)
  
  	var buf bytes.Buffer
  	buf.WriteString("// auto generated by go tool dist\n\n")
  	buf.WriteString("package cfg\n\n")
  	fmt.Fprintf(&buf, "var OSArchSupportsCgo = map[string]bool{\n")
  	for _, plat := range list {
  		fmt.Fprintf(&buf, "\t%q: %v,\n", plat, cgoEnabled[plat])
  	}
  	fmt.Fprintf(&buf, "}\n")
  	writefile(buf.String(), file, writeSkipSame)
  }
  
  // mkzcgo writes zcgo.go for the go/build package:
  //
  //	package build
  //  var cgoEnabled = map[string]bool{}
  //
  // It is invoked to write go/build/zcgo.go.
  func mkzcgo(dir, file string) {
  	// sort for deterministic zcgo.go file
  	var list []string
  	for plat, hasCgo := range cgoEnabled {
  		if hasCgo {
  			list = append(list, plat)
  		}
  	}
  	sort.Strings(list)
  
  	var buf bytes.Buffer
  
  	fmt.Fprintf(&buf,
  		"// auto generated by go tool dist\n"+
  			"\n"+
  			"package build\n"+
  			"\n"+
  			"const defaultCGO_ENABLED = %q\n\n"+
  			"var cgoEnabled = map[string]bool{\n", os.Getenv("CGO_ENABLED"))
  	for _, plat := range list {
  		fmt.Fprintf(&buf, "\t%q: true,\n", plat)
  	}
  	fmt.Fprintf(&buf, "}")
  
  	writefile(buf.String(), file, writeSkipSame)
  }
  

View as plain text