github.com/MangoDowner/go-gm@v0.0.0-20180818020936-8baa2bd4408c/src/cmd/dist/buildgo.go (about)

     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  
     5  package main
     6  
     7  import (
     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
    27  func 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.
    57  func 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.
    82  func 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  }