Documentation ¶
Index ¶
- Constants
- func Bundle(toolchainDir, outputDir string, variants []Variant, dryRun, verbose bool) (bundles []string, err error)
- func ChooseTool(op, unitType string) (*srclib.ToolRef, error)
- func Command(path string) (string, error)
- func Dir(toolchainPath string) (string, error)
- func ListTools(op string) ([]*srclib.ToolRef, error)
- func Unbundle(toolchainPath, archiveName string, r io.Reader) (err error)
- type Config
- type Info
- type ToolInfo
- type Variant
Constants ¶
const ConfigFilename = "Srclibtoolchain"
ConfigFilename is the filename of the toolchain configuration file. The presence of this file in a directory signifies that a srclib toolchain is defined in that directory.
Variables ¶
This section is empty.
Functions ¶
func Bundle ¶
func Bundle(toolchainDir, outputDir string, variants []Variant, dryRun, verbose bool) (bundles []string, err error)
Bundle builds all variants of the toolchain and creates separate archive files for each variant in a temporary directory. It returns a list of variants and the archive files produced from them.
If variants is nil, all variants specified in the Srclibtoolchain file are built.
func ChooseTool ¶
ChooseTool determines which toolchain and tool to use to run op (graph, depresolve, etc.) on a source unit of the given type. If no tools fit the criteria, an error is returned.
The selection algorithm is currently very simplistic: if exactly one tool is found that can perform op on the source unit type, it is returned. If zero or more than 1 are found, then an error is returned. TODO(sqs): extend this to choose the "best" tool when multiple tools would suffice.
func Command ¶
Command returns the path to the executable program for the toolchain with the given path.
func Dir ¶
Dir returns the directory where the named toolchain lives (under the SRCLIBPATH). If the toolchain already exists in any of the entries of SRCLIBPATH, that directory is returned. Otherwise a nonexistent directory in the first SRCLIBPATH entry is returned.
func ListTools ¶
ListTools lists all tools in all available toolchains (returned by List). If op is non-empty, only tools that perform that operation are returned.
func Unbundle ¶
Unbundle unpacks the archive r to the toolchain named by the given toolchain path. The archiveName indicates what type of archive r contains; e.g., "foo.tar.gz" is a gzipped tar archive, "foo.tar" is just a tar archive, etc. An error is returned if archiveName's suffix isn't that of a recognized format.
Types ¶
type Config ¶
type Config struct { // Tools is the list of this toolchain's tools and their definitions. Tools []*ToolInfo // Bundle configures the way that this toolchain is built and // archived. If Bundle is not set, it means that the toolchain // can't be bundled. Bundle *struct { // Paths is a list of path globs whose matches are included in // the toolchain bundle archive file (created, e.g., using // "srclib toolchain bundle <PATH>"). It should contain all of // the files necessary to execute the toolchain. For // toolchains whose entrypoint is a static binary or JAR, this // is typically the entrypoint plus any shell scripts or // support files necessary. // // Go's filepath.Glob is used for globbing. In addition, if a // dir is specified, all of its entries are included // recursively. // // "Srclibtoolchain" and ".bin/{basename}" (where {basename} // is this toolchain's path's final path component) MUST // always be included in this list, or else when unarchived // the bundle won't be a valid toolchain. Paths []string `json:",omitempty"` // Commands is the list of commands to run in order to build // the files to archive. (E.g., "go build ...".) Sometimes // these commands just consist of a "make install" or similar // invocation. // // All commands are passed to `sh -c`. Commands []string `json:",omitempty"` // Variants is the set of possible bundles. Typically these // define products such as "linux-amd64", "linux-386", // "darwin-amd64", etc., for binary outputs. // // The key-value pairs specified in each variant are available // to the commands (in the Commands list). Each command's // variable references ($foo or ${foo}) are expanded using the // values in the Variant, and they are run with the Variant's // properties set as environment variables. Variants []Variant `json:",omitempty"` } }
Config represents a Srclibtoolchain file, which defines a srclib toolchain.
type Info ¶
type Info struct { // Path is the toolchain's path (not a directory path) underneath the // SRCLIBPATH. It consists of the URI of this repository's toolchain plus // its subdirectory path within the repository. E.g., "github.com/foo/bar" // for a toolchain defined in the root directory of that repository. Path string // Dir is the filesystem directory that defines this toolchain. Dir string // ConfigFile is the path to the Srclibtoolchain file, relative to Dir. ConfigFile string // Program is the path to the executable program (relative to Dir) to run to // invoke this toolchain. Program string `json:",omitempty"` }
Info describes a toolchain.
func List ¶
List finds all toolchains in the SRCLIBPATH.
List does not find nested toolchains; i.e., if DIR is a toolchain dir (with a DIR/Srclibtoolchain file), then none of DIR's subdirectories are searched for toolchains.
func Lookup ¶
Lookup finds a toolchain by path in the SRCLIBPATH. For each DIR in SRCLIBPATH, it checks for the existence of DIR/PATH/Srclibtoolchain.
func (*Info) ReadConfig ¶
ReadConfig reads and parses the Srclibtoolchain config file for the toolchain.
type ToolInfo ¶
type ToolInfo struct { // Subcmd is the subcommand name of this tool. // // By convention, this is the same as Op in toolchains that only have one // tool that performs this operation (e.g., a toolchain's "graph" subcommand // performs the "graph" operation). Subcmd string // Op is the operation that this tool performs (e.g., "scan", "graph", // "deplist", etc.). Op string // SourceUnitTypes is a list of source unit types (e.g., "GoPackage") that // this tool can operate on. // // If this tool doesn't operate on source units (for example, it operates on // directories or repositories, such as the "blame" tools), then this will // be empty. // // TODO(sqs): determine how repository- or directory-level tools will be // defined. SourceUnitTypes []string `json:",omitempty"` }
ToolInfo describes a tool in a toolchain.
type Variant ¶
Variant represents a single permutation of variables that produces a single product (for toolchain bundles); e.g., {"os":"linux", "arch": "amd64"}.
func ParseVariant ¶
ParseVariant parses a variant string (e.g., "arch-386_os-linux") into its key-value pairs ({"arch": "386", "os": "linux"}).