Functions
            
            
               
                  Act 
                  method
                  
                  #
               
               
               func (ba *buildActor) Act(b *Builder, ctx context.Context, a *Action) error
            
            
            
               
                  Act 
                  method
                  
                  #
               
               
               func (p *pgoActor) Act(b *Builder, ctx context.Context, a *Action) error
            
            
            
               
                  Act 
                  method
                  
                  #
               
               
               func (f ActorFunc) Act(b *Builder, ctx context.Context, a *Action) error
            
            
            
               
                  AddBuildFlags 
                  function
                  
                  #
               
               
               AddBuildFlags adds the flags common to the build, clean, get,
install, list, run, and test commands.
               
               func AddBuildFlags(cmd *base.Command, mask BuildFlagMask)
            
            
            
               
                  AddCoverFlags 
                  function
                  
                  #
               
               
               AddCoverFlags adds coverage-related flags to "cmd". If the
CoverageRedesign experiment is enabled, we add -cover{mode,pkg} to
the build command and only -coverprofile to the test command. If
the CoverageRedesign experiment is disabled, -cover* flags are
added only to the test command.
               
               func AddCoverFlags(cmd *base.Command, coverProfileFlag *string)
            
            
            
               
                  AutoAction 
                  method
                  
                  #
               
               
               AutoAction returns the "right" action for go build or go install of p.
               
               func (b *Builder) AutoAction(mode BuildMode, depMode BuildMode, p *load.Package) *Action
            
            
            
               
                  BackgroundShell 
                  method
                  
                  #
               
               
               BackgroundShell returns a Builder-wide Shell that's not bound to any Action.
Try not to use this unless there's really no sensible Action available.
               
               func (b *Builder) BackgroundShell() *Shell
            
            
            
               
                  BuildActionCoverMetaFile 
                  function
                  
                  #
               
               
               BuildActionCoverMetaFile locates and returns the path of the
meta-data file written by the "go tool cover" step as part of the
build action for the "go test -cover" run action 'runAct'. Note
that if the package has no functions the meta-data file will exist
but will be empty; in this case the return is an empty string.
               
               func BuildActionCoverMetaFile(runAct *Action) (string, error)
            
            
            
               
                  BuildActionID 
                  method
                  
                  #
               
               
               BuildActionID returns the action ID section of a's build ID.
               
               func (a *Action) BuildActionID() string
            
            
            
               
                  BuildContentID 
                  method
                  
                  #
               
               
               BuildContentID returns the content ID section of a's build ID.
               
               func (a *Action) BuildContentID() string
            
            
            
               
                  BuildID 
                  method
                  
                  #
               
               
               BuildID returns a's build ID.
               
               func (a *Action) BuildID() string
            
            
            
               
                  BuildInit 
                  function
                  
                  #
               
               
               func BuildInit()
            
            
            
               
                  BuildInstallFunc 
                  function
                  
                  #
               
               
               BuildInstallFunc is the action for installing a single package or executable.
               
               func BuildInstallFunc(b *Builder, ctx context.Context, a *Action) (err error)
            
            
            
               
                  BuiltTarget 
                  method
                  
                  #
               
               
               BuiltTarget returns the actual file that was built. This differs
from Target when the result was cached.
               
               func (a *Action) BuiltTarget() string
            
            
            
               
                  CFlags 
                  method
                  
                  #
               
               
               CFlags returns the flags to use when invoking the C, C++ or Fortran compilers, or cgo.
               
               func (b *Builder) CFlags(p *load.Package) (cppflags []string, cflags []string, cxxflags []string, fflags []string, ldflags []string, err error)
            
            
            
               
                  CheckGOOSARCHPair 
                  function
                  
                  #
               
               
               func CheckGOOSARCHPair(goos string, goarch string) error
            
            
            
               
                  Close 
                  method
                  
                  #
               
               
               func (b *Builder) Close() error
            
            
            
               
                  CompileAction 
                  method
                  
                  #
               
               
               CompileAction returns the action for compiling and possibly installing
(according to mode) the given package. The resulting action is only
for building packages (archives), never for linking executables.
depMode is the action (build or install) to use when building dependencies.
To turn package main into an executable, call b.Link instead.
               
               func (b *Builder) CompileAction(mode BuildMode, depMode BuildMode, p *load.Package) *Action
            
            
            
               
                  CopyFile 
                  method
                  
                  #
               
               
               copyFile is like 'cp src dst'.
               
               func (sh *Shell) CopyFile(dst string, src string, perm fs.FileMode, force bool) error
            
            
            
               
                  CovData 
                  method
                  
                  #
               
               
               CovData invokes "go tool covdata" with the specified arguments
as part of the execution of action 'a'.
               
               func (b *Builder) CovData(a *Action, cmdargs ...any) ([]byte, error)
            
            
            
               
                  Do 
                  method
                  
                  #
               
               
               Do runs the action graph rooted at root.
               
               func (b *Builder) Do(ctx context.Context, root *Action)
            
            
            
               
                  Error 
                  method
                  
                  #
               
               
               func (e *cmdError) Error() string
            
            
            
               
                  Errorf 
                  method
                  
                  #
               
               
               Errorf reports an error on sh's package and sets the process exit status to 1.
               
               func (sh *Shell) Errorf(format string, a ...any)
            
            
            
               
                  FindExecCmd 
                  function
                  
                  #
               
               
               FindExecCmd derives the value of ExecCmd to use.
It returns that value and leaves ExecCmd set for direct use.
               
               func FindExecCmd() []string
            
            
            
               
                  GccCmd 
                  method
                  
                  #
               
               
               GccCmd returns a gcc command line prefix
defaultCC is defined in zdefaultcc.go, written by cmd/dist.
               
               func (b *Builder) GccCmd(incdir string, workdir string) []string
            
            
            
               
                  GxxCmd 
                  method
                  
                  #
               
               
               GxxCmd returns a g++ command line prefix
defaultCXX is defined in zdefaultcc.go, written by cmd/dist.
               
               func (b *Builder) GxxCmd(incdir string, workdir string) []string
            
            
            
               
                  ImportPath 
                  method
                  
                  #
               
               
               func (e *cmdError) ImportPath() string
            
            
            
               
                  InstallPackages 
                  function
                  
                  #
               
               
               func InstallPackages(ctx context.Context, patterns []string, pkgs []*load.Package)
            
            
            
               
                  IsBoolFlag 
                  method
                  
                  #
               
               
               func (f *buildvcsFlag) IsBoolFlag() bool
            
            
            
               
                  Len 
                  method
                  
                  #
               
               
               Implement heap.Interface
               
               func (q *actionQueue) Len() int
            
            
            
               
                  Less 
                  method
                  
                  #
               
               
               func (q *actionQueue) Less(i int, j int) bool
            
            
            
               
                  LinkAction 
                  method
                  
                  #
               
               
               LinkAction returns the action for linking p into an executable
and possibly installing the result (according to mode).
depMode is the action (build or install) to use when compiling dependencies.
               
               func (b *Builder) LinkAction(mode BuildMode, depMode BuildMode, p *load.Package) *Action
            
            
            
               
                  Mkdir 
                  method
                  
                  #
               
               
               Mkdir makes the named directory.
               
               func (sh *Shell) Mkdir(dir string) error
            
            
            
               
                  NewBuilder 
                  function
                  
                  #
               
               
               NewBuilder returns a new Builder ready for use.
If workDir is the empty string, NewBuilder creates a WorkDir if needed
and arranges for it to be removed in case of an unclean exit.
The caller must Close the builder explicitly to clean up the WorkDir
before a clean exit.
               
               func NewBuilder(workDir string) *Builder
            
            
            
               
                  NewObjdir 
                  method
                  
                  #
               
               
               NewObjdir returns the name of a fresh object directory under b.WorkDir.
It is up to the caller to call b.Mkdir on the result at an appropriate time.
The result ends in a slash, so that file names in that directory
can be constructed with direct string addition.
NewObjdir must be called only from a single goroutine at a time,
so it is safe to call during action graph construction, but it must not
be called during action graph execution.
               
               func (b *Builder) NewObjdir() string
            
            
            
               
                  NewShell 
                  function
                  
                  #
               
               
               NewShell returns a new Shell.
Shell will internally serialize calls to the printer.
If printer is nil, it uses load.DefaultPrinter.
               
               func NewShell(workDir string, printer load.Printer) *Shell
            
            
            
               
                  PkgconfigCmd 
                  method
                  
                  #
               
               
               PkgconfigCmd returns a pkg-config binary name
defaultPkgConfig is defined in zdefaultcc.go, written by cmd/dist.
               
               func (b *Builder) PkgconfigCmd() string
            
            
            
               
                  Pop 
                  method
                  
                  #
               
               
               func (q *actionQueue) Pop() any
            
            
            
               
                  Printf 
                  method
                  
                  #
               
               
               Printf emits a to this Shell's output stream, formatting it like fmt.Printf.
It is safe to call concurrently.
               
               func (sh *Shell) Printf(format string, a ...any)
            
            
            
               
                  Push 
                  method
                  
                  #
               
               
               func (q *actionQueue) Push(x any)
            
            
            
               
                  RemoveAll 
                  method
                  
                  #
               
               
               RemoveAll is like 'rm -rf'. It attempts to remove all paths even if there's
an error, and returns the first error.
               
               func (sh *Shell) RemoveAll(paths ...string) error
            
            
            
               
                  Set 
                  method
                  
                  #
               
               
               func (f commaListFlag) Set(value string) error
            
            
            
               
                  Set 
                  method
                  
                  #
               
               
               func (f *buildvcsFlag) Set(s string) error
            
            
            
               
                  Set 
                  method
                  
                  #
               
               
               func (v *tagsFlag) Set(s string) error
            
            
            
               
                  Set 
                  method
                  
                  #
               
               
               func (c buildCompiler) Set(value string) error
            
            
            
               
                  Set 
                  method
                  
                  #
               
               
               func (f stringFlag) Set(value string) error
            
            
            
               
                  Set 
                  method
                  
                  #
               
               
               func (f *coverModeFlag) Set(value string) error
            
            
            
               
                  Set 
                  method
                  
                  #
               
               
               func (f coverFlag) Set(value string) error
            
            
            
               
                  Shell 
                  method
                  
                  #
               
               
               Shell returns a shell for running commands on behalf of Action a.
               
               func (b *Builder) Shell(a *Action) *Shell
            
            
            
               
                  ShowCmd 
                  method
                  
                  #
               
               
               ShowCmd prints the given command to standard output
for the implementation of -n or -x.
ShowCmd also replaces the name of the current script directory with dot (.)
but only when it is at the beginning of a space-separated token.
If dir is not "" or "/" and not the current script directory, ShowCmd first
prints a "cd" command to switch to dir and updates the script directory.
               
               func (sh *Shell) ShowCmd(dir string, format string, args ...any)
            
            
            
               
                  String 
                  method
                  
                  #
               
               
               func (f *buildvcsFlag) String() string
            
            
            
               
                  String 
                  method
                  
                  #
               
               
               func (v *tagsFlag) String() string
            
            
            
               
                  String 
                  method
                  
                  #
               
               
               func (c buildCompiler) String() string
            
            
            
               
                  String 
                  method
                  
                  #
               
               
               func (f coverFlag) String() string
            
            
            
               
                  String 
                  method
                  
                  #
               
               
               func (f *coverModeFlag) String() string
            
            
            
               
                  String 
                  method
                  
                  #
               
               
               func (f commaListFlag) String() string
            
            
            
               
                  String 
                  method
                  
                  #
               
               
               func (f stringFlag) String() string
            
            
            
               
                  Swap 
                  method
                  
                  #
               
               
               func (q *actionQueue) Swap(i int, j int)
            
            
            
               
                  Symlink 
                  method
                  
                  #
               
               
               Symlink creates a symlink newname -> oldname.
               
               func (sh *Shell) Symlink(oldname string, newname string) error
            
            
            
               
                  VetAction 
                  method
                  
                  #
               
               
               VetAction returns the action for running go vet on package p.
It depends on the action for compiling p.
If the caller may be causing p to be installed, it is up to the caller
to make sure that the install depends on (runs after) vet.
               
               func (b *Builder) VetAction(mode BuildMode, depMode BuildMode, p *load.Package) *Action
            
            
            
               
                  WithAction 
                  method
                  
                  #
               
               
               WithAction returns a Shell identical to sh, but bound to Action a.
               
               func (sh *Shell) WithAction(a *Action) *Shell
            
            
            
               
                  WriteCoverMetaFilesFile 
                  function
                  
                  #
               
               
               WriteCoverMetaFilesFile writes out a summary file ("meta-files
file") as part of the action function for the "writeCoverMeta"
pseudo action employed during "go test -coverpkg" runs where there
are multiple tests and multiple packages covered. It builds up a
table mapping package import path to meta-data file fragment and
writes it out to a file where it can be read by the various test
run actions. Note that this function has to be called A) after the
build actions are complete for all packages being tested, and B)
before any of the "run test" actions for those packages happen.
This requirement is enforced by adding making this action ("a")
dependent on all test package build actions, and making all test
run actions dependent on this action.
               
               func WriteCoverMetaFilesFile(b *Builder, ctx context.Context, a *Action) error
            
            
            
               
                  WriteCoveragePercent 
                  function
                  
                  #
               
               
               WriteCoveragePercent writes out to the writer 'w' a "percent
statements covered" for the package whose test-run action is
'runAct', based on the meta-data file 'mf'. This helper is used in
cases where a user runs "go test -cover" on a package that has
functions but no tests; in the normal case (package has tests)
the percentage is written by the test binary when it runs.
               
               func WriteCoveragePercent(b *Builder, runAct *Action, mf string, w io.Writer) error
            
            
            
               
                  WriteCoverageProfile 
                  function
                  
                  #
               
               
               WriteCoverageProfile writes out a coverage profile fragment for the
package whose test-run action is 'runAct'; content is written to
the file 'outf' based on the coverage meta-data info found in
'mf'. This helper is used in cases where a user runs "go test
-cover" on a package that has functions but no tests.
               
               func WriteCoverageProfile(b *Builder, runAct *Action, mf string, outf string, w io.Writer) error
            
            
            
               
                  actionGraphJSON 
                  function
                  
                  #
               
               
               func actionGraphJSON(a *Action) string
            
            
            
               
                  actionID 
                  function
                  
                  #
               
               
               actionID returns the action ID half of a build ID.
               
               func actionID(buildID string) string
            
            
            
               
                  actionList 
                  function
                  
                  #
               
               
               actionList returns the list of actions in the dag rooted at root
as visited in a depth-first post-order traversal.
               
               func actionList(root *Action) []*Action
            
            
            
               
                  actualFiles 
                  function
                  
                  #
               
               
               actualFiles applies fsys.Actual to the list of files.
               
               func actualFiles(files []string) []string
            
            
            
            
            
               
                  addTransitiveLinkDeps 
                  method
                  
                  #
               
               
               addTransitiveLinkDeps adds to the link action a all packages
that are transitive dependencies of a1.Deps.
That is, if a is a link of package main, a1 is the compile of package main
and a1.Deps is the actions for building packages directly imported by
package main (what the compiler needs). The linker needs all packages
transitively imported by the whole program; addTransitiveLinkDeps
makes sure those are present in a.Deps.
If shlib is non-empty, then a corresponds to the build and installation of shlib,
so any rebuild of shlib should not be added as a dependency.
               
               func (b *Builder) addTransitiveLinkDeps(a *Action, a1 *Action, shlib string)
            
            
            
               
                  allowedVersion 
                  function
                  
                  #
               
               
               allowedVersion reports whether the version v is an allowed version of go
(one that we can compile).
v is known to be of the form "1.23".
               
               func allowedVersion(v string) bool
            
            
            
               
                  ar 
                  method
                  
                  #
               
               
               func (gccgoToolchain) ar() []string
            
            
            
               
                  asm 
                  method
                  
                  #
               
               
               func (tools gccgoToolchain) asm(b *Builder, a *Action, sfiles []string) ([]string, error)
            
            
            
               
                  asm 
                  method
                  
                  #
               
               
               func (noToolchain) asm(b *Builder, a *Action, sfiles []string) ([]string, error)
            
            
            
               
                  asm 
                  method
                  
                  #
               
               
               func (gcToolchain) asm(b *Builder, a *Action, sfiles []string) ([]string, error)
            
            
            
               
                  asmArgs 
                  function
                  
                  #
               
               
               func asmArgs(a *Action, p *load.Package) []any
            
            
            
               
                  assemblerIsGas 
                  function
                  
                  #
               
               
               Check if assembler used by gccgo is GNU as.
               
               func assemblerIsGas() bool
            
            
            
               
                  build 
                  method
                  
                  #
               
               
               build is the action for building a single package.
Note that any new influence on this logic must be reported in b.buildActionID above as well.
               
               func (b *Builder) build(ctx context.Context, a *Action) (err error)
            
            
            
               
                  buildActionID 
                  method
                  
                  #
               
               
               buildActionID computes the action ID for a build action.
               
               func (b *Builder) buildActionID(a *Action) cache.ActionID
            
            
            
               
                  buildFlags 
                  function
                  
                  #
               
               
               func buildFlags(name string, defaults string, fromPackage []string, check func(string, string, []string) error) ([]string, error)
            
            
            
               
                  buildID 
                  method
                  
                  #
               
               
               buildID returns the build ID found in the given file.
If no build ID is found, buildID returns the content hash of the file.
               
               func (b *Builder) buildID(file string) string
            
            
            
               
                  buildImportcfgSymlinks 
                  function
                  
                  #
               
               
               buildImportcfgSymlinks builds in root a tree of symlinks
implementing the directives from importcfg.
This serves as a temporary transition mechanism until
we can depend on gccgo reading an importcfg directly.
(The Go 1.9 and later gc compilers already do.)
               
               func buildImportcfgSymlinks(sh *Shell, root string, importcfg []byte) error
            
            
            
               
                  buildModeInit 
                  function
                  
                  #
               
               
               func buildModeInit()
            
            
            
               
                  buildVetConfig 
                  function
                  
                  #
               
               
               func buildVetConfig(a *Action, srcfiles []string)
            
            
            
               
                  buildmodeShared 
                  method
                  
                  #
               
               
               buildmodeShared takes the "go build" action a1 into the building of a shared library of a1.Deps.
That is, the input a1 represents "go build pkgs" and the result represents "go build -buildmode=shared pkgs".
               
               func (b *Builder) buildmodeShared(mode BuildMode, depMode BuildMode, args []string, pkgs []*load.Package, a1 *Action) *Action
            
            
            
               
                  cCompilerEnv 
                  method
                  
                  #
               
               
               cCompilerEnv returns environment variables to set when running the
C compiler. This is needed to disable escape codes in clang error
messages that confuse tools like cgo.
               
               func (b *Builder) cCompilerEnv() []string
            
            
            
               
                  cacheAction 
                  method
                  
                  #
               
               
               cacheAction looks up {mode, p} in the cache and returns the resulting action.
If the cache has no such action, f() is recorded and returned.
TODO(rsc): Change the second key from *load.Package to interface{},
to make the caching in linkShared less awkward?
               
               func (b *Builder) cacheAction(mode string, p *load.Package, f func() *Action) *Action
            
            
            
               
                  cacheCgoHdr 
                  method
                  
                  #
               
               
               func (b *Builder) cacheCgoHdr(a *Action)
            
            
            
               
                  cacheObjdirFile 
                  method
                  
                  #
               
               
               func (b *Builder) cacheObjdirFile(a *Action, c cache.Cache, name string) error
            
            
            
               
                  cacheSrcFiles 
                  method
                  
                  #
               
               
               func (b *Builder) cacheSrcFiles(a *Action, srcfiles []string)
            
            
            
               
                  cc 
                  method
                  
                  #
               
               
               func (gcToolchain) cc(b *Builder, a *Action, ofile string, cfile string) error
            
            
            
               
                  cc 
                  method
                  
                  #
               
               
               func (tools gccgoToolchain) cc(b *Builder, a *Action, ofile string, cfile string) error
            
            
            
               
                  cc 
                  method
                  
                  #
               
               
               func (noToolchain) cc(b *Builder, a *Action, ofile string, cfile string) error
            
            
            
               
                  ccExe 
                  method
                  
                  #
               
               
               ccExe returns the CC compiler setting without all the extra flags we add implicitly.
               
               func (b *Builder) ccExe() []string
            
            
            
               
                  ccompile 
                  method
                  
                  #
               
               
               ccompile runs the given C or C++ compiler and creates an object from a single source file.
               
               func (b *Builder) ccompile(a *Action, outfile string, flags []string, file string, compiler []string) error
            
            
            
               
                  cgo 
                  method
                  
                  #
               
               
               func (b *Builder) cgo(a *Action, cgoExe string, objdir string, pcCFLAGS []string, pcLDFLAGS []string, cgofiles []string, gccfiles []string, gxxfiles []string, mfiles []string, ffiles []string) (outGo []string, outObj []string, err error)
            
            
            
               
                  checkCompilerFlags 
                  function
                  
                  #
               
               
               func checkCompilerFlags(name string, source string, list []string) error
            
            
            
               
                  checkCompilerFlagsForInternalLink 
                  function
                  
                  #
               
               
               checkCompilerFlagsForInternalLink returns an error if 'list'
contains a flag or flags that may not be fully supported by
internal linking (meaning that we should punt the link to the
external linker).
               
               func checkCompilerFlagsForInternalLink(name string, source string, list []string) error
            
            
            
               
                  checkDirectives 
                  method
                  
                  #
               
               
               func (b *Builder) checkDirectives(a *Action) error
            
            
            
               
                  checkFlags 
                  function
                  
                  #
               
               
               func checkFlags(name string, source string, list []string, invalid []*lazyregexp.Regexp, valid []*lazyregexp.Regexp, validNext []string, checkOverrides bool) error
            
            
            
               
                  checkGccgoBin 
                  function
                  
                  #
               
               
               func checkGccgoBin()
            
            
            
               
                  checkLinkerFlags 
                  function
                  
                  #
               
               
               func checkLinkerFlags(name string, source string, list []string) error
            
            
            
               
                  cleanup 
                  method
                  
                  #
               
               
               cleanup removes a's object dir to keep the amount of
on-disk garbage down in a large build. On an operating system
with aggressive buffering, cleaning incrementally like
this keeps the intermediate objects from hitting the disk.
               
               func (b *Builder) cleanup(a *Action)
            
            
            
               
                  closeBuilders 
                  function
                  
                  #
               
               
               func closeBuilders()
            
            
            
               
                  compiler 
                  method
                  
                  #
               
               
               func (gcToolchain) compiler() string
            
            
            
               
                  compiler 
                  method
                  
                  #
               
               
               func (gccgoToolchain) compiler() string
            
            
            
               
                  compiler 
                  method
                  
                  #
               
               
               func (noToolchain) compiler() string
            
            
            
               
                  compilerCmd 
                  method
                  
                  #
               
               
               compilerCmd returns a command line prefix for the given environment
variable and using the default command when the variable is empty.
               
               func (b *Builder) compilerCmd(compiler []string, incdir string, workdir string) []string
            
            
            
               
                  compilerRequiredAsanVersion 
                  function
                  
                  #
               
               
               compilerRequiredAsanVersion is a copy of the function defined in
cmd/cgo/internal/testsanitizers/cc_test.go
compilerRequiredAsanVersion reports whether the compiler is the version
required by Asan.
               
               func compilerRequiredAsanVersion() error
            
            
            
               
                  compilerVersion 
                  function
                  
                  #
               
               
               compilerVersion detects the version of $(go env CC).
It returns a non-nil error if the compiler matches a known version schema but
the version could not be parsed, or if $(go env CC) could not be determined.
               
               func compilerVersion() (version, error)
            
            
            
               
                  contentID 
                  function
                  
                  #
               
               
               contentID returns the content ID half of a build ID.
               
               func contentID(buildID string) string
            
            
            
               
                  cover 
                  method
                  
                  #
               
               
               cover runs, in effect,
go tool cover -mode=b.coverMode -var="varName" -o dst.go src.go
               
               func (b *Builder) cover(a *Action, dst string, src string, varName string) error
            
            
            
               
                  cover2 
                  method
                  
                  #
               
               
               cover2 runs, in effect,
go tool cover -pkgcfg= -mode=b.coverMode -var="varName" -o  
Return value is an updated output files list; in addition to the
regular outputs (instrumented source files) the cover tool also
writes a separate file (appearing first in the list of outputs)
that will contain coverage counters and meta-data.
               
               func (b *Builder) cover2(a *Action, infiles []string, outfiles []string, varName string, mode string) ([]string, error)
            
            
            
               
                  cxxExe 
                  method
                  
                  #
               
               
               cxxExe returns the CXX compiler setting without all the extra flags we add implicitly.
               
               func (b *Builder) cxxExe() []string
            
            
            
               
                  disableBuildID 
                  method
                  
                  #
               
               
               disableBuildID adjusts a linker command line to avoid creating a
build ID when creating an object file rather than an executable or
shared library. Some systems, such as Ubuntu, always add
--build-id to every link, but we don't want a build ID when we are
producing an object file. On some of those system a plain -r (not
-Wl,-r) will turn off --build-id, but clang 3.0 doesn't support a
plain -r. I don't know how to turn off --build-id when using clang
other than passing a trailing --build-id=none. So that is what we
do, but only on systems likely to support it, which is to say,
systems that normally use gold or the GNU linker.
               
               func (b *Builder) disableBuildID(ldflags []string) []string
            
            
            
               
                  dynimport 
                  method
                  
                  #
               
               
               dynimport creates a Go source file named importGo containing
//go:cgo_import_dynamic directives for each symbol or library
dynamically imported by the object files outObj.
dynOutGo, if not empty, is a new Go file to build as part of the package.
dynOutObj, if not empty, is a new file to add to the generated archive.
               
               func (b *Builder) dynimport(a *Action, objdir string, importGo string, cgoExe string, cflags []string, cgoLDFLAGS []string, outObj []string) (dynOutGo string, dynOutObj string, err error)
            
            
            
               
                  encodeArg 
                  function
                  
                  #
               
               
               encodeArg encodes an argument for response file writing.
               
               func encodeArg(arg string) string
            
            
            
               
                  envList 
                  function
                  
                  #
               
               
               envList returns the value of the given environment variable broken
into fields, using the default value when the variable is empty.
The environment variable must be quoted correctly for
quoted.Split. This should be done before building
anything, for example, in BuildInit.
               
               func envList(key string, def string) []string
            
            
            
               
                  fcExe 
                  method
                  
                  #
               
               
               fcExe returns the FC compiler setting without all the extra flags we add implicitly.
               
               func (b *Builder) fcExe() []string
            
            
            
               
                  fileExtSplit 
                  function
                  
                  #
               
               
               fileExtSplit expects a filename and returns the name
and ext (without the dot). If the file has no
extension, ext will be empty.
               
               func fileExtSplit(file string) (name string, ext string)
            
            
            
               
                  fileHash 
                  method
                  
                  #
               
               
               fileHash returns the content hash of the named file.
               
               func (b *Builder) fileHash(file string) string
            
            
            
               
                  findCachedObjdirFile 
                  method
                  
                  #
               
               
               func (b *Builder) findCachedObjdirFile(a *Action, c cache.Cache, name string) (string, error)
            
            
            
               
                  flagsNotCompatibleWithInternalLinking 
                  function
                  
                  #
               
               
               flagsNotCompatibleWithInternalLinking scans the list of cgo
compiler flags (C/C++/Fortran) looking for flags that might cause
problems if the build in question uses internal linking. The
primary culprits are use of plugins or use of LTO, but we err on
the side of caution, supporting only those flags that are on the
allow-list for safe flags from security perspective. Return is TRUE
if a sensitive flag is found, FALSE otherwise.
               
               func flagsNotCompatibleWithInternalLinking(sourceList []string, flagListList [][]string) bool
            
            
            
               
                  flushOutput 
                  method
                  
                  #
               
               
               flushOutput flushes the output being queued in a.
               
               func (b *Builder) flushOutput(a *Action)
            
            
            
               
                  fmtCmd 
                  method
                  
                  #
               
               
               fmtCmd formats a command in the manner of fmt.Sprintf but also:
fmtCmd replaces the value of b.WorkDir with $WORK.
               
               func (sh *Shell) fmtCmd(dir string, format string, args ...any) string
            
            
            
               
                  fuzzInstrumentFlags 
                  function
                  
                  #
               
               
               fuzzInstrumentFlags returns compiler flags that enable fuzzing instrumentation
on supported platforms.
On unsupported platforms, fuzzInstrumentFlags returns nil, meaning no
instrumentation is added. 'go test -fuzz' still works without coverage,
but it generates random inputs without guidance, so it's much less effective.
               
               func fuzzInstrumentFlags() []string
            
            
            
               
                  gc 
                  method
                  
                  #
               
               
               func (noToolchain) gc(b *Builder, a *Action, archive string, importcfg []byte, embedcfg []byte, symabis string, asmhdr bool, pgoProfile string, gofiles []string) (ofile string, out []byte, err error)
            
            
            
               
                  gc 
                  method
                  
                  #
               
               
               func (gcToolchain) gc(b *Builder, a *Action, archive string, importcfg []byte, embedcfg []byte, symabis string, asmhdr bool, pgoProfile string, gofiles []string) (ofile string, output []byte, err error)
            
            
            
               
                  gc 
                  method
                  
                  #
               
               
               func (tools gccgoToolchain) gc(b *Builder, a *Action, archive string, importcfg []byte, embedcfg []byte, symabis string, asmhdr bool, pgoProfile string, gofiles []string) (ofile string, output []byte, err error)
            
            
            
               
                  gcBackendConcurrency 
                  function
                  
                  #
               
               
               gcBackendConcurrency returns the backend compiler concurrency level for a package compilation.
               
               func gcBackendConcurrency(gcflags []string) int
            
            
            
               
                  gcc 
                  method
                  
                  #
               
               
               gcc runs the gcc C compiler to create an object from a single C file.
               
               func (b *Builder) gcc(a *Action, workdir string, out string, flags []string, cfile string) error
            
            
            
               
                  gccArchArgs 
                  method
                  
                  #
               
               
               gccArchArgs returns arguments to pass to gcc based on the architecture.
               
               func (b *Builder) gccArchArgs() []string
            
            
            
               
                  gccCompilerID 
                  method
                  
                  #
               
               
               gccCompilerID returns a build cache key for the current gcc,
as identified by running 'compiler'.
The caller can use subkeys of the key.
Other parts of cmd/go can use the id as a hash
of the installed compiler version.
               
               func (b *Builder) gccCompilerID(compiler string) (id cache.ActionID, ok bool)
            
            
            
               
                  gccNoPie 
                  method
                  
                  #
               
               
               gccNoPie returns the flag to use to request non-PIE. On systems
with PIE (position independent executables) enabled by default,
-no-pie must be passed when doing a partial link with -Wl,-r.
But -no-pie is not supported by all compilers, and clang spells it -nopie.
               
               func (b *Builder) gccNoPie(linker []string) string
            
            
            
               
                  gccSupportsFlag 
                  method
                  
                  #
               
               
               gccSupportsFlag checks to see if the compiler supports a flag.
               
               func (b *Builder) gccSupportsFlag(compiler []string, flag string) bool
            
            
            
               
                  gccToolID 
                  method
                  
                  #
               
               
               gccToolID returns the unique ID to use for a tool that is invoked
by the GCC driver. This is used particularly for gccgo, but this can also
be used for gcc, g++, gfortran, etc.; those tools all use the GCC
driver under different names. The approach used here should also
work for sufficiently new versions of clang. Unlike toolID, the
name argument is the program to run. The language argument is the
type of input file as passed to the GCC driver's -x option.
For these tools we have no -V=full option to dump the build ID,
but we can run the tool with -v -### to reliably get the compiler proper
and hash that. That will work in the presence of -toolexec.
In order to get reproducible builds for released compilers, we
detect a released compiler by the absence of "experimental" in the
--version output, and in that case we just use the version string.
gccToolID also returns the underlying executable for the compiler.
The caller assumes that stat of the exe can be used, combined with the id,
to detect changes in the underlying compiler. The returned exe can be empty,
which means to rely only on the id.
               
               func (b *Builder) gccToolID(name string, language string) (id string, exe string, err error)
            
            
            
               
                  gccgoArchive 
                  function
                  
                  #
               
               
               func gccgoArchive(basedir string, imp string) string
            
            
            
               
                  gccgoBuildIDFile 
                  method
                  
                  #
               
               
               gccgoBuildIDFile creates an assembler file that records the
action's build ID in an SHF_EXCLUDE section for ELF files or
in a CSECT in XCOFF files.
               
               func (b *Builder) gccgoBuildIDFile(a *Action) (string, error)
            
            
            
               
                  gccgoCleanPkgpath 
                  method
                  
                  #
               
               
               func (tools gccgoToolchain) gccgoCleanPkgpath(b *Builder, p *load.Package) string
            
            
            
               
                  gccgoPkgpath 
                  function
                  
                  #
               
               
               func gccgoPkgpath(p *load.Package) string
            
            
            
               
                  gccld 
                  method
                  
                  #
               
               
               gccld runs the gcc linker to create an executable from a set of object files.
               
               func (b *Builder) gccld(a *Action, objdir string, outfile string, flags []string, objs []string) error
            
            
            
               
                  getPkgConfigFlags 
                  method
                  
                  #
               
               
               Calls pkg-config if needed and returns the cflags/ldflags needed to build a's package.
               
               func (b *Builder) getPkgConfigFlags(a *Action) (cflags []string, ldflags []string, err error)
            
            
            
               
                  gfortran 
                  method
                  
                  #
               
               
               gfortran runs the gfortran Fortran compiler to create an object from a single Fortran file.
               
               func (b *Builder) gfortran(a *Action, workdir string, out string, flags []string, ffile string) error
            
            
            
               
                  gfortranCmd 
                  method
                  
                  #
               
               
               gfortranCmd returns a gfortran command line prefix.
               
               func (b *Builder) gfortranCmd(incdir string, workdir string) []string
            
            
            
               
                  gxx 
                  method
                  
                  #
               
               
               gxx runs the g++ C++ compiler to create an object from a single C++ file.
               
               func (b *Builder) gxx(a *Action, workdir string, out string, flags []string, cxxfile string) error
            
            
            
               
                  init 
                  function
                  
                  #
               
               
               func init()
            
            
            
               
                  init 
                  function
                  
                  #
               
               
               func init()
            
            
            
               
                  init 
                  function
                  
                  #
               
               
               func init()
            
            
            
               
                  installAction 
                  method
                  
                  #
               
               
               installAction returns the action for installing the result of a1.
               
               func (b *Builder) installAction(a1 *Action, mode BuildMode) *Action
            
            
            
            
            
               
                  installOutsideModule 
                  function
                  
                  #
               
               
               installOutsideModule implements 'go install pkg@version'. It builds and
installs one or more main packages in module mode while ignoring any go.mod
in the current directory or parent directories.
See golang.org/issue/40276 for details and rationale.
               
               func installOutsideModule(ctx context.Context, args []string)
            
            
            
               
                  installShlibname 
                  method
                  
                  #
               
               
               func (b *Builder) installShlibname(ctx context.Context, a *Action) error
            
            
            
               
                  instrumentInit 
                  function
                  
                  #
               
               
               func instrumentInit()
            
            
            
               
                  isObject 
                  function
                  
                  #
               
               
               func isObject(s string) bool
            
            
            
               
                  joinUnambiguously 
                  function
                  
                  #
               
               
               joinUnambiguously prints the slice, quoting where necessary to make the
output unambiguous.
TODO: See issue 5279. The printing of commands needs a complete redo.
               
               func joinUnambiguously(a []string) string
            
            
            
               
                  ld 
                  method
                  
                  #
               
               
               func (tools gccgoToolchain) ld(b *Builder, root *Action, targetPath string, importcfg string, mainpkg string) error
            
            
            
               
                  ld 
                  method
                  
                  #
               
               
               func (noToolchain) ld(b *Builder, root *Action, targetPath string, importcfg string, mainpkg string) error
            
            
            
               
                  ld 
                  method
                  
                  #
               
               
               func (gcToolchain) ld(b *Builder, root *Action, targetPath string, importcfg string, mainpkg string) error
            
            
            
               
                  ldShared 
                  method
                  
                  #
               
               
               func (noToolchain) ldShared(b *Builder, root *Action, toplevelactions []*Action, targetPath string, importcfg string, allactions []*Action) error
            
            
            
               
                  ldShared 
                  method
                  
                  #
               
               
               func (gcToolchain) ldShared(b *Builder, root *Action, toplevelactions []*Action, targetPath string, importcfg string, allactions []*Action) error
            
            
            
               
                  ldShared 
                  method
                  
                  #
               
               
               func (tools gccgoToolchain) ldShared(b *Builder, root *Action, toplevelactions []*Action, targetPath string, importcfg string, allactions []*Action) error
            
            
            
               
                  libname 
                  function
                  
                  #
               
               
               libname returns the filename to use for the shared library when using
-buildmode=shared. The rules we use are:
Use arguments for special 'meta' packages:
std --> libstd.so
std cmd --> libstd,cmd.so
A single non-meta argument with trailing "/..." is special cased:
foo/... --> libfoo.so
(A relative path like "./..."  expands the "." first)
Use import paths for other cases, changing '/' to '-':
somelib --> libsubdir-somelib.so
./ or ../ --> libsubdir-somelib.so
gopkg.in/tomb.v2 -> libgopkg.in-tomb.v2.so
a/... b/... ---> liba/c,b/d.so - all matching import paths
Name parts are joined with ','.
               
               func libname(args []string, pkgs []*load.Package) (string, error)
            
            
            
               
                  link 
                  method
                  
                  #
               
               
               link is the action for linking a single command.
Note that any new influence on this logic must be reported in b.linkActionID above as well.
               
               func (b *Builder) link(ctx context.Context, a *Action) (err error)
            
            
            
               
                  link 
                  method
                  
                  #
               
               
               func (tools gccgoToolchain) link(b *Builder, root *Action, out string, importcfg string, allactions []*Action, buildmode string, desc string) error
            
            
            
               
                  linkActionID 
                  method
                  
                  #
               
               
               linkActionID computes the action ID for a link action.
               
               func (b *Builder) linkActionID(a *Action) cache.ActionID
            
            
            
               
                  linkShared 
                  method
                  
                  #
               
               
               func (b *Builder) linkShared(ctx context.Context, a *Action) (err error)
            
            
            
               
                  linkSharedAction 
                  method
                  
                  #
               
               
               linkSharedAction takes a grouping action a1 corresponding to a list of built packages
and returns an action that links them together into a shared library with the name shlib.
If a1 is nil, shlib should be an absolute path to an existing shared library,
and then linkSharedAction reads that library to find out the package list.
               
               func (b *Builder) linkSharedAction(mode BuildMode, depMode BuildMode, shlib string, a1 *Action) *Action
            
            
            
               
                  linkSharedActionID 
                  method
                  
                  #
               
               
               func (b *Builder) linkSharedActionID(a *Action) cache.ActionID
            
            
            
               
                  linker 
                  method
                  
                  #
               
               
               func (gccgoToolchain) linker() string
            
            
            
               
                  linker 
                  method
                  
                  #
               
               
               func (gcToolchain) linker() string
            
            
            
               
                  linker 
                  method
                  
                  #
               
               
               func (noToolchain) linker() string
            
            
            
               
                  loadCachedCgoHdr 
                  method
                  
                  #
               
               
               func (b *Builder) loadCachedCgoHdr(a *Action) error
            
            
            
               
                  loadCachedCompiledGoFiles 
                  method
                  
                  #
               
               
               func (b *Builder) loadCachedCompiledGoFiles(a *Action) error
            
            
            
               
                  loadCachedObjdirFile 
                  method
                  
                  #
               
               
               func (b *Builder) loadCachedObjdirFile(a *Action, c cache.Cache, name string) error
            
            
            
               
                  loadCachedVet 
                  method
                  
                  #
               
               
               func (b *Builder) loadCachedVet(a *Action) error
            
            
            
               
                  maybePIC 
                  method
                  
                  #
               
               
               maybePIC adds -fPIC to the list of arguments if needed.
               
               func (tools gccgoToolchain) maybePIC(args []string) []string
            
            
            
               
                  mayberemovefile 
                  function
                  
                  #
               
               
               mayberemovefile removes a file only if it is a regular file
When running as a user with sufficient privileges, we may delete
even device files, for example, which is not intended.
               
               func mayberemovefile(s string)
            
            
            
               
                  mkAbs 
                  function
                  
                  #
               
               
               mkAbs returns an absolute path corresponding to
evaluating f in the directory dir.
We always pass absolute paths of source files so that
the error messages will include the full path to a file
in need of attention.
               
               func mkAbs(dir string, f string) string
            
            
            
               
                  mkAbsFiles 
                  function
                  
                  #
               
               
               mkAbsFiles converts files into a list of absolute files,
assuming they were originally relative to dir,
and returns that new list.
               
               func mkAbsFiles(dir string, files []string) []string
            
            
            
               
                  moveOrCopyFile 
                  method
                  
                  #
               
               
               moveOrCopyFile is like 'mv src dst' or 'cp src dst'.
               
               func (sh *Shell) moveOrCopyFile(dst string, src string, perm fs.FileMode, force bool) error
            
            
            
               
                  needCgoHdr 
                  method
                  
                  #
               
               
               needCgoHdr reports whether the actions triggered by this one
expect to be able to access the cgo-generated header file.
               
               func (b *Builder) needCgoHdr(a *Action) bool
            
            
            
               
                  newBuildActor 
                  function
                  
                  #
               
               
               newBuildActor returns a new buildActor object, setting up the
covMetaFileName field if 'genCoverMeta' flag is set.
               
               func newBuildActor(p *load.Package, genCoverMeta bool) *buildActor
            
            
            
               
                  noCompiler 
                  function
                  
                  #
               
               
               func noCompiler() error
            
            
            
               
                  omitTestOnly 
                  function
                  
                  #
               
               
               omitTestOnly returns pkgs with test-only packages removed.
               
               func omitTestOnly(pkgs []*load.Package) []*load.Package
            
            
            
               
                  oneMainPkg 
                  function
                  
                  #
               
               
               func oneMainPkg(pkgs []*load.Package) []*load.Package
            
            
            
               
                  pack 
                  method
                  
                  #
               
               
               func (gcToolchain) pack(b *Builder, a *Action, afile string, ofiles []string) error
            
            
            
               
                  pack 
                  method
                  
                  #
               
               
               func (tools gccgoToolchain) pack(b *Builder, a *Action, afile string, ofiles []string) error
            
            
            
               
                  pack 
                  method
                  
                  #
               
               
               func (noToolchain) pack(b *Builder, a *Action, afile string, ofiles []string) error
            
            
            
               
                  packInternal 
                  function
                  
                  #
               
               
               func packInternal(afile string, ofiles []string) error
            
            
            
               
                  passLongArgsInResponseFiles 
                  function
                  
                  #
               
               
               passLongArgsInResponseFiles modifies cmd such that, for
certain programs, long arguments are passed in "response files", a
file on disk with the arguments, with one arg per line. An actual
argument starting with '@' means that the rest of the argument is
a filename of arguments to expand.
See issues 18468 (Windows) and 37768 (Darwin).
               
               func passLongArgsInResponseFiles(cmd *exec.Cmd) (cleanup func())
            
            
            
               
                  pgoActionID 
                  method
                  
                  #
               
               
               pgoActionID computes the action ID for a preprocess PGO action.
               
               func (b *Builder) pgoActionID(input string) cache.ActionID
            
            
            
               
                  pkg 
                  method
                  
                  #
               
               
               func (sh *Shell) pkg() *load.Package
            
            
            
               
                  pkgPath 
                  function
                  
                  #
               
               
               func pkgPath(a *Action) string
            
            
            
               
                  pkgsMain 
                  function
                  
                  #
               
               
               func pkgsMain(pkgs []*load.Package) (res []*load.Package)
            
            
            
               
                  pkgsNotMain 
                  function
                  
                  #
               
               
               func pkgsNotMain(pkgs []*load.Package) (res []*load.Package)
            
            
            
               
                  pluginPath 
                  function
                  
                  #
               
               
               pluginPath computes the package path for a plugin main package.
This is typically the import path of the main package p, unless the
plugin is being built directly from source files. In that case we
combine the package build ID with the contents of the main package
source files. This allows us to identify two different plugins
built from two source files with the same name.
               
               func pluginPath(a *Action) string
            
            
            
               
                  pop 
                  method
                  
                  #
               
               
               func (q *actionQueue) pop() *Action
            
            
            
               
                  printLinkerConfig 
                  method
                  
                  #
               
               
               printLinkerConfig prints the linker config into the hash h,
as part of the computation of a linker-related action ID.
               
               func (b *Builder) printLinkerConfig(h io.Writer, p *load.Package)
            
            
            
               
                  printfLocked 
                  method
                  
                  #
               
               
               func (sh *Shell) printfLocked(format string, a ...any)
            
            
            
               
                  push 
                  method
                  
                  #
               
               
               func (q *actionQueue) push(a *Action)
            
            
            
               
                  readpkglist 
                  function
                  
                  #
               
               
               readpkglist returns the list of packages that were built into the shared library
at shlibpath. For the native toolchain this list is stored, newline separated, in
an ELF note with name "Go\x00\x00" and type 1. For GCCGO it is extracted from the
.go_export section.
               
               func readpkglist(shlibpath string) (pkgs []*load.Package)
            
            
            
               
                  replacePrefix 
                  function
                  
                  #
               
               
               replacePrefix is like strings.ReplaceAll, but only replaces instances of old
that are preceded by ' ', '\t', or appear at the beginning of a line.
               
               func replacePrefix(s string, old string, new string) string
            
            
            
               
                  reportCmd 
                  method
                  
                  #
               
               
               reportCmd reports the output and exit status of a command. The cmdOut and
cmdErr arguments are the output and exit error of the command, respectively.
The exact reporting behavior is as follows:
cmdOut  cmdErr  Result
""      nil     print nothing, return nil
!=""    nil     print output, return nil
""      !=nil   print nothing, return cmdErr (later printed)
!=""    !=nil   print nothing, ignore err, return output as error (later printed)
reportCmd returns a non-nil error if and only if cmdErr != nil. It assumes
that the command output, if non-empty, is more detailed than the command
error (which is usually just an exit status), so prefers using the output as
the ultimate error. Typically, the caller should return this error from an
Action, which it will be printed by the Builder.
reportCmd formats the output as "# desc" followed by the given output. The
output is expected to contain references to 'dir', usually the source
directory for the package that has failed to build. reportCmd rewrites
mentions of dir with a relative path to dir when the relative path is
shorter. This is usually more pleasant. For example, if fmt doesn't compile
and we are in src/html, the output is
$ go build
# fmt
../fmt/print.go:1090: undefined: asdf
$
instead of
$ go build
# fmt
/usr/gopher/go/src/fmt/print.go:1090: undefined: asdf
$
reportCmd also replaces references to the work directory with $WORK, replaces
cgo file paths with the original file path, and replaces cgo-mangled names
with "C.name".
desc is optional. If "", a.Package.Desc() is used.
dir is optional. If "", a.Package.Dir is used.
               
               func (sh *Shell) reportCmd(desc string, dir string, cmdOut []byte, cmdErr error) error
            
            
            
               
                  run 
                  method
                  
                  #
               
               
               run runs the command given by cmdline in the directory dir.
If the command fails, run prints information about the failure
and returns a non-nil error.
               
               func (sh *Shell) run(dir string, desc string, env []string, cmdargs ...any) error
            
            
            
               
                  runBuild 
                  function
                  
                  #
               
               
               func runBuild(ctx context.Context, cmd *base.Command, args []string)
            
            
            
               
                  runInstall 
                  function
                  
                  #
               
               
               func runInstall(ctx context.Context, cmd *base.Command, args []string)
            
            
            
               
                  runOut 
                  method
                  
                  #
               
               
               runOut runs the command given by cmdline in the directory dir.
It returns the command output and any errors that occurred.
It accumulates execution time in a.
               
               func (sh *Shell) runOut(dir string, env []string, cmdargs ...any) ([]byte, error)
            
            
            
               
                  setextld 
                  function
                  
                  #
               
               
               setextld sets the appropriate linker flags for the specified compiler.
               
               func setextld(ldflags []string, compiler []string) ([]string, error)
            
            
            
               
                  showStdout 
                  function
                  
                  #
               
               
               func showStdout(b *Builder, c cache.Cache, a *Action, key string) error
            
            
            
               
                  splitPkgConfigOutput 
                  function
                  
                  #
               
               
               splitPkgConfigOutput parses the pkg-config output into a slice of flags.
This implements the shell quoting semantics described in
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_02,
except that it does not support parameter or arithmetic expansion or command
substitution and hard-codes the  delimiters instead of reading them
from LC_LOCALE.
               
               func splitPkgConfigOutput(out []byte) ([]string, error)
            
            
            
               
                  statString 
                  function
                  
                  #
               
               
               statString returns a string form of an os.FileInfo, for serializing and comparison.
               
               func statString(info os.FileInfo) string
            
            
            
               
                  supportsCgoIncomplete 
                  method
                  
                  #
               
               
               supportsCgoIncomplete reports whether the gccgo/GoLLVM compiler
being used supports cgo.Incomplete, which was added in GCC 13.
This takes an Action only for output reporting purposes.
The result value is unrelated to the Action.
               
               func (tools gccgoToolchain) supportsCgoIncomplete(b *Builder, a *Action) bool
            
            
            
               
                  swig 
                  method
                  
                  #
               
               
               Run SWIG on all SWIG input files.
TODO: Don't build a shared library, once SWIG emits the necessary
pragmas for external linking.
               
               func (b *Builder) swig(a *Action, objdir string, pcCFLAGS []string) (outGo []string, outC []string, outCXX []string, err error)
            
            
            
               
                  swigDoIntSize 
                  method
                  
                  #
               
               
               Determine the size of int on the target system for the -intgosize option
of swig >= 2.0.9. Run only once.
               
               func (b *Builder) swigDoIntSize(objdir string) (intsize string, err error)
            
            
            
               
                  swigDoVersionCheck 
                  method
                  
                  #
               
               
               func (b *Builder) swigDoVersionCheck() error
            
            
            
               
                  swigIntSize 
                  method
                  
                  #
               
               
               Determine the size of int on the target system for the -intgosize option
of swig >= 2.0.9.
               
               func (b *Builder) swigIntSize(objdir string) (intsize string, err error)
            
            
            
               
                  swigOne 
                  method
                  
                  #
               
               
               Run SWIG on one SWIG input file.
               
               func (b *Builder) swigOne(a *Action, file string, objdir string, pcCFLAGS []string, cxx bool, intgosize string) (outGo string, outC string, err error)
            
            
            
               
                  swigVersionCheck 
                  method
                  
                  #
               
               
               func (b *Builder) swigVersionCheck() error
            
            
            
               
                  symabis 
                  method
                  
                  #
               
               
               func (gcToolchain) symabis(b *Builder, a *Action, sfiles []string) (string, error)
            
            
            
               
                  symabis 
                  method
                  
                  #
               
               
               func (gccgoToolchain) symabis(b *Builder, a *Action, sfiles []string) (string, error)
            
            
            
               
                  symabis 
                  method
                  
                  #
               
               
               func (noToolchain) symabis(b *Builder, a *Action, sfiles []string) (string, error)
            
            
            
               
                  toolID 
                  method
                  
                  #
               
               
               toolID returns the unique ID to use for the current copy of the
named tool (asm, compile, cover, link).
It is important that if the tool changes (for example a compiler bug is fixed
and the compiler reinstalled), toolID returns a different string, so that old
package archives look stale and are rebuilt (with the fixed compiler).
This suggests using a content hash of the tool binary, as stored in the build ID.
Unfortunately, we can't just open the tool binary, because the tool might be
invoked via a wrapper program specified by -toolexec and we don't know
what the wrapper program does. In particular, we want "-toolexec toolstash"
to continue working: it does no good if "-toolexec toolstash" is executing a
stashed copy of the compiler but the go command is acting as if it will run
the standard copy of the compiler. The solution is to ask the tool binary to tell
us its own build ID using the "-V=full" flag now supported by all tools.
Then we know we're getting the build ID of the compiler that will actually run
during the build. (How does the compiler binary know its own content hash?
We store it there using updateBuildID after the standard link step.)
A final twist is that we'd prefer to have reproducible builds for release toolchains.
It should be possible to cross-compile for Windows from either Linux or Mac
or Windows itself and produce the same binaries, bit for bit. If the tool ID,
which influences the action ID half of the build ID, is based on the content ID,
then the Linux compiler binary and Mac compiler binary will have different tool IDs
and therefore produce executables with different action IDs.
To avoid this problem, for releases we use the release version string instead
of the compiler binary's content hash. This assumes that all compilers built
on all different systems are semantically equivalent, which is of course only true
modulo bugs. (Producing the exact same executables also requires that the different
build setups agree on details like $GOROOT and file name paths, but at least the
tool IDs do not make it impossible.)
               
               func (b *Builder) toolID(name string) string
            
            
            
               
                  toolVerify 
                  function
                  
                  #
               
               
               toolVerify checks that the command line args writes the same output file
if run using newTool instead.
Unused now but kept around for future use.
               
               func toolVerify(a *Action, b *Builder, p *load.Package, newTool string, ofile string, args []any) error
            
            
            
               
                  trimpath 
                  method
                  
                  #
               
               
               trimpath returns the -trimpath argument to use
when compiling the action.
               
               func (a *Action) trimpath() string
            
            
            
               
                  updateBuildID 
                  method
                  
                  #
               
               
               updateBuildID updates the build ID in the target written by action a.
It requires that useCache was called for action a and returned false,
and that the build was then carried out and given the temporary
a.buildID to record as the build ID in the resulting package or binary.
updateBuildID computes the final content ID and updates the build IDs
in the binary.
Keep in sync with src/cmd/buildid/buildid.go
               
               func (b *Builder) updateBuildID(a *Action, target string) error
            
            
            
               
                  useCache 
                  method
                  
                  #
               
               
               useCache tries to satisfy the action a, which has action ID actionHash,
by using a cached result from an earlier build.
If useCache decides that the cache can be used, it sets a.buildID
and a.built for use by parent actions and then returns true.
Otherwise it sets a.buildID to a temporary build ID for use in the build
and returns false. When useCache returns false the expectation is that
the caller will build the target and then call updateBuildID to finish the
build ID computation.
When useCache returns false, it may have initiated buffering of output
during a's work. The caller should defer b.flushOutput(a), to make sure
that flushOutput is eventually called regardless of whether the action
succeeds. The flushOutput call must happen after updateBuildID.
               
               func (b *Builder) useCache(a *Action, actionHash cache.ActionID, target string, printOutput bool) (ok bool)
            
            
            
               
                  useResponseFile 
                  function
                  
                  #
               
               
               func useResponseFile(path string, argLen int) bool
            
            
            
               
                  vet 
                  method
                  
                  #
               
               
               func (b *Builder) vet(ctx context.Context, a *Action) error
            
            
            
               
                  vetAction 
                  method
                  
                  #
               
               
               func (b *Builder) vetAction(mode BuildMode, depMode BuildMode, p *load.Package) *Action
            
            
            
               
                  writeCoverPkgInputs 
                  method
                  
                  #
               
               
               func (b *Builder) writeCoverPkgInputs(a *Action, pconfigfile string, covoutputsfile string, outfiles []string) error
            
            
            
               
                  writeFile 
                  method
                  
                  #
               
               
               writeFile writes the text to file.
               
               func (sh *Shell) writeFile(file string, text []byte) error
            
            
            
               
                  writeLinkImportcfg 
                  method
                  
                  #
               
               
               func (b *Builder) writeLinkImportcfg(a *Action, file string) error