mirror of
https://github.com/TECHNOFAB11/jsonnet-bundler.git
synced 2025-12-11 23:50:05 +01:00
Use Drone as the CI with a working pipeline (#28)
This commit is contained in:
parent
ccabc9707c
commit
18923f2dfc
29 changed files with 2677 additions and 5 deletions
54
.drone.jsonnet
Normal file
54
.drone.jsonnet
Normal file
|
|
@ -0,0 +1,54 @@
|
||||||
|
{
|
||||||
|
_config+:: {
|
||||||
|
golang: 'golang:1.12',
|
||||||
|
},
|
||||||
|
|
||||||
|
kind: 'pipeline',
|
||||||
|
name: 'build',
|
||||||
|
platform: {
|
||||||
|
os: 'linux',
|
||||||
|
arch: 'amd64',
|
||||||
|
},
|
||||||
|
|
||||||
|
local golang = {
|
||||||
|
name: 'golang',
|
||||||
|
image: $._config.golang,
|
||||||
|
pull: 'always',
|
||||||
|
environment: {
|
||||||
|
CGO_ENABLED: '0',
|
||||||
|
GO111MODULE: 'on',
|
||||||
|
},
|
||||||
|
when: {
|
||||||
|
event: {
|
||||||
|
exclude: ['tag'],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
steps: [
|
||||||
|
golang {
|
||||||
|
name: 'gomod',
|
||||||
|
commands: [
|
||||||
|
'go mod vendor',
|
||||||
|
'git diff --exit-code',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
|
||||||
|
golang {
|
||||||
|
name: 'build',
|
||||||
|
commands: [
|
||||||
|
'make build',
|
||||||
|
'make test',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
|
||||||
|
golang {
|
||||||
|
name: 'generate',
|
||||||
|
commands: [
|
||||||
|
'make check-license',
|
||||||
|
'make generate',
|
||||||
|
'git diff --exit-code',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
53
.drone.yml
Normal file
53
.drone.yml
Normal file
|
|
@ -0,0 +1,53 @@
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
name: build
|
||||||
|
|
||||||
|
platform:
|
||||||
|
os: linux
|
||||||
|
arch: amd64
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: gomod
|
||||||
|
pull: always
|
||||||
|
image: golang:1.12
|
||||||
|
commands:
|
||||||
|
- go mod vendor
|
||||||
|
- git diff --exit-code
|
||||||
|
environment:
|
||||||
|
CGO_ENABLED: 0
|
||||||
|
GO111MODULE: on
|
||||||
|
when:
|
||||||
|
event:
|
||||||
|
exclude:
|
||||||
|
- tag
|
||||||
|
|
||||||
|
- name: build
|
||||||
|
pull: always
|
||||||
|
image: golang:1.12
|
||||||
|
commands:
|
||||||
|
- make build
|
||||||
|
- make test
|
||||||
|
environment:
|
||||||
|
CGO_ENABLED: 0
|
||||||
|
GO111MODULE: on
|
||||||
|
when:
|
||||||
|
event:
|
||||||
|
exclude:
|
||||||
|
- tag
|
||||||
|
|
||||||
|
- name: generate
|
||||||
|
pull: always
|
||||||
|
image: golang:1.12
|
||||||
|
commands:
|
||||||
|
- make check-license
|
||||||
|
- make generate
|
||||||
|
- git diff --exit-code
|
||||||
|
environment:
|
||||||
|
CGO_ENABLED: 0
|
||||||
|
GO111MODULE: on
|
||||||
|
when:
|
||||||
|
event:
|
||||||
|
exclude:
|
||||||
|
- tag
|
||||||
|
|
||||||
|
...
|
||||||
12
go.mod
12
go.mod
|
|
@ -3,12 +3,14 @@ module github.com/jsonnet-bundler/jsonnet-bundler
|
||||||
go 1.12
|
go 1.12
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc
|
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc // indirect
|
||||||
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf
|
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf // indirect
|
||||||
|
github.com/campoy/embedmd v1.0.0 // indirect
|
||||||
github.com/fatih/color v1.7.0
|
github.com/fatih/color v1.7.0
|
||||||
github.com/mattn/go-colorable v0.0.9
|
github.com/mattn/go-colorable v0.0.9 // indirect
|
||||||
github.com/mattn/go-isatty v0.0.6
|
github.com/mattn/go-isatty v0.0.6 // indirect
|
||||||
github.com/pkg/errors v0.8.0
|
github.com/pkg/errors v0.8.0
|
||||||
golang.org/x/sys v0.0.0-20190310054646-10058d7d4faa
|
github.com/stretchr/testify v1.3.0 // indirect
|
||||||
|
golang.org/x/sys v0.0.0-20190310054646-10058d7d4faa // indirect
|
||||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6
|
gopkg.in/alecthomas/kingpin.v2 v2.2.6
|
||||||
)
|
)
|
||||||
|
|
|
||||||
9
go.sum
9
go.sum
|
|
@ -2,6 +2,10 @@ github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc h1:cAKDfWh5Vpd
|
||||||
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
||||||
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf h1:qet1QNfXsQxTZqLG4oE62mJzwPIB8+Tee4RNCL9ulrY=
|
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf h1:qet1QNfXsQxTZqLG4oE62mJzwPIB8+Tee4RNCL9ulrY=
|
||||||
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
||||||
|
github.com/campoy/embedmd v1.0.0 h1:V4kI2qTJJLf4J29RzI/MAt2c3Bl4dQSYPuflzwFH2hY=
|
||||||
|
github.com/campoy/embedmd v1.0.0/go.mod h1:oxyr9RCiSXg0M3VJ3ks0UGfp98BpSSGr0kpiX3MzVl8=
|
||||||
|
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
|
||||||
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys=
|
github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys=
|
||||||
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
||||||
github.com/mattn/go-colorable v0.0.9 h1:UVL0vNpWh04HeJXV0KLcaT7r06gOH2l4OW6ddYRUIY4=
|
github.com/mattn/go-colorable v0.0.9 h1:UVL0vNpWh04HeJXV0KLcaT7r06gOH2l4OW6ddYRUIY4=
|
||||||
|
|
@ -10,6 +14,11 @@ github.com/mattn/go-isatty v0.0.6 h1:SrwhHcpV4nWrMGdNcC2kXpMfcBVYGDuTArqyhocJgvA
|
||||||
github.com/mattn/go-isatty v0.0.6/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
|
github.com/mattn/go-isatty v0.0.6/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
|
||||||
github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw=
|
github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw=
|
||||||
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
|
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
|
||||||
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190310054646-10058d7d4faa h1:lqti/xP+yD/6zH5TqEwx2MilNIJY5Vbc6Qr8J3qyPIQ=
|
golang.org/x/sys v0.0.0-20190310054646-10058d7d4faa h1:lqti/xP+yD/6zH5TqEwx2MilNIJY5Vbc6Qr8J3qyPIQ=
|
||||||
golang.org/x/sys v0.0.0-20190310054646-10058d7d4faa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190310054646-10058d7d4faa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
|
|
||||||
25
vendor/github.com/alecthomas/template/README.md
generated
vendored
Normal file
25
vendor/github.com/alecthomas/template/README.md
generated
vendored
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
# Go's `text/template` package with newline elision
|
||||||
|
|
||||||
|
This is a fork of Go 1.4's [text/template](http://golang.org/pkg/text/template/) package with one addition: a backslash immediately after a closing delimiter will delete all subsequent newlines until a non-newline.
|
||||||
|
|
||||||
|
eg.
|
||||||
|
|
||||||
|
```
|
||||||
|
{{if true}}\
|
||||||
|
hello
|
||||||
|
{{end}}\
|
||||||
|
```
|
||||||
|
|
||||||
|
Will result in:
|
||||||
|
|
||||||
|
```
|
||||||
|
hello\n
|
||||||
|
```
|
||||||
|
|
||||||
|
Rather than:
|
||||||
|
|
||||||
|
```
|
||||||
|
\n
|
||||||
|
hello\n
|
||||||
|
\n
|
||||||
|
```
|
||||||
11
vendor/github.com/alecthomas/units/README.md
generated
vendored
Normal file
11
vendor/github.com/alecthomas/units/README.md
generated
vendored
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
# Units - Helpful unit multipliers and functions for Go
|
||||||
|
|
||||||
|
The goal of this package is to have functionality similar to the [time](http://golang.org/pkg/time/) package.
|
||||||
|
|
||||||
|
It allows for code like this:
|
||||||
|
|
||||||
|
```go
|
||||||
|
n, err := ParseBase2Bytes("1KB")
|
||||||
|
// n == 1024
|
||||||
|
n = units.Mebibyte * 512
|
||||||
|
```
|
||||||
5
vendor/github.com/fatih/color/.travis.yml
generated
vendored
Normal file
5
vendor/github.com/fatih/color/.travis.yml
generated
vendored
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
language: go
|
||||||
|
go:
|
||||||
|
- 1.8.x
|
||||||
|
- tip
|
||||||
|
|
||||||
27
vendor/github.com/fatih/color/Gopkg.lock
generated
vendored
Normal file
27
vendor/github.com/fatih/color/Gopkg.lock
generated
vendored
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.
|
||||||
|
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
name = "github.com/mattn/go-colorable"
|
||||||
|
packages = ["."]
|
||||||
|
revision = "167de6bfdfba052fa6b2d3664c8f5272e23c9072"
|
||||||
|
version = "v0.0.9"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
name = "github.com/mattn/go-isatty"
|
||||||
|
packages = ["."]
|
||||||
|
revision = "0360b2af4f38e8d38c7fce2a9f4e702702d73a39"
|
||||||
|
version = "v0.0.3"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
branch = "master"
|
||||||
|
name = "golang.org/x/sys"
|
||||||
|
packages = ["unix"]
|
||||||
|
revision = "37707fdb30a5b38865cfb95e5aab41707daec7fd"
|
||||||
|
|
||||||
|
[solve-meta]
|
||||||
|
analyzer-name = "dep"
|
||||||
|
analyzer-version = 1
|
||||||
|
inputs-digest = "e8a50671c3cb93ea935bf210b1cd20702876b9d9226129be581ef646d1565cdc"
|
||||||
|
solver-name = "gps-cdcl"
|
||||||
|
solver-version = 1
|
||||||
30
vendor/github.com/fatih/color/Gopkg.toml
generated
vendored
Normal file
30
vendor/github.com/fatih/color/Gopkg.toml
generated
vendored
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
|
||||||
|
# Gopkg.toml example
|
||||||
|
#
|
||||||
|
# Refer to https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md
|
||||||
|
# for detailed Gopkg.toml documentation.
|
||||||
|
#
|
||||||
|
# required = ["github.com/user/thing/cmd/thing"]
|
||||||
|
# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"]
|
||||||
|
#
|
||||||
|
# [[constraint]]
|
||||||
|
# name = "github.com/user/project"
|
||||||
|
# version = "1.0.0"
|
||||||
|
#
|
||||||
|
# [[constraint]]
|
||||||
|
# name = "github.com/user/project2"
|
||||||
|
# branch = "dev"
|
||||||
|
# source = "github.com/myfork/project2"
|
||||||
|
#
|
||||||
|
# [[override]]
|
||||||
|
# name = "github.com/x/y"
|
||||||
|
# version = "2.4.0"
|
||||||
|
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
name = "github.com/mattn/go-colorable"
|
||||||
|
version = "0.0.9"
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
name = "github.com/mattn/go-isatty"
|
||||||
|
version = "0.0.3"
|
||||||
179
vendor/github.com/fatih/color/README.md
generated
vendored
Normal file
179
vendor/github.com/fatih/color/README.md
generated
vendored
Normal file
|
|
@ -0,0 +1,179 @@
|
||||||
|
# Color [](https://godoc.org/github.com/fatih/color) [](https://travis-ci.org/fatih/color)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Color lets you use colorized outputs in terms of [ANSI Escape
|
||||||
|
Codes](http://en.wikipedia.org/wiki/ANSI_escape_code#Colors) in Go (Golang). It
|
||||||
|
has support for Windows too! The API can be used in several ways, pick one that
|
||||||
|
suits you.
|
||||||
|
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
```bash
|
||||||
|
go get github.com/fatih/color
|
||||||
|
```
|
||||||
|
|
||||||
|
Note that the `vendor` folder is here for stability. Remove the folder if you
|
||||||
|
already have the dependencies in your GOPATH.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
### Standard colors
|
||||||
|
|
||||||
|
```go
|
||||||
|
// Print with default helper functions
|
||||||
|
color.Cyan("Prints text in cyan.")
|
||||||
|
|
||||||
|
// A newline will be appended automatically
|
||||||
|
color.Blue("Prints %s in blue.", "text")
|
||||||
|
|
||||||
|
// These are using the default foreground colors
|
||||||
|
color.Red("We have red")
|
||||||
|
color.Magenta("And many others ..")
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
### Mix and reuse colors
|
||||||
|
|
||||||
|
```go
|
||||||
|
// Create a new color object
|
||||||
|
c := color.New(color.FgCyan).Add(color.Underline)
|
||||||
|
c.Println("Prints cyan text with an underline.")
|
||||||
|
|
||||||
|
// Or just add them to New()
|
||||||
|
d := color.New(color.FgCyan, color.Bold)
|
||||||
|
d.Printf("This prints bold cyan %s\n", "too!.")
|
||||||
|
|
||||||
|
// Mix up foreground and background colors, create new mixes!
|
||||||
|
red := color.New(color.FgRed)
|
||||||
|
|
||||||
|
boldRed := red.Add(color.Bold)
|
||||||
|
boldRed.Println("This will print text in bold red.")
|
||||||
|
|
||||||
|
whiteBackground := red.Add(color.BgWhite)
|
||||||
|
whiteBackground.Println("Red text with white background.")
|
||||||
|
```
|
||||||
|
|
||||||
|
### Use your own output (io.Writer)
|
||||||
|
|
||||||
|
```go
|
||||||
|
// Use your own io.Writer output
|
||||||
|
color.New(color.FgBlue).Fprintln(myWriter, "blue color!")
|
||||||
|
|
||||||
|
blue := color.New(color.FgBlue)
|
||||||
|
blue.Fprint(writer, "This will print text in blue.")
|
||||||
|
```
|
||||||
|
|
||||||
|
### Custom print functions (PrintFunc)
|
||||||
|
|
||||||
|
```go
|
||||||
|
// Create a custom print function for convenience
|
||||||
|
red := color.New(color.FgRed).PrintfFunc()
|
||||||
|
red("Warning")
|
||||||
|
red("Error: %s", err)
|
||||||
|
|
||||||
|
// Mix up multiple attributes
|
||||||
|
notice := color.New(color.Bold, color.FgGreen).PrintlnFunc()
|
||||||
|
notice("Don't forget this...")
|
||||||
|
```
|
||||||
|
|
||||||
|
### Custom fprint functions (FprintFunc)
|
||||||
|
|
||||||
|
```go
|
||||||
|
blue := color.New(FgBlue).FprintfFunc()
|
||||||
|
blue(myWriter, "important notice: %s", stars)
|
||||||
|
|
||||||
|
// Mix up with multiple attributes
|
||||||
|
success := color.New(color.Bold, color.FgGreen).FprintlnFunc()
|
||||||
|
success(myWriter, "Don't forget this...")
|
||||||
|
```
|
||||||
|
|
||||||
|
### Insert into noncolor strings (SprintFunc)
|
||||||
|
|
||||||
|
```go
|
||||||
|
// Create SprintXxx functions to mix strings with other non-colorized strings:
|
||||||
|
yellow := color.New(color.FgYellow).SprintFunc()
|
||||||
|
red := color.New(color.FgRed).SprintFunc()
|
||||||
|
fmt.Printf("This is a %s and this is %s.\n", yellow("warning"), red("error"))
|
||||||
|
|
||||||
|
info := color.New(color.FgWhite, color.BgGreen).SprintFunc()
|
||||||
|
fmt.Printf("This %s rocks!\n", info("package"))
|
||||||
|
|
||||||
|
// Use helper functions
|
||||||
|
fmt.Println("This", color.RedString("warning"), "should be not neglected.")
|
||||||
|
fmt.Printf("%v %v\n", color.GreenString("Info:"), "an important message.")
|
||||||
|
|
||||||
|
// Windows supported too! Just don't forget to change the output to color.Output
|
||||||
|
fmt.Fprintf(color.Output, "Windows support: %s", color.GreenString("PASS"))
|
||||||
|
```
|
||||||
|
|
||||||
|
### Plug into existing code
|
||||||
|
|
||||||
|
```go
|
||||||
|
// Use handy standard colors
|
||||||
|
color.Set(color.FgYellow)
|
||||||
|
|
||||||
|
fmt.Println("Existing text will now be in yellow")
|
||||||
|
fmt.Printf("This one %s\n", "too")
|
||||||
|
|
||||||
|
color.Unset() // Don't forget to unset
|
||||||
|
|
||||||
|
// You can mix up parameters
|
||||||
|
color.Set(color.FgMagenta, color.Bold)
|
||||||
|
defer color.Unset() // Use it in your function
|
||||||
|
|
||||||
|
fmt.Println("All text will now be bold magenta.")
|
||||||
|
```
|
||||||
|
|
||||||
|
### Disable/Enable color
|
||||||
|
|
||||||
|
There might be a case where you want to explicitly disable/enable color output. the
|
||||||
|
`go-isatty` package will automatically disable color output for non-tty output streams
|
||||||
|
(for example if the output were piped directly to `less`)
|
||||||
|
|
||||||
|
`Color` has support to disable/enable colors both globally and for single color
|
||||||
|
definitions. For example suppose you have a CLI app and a `--no-color` bool flag. You
|
||||||
|
can easily disable the color output with:
|
||||||
|
|
||||||
|
```go
|
||||||
|
|
||||||
|
var flagNoColor = flag.Bool("no-color", false, "Disable color output")
|
||||||
|
|
||||||
|
if *flagNoColor {
|
||||||
|
color.NoColor = true // disables colorized output
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
It also has support for single color definitions (local). You can
|
||||||
|
disable/enable color output on the fly:
|
||||||
|
|
||||||
|
```go
|
||||||
|
c := color.New(color.FgCyan)
|
||||||
|
c.Println("Prints cyan text")
|
||||||
|
|
||||||
|
c.DisableColor()
|
||||||
|
c.Println("This is printed without any color")
|
||||||
|
|
||||||
|
c.EnableColor()
|
||||||
|
c.Println("This prints again cyan...")
|
||||||
|
```
|
||||||
|
|
||||||
|
## Todo
|
||||||
|
|
||||||
|
* Save/Return previous values
|
||||||
|
* Evaluate fmt.Formatter interface
|
||||||
|
|
||||||
|
|
||||||
|
## Credits
|
||||||
|
|
||||||
|
* [Fatih Arslan](https://github.com/fatih)
|
||||||
|
* Windows support via @mattn: [colorable](https://github.com/mattn/go-colorable)
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
The MIT License (MIT) - see [`LICENSE.md`](https://github.com/fatih/color/blob/master/LICENSE.md) for more details
|
||||||
|
|
||||||
9
vendor/github.com/mattn/go-colorable/.travis.yml
generated
vendored
Normal file
9
vendor/github.com/mattn/go-colorable/.travis.yml
generated
vendored
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
language: go
|
||||||
|
go:
|
||||||
|
- tip
|
||||||
|
|
||||||
|
before_install:
|
||||||
|
- go get github.com/mattn/goveralls
|
||||||
|
- go get golang.org/x/tools/cmd/cover
|
||||||
|
script:
|
||||||
|
- $HOME/gopath/bin/goveralls -repotoken xnXqRGwgW3SXIguzxf90ZSK1GPYZPaGrw
|
||||||
48
vendor/github.com/mattn/go-colorable/README.md
generated
vendored
Normal file
48
vendor/github.com/mattn/go-colorable/README.md
generated
vendored
Normal file
|
|
@ -0,0 +1,48 @@
|
||||||
|
# go-colorable
|
||||||
|
|
||||||
|
[](http://godoc.org/github.com/mattn/go-colorable)
|
||||||
|
[](https://travis-ci.org/mattn/go-colorable)
|
||||||
|
[](https://coveralls.io/github/mattn/go-colorable?branch=master)
|
||||||
|
[](https://goreportcard.com/report/mattn/go-colorable)
|
||||||
|
|
||||||
|
Colorable writer for windows.
|
||||||
|
|
||||||
|
For example, most of logger packages doesn't show colors on windows. (I know we can do it with ansicon. But I don't want.)
|
||||||
|
This package is possible to handle escape sequence for ansi color on windows.
|
||||||
|
|
||||||
|
## Too Bad!
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
## So Good!
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```go
|
||||||
|
logrus.SetFormatter(&logrus.TextFormatter{ForceColors: true})
|
||||||
|
logrus.SetOutput(colorable.NewColorableStdout())
|
||||||
|
|
||||||
|
logrus.Info("succeeded")
|
||||||
|
logrus.Warn("not correct")
|
||||||
|
logrus.Error("something error")
|
||||||
|
logrus.Fatal("panic")
|
||||||
|
```
|
||||||
|
|
||||||
|
You can compile above code on non-windows OSs.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```
|
||||||
|
$ go get github.com/mattn/go-colorable
|
||||||
|
```
|
||||||
|
|
||||||
|
# License
|
||||||
|
|
||||||
|
MIT
|
||||||
|
|
||||||
|
# Author
|
||||||
|
|
||||||
|
Yasuhiro Matsumoto (a.k.a mattn)
|
||||||
13
vendor/github.com/mattn/go-isatty/.travis.yml
generated
vendored
Normal file
13
vendor/github.com/mattn/go-isatty/.travis.yml
generated
vendored
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
language: go
|
||||||
|
go:
|
||||||
|
- tip
|
||||||
|
|
||||||
|
os:
|
||||||
|
- linux
|
||||||
|
- osx
|
||||||
|
|
||||||
|
before_install:
|
||||||
|
- go get github.com/mattn/goveralls
|
||||||
|
- go get golang.org/x/tools/cmd/cover
|
||||||
|
script:
|
||||||
|
- $HOME/gopath/bin/goveralls -repotoken 3gHdORO5k5ziZcWMBxnd9LrMZaJs8m9x5
|
||||||
50
vendor/github.com/mattn/go-isatty/README.md
generated
vendored
Normal file
50
vendor/github.com/mattn/go-isatty/README.md
generated
vendored
Normal file
|
|
@ -0,0 +1,50 @@
|
||||||
|
# go-isatty
|
||||||
|
|
||||||
|
[](http://godoc.org/github.com/mattn/go-isatty)
|
||||||
|
[](https://travis-ci.org/mattn/go-isatty)
|
||||||
|
[](https://coveralls.io/github/mattn/go-isatty?branch=master)
|
||||||
|
[](https://goreportcard.com/report/mattn/go-isatty)
|
||||||
|
|
||||||
|
isatty for golang
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```go
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"github.com/mattn/go-isatty"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
if isatty.IsTerminal(os.Stdout.Fd()) {
|
||||||
|
fmt.Println("Is Terminal")
|
||||||
|
} else if isatty.IsCygwinTerminal(os.Stdout.Fd()) {
|
||||||
|
fmt.Println("Is Cygwin/MSYS2 Terminal")
|
||||||
|
} else {
|
||||||
|
fmt.Println("Is Not Terminal")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```
|
||||||
|
$ go get github.com/mattn/go-isatty
|
||||||
|
```
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
MIT
|
||||||
|
|
||||||
|
## Author
|
||||||
|
|
||||||
|
Yasuhiro Matsumoto (a.k.a mattn)
|
||||||
|
|
||||||
|
## Thanks
|
||||||
|
|
||||||
|
* k-takata: base idea for IsCygwinTerminal
|
||||||
|
|
||||||
|
https://github.com/k-takata/go-iscygpty
|
||||||
3
vendor/github.com/mattn/go-isatty/go.mod
generated
vendored
Normal file
3
vendor/github.com/mattn/go-isatty/go.mod
generated
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
module github.com/mattn/go-isatty
|
||||||
|
|
||||||
|
require golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223
|
||||||
2
vendor/github.com/mattn/go-isatty/go.sum
generated
vendored
Normal file
2
vendor/github.com/mattn/go-isatty/go.sum
generated
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223 h1:DH4skfRX4EBpamg7iV4ZlCpblAHI6s6TDM39bFZumv8=
|
||||||
|
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
24
vendor/github.com/pkg/errors/.gitignore
generated
vendored
Normal file
24
vendor/github.com/pkg/errors/.gitignore
generated
vendored
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
# Compiled Object files, Static and Dynamic libs (Shared Objects)
|
||||||
|
*.o
|
||||||
|
*.a
|
||||||
|
*.so
|
||||||
|
|
||||||
|
# Folders
|
||||||
|
_obj
|
||||||
|
_test
|
||||||
|
|
||||||
|
# Architecture specific extensions/prefixes
|
||||||
|
*.[568vq]
|
||||||
|
[568vq].out
|
||||||
|
|
||||||
|
*.cgo1.go
|
||||||
|
*.cgo2.c
|
||||||
|
_cgo_defun.c
|
||||||
|
_cgo_gotypes.go
|
||||||
|
_cgo_export.*
|
||||||
|
|
||||||
|
_testmain.go
|
||||||
|
|
||||||
|
*.exe
|
||||||
|
*.test
|
||||||
|
*.prof
|
||||||
11
vendor/github.com/pkg/errors/.travis.yml
generated
vendored
Normal file
11
vendor/github.com/pkg/errors/.travis.yml
generated
vendored
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
language: go
|
||||||
|
go_import_path: github.com/pkg/errors
|
||||||
|
go:
|
||||||
|
- 1.4.3
|
||||||
|
- 1.5.4
|
||||||
|
- 1.6.2
|
||||||
|
- 1.7.1
|
||||||
|
- tip
|
||||||
|
|
||||||
|
script:
|
||||||
|
- go test -v ./...
|
||||||
52
vendor/github.com/pkg/errors/README.md
generated
vendored
Normal file
52
vendor/github.com/pkg/errors/README.md
generated
vendored
Normal file
|
|
@ -0,0 +1,52 @@
|
||||||
|
# errors [](https://travis-ci.org/pkg/errors) [](https://ci.appveyor.com/project/davecheney/errors/branch/master) [](http://godoc.org/github.com/pkg/errors) [](https://goreportcard.com/report/github.com/pkg/errors)
|
||||||
|
|
||||||
|
Package errors provides simple error handling primitives.
|
||||||
|
|
||||||
|
`go get github.com/pkg/errors`
|
||||||
|
|
||||||
|
The traditional error handling idiom in Go is roughly akin to
|
||||||
|
```go
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
```
|
||||||
|
which applied recursively up the call stack results in error reports without context or debugging information. The errors package allows programmers to add context to the failure path in their code in a way that does not destroy the original value of the error.
|
||||||
|
|
||||||
|
## Adding context to an error
|
||||||
|
|
||||||
|
The errors.Wrap function returns a new error that adds context to the original error. For example
|
||||||
|
```go
|
||||||
|
_, err := ioutil.ReadAll(r)
|
||||||
|
if err != nil {
|
||||||
|
return errors.Wrap(err, "read failed")
|
||||||
|
}
|
||||||
|
```
|
||||||
|
## Retrieving the cause of an error
|
||||||
|
|
||||||
|
Using `errors.Wrap` constructs a stack of errors, adding context to the preceding error. Depending on the nature of the error it may be necessary to reverse the operation of errors.Wrap to retrieve the original error for inspection. Any error value which implements this interface can be inspected by `errors.Cause`.
|
||||||
|
```go
|
||||||
|
type causer interface {
|
||||||
|
Cause() error
|
||||||
|
}
|
||||||
|
```
|
||||||
|
`errors.Cause` will recursively retrieve the topmost error which does not implement `causer`, which is assumed to be the original cause. For example:
|
||||||
|
```go
|
||||||
|
switch err := errors.Cause(err).(type) {
|
||||||
|
case *MyError:
|
||||||
|
// handle specifically
|
||||||
|
default:
|
||||||
|
// unknown error
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
[Read the package documentation for more information](https://godoc.org/github.com/pkg/errors).
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
We welcome pull requests, bug fixes and issue reports. With that said, the bar for adding new symbols to this package is intentionally set high.
|
||||||
|
|
||||||
|
Before proposing a change, please discuss your change by raising an issue.
|
||||||
|
|
||||||
|
## Licence
|
||||||
|
|
||||||
|
BSD-2-Clause
|
||||||
32
vendor/github.com/pkg/errors/appveyor.yml
generated
vendored
Normal file
32
vendor/github.com/pkg/errors/appveyor.yml
generated
vendored
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
version: build-{build}.{branch}
|
||||||
|
|
||||||
|
clone_folder: C:\gopath\src\github.com\pkg\errors
|
||||||
|
shallow_clone: true # for startup speed
|
||||||
|
|
||||||
|
environment:
|
||||||
|
GOPATH: C:\gopath
|
||||||
|
|
||||||
|
platform:
|
||||||
|
- x64
|
||||||
|
|
||||||
|
# http://www.appveyor.com/docs/installed-software
|
||||||
|
install:
|
||||||
|
# some helpful output for debugging builds
|
||||||
|
- go version
|
||||||
|
- go env
|
||||||
|
# pre-installed MinGW at C:\MinGW is 32bit only
|
||||||
|
# but MSYS2 at C:\msys64 has mingw64
|
||||||
|
- set PATH=C:\msys64\mingw64\bin;%PATH%
|
||||||
|
- gcc --version
|
||||||
|
- g++ --version
|
||||||
|
|
||||||
|
build_script:
|
||||||
|
- go install -v ./...
|
||||||
|
|
||||||
|
test_script:
|
||||||
|
- set PATH=C:\gopath\bin;%PATH%
|
||||||
|
- go test -v ./...
|
||||||
|
|
||||||
|
#artifacts:
|
||||||
|
# - path: '%GOPATH%\bin\*.exe'
|
||||||
|
deploy: off
|
||||||
2
vendor/golang.org/x/sys/unix/.gitignore
generated
vendored
Normal file
2
vendor/golang.org/x/sys/unix/.gitignore
generated
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
_obj/
|
||||||
|
unix.test
|
||||||
173
vendor/golang.org/x/sys/unix/README.md
generated
vendored
Normal file
173
vendor/golang.org/x/sys/unix/README.md
generated
vendored
Normal file
|
|
@ -0,0 +1,173 @@
|
||||||
|
# Building `sys/unix`
|
||||||
|
|
||||||
|
The sys/unix package provides access to the raw system call interface of the
|
||||||
|
underlying operating system. See: https://godoc.org/golang.org/x/sys/unix
|
||||||
|
|
||||||
|
Porting Go to a new architecture/OS combination or adding syscalls, types, or
|
||||||
|
constants to an existing architecture/OS pair requires some manual effort;
|
||||||
|
however, there are tools that automate much of the process.
|
||||||
|
|
||||||
|
## Build Systems
|
||||||
|
|
||||||
|
There are currently two ways we generate the necessary files. We are currently
|
||||||
|
migrating the build system to use containers so the builds are reproducible.
|
||||||
|
This is being done on an OS-by-OS basis. Please update this documentation as
|
||||||
|
components of the build system change.
|
||||||
|
|
||||||
|
### Old Build System (currently for `GOOS != "linux"`)
|
||||||
|
|
||||||
|
The old build system generates the Go files based on the C header files
|
||||||
|
present on your system. This means that files
|
||||||
|
for a given GOOS/GOARCH pair must be generated on a system with that OS and
|
||||||
|
architecture. This also means that the generated code can differ from system
|
||||||
|
to system, based on differences in the header files.
|
||||||
|
|
||||||
|
To avoid this, if you are using the old build system, only generate the Go
|
||||||
|
files on an installation with unmodified header files. It is also important to
|
||||||
|
keep track of which version of the OS the files were generated from (ex.
|
||||||
|
Darwin 14 vs Darwin 15). This makes it easier to track the progress of changes
|
||||||
|
and have each OS upgrade correspond to a single change.
|
||||||
|
|
||||||
|
To build the files for your current OS and architecture, make sure GOOS and
|
||||||
|
GOARCH are set correctly and run `mkall.sh`. This will generate the files for
|
||||||
|
your specific system. Running `mkall.sh -n` shows the commands that will be run.
|
||||||
|
|
||||||
|
Requirements: bash, go
|
||||||
|
|
||||||
|
### New Build System (currently for `GOOS == "linux"`)
|
||||||
|
|
||||||
|
The new build system uses a Docker container to generate the go files directly
|
||||||
|
from source checkouts of the kernel and various system libraries. This means
|
||||||
|
that on any platform that supports Docker, all the files using the new build
|
||||||
|
system can be generated at once, and generated files will not change based on
|
||||||
|
what the person running the scripts has installed on their computer.
|
||||||
|
|
||||||
|
The OS specific files for the new build system are located in the `${GOOS}`
|
||||||
|
directory, and the build is coordinated by the `${GOOS}/mkall.go` program. When
|
||||||
|
the kernel or system library updates, modify the Dockerfile at
|
||||||
|
`${GOOS}/Dockerfile` to checkout the new release of the source.
|
||||||
|
|
||||||
|
To build all the files under the new build system, you must be on an amd64/Linux
|
||||||
|
system and have your GOOS and GOARCH set accordingly. Running `mkall.sh` will
|
||||||
|
then generate all of the files for all of the GOOS/GOARCH pairs in the new build
|
||||||
|
system. Running `mkall.sh -n` shows the commands that will be run.
|
||||||
|
|
||||||
|
Requirements: bash, go, docker
|
||||||
|
|
||||||
|
## Component files
|
||||||
|
|
||||||
|
This section describes the various files used in the code generation process.
|
||||||
|
It also contains instructions on how to modify these files to add a new
|
||||||
|
architecture/OS or to add additional syscalls, types, or constants. Note that
|
||||||
|
if you are using the new build system, the scripts/programs cannot be called normally.
|
||||||
|
They must be called from within the docker container.
|
||||||
|
|
||||||
|
### asm files
|
||||||
|
|
||||||
|
The hand-written assembly file at `asm_${GOOS}_${GOARCH}.s` implements system
|
||||||
|
call dispatch. There are three entry points:
|
||||||
|
```
|
||||||
|
func Syscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr)
|
||||||
|
func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr)
|
||||||
|
func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr)
|
||||||
|
```
|
||||||
|
The first and second are the standard ones; they differ only in how many
|
||||||
|
arguments can be passed to the kernel. The third is for low-level use by the
|
||||||
|
ForkExec wrapper. Unlike the first two, it does not call into the scheduler to
|
||||||
|
let it know that a system call is running.
|
||||||
|
|
||||||
|
When porting Go to an new architecture/OS, this file must be implemented for
|
||||||
|
each GOOS/GOARCH pair.
|
||||||
|
|
||||||
|
### mksysnum
|
||||||
|
|
||||||
|
Mksysnum is a Go program located at `${GOOS}/mksysnum.go` (or `mksysnum_${GOOS}.go`
|
||||||
|
for the old system). This program takes in a list of header files containing the
|
||||||
|
syscall number declarations and parses them to produce the corresponding list of
|
||||||
|
Go numeric constants. See `zsysnum_${GOOS}_${GOARCH}.go` for the generated
|
||||||
|
constants.
|
||||||
|
|
||||||
|
Adding new syscall numbers is mostly done by running the build on a sufficiently
|
||||||
|
new installation of the target OS (or updating the source checkouts for the
|
||||||
|
new build system). However, depending on the OS, you make need to update the
|
||||||
|
parsing in mksysnum.
|
||||||
|
|
||||||
|
### mksyscall.go
|
||||||
|
|
||||||
|
The `syscall.go`, `syscall_${GOOS}.go`, `syscall_${GOOS}_${GOARCH}.go` are
|
||||||
|
hand-written Go files which implement system calls (for unix, the specific OS,
|
||||||
|
or the specific OS/Architecture pair respectively) that need special handling
|
||||||
|
and list `//sys` comments giving prototypes for ones that can be generated.
|
||||||
|
|
||||||
|
The mksyscall.go program takes the `//sys` and `//sysnb` comments and converts
|
||||||
|
them into syscalls. This requires the name of the prototype in the comment to
|
||||||
|
match a syscall number in the `zsysnum_${GOOS}_${GOARCH}.go` file. The function
|
||||||
|
prototype can be exported (capitalized) or not.
|
||||||
|
|
||||||
|
Adding a new syscall often just requires adding a new `//sys` function prototype
|
||||||
|
with the desired arguments and a capitalized name so it is exported. However, if
|
||||||
|
you want the interface to the syscall to be different, often one will make an
|
||||||
|
unexported `//sys` prototype, an then write a custom wrapper in
|
||||||
|
`syscall_${GOOS}.go`.
|
||||||
|
|
||||||
|
### types files
|
||||||
|
|
||||||
|
For each OS, there is a hand-written Go file at `${GOOS}/types.go` (or
|
||||||
|
`types_${GOOS}.go` on the old system). This file includes standard C headers and
|
||||||
|
creates Go type aliases to the corresponding C types. The file is then fed
|
||||||
|
through godef to get the Go compatible definitions. Finally, the generated code
|
||||||
|
is fed though mkpost.go to format the code correctly and remove any hidden or
|
||||||
|
private identifiers. This cleaned-up code is written to
|
||||||
|
`ztypes_${GOOS}_${GOARCH}.go`.
|
||||||
|
|
||||||
|
The hardest part about preparing this file is figuring out which headers to
|
||||||
|
include and which symbols need to be `#define`d to get the actual data
|
||||||
|
structures that pass through to the kernel system calls. Some C libraries
|
||||||
|
preset alternate versions for binary compatibility and translate them on the
|
||||||
|
way in and out of system calls, but there is almost always a `#define` that can
|
||||||
|
get the real ones.
|
||||||
|
See `types_darwin.go` and `linux/types.go` for examples.
|
||||||
|
|
||||||
|
To add a new type, add in the necessary include statement at the top of the
|
||||||
|
file (if it is not already there) and add in a type alias line. Note that if
|
||||||
|
your type is significantly different on different architectures, you may need
|
||||||
|
some `#if/#elif` macros in your include statements.
|
||||||
|
|
||||||
|
### mkerrors.sh
|
||||||
|
|
||||||
|
This script is used to generate the system's various constants. This doesn't
|
||||||
|
just include the error numbers and error strings, but also the signal numbers
|
||||||
|
an a wide variety of miscellaneous constants. The constants come from the list
|
||||||
|
of include files in the `includes_${uname}` variable. A regex then picks out
|
||||||
|
the desired `#define` statements, and generates the corresponding Go constants.
|
||||||
|
The error numbers and strings are generated from `#include <errno.h>`, and the
|
||||||
|
signal numbers and strings are generated from `#include <signal.h>`. All of
|
||||||
|
these constants are written to `zerrors_${GOOS}_${GOARCH}.go` via a C program,
|
||||||
|
`_errors.c`, which prints out all the constants.
|
||||||
|
|
||||||
|
To add a constant, add the header that includes it to the appropriate variable.
|
||||||
|
Then, edit the regex (if necessary) to match the desired constant. Avoid making
|
||||||
|
the regex too broad to avoid matching unintended constants.
|
||||||
|
|
||||||
|
|
||||||
|
## Generated files
|
||||||
|
|
||||||
|
### `zerror_${GOOS}_${GOARCH}.go`
|
||||||
|
|
||||||
|
A file containing all of the system's generated error numbers, error strings,
|
||||||
|
signal numbers, and constants. Generated by `mkerrors.sh` (see above).
|
||||||
|
|
||||||
|
### `zsyscall_${GOOS}_${GOARCH}.go`
|
||||||
|
|
||||||
|
A file containing all the generated syscalls for a specific GOOS and GOARCH.
|
||||||
|
Generated by `mksyscall.go` (see above).
|
||||||
|
|
||||||
|
### `zsysnum_${GOOS}_${GOARCH}.go`
|
||||||
|
|
||||||
|
A list of numeric constants for all the syscall number of the specific GOOS
|
||||||
|
and GOARCH. Generated by mksysnum (see above).
|
||||||
|
|
||||||
|
### `ztypes_${GOOS}_${GOARCH}.go`
|
||||||
|
|
||||||
|
A file containing Go types for passing into (or returning from) syscalls.
|
||||||
|
Generated by godefs and the types file (see above).
|
||||||
214
vendor/golang.org/x/sys/unix/mkall.sh
generated
vendored
Normal file
214
vendor/golang.org/x/sys/unix/mkall.sh
generated
vendored
Normal file
|
|
@ -0,0 +1,214 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
# Copyright 2009 The Go Authors. All rights reserved.
|
||||||
|
# Use of this source code is governed by a BSD-style
|
||||||
|
# license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
# This script runs or (given -n) prints suggested commands to generate files for
|
||||||
|
# the Architecture/OS specified by the GOARCH and GOOS environment variables.
|
||||||
|
# See README.md for more information about how the build system works.
|
||||||
|
|
||||||
|
GOOSARCH="${GOOS}_${GOARCH}"
|
||||||
|
|
||||||
|
# defaults
|
||||||
|
mksyscall="go run mksyscall.go"
|
||||||
|
mkerrors="./mkerrors.sh"
|
||||||
|
zerrors="zerrors_$GOOSARCH.go"
|
||||||
|
mksysctl=""
|
||||||
|
zsysctl="zsysctl_$GOOSARCH.go"
|
||||||
|
mksysnum=
|
||||||
|
mktypes=
|
||||||
|
mkasm=
|
||||||
|
run="sh"
|
||||||
|
cmd=""
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
-syscalls)
|
||||||
|
for i in zsyscall*go
|
||||||
|
do
|
||||||
|
# Run the command line that appears in the first line
|
||||||
|
# of the generated file to regenerate it.
|
||||||
|
sed 1q $i | sed 's;^// ;;' | sh > _$i && gofmt < _$i > $i
|
||||||
|
rm _$i
|
||||||
|
done
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
-n)
|
||||||
|
run="cat"
|
||||||
|
cmd="echo"
|
||||||
|
shift
|
||||||
|
esac
|
||||||
|
|
||||||
|
case "$#" in
|
||||||
|
0)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo 'usage: mkall.sh [-n]' 1>&2
|
||||||
|
exit 2
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [[ "$GOOS" = "linux" ]]; then
|
||||||
|
# Use the Docker-based build system
|
||||||
|
# Files generated through docker (use $cmd so you can Ctl-C the build or run)
|
||||||
|
$cmd docker build --tag generate:$GOOS $GOOS
|
||||||
|
$cmd docker run --interactive --tty --volume $(dirname "$(readlink -f "$0")"):/build generate:$GOOS
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
GOOSARCH_in=syscall_$GOOSARCH.go
|
||||||
|
case "$GOOSARCH" in
|
||||||
|
_* | *_ | _)
|
||||||
|
echo 'undefined $GOOS_$GOARCH:' "$GOOSARCH" 1>&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
aix_ppc)
|
||||||
|
mkerrors="$mkerrors -maix32"
|
||||||
|
mksyscall="go run mksyscall_aix_ppc.go -aix"
|
||||||
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
||||||
|
;;
|
||||||
|
aix_ppc64)
|
||||||
|
mkerrors="$mkerrors -maix64"
|
||||||
|
mksyscall="go run mksyscall_aix_ppc64.go -aix"
|
||||||
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
||||||
|
;;
|
||||||
|
darwin_386)
|
||||||
|
mkerrors="$mkerrors -m32"
|
||||||
|
mksyscall="go run mksyscall.go -l32"
|
||||||
|
mksysnum="go run mksysnum.go $(xcrun --show-sdk-path --sdk macosx)/usr/include/sys/syscall.h"
|
||||||
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
||||||
|
mkasm="go run mkasm_darwin.go"
|
||||||
|
;;
|
||||||
|
darwin_amd64)
|
||||||
|
mkerrors="$mkerrors -m64"
|
||||||
|
mksysnum="go run mksysnum.go $(xcrun --show-sdk-path --sdk macosx)/usr/include/sys/syscall.h"
|
||||||
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
||||||
|
mkasm="go run mkasm_darwin.go"
|
||||||
|
;;
|
||||||
|
darwin_arm)
|
||||||
|
mkerrors="$mkerrors"
|
||||||
|
mksyscall="go run mksyscall.go -l32"
|
||||||
|
mksysnum="go run mksysnum.go $(xcrun --show-sdk-path --sdk iphoneos)/usr/include/sys/syscall.h"
|
||||||
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
||||||
|
mkasm="go run mkasm_darwin.go"
|
||||||
|
;;
|
||||||
|
darwin_arm64)
|
||||||
|
mkerrors="$mkerrors -m64"
|
||||||
|
mksysnum="go run mksysnum.go $(xcrun --show-sdk-path --sdk iphoneos)/usr/include/sys/syscall.h"
|
||||||
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
||||||
|
mkasm="go run mkasm_darwin.go"
|
||||||
|
;;
|
||||||
|
dragonfly_amd64)
|
||||||
|
mkerrors="$mkerrors -m64"
|
||||||
|
mksyscall="go run mksyscall.go -dragonfly"
|
||||||
|
mksysnum="go run mksysnum.go 'https://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/sys/kern/syscalls.master'"
|
||||||
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
||||||
|
;;
|
||||||
|
freebsd_386)
|
||||||
|
mkerrors="$mkerrors -m32"
|
||||||
|
mksyscall="go run mksyscall.go -l32"
|
||||||
|
mksysnum="go run mksysnum.go 'https://svn.freebsd.org/base/stable/10/sys/kern/syscalls.master'"
|
||||||
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
||||||
|
;;
|
||||||
|
freebsd_amd64)
|
||||||
|
mkerrors="$mkerrors -m64"
|
||||||
|
mksysnum="go run mksysnum.go 'https://svn.freebsd.org/base/stable/10/sys/kern/syscalls.master'"
|
||||||
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
||||||
|
;;
|
||||||
|
freebsd_arm)
|
||||||
|
mkerrors="$mkerrors"
|
||||||
|
mksyscall="go run mksyscall.go -l32 -arm"
|
||||||
|
mksysnum="go run mksysnum.go 'https://svn.freebsd.org/base/stable/10/sys/kern/syscalls.master'"
|
||||||
|
# Let the type of C char be signed for making the bare syscall
|
||||||
|
# API consistent across platforms.
|
||||||
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
||||||
|
;;
|
||||||
|
freebsd_arm64)
|
||||||
|
mkerrors="$mkerrors -m64"
|
||||||
|
mksysnum="go run mksysnum.go 'https://svn.freebsd.org/base/stable/10/sys/kern/syscalls.master'"
|
||||||
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
||||||
|
;;
|
||||||
|
netbsd_386)
|
||||||
|
mkerrors="$mkerrors -m32"
|
||||||
|
mksyscall="go run mksyscall.go -l32 -netbsd"
|
||||||
|
mksysnum="go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'"
|
||||||
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
||||||
|
;;
|
||||||
|
netbsd_amd64)
|
||||||
|
mkerrors="$mkerrors -m64"
|
||||||
|
mksyscall="go run mksyscall.go -netbsd"
|
||||||
|
mksysnum="go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'"
|
||||||
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
||||||
|
;;
|
||||||
|
netbsd_arm)
|
||||||
|
mkerrors="$mkerrors"
|
||||||
|
mksyscall="go run mksyscall.go -l32 -netbsd -arm"
|
||||||
|
mksysnum="go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'"
|
||||||
|
# Let the type of C char be signed for making the bare syscall
|
||||||
|
# API consistent across platforms.
|
||||||
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
||||||
|
;;
|
||||||
|
openbsd_386)
|
||||||
|
mkerrors="$mkerrors -m32"
|
||||||
|
mksyscall="go run mksyscall.go -l32 -openbsd"
|
||||||
|
mksysctl="./mksysctl_openbsd.pl"
|
||||||
|
mksysnum="go run mksysnum.go 'https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master'"
|
||||||
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
||||||
|
;;
|
||||||
|
openbsd_amd64)
|
||||||
|
mkerrors="$mkerrors -m64"
|
||||||
|
mksyscall="go run mksyscall.go -openbsd"
|
||||||
|
mksysctl="./mksysctl_openbsd.pl"
|
||||||
|
mksysnum="go run mksysnum.go 'https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master'"
|
||||||
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
||||||
|
;;
|
||||||
|
openbsd_arm)
|
||||||
|
mkerrors="$mkerrors"
|
||||||
|
mksyscall="go run mksyscall.go -l32 -openbsd -arm"
|
||||||
|
mksysctl="./mksysctl_openbsd.pl"
|
||||||
|
mksysnum="go run mksysnum.go 'https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master'"
|
||||||
|
# Let the type of C char be signed for making the bare syscall
|
||||||
|
# API consistent across platforms.
|
||||||
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
||||||
|
;;
|
||||||
|
solaris_amd64)
|
||||||
|
mksyscall="go run mksyscall_solaris.go"
|
||||||
|
mkerrors="$mkerrors -m64"
|
||||||
|
mksysnum=
|
||||||
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo 'unrecognized $GOOS_$GOARCH: ' "$GOOSARCH" 1>&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
(
|
||||||
|
if [ -n "$mkerrors" ]; then echo "$mkerrors |gofmt >$zerrors"; fi
|
||||||
|
case "$GOOS" in
|
||||||
|
*)
|
||||||
|
syscall_goos="syscall_$GOOS.go"
|
||||||
|
case "$GOOS" in
|
||||||
|
darwin | dragonfly | freebsd | netbsd | openbsd)
|
||||||
|
syscall_goos="syscall_bsd.go $syscall_goos"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
if [ -n "$mksyscall" ]; then
|
||||||
|
if [ "$GOOSARCH" == "aix_ppc64" ]; then
|
||||||
|
# aix/ppc64 script generates files instead of writing to stdin.
|
||||||
|
echo "$mksyscall -tags $GOOS,$GOARCH $syscall_goos $GOOSARCH_in && gofmt -w zsyscall_$GOOSARCH.go && gofmt -w zsyscall_"$GOOSARCH"_gccgo.go && gofmt -w zsyscall_"$GOOSARCH"_gc.go " ;
|
||||||
|
elif [ "$GOOS" == "darwin" ]; then
|
||||||
|
# pre-1.12, direct syscalls
|
||||||
|
echo "$mksyscall -tags $GOOS,$GOARCH,!go1.12 $syscall_goos $GOOSARCH_in |gofmt >zsyscall_$GOOSARCH.1_11.go";
|
||||||
|
# 1.12 and later, syscalls via libSystem
|
||||||
|
echo "$mksyscall -tags $GOOS,$GOARCH,go1.12 $syscall_goos $GOOSARCH_in |gofmt >zsyscall_$GOOSARCH.go";
|
||||||
|
else
|
||||||
|
echo "$mksyscall -tags $GOOS,$GOARCH $syscall_goos $GOOSARCH_in |gofmt >zsyscall_$GOOSARCH.go";
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
esac
|
||||||
|
if [ -n "$mksysctl" ]; then echo "$mksysctl |gofmt >$zsysctl"; fi
|
||||||
|
if [ -n "$mksysnum" ]; then echo "$mksysnum |gofmt >zsysnum_$GOOSARCH.go"; fi
|
||||||
|
if [ -n "$mktypes" ]; then
|
||||||
|
echo "$mktypes types_$GOOS.go | go run mkpost.go > ztypes_$GOOSARCH.go";
|
||||||
|
if [ -n "$mkasm" ]; then echo "$mkasm $GOARCH"; fi
|
||||||
|
fi
|
||||||
|
) | $run
|
||||||
659
vendor/golang.org/x/sys/unix/mkerrors.sh
generated
vendored
Normal file
659
vendor/golang.org/x/sys/unix/mkerrors.sh
generated
vendored
Normal file
|
|
@ -0,0 +1,659 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
# Copyright 2009 The Go Authors. All rights reserved.
|
||||||
|
# Use of this source code is governed by a BSD-style
|
||||||
|
# license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
# Generate Go code listing errors and other #defined constant
|
||||||
|
# values (ENAMETOOLONG etc.), by asking the preprocessor
|
||||||
|
# about the definitions.
|
||||||
|
|
||||||
|
unset LANG
|
||||||
|
export LC_ALL=C
|
||||||
|
export LC_CTYPE=C
|
||||||
|
|
||||||
|
if test -z "$GOARCH" -o -z "$GOOS"; then
|
||||||
|
echo 1>&2 "GOARCH or GOOS not defined in environment"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check that we are using the new build system if we should
|
||||||
|
if [[ "$GOOS" = "linux" ]] && [[ "$GOLANG_SYS_BUILD" != "docker" ]]; then
|
||||||
|
echo 1>&2 "In the Docker based build system, mkerrors should not be called directly."
|
||||||
|
echo 1>&2 "See README.md"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$GOOS" = "aix" ]]; then
|
||||||
|
CC=${CC:-gcc}
|
||||||
|
else
|
||||||
|
CC=${CC:-cc}
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$GOOS" = "solaris" ]]; then
|
||||||
|
# Assumes GNU versions of utilities in PATH.
|
||||||
|
export PATH=/usr/gnu/bin:$PATH
|
||||||
|
fi
|
||||||
|
|
||||||
|
uname=$(uname)
|
||||||
|
|
||||||
|
includes_AIX='
|
||||||
|
#include <net/if.h>
|
||||||
|
#include <net/netopt.h>
|
||||||
|
#include <netinet/ip_mroute.h>
|
||||||
|
#include <sys/protosw.h>
|
||||||
|
#include <sys/stropts.h>
|
||||||
|
#include <sys/mman.h>
|
||||||
|
#include <sys/poll.h>
|
||||||
|
#include <sys/termio.h>
|
||||||
|
#include <termios.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
|
||||||
|
#define AF_LOCAL AF_UNIX
|
||||||
|
'
|
||||||
|
|
||||||
|
includes_Darwin='
|
||||||
|
#define _DARWIN_C_SOURCE
|
||||||
|
#define KERNEL
|
||||||
|
#define _DARWIN_USE_64_BIT_INODE
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <sys/attr.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/event.h>
|
||||||
|
#include <sys/ptrace.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <sys/sockio.h>
|
||||||
|
#include <sys/sysctl.h>
|
||||||
|
#include <sys/mman.h>
|
||||||
|
#include <sys/mount.h>
|
||||||
|
#include <sys/utsname.h>
|
||||||
|
#include <sys/wait.h>
|
||||||
|
#include <sys/xattr.h>
|
||||||
|
#include <net/bpf.h>
|
||||||
|
#include <net/if.h>
|
||||||
|
#include <net/if_types.h>
|
||||||
|
#include <net/route.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <netinet/ip.h>
|
||||||
|
#include <termios.h>
|
||||||
|
'
|
||||||
|
|
||||||
|
includes_DragonFly='
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/event.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <sys/sockio.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <sys/sysctl.h>
|
||||||
|
#include <sys/mman.h>
|
||||||
|
#include <sys/mount.h>
|
||||||
|
#include <sys/wait.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
#include <net/bpf.h>
|
||||||
|
#include <net/if.h>
|
||||||
|
#include <net/if_types.h>
|
||||||
|
#include <net/route.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <termios.h>
|
||||||
|
#include <netinet/ip.h>
|
||||||
|
#include <net/ip_mroute/ip_mroute.h>
|
||||||
|
'
|
||||||
|
|
||||||
|
includes_FreeBSD='
|
||||||
|
#include <sys/capsicum.h>
|
||||||
|
#include <sys/param.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/event.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <sys/sockio.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <sys/sysctl.h>
|
||||||
|
#include <sys/mman.h>
|
||||||
|
#include <sys/mount.h>
|
||||||
|
#include <sys/wait.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
#include <net/bpf.h>
|
||||||
|
#include <net/if.h>
|
||||||
|
#include <net/if_types.h>
|
||||||
|
#include <net/route.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <termios.h>
|
||||||
|
#include <netinet/ip.h>
|
||||||
|
#include <netinet/ip_mroute.h>
|
||||||
|
#include <sys/extattr.h>
|
||||||
|
|
||||||
|
#if __FreeBSD__ >= 10
|
||||||
|
#define IFT_CARP 0xf8 // IFT_CARP is deprecated in FreeBSD 10
|
||||||
|
#undef SIOCAIFADDR
|
||||||
|
#define SIOCAIFADDR _IOW(105, 26, struct oifaliasreq) // ifaliasreq contains if_data
|
||||||
|
#undef SIOCSIFPHYADDR
|
||||||
|
#define SIOCSIFPHYADDR _IOW(105, 70, struct oifaliasreq) // ifaliasreq contains if_data
|
||||||
|
#endif
|
||||||
|
'
|
||||||
|
|
||||||
|
includes_Linux='
|
||||||
|
#define _LARGEFILE_SOURCE
|
||||||
|
#define _LARGEFILE64_SOURCE
|
||||||
|
#ifndef __LP64__
|
||||||
|
#define _FILE_OFFSET_BITS 64
|
||||||
|
#endif
|
||||||
|
#define _GNU_SOURCE
|
||||||
|
|
||||||
|
// <sys/ioctl.h> is broken on powerpc64, as it fails to include definitions of
|
||||||
|
// these structures. We just include them copied from <bits/termios.h>.
|
||||||
|
#if defined(__powerpc__)
|
||||||
|
struct sgttyb {
|
||||||
|
char sg_ispeed;
|
||||||
|
char sg_ospeed;
|
||||||
|
char sg_erase;
|
||||||
|
char sg_kill;
|
||||||
|
short sg_flags;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct tchars {
|
||||||
|
char t_intrc;
|
||||||
|
char t_quitc;
|
||||||
|
char t_startc;
|
||||||
|
char t_stopc;
|
||||||
|
char t_eofc;
|
||||||
|
char t_brkc;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ltchars {
|
||||||
|
char t_suspc;
|
||||||
|
char t_dsuspc;
|
||||||
|
char t_rprntc;
|
||||||
|
char t_flushc;
|
||||||
|
char t_werasc;
|
||||||
|
char t_lnextc;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <bits/sockaddr.h>
|
||||||
|
#include <sys/epoll.h>
|
||||||
|
#include <sys/eventfd.h>
|
||||||
|
#include <sys/inotify.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
#include <sys/mman.h>
|
||||||
|
#include <sys/mount.h>
|
||||||
|
#include <sys/prctl.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <sys/signalfd.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <sys/xattr.h>
|
||||||
|
#include <linux/errqueue.h>
|
||||||
|
#include <linux/if.h>
|
||||||
|
#include <linux/if_alg.h>
|
||||||
|
#include <linux/if_arp.h>
|
||||||
|
#include <linux/if_ether.h>
|
||||||
|
#include <linux/if_ppp.h>
|
||||||
|
#include <linux/if_tun.h>
|
||||||
|
#include <linux/if_packet.h>
|
||||||
|
#include <linux/if_addr.h>
|
||||||
|
#include <linux/falloc.h>
|
||||||
|
#include <linux/fanotify.h>
|
||||||
|
#include <linux/filter.h>
|
||||||
|
#include <linux/fs.h>
|
||||||
|
#include <linux/kexec.h>
|
||||||
|
#include <linux/keyctl.h>
|
||||||
|
#include <linux/magic.h>
|
||||||
|
#include <linux/memfd.h>
|
||||||
|
#include <linux/module.h>
|
||||||
|
#include <linux/netfilter/nfnetlink.h>
|
||||||
|
#include <linux/netlink.h>
|
||||||
|
#include <linux/net_namespace.h>
|
||||||
|
#include <linux/perf_event.h>
|
||||||
|
#include <linux/random.h>
|
||||||
|
#include <linux/reboot.h>
|
||||||
|
#include <linux/rtnetlink.h>
|
||||||
|
#include <linux/ptrace.h>
|
||||||
|
#include <linux/sched.h>
|
||||||
|
#include <linux/seccomp.h>
|
||||||
|
#include <linux/sockios.h>
|
||||||
|
#include <linux/wait.h>
|
||||||
|
#include <linux/icmpv6.h>
|
||||||
|
#include <linux/serial.h>
|
||||||
|
#include <linux/can.h>
|
||||||
|
#include <linux/vm_sockets.h>
|
||||||
|
#include <linux/taskstats.h>
|
||||||
|
#include <linux/genetlink.h>
|
||||||
|
#include <linux/watchdog.h>
|
||||||
|
#include <linux/hdreg.h>
|
||||||
|
#include <linux/rtc.h>
|
||||||
|
#include <linux/if_xdp.h>
|
||||||
|
#include <mtd/ubi-user.h>
|
||||||
|
#include <net/route.h>
|
||||||
|
|
||||||
|
#if defined(__sparc__)
|
||||||
|
// On sparc{,64}, the kernel defines struct termios2 itself which clashes with the
|
||||||
|
// definition in glibc. As only the error constants are needed here, include the
|
||||||
|
// generic termibits.h (which is included by termbits.h on sparc).
|
||||||
|
#include <asm-generic/termbits.h>
|
||||||
|
#else
|
||||||
|
#include <asm/termbits.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef MSG_FASTOPEN
|
||||||
|
#define MSG_FASTOPEN 0x20000000
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef PTRACE_GETREGS
|
||||||
|
#define PTRACE_GETREGS 0xc
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef PTRACE_SETREGS
|
||||||
|
#define PTRACE_SETREGS 0xd
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef SOL_NETLINK
|
||||||
|
#define SOL_NETLINK 270
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef SOL_BLUETOOTH
|
||||||
|
// SPARC includes this in /usr/include/sparc64-linux-gnu/bits/socket.h
|
||||||
|
// but it is already in bluetooth_linux.go
|
||||||
|
#undef SOL_BLUETOOTH
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Certain constants are missing from the fs/crypto UAPI
|
||||||
|
#define FS_KEY_DESC_PREFIX "fscrypt:"
|
||||||
|
#define FS_KEY_DESC_PREFIX_SIZE 8
|
||||||
|
#define FS_MAX_KEY_SIZE 64
|
||||||
|
'
|
||||||
|
|
||||||
|
includes_NetBSD='
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/param.h>
|
||||||
|
#include <sys/event.h>
|
||||||
|
#include <sys/extattr.h>
|
||||||
|
#include <sys/mman.h>
|
||||||
|
#include <sys/mount.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <sys/sockio.h>
|
||||||
|
#include <sys/sysctl.h>
|
||||||
|
#include <sys/termios.h>
|
||||||
|
#include <sys/ttycom.h>
|
||||||
|
#include <sys/wait.h>
|
||||||
|
#include <net/bpf.h>
|
||||||
|
#include <net/if.h>
|
||||||
|
#include <net/if_types.h>
|
||||||
|
#include <net/route.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <netinet/in_systm.h>
|
||||||
|
#include <netinet/ip.h>
|
||||||
|
#include <netinet/ip_mroute.h>
|
||||||
|
#include <netinet/if_ether.h>
|
||||||
|
|
||||||
|
// Needed since <sys/param.h> refers to it...
|
||||||
|
#define schedppq 1
|
||||||
|
'
|
||||||
|
|
||||||
|
includes_OpenBSD='
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/param.h>
|
||||||
|
#include <sys/event.h>
|
||||||
|
#include <sys/mman.h>
|
||||||
|
#include <sys/mount.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <sys/sockio.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <sys/sysctl.h>
|
||||||
|
#include <sys/termios.h>
|
||||||
|
#include <sys/ttycom.h>
|
||||||
|
#include <sys/unistd.h>
|
||||||
|
#include <sys/wait.h>
|
||||||
|
#include <net/bpf.h>
|
||||||
|
#include <net/if.h>
|
||||||
|
#include <net/if_types.h>
|
||||||
|
#include <net/if_var.h>
|
||||||
|
#include <net/route.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <netinet/in_systm.h>
|
||||||
|
#include <netinet/ip.h>
|
||||||
|
#include <netinet/ip_mroute.h>
|
||||||
|
#include <netinet/if_ether.h>
|
||||||
|
#include <net/if_bridge.h>
|
||||||
|
|
||||||
|
// We keep some constants not supported in OpenBSD 5.5 and beyond for
|
||||||
|
// the promise of compatibility.
|
||||||
|
#define EMUL_ENABLED 0x1
|
||||||
|
#define EMUL_NATIVE 0x2
|
||||||
|
#define IPV6_FAITH 0x1d
|
||||||
|
#define IPV6_OPTIONS 0x1
|
||||||
|
#define IPV6_RTHDR_STRICT 0x1
|
||||||
|
#define IPV6_SOCKOPT_RESERVED1 0x3
|
||||||
|
#define SIOCGIFGENERIC 0xc020693a
|
||||||
|
#define SIOCSIFGENERIC 0x80206939
|
||||||
|
#define WALTSIG 0x4
|
||||||
|
'
|
||||||
|
|
||||||
|
includes_SunOS='
|
||||||
|
#include <limits.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <sys/sockio.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <sys/mman.h>
|
||||||
|
#include <sys/wait.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
#include <sys/mkdev.h>
|
||||||
|
#include <net/bpf.h>
|
||||||
|
#include <net/if.h>
|
||||||
|
#include <net/if_arp.h>
|
||||||
|
#include <net/if_types.h>
|
||||||
|
#include <net/route.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <termios.h>
|
||||||
|
#include <netinet/ip.h>
|
||||||
|
#include <netinet/ip_mroute.h>
|
||||||
|
'
|
||||||
|
|
||||||
|
|
||||||
|
includes='
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/file.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <dirent.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <netinet/ip.h>
|
||||||
|
#include <netinet/ip6.h>
|
||||||
|
#include <netinet/tcp.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <sys/signal.h>
|
||||||
|
#include <signal.h>
|
||||||
|
#include <sys/resource.h>
|
||||||
|
#include <time.h>
|
||||||
|
'
|
||||||
|
ccflags="$@"
|
||||||
|
|
||||||
|
# Write go tool cgo -godefs input.
|
||||||
|
(
|
||||||
|
echo package unix
|
||||||
|
echo
|
||||||
|
echo '/*'
|
||||||
|
indirect="includes_$(uname)"
|
||||||
|
echo "${!indirect} $includes"
|
||||||
|
echo '*/'
|
||||||
|
echo 'import "C"'
|
||||||
|
echo 'import "syscall"'
|
||||||
|
echo
|
||||||
|
echo 'const ('
|
||||||
|
|
||||||
|
# The gcc command line prints all the #defines
|
||||||
|
# it encounters while processing the input
|
||||||
|
echo "${!indirect} $includes" | $CC -x c - -E -dM $ccflags |
|
||||||
|
awk '
|
||||||
|
$1 != "#define" || $2 ~ /\(/ || $3 == "" {next}
|
||||||
|
|
||||||
|
$2 ~ /^E([ABCD]X|[BIS]P|[SD]I|S|FL)$/ {next} # 386 registers
|
||||||
|
$2 ~ /^(SIGEV_|SIGSTKSZ|SIGRT(MIN|MAX))/ {next}
|
||||||
|
$2 ~ /^(SCM_SRCRT)$/ {next}
|
||||||
|
$2 ~ /^(MAP_FAILED)$/ {next}
|
||||||
|
$2 ~ /^ELF_.*$/ {next}# <asm/elf.h> contains ELF_ARCH, etc.
|
||||||
|
|
||||||
|
$2 ~ /^EXTATTR_NAMESPACE_NAMES/ ||
|
||||||
|
$2 ~ /^EXTATTR_NAMESPACE_[A-Z]+_STRING/ {next}
|
||||||
|
|
||||||
|
$2 !~ /^ECCAPBITS/ &&
|
||||||
|
$2 !~ /^ETH_/ &&
|
||||||
|
$2 !~ /^EPROC_/ &&
|
||||||
|
$2 !~ /^EQUIV_/ &&
|
||||||
|
$2 !~ /^EXPR_/ &&
|
||||||
|
$2 ~ /^E[A-Z0-9_]+$/ ||
|
||||||
|
$2 ~ /^B[0-9_]+$/ ||
|
||||||
|
$2 ~ /^(OLD|NEW)DEV$/ ||
|
||||||
|
$2 == "BOTHER" ||
|
||||||
|
$2 ~ /^CI?BAUD(EX)?$/ ||
|
||||||
|
$2 == "IBSHIFT" ||
|
||||||
|
$2 ~ /^V[A-Z0-9]+$/ ||
|
||||||
|
$2 ~ /^CS[A-Z0-9]/ ||
|
||||||
|
$2 ~ /^I(SIG|CANON|CRNL|UCLC|EXTEN|MAXBEL|STRIP|UTF8)$/ ||
|
||||||
|
$2 ~ /^IGN/ ||
|
||||||
|
$2 ~ /^IX(ON|ANY|OFF)$/ ||
|
||||||
|
$2 ~ /^IN(LCR|PCK)$/ ||
|
||||||
|
$2 !~ "X86_CR3_PCID_NOFLUSH" &&
|
||||||
|
$2 ~ /(^FLU?SH)|(FLU?SH$)/ ||
|
||||||
|
$2 ~ /^C(LOCAL|READ|MSPAR|RTSCTS)$/ ||
|
||||||
|
$2 == "BRKINT" ||
|
||||||
|
$2 == "HUPCL" ||
|
||||||
|
$2 == "PENDIN" ||
|
||||||
|
$2 == "TOSTOP" ||
|
||||||
|
$2 == "XCASE" ||
|
||||||
|
$2 == "ALTWERASE" ||
|
||||||
|
$2 == "NOKERNINFO" ||
|
||||||
|
$2 ~ /^PAR/ ||
|
||||||
|
$2 ~ /^SIG[^_]/ ||
|
||||||
|
$2 ~ /^O[CNPFPL][A-Z]+[^_][A-Z]+$/ ||
|
||||||
|
$2 ~ /^(NL|CR|TAB|BS|VT|FF)DLY$/ ||
|
||||||
|
$2 ~ /^(NL|CR|TAB|BS|VT|FF)[0-9]$/ ||
|
||||||
|
$2 ~ /^O?XTABS$/ ||
|
||||||
|
$2 ~ /^TC[IO](ON|OFF)$/ ||
|
||||||
|
$2 ~ /^IN_/ ||
|
||||||
|
$2 ~ /^LOCK_(SH|EX|NB|UN)$/ ||
|
||||||
|
$2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|ICMP6|TCP|EVFILT|NOTE|EV|SHUT|PROT|MAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR)_/ ||
|
||||||
|
$2 ~ /^TP_STATUS_/ ||
|
||||||
|
$2 ~ /^FALLOC_/ ||
|
||||||
|
$2 == "ICMPV6_FILTER" ||
|
||||||
|
$2 == "SOMAXCONN" ||
|
||||||
|
$2 == "NAME_MAX" ||
|
||||||
|
$2 == "IFNAMSIZ" ||
|
||||||
|
$2 ~ /^CTL_(HW|KERN|MAXNAME|NET|QUERY)$/ ||
|
||||||
|
$2 ~ /^KERN_(HOSTNAME|OS(RELEASE|TYPE)|VERSION)$/ ||
|
||||||
|
$2 ~ /^HW_MACHINE$/ ||
|
||||||
|
$2 ~ /^SYSCTL_VERS/ ||
|
||||||
|
$2 !~ "MNT_BITS" &&
|
||||||
|
$2 ~ /^(MS|MNT|UMOUNT)_/ ||
|
||||||
|
$2 ~ /^TUN(SET|GET|ATTACH|DETACH)/ ||
|
||||||
|
$2 ~ /^(O|F|[ES]?FD|NAME|S|PTRACE|PT)_/ ||
|
||||||
|
$2 ~ /^KEXEC_/ ||
|
||||||
|
$2 ~ /^LINUX_REBOOT_CMD_/ ||
|
||||||
|
$2 ~ /^LINUX_REBOOT_MAGIC[12]$/ ||
|
||||||
|
$2 ~ /^MODULE_INIT_/ ||
|
||||||
|
$2 !~ "NLA_TYPE_MASK" &&
|
||||||
|
$2 ~ /^(NETLINK|NLM|NLMSG|NLA|IFA|IFAN|RT|RTC|RTCF|RTN|RTPROT|RTNH|ARPHRD|ETH_P|NETNSA)_/ ||
|
||||||
|
$2 ~ /^SIOC/ ||
|
||||||
|
$2 ~ /^TIOC/ ||
|
||||||
|
$2 ~ /^TCGET/ ||
|
||||||
|
$2 ~ /^TCSET/ ||
|
||||||
|
$2 ~ /^TC(FLSH|SBRKP?|XONC)$/ ||
|
||||||
|
$2 !~ "RTF_BITS" &&
|
||||||
|
$2 ~ /^(IFF|IFT|NET_RT|RTM|RTF|RTV|RTA|RTAX)_/ ||
|
||||||
|
$2 ~ /^BIOC/ ||
|
||||||
|
$2 ~ /^RUSAGE_(SELF|CHILDREN|THREAD)/ ||
|
||||||
|
$2 ~ /^RLIMIT_(AS|CORE|CPU|DATA|FSIZE|LOCKS|MEMLOCK|MSGQUEUE|NICE|NOFILE|NPROC|RSS|RTPRIO|RTTIME|SIGPENDING|STACK)|RLIM_INFINITY/ ||
|
||||||
|
$2 ~ /^PRIO_(PROCESS|PGRP|USER)/ ||
|
||||||
|
$2 ~ /^CLONE_[A-Z_]+/ ||
|
||||||
|
$2 !~ /^(BPF_TIMEVAL)$/ &&
|
||||||
|
$2 ~ /^(BPF|DLT)_/ ||
|
||||||
|
$2 ~ /^(CLOCK|TIMER)_/ ||
|
||||||
|
$2 ~ /^CAN_/ ||
|
||||||
|
$2 ~ /^CAP_/ ||
|
||||||
|
$2 ~ /^ALG_/ ||
|
||||||
|
$2 ~ /^FS_(POLICY_FLAGS|KEY_DESC|ENCRYPTION_MODE|[A-Z0-9_]+_KEY_SIZE|IOC_(GET|SET)_ENCRYPTION)/ ||
|
||||||
|
$2 ~ /^GRND_/ ||
|
||||||
|
$2 ~ /^RND/ ||
|
||||||
|
$2 ~ /^KEY_(SPEC|REQKEY_DEFL)_/ ||
|
||||||
|
$2 ~ /^KEYCTL_/ ||
|
||||||
|
$2 ~ /^PERF_EVENT_IOC_/ ||
|
||||||
|
$2 ~ /^SECCOMP_MODE_/ ||
|
||||||
|
$2 ~ /^SPLICE_/ ||
|
||||||
|
$2 ~ /^SYNC_FILE_RANGE_/ ||
|
||||||
|
$2 !~ /^AUDIT_RECORD_MAGIC/ &&
|
||||||
|
$2 !~ /IOC_MAGIC/ &&
|
||||||
|
$2 ~ /^[A-Z][A-Z0-9_]+_MAGIC2?$/ ||
|
||||||
|
$2 ~ /^(VM|VMADDR)_/ ||
|
||||||
|
$2 ~ /^IOCTL_VM_SOCKETS_/ ||
|
||||||
|
$2 ~ /^(TASKSTATS|TS)_/ ||
|
||||||
|
$2 ~ /^CGROUPSTATS_/ ||
|
||||||
|
$2 ~ /^GENL_/ ||
|
||||||
|
$2 ~ /^STATX_/ ||
|
||||||
|
$2 ~ /^RENAME/ ||
|
||||||
|
$2 ~ /^UBI_IOC[A-Z]/ ||
|
||||||
|
$2 ~ /^UTIME_/ ||
|
||||||
|
$2 ~ /^XATTR_(CREATE|REPLACE|NO(DEFAULT|FOLLOW|SECURITY)|SHOWCOMPRESSION)/ ||
|
||||||
|
$2 ~ /^ATTR_(BIT_MAP_COUNT|(CMN|VOL|FILE)_)/ ||
|
||||||
|
$2 ~ /^FSOPT_/ ||
|
||||||
|
$2 ~ /^WDIOC_/ ||
|
||||||
|
$2 ~ /^NFN/ ||
|
||||||
|
$2 ~ /^XDP_/ ||
|
||||||
|
$2 ~ /^(HDIO|WIN|SMART)_/ ||
|
||||||
|
$2 !~ "WMESGLEN" &&
|
||||||
|
$2 ~ /^W[A-Z0-9]+$/ ||
|
||||||
|
$2 ~/^PPPIOC/ ||
|
||||||
|
$2 ~ /^FAN_|FANOTIFY_/ ||
|
||||||
|
$2 ~ /^BLK[A-Z]*(GET$|SET$|BUF$|PART$|SIZE)/ {printf("\t%s = C.%s\n", $2, $2)}
|
||||||
|
$2 ~ /^__WCOREFLAG$/ {next}
|
||||||
|
$2 ~ /^__W[A-Z0-9]+$/ {printf("\t%s = C.%s\n", substr($2,3), $2)}
|
||||||
|
|
||||||
|
{next}
|
||||||
|
' | sort
|
||||||
|
|
||||||
|
echo ')'
|
||||||
|
) >_const.go
|
||||||
|
|
||||||
|
# Pull out the error names for later.
|
||||||
|
errors=$(
|
||||||
|
echo '#include <errno.h>' | $CC -x c - -E -dM $ccflags |
|
||||||
|
awk '$1=="#define" && $2 ~ /^E[A-Z0-9_]+$/ { print $2 }' |
|
||||||
|
sort
|
||||||
|
)
|
||||||
|
|
||||||
|
# Pull out the signal names for later.
|
||||||
|
signals=$(
|
||||||
|
echo '#include <signal.h>' | $CC -x c - -E -dM $ccflags |
|
||||||
|
awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print $2 }' |
|
||||||
|
egrep -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT|SIGMAX64)' |
|
||||||
|
sort
|
||||||
|
)
|
||||||
|
|
||||||
|
# Again, writing regexps to a file.
|
||||||
|
echo '#include <errno.h>' | $CC -x c - -E -dM $ccflags |
|
||||||
|
awk '$1=="#define" && $2 ~ /^E[A-Z0-9_]+$/ { print "^\t" $2 "[ \t]*=" }' |
|
||||||
|
sort >_error.grep
|
||||||
|
echo '#include <signal.h>' | $CC -x c - -E -dM $ccflags |
|
||||||
|
awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print "^\t" $2 "[ \t]*=" }' |
|
||||||
|
egrep -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT|SIGMAX64)' |
|
||||||
|
sort >_signal.grep
|
||||||
|
|
||||||
|
echo '// mkerrors.sh' "$@"
|
||||||
|
echo '// Code generated by the command above; see README.md. DO NOT EDIT.'
|
||||||
|
echo
|
||||||
|
echo "// +build ${GOARCH},${GOOS}"
|
||||||
|
echo
|
||||||
|
go tool cgo -godefs -- "$@" _const.go >_error.out
|
||||||
|
cat _error.out | grep -vf _error.grep | grep -vf _signal.grep
|
||||||
|
echo
|
||||||
|
echo '// Errors'
|
||||||
|
echo 'const ('
|
||||||
|
cat _error.out | grep -f _error.grep | sed 's/=\(.*\)/= syscall.Errno(\1)/'
|
||||||
|
echo ')'
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo '// Signals'
|
||||||
|
echo 'const ('
|
||||||
|
cat _error.out | grep -f _signal.grep | sed 's/=\(.*\)/= syscall.Signal(\1)/'
|
||||||
|
echo ')'
|
||||||
|
|
||||||
|
# Run C program to print error and syscall strings.
|
||||||
|
(
|
||||||
|
echo -E "
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <signal.h>
|
||||||
|
|
||||||
|
#define nelem(x) (sizeof(x)/sizeof((x)[0]))
|
||||||
|
|
||||||
|
enum { A = 'A', Z = 'Z', a = 'a', z = 'z' }; // avoid need for single quotes below
|
||||||
|
|
||||||
|
struct tuple {
|
||||||
|
int num;
|
||||||
|
const char *name;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct tuple errors[] = {
|
||||||
|
"
|
||||||
|
for i in $errors
|
||||||
|
do
|
||||||
|
echo -E ' {'$i', "'$i'" },'
|
||||||
|
done
|
||||||
|
|
||||||
|
echo -E "
|
||||||
|
};
|
||||||
|
|
||||||
|
struct tuple signals[] = {
|
||||||
|
"
|
||||||
|
for i in $signals
|
||||||
|
do
|
||||||
|
echo -E ' {'$i', "'$i'" },'
|
||||||
|
done
|
||||||
|
|
||||||
|
# Use -E because on some systems bash builtin interprets \n itself.
|
||||||
|
echo -E '
|
||||||
|
};
|
||||||
|
|
||||||
|
static int
|
||||||
|
tuplecmp(const void *a, const void *b)
|
||||||
|
{
|
||||||
|
return ((struct tuple *)a)->num - ((struct tuple *)b)->num;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main(void)
|
||||||
|
{
|
||||||
|
int i, e;
|
||||||
|
char buf[1024], *p;
|
||||||
|
|
||||||
|
printf("\n\n// Error table\n");
|
||||||
|
printf("var errorList = [...]struct {\n");
|
||||||
|
printf("\tnum syscall.Errno\n");
|
||||||
|
printf("\tname string\n");
|
||||||
|
printf("\tdesc string\n");
|
||||||
|
printf("} {\n");
|
||||||
|
qsort(errors, nelem(errors), sizeof errors[0], tuplecmp);
|
||||||
|
for(i=0; i<nelem(errors); i++) {
|
||||||
|
e = errors[i].num;
|
||||||
|
if(i > 0 && errors[i-1].num == e)
|
||||||
|
continue;
|
||||||
|
strcpy(buf, strerror(e));
|
||||||
|
// lowercase first letter: Bad -> bad, but STREAM -> STREAM.
|
||||||
|
if(A <= buf[0] && buf[0] <= Z && a <= buf[1] && buf[1] <= z)
|
||||||
|
buf[0] += a - A;
|
||||||
|
printf("\t{ %d, \"%s\", \"%s\" },\n", e, errors[i].name, buf);
|
||||||
|
}
|
||||||
|
printf("}\n\n");
|
||||||
|
|
||||||
|
printf("\n\n// Signal table\n");
|
||||||
|
printf("var signalList = [...]struct {\n");
|
||||||
|
printf("\tnum syscall.Signal\n");
|
||||||
|
printf("\tname string\n");
|
||||||
|
printf("\tdesc string\n");
|
||||||
|
printf("} {\n");
|
||||||
|
qsort(signals, nelem(signals), sizeof signals[0], tuplecmp);
|
||||||
|
for(i=0; i<nelem(signals); i++) {
|
||||||
|
e = signals[i].num;
|
||||||
|
if(i > 0 && signals[i-1].num == e)
|
||||||
|
continue;
|
||||||
|
strcpy(buf, strsignal(e));
|
||||||
|
// lowercase first letter: Bad -> bad, but STREAM -> STREAM.
|
||||||
|
if(A <= buf[0] && buf[0] <= Z && a <= buf[1] && buf[1] <= z)
|
||||||
|
buf[0] += a - A;
|
||||||
|
// cut trailing : number.
|
||||||
|
p = strrchr(buf, ":"[0]);
|
||||||
|
if(p)
|
||||||
|
*p = '\0';
|
||||||
|
printf("\t{ %d, \"%s\", \"%s\" },\n", e, signals[i].name, buf);
|
||||||
|
}
|
||||||
|
printf("}\n\n");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
'
|
||||||
|
) >_errors.c
|
||||||
|
|
||||||
|
$CC $ccflags -o _errors _errors.c && $GORUN ./_errors && rm -f _errors.c _errors _const.go _error.grep _signal.grep _error.out
|
||||||
265
vendor/golang.org/x/sys/unix/mksysctl_openbsd.pl
generated
vendored
Normal file
265
vendor/golang.org/x/sys/unix/mksysctl_openbsd.pl
generated
vendored
Normal file
|
|
@ -0,0 +1,265 @@
|
||||||
|
#!/usr/bin/env perl
|
||||||
|
|
||||||
|
# Copyright 2011 The Go Authors. All rights reserved.
|
||||||
|
# Use of this source code is governed by a BSD-style
|
||||||
|
# license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
#
|
||||||
|
# Parse the header files for OpenBSD and generate a Go usable sysctl MIB.
|
||||||
|
#
|
||||||
|
# Build a MIB with each entry being an array containing the level, type and
|
||||||
|
# a hash that will contain additional entries if the current entry is a node.
|
||||||
|
# We then walk this MIB and create a flattened sysctl name to OID hash.
|
||||||
|
#
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
|
||||||
|
if($ENV{'GOARCH'} eq "" || $ENV{'GOOS'} eq "") {
|
||||||
|
print STDERR "GOARCH or GOOS not defined in environment\n";
|
||||||
|
exit 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
my $debug = 0;
|
||||||
|
my %ctls = ();
|
||||||
|
|
||||||
|
my @headers = qw (
|
||||||
|
sys/sysctl.h
|
||||||
|
sys/socket.h
|
||||||
|
sys/tty.h
|
||||||
|
sys/malloc.h
|
||||||
|
sys/mount.h
|
||||||
|
sys/namei.h
|
||||||
|
sys/sem.h
|
||||||
|
sys/shm.h
|
||||||
|
sys/vmmeter.h
|
||||||
|
uvm/uvmexp.h
|
||||||
|
uvm/uvm_param.h
|
||||||
|
uvm/uvm_swap_encrypt.h
|
||||||
|
ddb/db_var.h
|
||||||
|
net/if.h
|
||||||
|
net/if_pfsync.h
|
||||||
|
net/pipex.h
|
||||||
|
netinet/in.h
|
||||||
|
netinet/icmp_var.h
|
||||||
|
netinet/igmp_var.h
|
||||||
|
netinet/ip_ah.h
|
||||||
|
netinet/ip_carp.h
|
||||||
|
netinet/ip_divert.h
|
||||||
|
netinet/ip_esp.h
|
||||||
|
netinet/ip_ether.h
|
||||||
|
netinet/ip_gre.h
|
||||||
|
netinet/ip_ipcomp.h
|
||||||
|
netinet/ip_ipip.h
|
||||||
|
netinet/pim_var.h
|
||||||
|
netinet/tcp_var.h
|
||||||
|
netinet/udp_var.h
|
||||||
|
netinet6/in6.h
|
||||||
|
netinet6/ip6_divert.h
|
||||||
|
netinet6/pim6_var.h
|
||||||
|
netinet/icmp6.h
|
||||||
|
netmpls/mpls.h
|
||||||
|
);
|
||||||
|
|
||||||
|
my @ctls = qw (
|
||||||
|
kern
|
||||||
|
vm
|
||||||
|
fs
|
||||||
|
net
|
||||||
|
#debug # Special handling required
|
||||||
|
hw
|
||||||
|
#machdep # Arch specific
|
||||||
|
user
|
||||||
|
ddb
|
||||||
|
#vfs # Special handling required
|
||||||
|
fs.posix
|
||||||
|
kern.forkstat
|
||||||
|
kern.intrcnt
|
||||||
|
kern.malloc
|
||||||
|
kern.nchstats
|
||||||
|
kern.seminfo
|
||||||
|
kern.shminfo
|
||||||
|
kern.timecounter
|
||||||
|
kern.tty
|
||||||
|
kern.watchdog
|
||||||
|
net.bpf
|
||||||
|
net.ifq
|
||||||
|
net.inet
|
||||||
|
net.inet.ah
|
||||||
|
net.inet.carp
|
||||||
|
net.inet.divert
|
||||||
|
net.inet.esp
|
||||||
|
net.inet.etherip
|
||||||
|
net.inet.gre
|
||||||
|
net.inet.icmp
|
||||||
|
net.inet.igmp
|
||||||
|
net.inet.ip
|
||||||
|
net.inet.ip.ifq
|
||||||
|
net.inet.ipcomp
|
||||||
|
net.inet.ipip
|
||||||
|
net.inet.mobileip
|
||||||
|
net.inet.pfsync
|
||||||
|
net.inet.pim
|
||||||
|
net.inet.tcp
|
||||||
|
net.inet.udp
|
||||||
|
net.inet6
|
||||||
|
net.inet6.divert
|
||||||
|
net.inet6.ip6
|
||||||
|
net.inet6.icmp6
|
||||||
|
net.inet6.pim6
|
||||||
|
net.inet6.tcp6
|
||||||
|
net.inet6.udp6
|
||||||
|
net.mpls
|
||||||
|
net.mpls.ifq
|
||||||
|
net.key
|
||||||
|
net.pflow
|
||||||
|
net.pfsync
|
||||||
|
net.pipex
|
||||||
|
net.rt
|
||||||
|
vm.swapencrypt
|
||||||
|
#vfsgenctl # Special handling required
|
||||||
|
);
|
||||||
|
|
||||||
|
# Node name "fixups"
|
||||||
|
my %ctl_map = (
|
||||||
|
"ipproto" => "net.inet",
|
||||||
|
"net.inet.ipproto" => "net.inet",
|
||||||
|
"net.inet6.ipv6proto" => "net.inet6",
|
||||||
|
"net.inet6.ipv6" => "net.inet6.ip6",
|
||||||
|
"net.inet.icmpv6" => "net.inet6.icmp6",
|
||||||
|
"net.inet6.divert6" => "net.inet6.divert",
|
||||||
|
"net.inet6.tcp6" => "net.inet.tcp",
|
||||||
|
"net.inet6.udp6" => "net.inet.udp",
|
||||||
|
"mpls" => "net.mpls",
|
||||||
|
"swpenc" => "vm.swapencrypt"
|
||||||
|
);
|
||||||
|
|
||||||
|
# Node mappings
|
||||||
|
my %node_map = (
|
||||||
|
"net.inet.ip.ifq" => "net.ifq",
|
||||||
|
"net.inet.pfsync" => "net.pfsync",
|
||||||
|
"net.mpls.ifq" => "net.ifq"
|
||||||
|
);
|
||||||
|
|
||||||
|
my $ctlname;
|
||||||
|
my %mib = ();
|
||||||
|
my %sysctl = ();
|
||||||
|
my $node;
|
||||||
|
|
||||||
|
sub debug() {
|
||||||
|
print STDERR "$_[0]\n" if $debug;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Walk the MIB and build a sysctl name to OID mapping.
|
||||||
|
sub build_sysctl() {
|
||||||
|
my ($node, $name, $oid) = @_;
|
||||||
|
my %node = %{$node};
|
||||||
|
my @oid = @{$oid};
|
||||||
|
|
||||||
|
foreach my $key (sort keys %node) {
|
||||||
|
my @node = @{$node{$key}};
|
||||||
|
my $nodename = $name.($name ne '' ? '.' : '').$key;
|
||||||
|
my @nodeoid = (@oid, $node[0]);
|
||||||
|
if ($node[1] eq 'CTLTYPE_NODE') {
|
||||||
|
if (exists $node_map{$nodename}) {
|
||||||
|
$node = \%mib;
|
||||||
|
$ctlname = $node_map{$nodename};
|
||||||
|
foreach my $part (split /\./, $ctlname) {
|
||||||
|
$node = \%{@{$$node{$part}}[2]};
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$node = $node[2];
|
||||||
|
}
|
||||||
|
&build_sysctl($node, $nodename, \@nodeoid);
|
||||||
|
} elsif ($node[1] ne '') {
|
||||||
|
$sysctl{$nodename} = \@nodeoid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach my $ctl (@ctls) {
|
||||||
|
$ctls{$ctl} = $ctl;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Build MIB
|
||||||
|
foreach my $header (@headers) {
|
||||||
|
&debug("Processing $header...");
|
||||||
|
open HEADER, "/usr/include/$header" ||
|
||||||
|
print STDERR "Failed to open $header\n";
|
||||||
|
while (<HEADER>) {
|
||||||
|
if ($_ =~ /^#define\s+(CTL_NAMES)\s+{/ ||
|
||||||
|
$_ =~ /^#define\s+(CTL_(.*)_NAMES)\s+{/ ||
|
||||||
|
$_ =~ /^#define\s+((.*)CTL_NAMES)\s+{/) {
|
||||||
|
if ($1 eq 'CTL_NAMES') {
|
||||||
|
# Top level.
|
||||||
|
$node = \%mib;
|
||||||
|
} else {
|
||||||
|
# Node.
|
||||||
|
my $nodename = lc($2);
|
||||||
|
if ($header =~ /^netinet\//) {
|
||||||
|
$ctlname = "net.inet.$nodename";
|
||||||
|
} elsif ($header =~ /^netinet6\//) {
|
||||||
|
$ctlname = "net.inet6.$nodename";
|
||||||
|
} elsif ($header =~ /^net\//) {
|
||||||
|
$ctlname = "net.$nodename";
|
||||||
|
} else {
|
||||||
|
$ctlname = "$nodename";
|
||||||
|
$ctlname =~ s/^(fs|net|kern)_/$1\./;
|
||||||
|
}
|
||||||
|
if (exists $ctl_map{$ctlname}) {
|
||||||
|
$ctlname = $ctl_map{$ctlname};
|
||||||
|
}
|
||||||
|
if (not exists $ctls{$ctlname}) {
|
||||||
|
&debug("Ignoring $ctlname...");
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Walk down from the top of the MIB.
|
||||||
|
$node = \%mib;
|
||||||
|
foreach my $part (split /\./, $ctlname) {
|
||||||
|
if (not exists $$node{$part}) {
|
||||||
|
&debug("Missing node $part");
|
||||||
|
$$node{$part} = [ 0, '', {} ];
|
||||||
|
}
|
||||||
|
$node = \%{@{$$node{$part}}[2]};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Populate current node with entries.
|
||||||
|
my $i = -1;
|
||||||
|
while (defined($_) && $_ !~ /^}/) {
|
||||||
|
$_ = <HEADER>;
|
||||||
|
$i++ if $_ =~ /{.*}/;
|
||||||
|
next if $_ !~ /{\s+"(\w+)",\s+(CTLTYPE_[A-Z]+)\s+}/;
|
||||||
|
$$node{$1} = [ $i, $2, {} ];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
close HEADER;
|
||||||
|
}
|
||||||
|
|
||||||
|
&build_sysctl(\%mib, "", []);
|
||||||
|
|
||||||
|
print <<EOF;
|
||||||
|
// mksysctl_openbsd.pl
|
||||||
|
// Code generated by the command above; DO NOT EDIT.
|
||||||
|
|
||||||
|
// +build $ENV{'GOARCH'},$ENV{'GOOS'}
|
||||||
|
|
||||||
|
package unix;
|
||||||
|
|
||||||
|
type mibentry struct {
|
||||||
|
ctlname string
|
||||||
|
ctloid []_C_int
|
||||||
|
}
|
||||||
|
|
||||||
|
var sysctlMib = []mibentry {
|
||||||
|
EOF
|
||||||
|
|
||||||
|
foreach my $name (sort keys %sysctl) {
|
||||||
|
my @oid = @{$sysctl{$name}};
|
||||||
|
print "\t{ \"$name\", []_C_int{ ", join(', ', @oid), " } }, \n";
|
||||||
|
}
|
||||||
|
|
||||||
|
print <<EOF;
|
||||||
|
}
|
||||||
|
EOF
|
||||||
4
vendor/gopkg.in/alecthomas/kingpin.v2/.travis.yml
generated
vendored
Normal file
4
vendor/gopkg.in/alecthomas/kingpin.v2/.travis.yml
generated
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
sudo: false
|
||||||
|
language: go
|
||||||
|
install: go get -t -v ./...
|
||||||
|
go: 1.2
|
||||||
674
vendor/gopkg.in/alecthomas/kingpin.v2/README.md
generated
vendored
Normal file
674
vendor/gopkg.in/alecthomas/kingpin.v2/README.md
generated
vendored
Normal file
|
|
@ -0,0 +1,674 @@
|
||||||
|
# Kingpin - A Go (golang) command line and flag parser
|
||||||
|
[](http://godoc.org/github.com/alecthomas/kingpin) [](https://travis-ci.org/alecthomas/kingpin) [](https://gitter.im/alecthomas/Lobby)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- MarkdownTOC -->
|
||||||
|
|
||||||
|
- [Overview](#overview)
|
||||||
|
- [Features](#features)
|
||||||
|
- [User-visible changes between v1 and v2](#user-visible-changes-between-v1-and-v2)
|
||||||
|
- [Flags can be used at any point after their definition.](#flags-can-be-used-at-any-point-after-their-definition)
|
||||||
|
- [Short flags can be combined with their parameters](#short-flags-can-be-combined-with-their-parameters)
|
||||||
|
- [API changes between v1 and v2](#api-changes-between-v1-and-v2)
|
||||||
|
- [Versions](#versions)
|
||||||
|
- [V2 is the current stable version](#v2-is-the-current-stable-version)
|
||||||
|
- [V1 is the OLD stable version](#v1-is-the-old-stable-version)
|
||||||
|
- [Change History](#change-history)
|
||||||
|
- [Examples](#examples)
|
||||||
|
- [Simple Example](#simple-example)
|
||||||
|
- [Complex Example](#complex-example)
|
||||||
|
- [Reference Documentation](#reference-documentation)
|
||||||
|
- [Displaying errors and usage information](#displaying-errors-and-usage-information)
|
||||||
|
- [Sub-commands](#sub-commands)
|
||||||
|
- [Custom Parsers](#custom-parsers)
|
||||||
|
- [Repeatable flags](#repeatable-flags)
|
||||||
|
- [Boolean Values](#boolean-values)
|
||||||
|
- [Default Values](#default-values)
|
||||||
|
- [Place-holders in Help](#place-holders-in-help)
|
||||||
|
- [Consuming all remaining arguments](#consuming-all-remaining-arguments)
|
||||||
|
- [Bash/ZSH Shell Completion](#bashzsh-shell-completion)
|
||||||
|
- [Supporting -h for help](#supporting--h-for-help)
|
||||||
|
- [Custom help](#custom-help)
|
||||||
|
|
||||||
|
<!-- /MarkdownTOC -->
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Kingpin is a [fluent-style](http://en.wikipedia.org/wiki/Fluent_interface),
|
||||||
|
type-safe command-line parser. It supports flags, nested commands, and
|
||||||
|
positional arguments.
|
||||||
|
|
||||||
|
Install it with:
|
||||||
|
|
||||||
|
$ go get gopkg.in/alecthomas/kingpin.v2
|
||||||
|
|
||||||
|
It looks like this:
|
||||||
|
|
||||||
|
```go
|
||||||
|
var (
|
||||||
|
verbose = kingpin.Flag("verbose", "Verbose mode.").Short('v').Bool()
|
||||||
|
name = kingpin.Arg("name", "Name of user.").Required().String()
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
kingpin.Parse()
|
||||||
|
fmt.Printf("%v, %s\n", *verbose, *name)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
More [examples](https://github.com/alecthomas/kingpin/tree/master/_examples) are available.
|
||||||
|
|
||||||
|
Second to parsing, providing the user with useful help is probably the most
|
||||||
|
important thing a command-line parser does. Kingpin tries to provide detailed
|
||||||
|
contextual help if `--help` is encountered at any point in the command line
|
||||||
|
(excluding after `--`).
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- Help output that isn't as ugly as sin.
|
||||||
|
- Fully [customisable help](#custom-help), via Go templates.
|
||||||
|
- Parsed, type-safe flags (`kingpin.Flag("f", "help").Int()`)
|
||||||
|
- Parsed, type-safe positional arguments (`kingpin.Arg("a", "help").Int()`).
|
||||||
|
- Parsed, type-safe, arbitrarily deep commands (`kingpin.Command("c", "help")`).
|
||||||
|
- Support for required flags and required positional arguments (`kingpin.Flag("f", "").Required().Int()`).
|
||||||
|
- Support for arbitrarily nested default commands (`command.Default()`).
|
||||||
|
- Callbacks per command, flag and argument (`kingpin.Command("c", "").Action(myAction)`).
|
||||||
|
- POSIX-style short flag combining (`-a -b` -> `-ab`).
|
||||||
|
- Short-flag+parameter combining (`-a parm` -> `-aparm`).
|
||||||
|
- Read command-line from files (`@<file>`).
|
||||||
|
- Automatically generate man pages (`--help-man`).
|
||||||
|
|
||||||
|
## User-visible changes between v1 and v2
|
||||||
|
|
||||||
|
### Flags can be used at any point after their definition.
|
||||||
|
|
||||||
|
Flags can be specified at any point after their definition, not just
|
||||||
|
*immediately after their associated command*. From the chat example below, the
|
||||||
|
following used to be required:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ chat --server=chat.server.com:8080 post --image=~/Downloads/owls.jpg pics
|
||||||
|
```
|
||||||
|
|
||||||
|
But the following will now work:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ chat post --server=chat.server.com:8080 --image=~/Downloads/owls.jpg pics
|
||||||
|
```
|
||||||
|
|
||||||
|
### Short flags can be combined with their parameters
|
||||||
|
|
||||||
|
Previously, if a short flag was used, any argument to that flag would have to
|
||||||
|
be separated by a space. That is no longer the case.
|
||||||
|
|
||||||
|
## API changes between v1 and v2
|
||||||
|
|
||||||
|
- `ParseWithFileExpansion()` is gone. The new parser directly supports expanding `@<file>`.
|
||||||
|
- Added `FatalUsage()` and `FatalUsageContext()` for displaying an error + usage and terminating.
|
||||||
|
- `Dispatch()` renamed to `Action()`.
|
||||||
|
- Added `ParseContext()` for parsing a command line into its intermediate context form without executing.
|
||||||
|
- Added `Terminate()` function to override the termination function.
|
||||||
|
- Added `UsageForContextWithTemplate()` for printing usage via a custom template.
|
||||||
|
- Added `UsageTemplate()` for overriding the default template to use. Two templates are included:
|
||||||
|
1. `DefaultUsageTemplate` - default template.
|
||||||
|
2. `CompactUsageTemplate` - compact command template for larger applications.
|
||||||
|
|
||||||
|
## Versions
|
||||||
|
|
||||||
|
Kingpin uses [gopkg.in](https://gopkg.in/alecthomas/kingpin) for versioning.
|
||||||
|
|
||||||
|
The current stable version is [gopkg.in/alecthomas/kingpin.v2](https://gopkg.in/alecthomas/kingpin.v2). The previous version, [gopkg.in/alecthomas/kingpin.v1](https://gopkg.in/alecthomas/kingpin.v1), is deprecated and in maintenance mode.
|
||||||
|
|
||||||
|
### [V2](https://gopkg.in/alecthomas/kingpin.v2) is the current stable version
|
||||||
|
|
||||||
|
Installation:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ go get gopkg.in/alecthomas/kingpin.v2
|
||||||
|
```
|
||||||
|
|
||||||
|
### [V1](https://gopkg.in/alecthomas/kingpin.v1) is the OLD stable version
|
||||||
|
|
||||||
|
Installation:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ go get gopkg.in/alecthomas/kingpin.v1
|
||||||
|
```
|
||||||
|
|
||||||
|
## Change History
|
||||||
|
|
||||||
|
- *2015-09-19* -- Stable v2.1.0 release.
|
||||||
|
- Added `command.Default()` to specify a default command to use if no other
|
||||||
|
command matches. This allows for convenient user shortcuts.
|
||||||
|
- Exposed `HelpFlag` and `VersionFlag` for further customisation.
|
||||||
|
- `Action()` and `PreAction()` added and both now support an arbitrary
|
||||||
|
number of callbacks.
|
||||||
|
- `kingpin.SeparateOptionalFlagsUsageTemplate`.
|
||||||
|
- `--help-long` and `--help-man` (hidden by default) flags.
|
||||||
|
- Flags are "interspersed" by default, but can be disabled with `app.Interspersed(false)`.
|
||||||
|
- Added flags for all simple builtin types (int8, uint16, etc.) and slice variants.
|
||||||
|
- Use `app.Writer(os.Writer)` to specify the default writer for all output functions.
|
||||||
|
- Dropped `os.Writer` prefix from all printf-like functions.
|
||||||
|
|
||||||
|
- *2015-05-22* -- Stable v2.0.0 release.
|
||||||
|
- Initial stable release of v2.0.0.
|
||||||
|
- Fully supports interspersed flags, commands and arguments.
|
||||||
|
- Flags can be present at any point after their logical definition.
|
||||||
|
- Application.Parse() terminates if commands are present and a command is not parsed.
|
||||||
|
- Dispatch() -> Action().
|
||||||
|
- Actions are dispatched after all values are populated.
|
||||||
|
- Override termination function (defaults to os.Exit).
|
||||||
|
- Override output stream (defaults to os.Stderr).
|
||||||
|
- Templatised usage help, with default and compact templates.
|
||||||
|
- Make error/usage functions more consistent.
|
||||||
|
- Support argument expansion from files by default (with @<file>).
|
||||||
|
- Fully public data model is available via .Model().
|
||||||
|
- Parser has been completely refactored.
|
||||||
|
- Parsing and execution has been split into distinct stages.
|
||||||
|
- Use `go generate` to generate repeated flags.
|
||||||
|
- Support combined short-flag+argument: -fARG.
|
||||||
|
|
||||||
|
- *2015-01-23* -- Stable v1.3.4 release.
|
||||||
|
- Support "--" for separating flags from positional arguments.
|
||||||
|
- Support loading flags from files (ParseWithFileExpansion()). Use @FILE as an argument.
|
||||||
|
- Add post-app and post-cmd validation hooks. This allows arbitrary validation to be added.
|
||||||
|
- A bunch of improvements to help usage and formatting.
|
||||||
|
- Support arbitrarily nested sub-commands.
|
||||||
|
|
||||||
|
- *2014-07-08* -- Stable v1.2.0 release.
|
||||||
|
- Pass any value through to `Strings()` when final argument.
|
||||||
|
Allows for values that look like flags to be processed.
|
||||||
|
- Allow `--help` to be used with commands.
|
||||||
|
- Support `Hidden()` flags.
|
||||||
|
- Parser for [units.Base2Bytes](https://github.com/alecthomas/units)
|
||||||
|
type. Allows for flags like `--ram=512MB` or `--ram=1GB`.
|
||||||
|
- Add an `Enum()` value, allowing only one of a set of values
|
||||||
|
to be selected. eg. `Flag(...).Enum("debug", "info", "warning")`.
|
||||||
|
|
||||||
|
- *2014-06-27* -- Stable v1.1.0 release.
|
||||||
|
- Bug fixes.
|
||||||
|
- Always return an error (rather than panicing) when misconfigured.
|
||||||
|
- `OpenFile(flag, perm)` value type added, for finer control over opening files.
|
||||||
|
- Significantly improved usage formatting.
|
||||||
|
|
||||||
|
- *2014-06-19* -- Stable v1.0.0 release.
|
||||||
|
- Support [cumulative positional](#consuming-all-remaining-arguments) arguments.
|
||||||
|
- Return error rather than panic when there are fatal errors not caught by
|
||||||
|
the type system. eg. when a default value is invalid.
|
||||||
|
- Use gokpg.in.
|
||||||
|
|
||||||
|
- *2014-06-10* -- Place-holder streamlining.
|
||||||
|
- Renamed `MetaVar` to `PlaceHolder`.
|
||||||
|
- Removed `MetaVarFromDefault`. Kingpin now uses [heuristics](#place-holders-in-help)
|
||||||
|
to determine what to display.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
### Simple Example
|
||||||
|
|
||||||
|
Kingpin can be used for simple flag+arg applications like so:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ ping --help
|
||||||
|
usage: ping [<flags>] <ip> [<count>]
|
||||||
|
|
||||||
|
Flags:
|
||||||
|
--debug Enable debug mode.
|
||||||
|
--help Show help.
|
||||||
|
-t, --timeout=5s Timeout waiting for ping.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
<ip> IP address to ping.
|
||||||
|
[<count>] Number of packets to send
|
||||||
|
$ ping 1.2.3.4 5
|
||||||
|
Would ping: 1.2.3.4 with timeout 5s and count 5
|
||||||
|
```
|
||||||
|
|
||||||
|
From the following source:
|
||||||
|
|
||||||
|
```go
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"gopkg.in/alecthomas/kingpin.v2"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
debug = kingpin.Flag("debug", "Enable debug mode.").Bool()
|
||||||
|
timeout = kingpin.Flag("timeout", "Timeout waiting for ping.").Default("5s").OverrideDefaultFromEnvar("PING_TIMEOUT").Short('t').Duration()
|
||||||
|
ip = kingpin.Arg("ip", "IP address to ping.").Required().IP()
|
||||||
|
count = kingpin.Arg("count", "Number of packets to send").Int()
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
kingpin.Version("0.0.1")
|
||||||
|
kingpin.Parse()
|
||||||
|
fmt.Printf("Would ping: %s with timeout %s and count %d\n", *ip, *timeout, *count)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Complex Example
|
||||||
|
|
||||||
|
Kingpin can also produce complex command-line applications with global flags,
|
||||||
|
subcommands, and per-subcommand flags, like this:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ chat --help
|
||||||
|
usage: chat [<flags>] <command> [<flags>] [<args> ...]
|
||||||
|
|
||||||
|
A command-line chat application.
|
||||||
|
|
||||||
|
Flags:
|
||||||
|
--help Show help.
|
||||||
|
--debug Enable debug mode.
|
||||||
|
--server=127.0.0.1 Server address.
|
||||||
|
|
||||||
|
Commands:
|
||||||
|
help [<command>]
|
||||||
|
Show help for a command.
|
||||||
|
|
||||||
|
register <nick> <name>
|
||||||
|
Register a new user.
|
||||||
|
|
||||||
|
post [<flags>] <channel> [<text>]
|
||||||
|
Post a message to a channel.
|
||||||
|
|
||||||
|
$ chat help post
|
||||||
|
usage: chat [<flags>] post [<flags>] <channel> [<text>]
|
||||||
|
|
||||||
|
Post a message to a channel.
|
||||||
|
|
||||||
|
Flags:
|
||||||
|
--image=IMAGE Image to post.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
<channel> Channel to post to.
|
||||||
|
[<text>] Text to post.
|
||||||
|
|
||||||
|
$ chat post --image=~/Downloads/owls.jpg pics
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
From this code:
|
||||||
|
|
||||||
|
```go
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
|
"gopkg.in/alecthomas/kingpin.v2"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
app = kingpin.New("chat", "A command-line chat application.")
|
||||||
|
debug = app.Flag("debug", "Enable debug mode.").Bool()
|
||||||
|
serverIP = app.Flag("server", "Server address.").Default("127.0.0.1").IP()
|
||||||
|
|
||||||
|
register = app.Command("register", "Register a new user.")
|
||||||
|
registerNick = register.Arg("nick", "Nickname for user.").Required().String()
|
||||||
|
registerName = register.Arg("name", "Name of user.").Required().String()
|
||||||
|
|
||||||
|
post = app.Command("post", "Post a message to a channel.")
|
||||||
|
postImage = post.Flag("image", "Image to post.").File()
|
||||||
|
postChannel = post.Arg("channel", "Channel to post to.").Required().String()
|
||||||
|
postText = post.Arg("text", "Text to post.").Strings()
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
switch kingpin.MustParse(app.Parse(os.Args[1:])) {
|
||||||
|
// Register user
|
||||||
|
case register.FullCommand():
|
||||||
|
println(*registerNick)
|
||||||
|
|
||||||
|
// Post message
|
||||||
|
case post.FullCommand():
|
||||||
|
if *postImage != nil {
|
||||||
|
}
|
||||||
|
text := strings.Join(*postText, " ")
|
||||||
|
println("Post:", text)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Reference Documentation
|
||||||
|
|
||||||
|
### Displaying errors and usage information
|
||||||
|
|
||||||
|
Kingpin exports a set of functions to provide consistent errors and usage
|
||||||
|
information to the user.
|
||||||
|
|
||||||
|
Error messages look something like this:
|
||||||
|
|
||||||
|
<app>: error: <message>
|
||||||
|
|
||||||
|
The functions on `Application` are:
|
||||||
|
|
||||||
|
Function | Purpose
|
||||||
|
---------|--------------
|
||||||
|
`Errorf(format, args)` | Display a printf formatted error to the user.
|
||||||
|
`Fatalf(format, args)` | As with Errorf, but also call the termination handler.
|
||||||
|
`FatalUsage(format, args)` | As with Fatalf, but also print contextual usage information.
|
||||||
|
`FatalUsageContext(context, format, args)` | As with Fatalf, but also print contextual usage information from a `ParseContext`.
|
||||||
|
`FatalIfError(err, format, args)` | Conditionally print an error prefixed with format+args, then call the termination handler
|
||||||
|
|
||||||
|
There are equivalent global functions in the kingpin namespace for the default
|
||||||
|
`kingpin.CommandLine` instance.
|
||||||
|
|
||||||
|
### Sub-commands
|
||||||
|
|
||||||
|
Kingpin supports nested sub-commands, with separate flag and positional
|
||||||
|
arguments per sub-command. Note that positional arguments may only occur after
|
||||||
|
sub-commands.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
```go
|
||||||
|
var (
|
||||||
|
deleteCommand = kingpin.Command("delete", "Delete an object.")
|
||||||
|
deleteUserCommand = deleteCommand.Command("user", "Delete a user.")
|
||||||
|
deleteUserUIDFlag = deleteUserCommand.Flag("uid", "Delete user by UID rather than username.")
|
||||||
|
deleteUserUsername = deleteUserCommand.Arg("username", "Username to delete.")
|
||||||
|
deletePostCommand = deleteCommand.Command("post", "Delete a post.")
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
switch kingpin.Parse() {
|
||||||
|
case "delete user":
|
||||||
|
case "delete post":
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Custom Parsers
|
||||||
|
|
||||||
|
Kingpin supports both flag and positional argument parsers for converting to
|
||||||
|
Go types. For example, some included parsers are `Int()`, `Float()`,
|
||||||
|
`Duration()` and `ExistingFile()` (see [parsers.go](./parsers.go) for a complete list of included parsers).
|
||||||
|
|
||||||
|
Parsers conform to Go's [`flag.Value`](http://godoc.org/flag#Value)
|
||||||
|
interface, so any existing implementations will work.
|
||||||
|
|
||||||
|
For example, a parser for accumulating HTTP header values might look like this:
|
||||||
|
|
||||||
|
```go
|
||||||
|
type HTTPHeaderValue http.Header
|
||||||
|
|
||||||
|
func (h *HTTPHeaderValue) Set(value string) error {
|
||||||
|
parts := strings.SplitN(value, ":", 2)
|
||||||
|
if len(parts) != 2 {
|
||||||
|
return fmt.Errorf("expected HEADER:VALUE got '%s'", value)
|
||||||
|
}
|
||||||
|
(*http.Header)(h).Add(parts[0], parts[1])
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *HTTPHeaderValue) String() string {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
As a convenience, I would recommend something like this:
|
||||||
|
|
||||||
|
```go
|
||||||
|
func HTTPHeader(s Settings) (target *http.Header) {
|
||||||
|
target = &http.Header{}
|
||||||
|
s.SetValue((*HTTPHeaderValue)(target))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
You would use it like so:
|
||||||
|
|
||||||
|
```go
|
||||||
|
headers = HTTPHeader(kingpin.Flag("header", "Add a HTTP header to the request.").Short('H'))
|
||||||
|
```
|
||||||
|
|
||||||
|
### Repeatable flags
|
||||||
|
|
||||||
|
Depending on the `Value` they hold, some flags may be repeated. The
|
||||||
|
`IsCumulative() bool` function on `Value` tells if it's safe to call `Set()`
|
||||||
|
multiple times or if an error should be raised if several values are passed.
|
||||||
|
|
||||||
|
The built-in `Value`s returning slices and maps, as well as `Counter` are
|
||||||
|
examples of `Value`s that make a flag repeatable.
|
||||||
|
|
||||||
|
### Boolean values
|
||||||
|
|
||||||
|
Boolean values are uniquely managed by Kingpin. Each boolean flag will have a negative complement:
|
||||||
|
`--<name>` and `--no-<name>`.
|
||||||
|
|
||||||
|
### Default Values
|
||||||
|
|
||||||
|
The default value is the zero value for a type. This can be overridden with
|
||||||
|
the `Default(value...)` function on flags and arguments. This function accepts
|
||||||
|
one or several strings, which are parsed by the value itself, so they *must*
|
||||||
|
be compliant with the format expected.
|
||||||
|
|
||||||
|
### Place-holders in Help
|
||||||
|
|
||||||
|
The place-holder value for a flag is the value used in the help to describe
|
||||||
|
the value of a non-boolean flag.
|
||||||
|
|
||||||
|
The value provided to PlaceHolder() is used if provided, then the value
|
||||||
|
provided by Default() if provided, then finally the capitalised flag name is
|
||||||
|
used.
|
||||||
|
|
||||||
|
Here are some examples of flags with various permutations:
|
||||||
|
|
||||||
|
--name=NAME // Flag(...).String()
|
||||||
|
--name="Harry" // Flag(...).Default("Harry").String()
|
||||||
|
--name=FULL-NAME // Flag(...).PlaceHolder("FULL-NAME").Default("Harry").String()
|
||||||
|
|
||||||
|
### Consuming all remaining arguments
|
||||||
|
|
||||||
|
A common command-line idiom is to use all remaining arguments for some
|
||||||
|
purpose. eg. The following command accepts an arbitrary number of
|
||||||
|
IP addresses as positional arguments:
|
||||||
|
|
||||||
|
./cmd ping 10.1.1.1 192.168.1.1
|
||||||
|
|
||||||
|
Such arguments are similar to [repeatable flags](#repeatable-flags), but for
|
||||||
|
arguments. Therefore they use the same `IsCumulative() bool` function on the
|
||||||
|
underlying `Value`, so the built-in `Value`s for which the `Set()` function
|
||||||
|
can be called several times will consume multiple arguments.
|
||||||
|
|
||||||
|
To implement the above example with a custom `Value`, we might do something
|
||||||
|
like this:
|
||||||
|
|
||||||
|
```go
|
||||||
|
type ipList []net.IP
|
||||||
|
|
||||||
|
func (i *ipList) Set(value string) error {
|
||||||
|
if ip := net.ParseIP(value); ip == nil {
|
||||||
|
return fmt.Errorf("'%s' is not an IP address", value)
|
||||||
|
} else {
|
||||||
|
*i = append(*i, ip)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *ipList) String() string {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *ipList) IsCumulative() bool {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func IPList(s Settings) (target *[]net.IP) {
|
||||||
|
target = new([]net.IP)
|
||||||
|
s.SetValue((*ipList)(target))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
And use it like so:
|
||||||
|
|
||||||
|
```go
|
||||||
|
ips := IPList(kingpin.Arg("ips", "IP addresses to ping."))
|
||||||
|
```
|
||||||
|
|
||||||
|
### Bash/ZSH Shell Completion
|
||||||
|
|
||||||
|
By default, all flags and commands/subcommands generate completions
|
||||||
|
internally.
|
||||||
|
|
||||||
|
Out of the box, CLI tools using kingpin should be able to take advantage
|
||||||
|
of completion hinting for flags and commands. By specifying
|
||||||
|
`--completion-bash` as the first argument, your CLI tool will show
|
||||||
|
possible subcommands. By ending your argv with `--`, hints for flags
|
||||||
|
will be shown.
|
||||||
|
|
||||||
|
To allow your end users to take advantage you must package a
|
||||||
|
`/etc/bash_completion.d` script with your distribution (or the equivalent
|
||||||
|
for your target platform/shell). An alternative is to instruct your end
|
||||||
|
user to source a script from their `bash_profile` (or equivalent).
|
||||||
|
|
||||||
|
Fortunately Kingpin makes it easy to generate or source a script for use
|
||||||
|
with end users shells. `./yourtool --completion-script-bash` and
|
||||||
|
`./yourtool --completion-script-zsh` will generate these scripts for you.
|
||||||
|
|
||||||
|
**Installation by Package**
|
||||||
|
|
||||||
|
For the best user experience, you should bundle your pre-created
|
||||||
|
completion script with your CLI tool and install it inside
|
||||||
|
`/etc/bash_completion.d` (or equivalent). A good suggestion is to add
|
||||||
|
this as an automated step to your build pipeline, in the implementation
|
||||||
|
is improved for bug fixed.
|
||||||
|
|
||||||
|
**Installation by `bash_profile`**
|
||||||
|
|
||||||
|
Alternatively, instruct your users to add an additional statement to
|
||||||
|
their `bash_profile` (or equivalent):
|
||||||
|
|
||||||
|
```
|
||||||
|
eval "$(your-cli-tool --completion-script-bash)"
|
||||||
|
```
|
||||||
|
|
||||||
|
Or for ZSH
|
||||||
|
|
||||||
|
```
|
||||||
|
eval "$(your-cli-tool --completion-script-zsh)"
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Additional API
|
||||||
|
To provide more flexibility, a completion option API has been
|
||||||
|
exposed for flags to allow user defined completion options, to extend
|
||||||
|
completions further than just EnumVar/Enum.
|
||||||
|
|
||||||
|
|
||||||
|
**Provide Static Options**
|
||||||
|
|
||||||
|
When using an `Enum` or `EnumVar`, users are limited to only the options
|
||||||
|
given. Maybe we wish to hint possible options to the user, but also
|
||||||
|
allow them to provide their own custom option. `HintOptions` gives
|
||||||
|
this functionality to flags.
|
||||||
|
|
||||||
|
```
|
||||||
|
app := kingpin.New("completion", "My application with bash completion.")
|
||||||
|
app.Flag("port", "Provide a port to connect to").
|
||||||
|
Required().
|
||||||
|
HintOptions("80", "443", "8080").
|
||||||
|
IntVar(&c.port)
|
||||||
|
```
|
||||||
|
|
||||||
|
**Provide Dynamic Options**
|
||||||
|
Consider the case that you needed to read a local database or a file to
|
||||||
|
provide suggestions. You can dynamically generate the options
|
||||||
|
|
||||||
|
```
|
||||||
|
func listHosts() []string {
|
||||||
|
// Provide a dynamic list of hosts from a hosts file or otherwise
|
||||||
|
// for bash completion. In this example we simply return static slice.
|
||||||
|
|
||||||
|
// You could use this functionality to reach into a hosts file to provide
|
||||||
|
// completion for a list of known hosts.
|
||||||
|
return []string{"sshhost.example", "webhost.example", "ftphost.example"}
|
||||||
|
}
|
||||||
|
|
||||||
|
app := kingpin.New("completion", "My application with bash completion.")
|
||||||
|
app.Flag("flag-1", "").HintAction(listHosts).String()
|
||||||
|
```
|
||||||
|
|
||||||
|
**EnumVar/Enum**
|
||||||
|
When using `Enum` or `EnumVar`, any provided options will be automatically
|
||||||
|
used for bash autocompletion. However, if you wish to provide a subset or
|
||||||
|
different options, you can use `HintOptions` or `HintAction` which will override
|
||||||
|
the default completion options for `Enum`/`EnumVar`.
|
||||||
|
|
||||||
|
|
||||||
|
**Examples**
|
||||||
|
You can see an in depth example of the completion API within
|
||||||
|
`examples/completion/main.go`
|
||||||
|
|
||||||
|
|
||||||
|
### Supporting -h for help
|
||||||
|
|
||||||
|
`kingpin.CommandLine.HelpFlag.Short('h')`
|
||||||
|
|
||||||
|
### Custom help
|
||||||
|
|
||||||
|
Kingpin v2 supports templatised help using the text/template library (actually, [a fork](https://github.com/alecthomas/template)).
|
||||||
|
|
||||||
|
You can specify the template to use with the [Application.UsageTemplate()](http://godoc.org/gopkg.in/alecthomas/kingpin.v2#Application.UsageTemplate) function.
|
||||||
|
|
||||||
|
There are four included templates: `kingpin.DefaultUsageTemplate` is the default,
|
||||||
|
`kingpin.CompactUsageTemplate` provides a more compact representation for more complex command-line structures,
|
||||||
|
`kingpin.SeparateOptionalFlagsUsageTemplate` looks like the default template, but splits required
|
||||||
|
and optional command flags into separate lists, and `kingpin.ManPageTemplate` is used to generate man pages.
|
||||||
|
|
||||||
|
See the above templates for examples of usage, and the the function [UsageForContextWithTemplate()](https://github.com/alecthomas/kingpin/blob/master/usage.go#L198) method for details on the context.
|
||||||
|
|
||||||
|
#### Default help template
|
||||||
|
|
||||||
|
```
|
||||||
|
$ go run ./examples/curl/curl.go --help
|
||||||
|
usage: curl [<flags>] <command> [<args> ...]
|
||||||
|
|
||||||
|
An example implementation of curl.
|
||||||
|
|
||||||
|
Flags:
|
||||||
|
--help Show help.
|
||||||
|
-t, --timeout=5s Set connection timeout.
|
||||||
|
-H, --headers=HEADER=VALUE
|
||||||
|
Add HTTP headers to the request.
|
||||||
|
|
||||||
|
Commands:
|
||||||
|
help [<command>...]
|
||||||
|
Show help.
|
||||||
|
|
||||||
|
get url <url>
|
||||||
|
Retrieve a URL.
|
||||||
|
|
||||||
|
get file <file>
|
||||||
|
Retrieve a file.
|
||||||
|
|
||||||
|
post [<flags>] <url>
|
||||||
|
POST a resource.
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Compact help template
|
||||||
|
|
||||||
|
```
|
||||||
|
$ go run ./examples/curl/curl.go --help
|
||||||
|
usage: curl [<flags>] <command> [<args> ...]
|
||||||
|
|
||||||
|
An example implementation of curl.
|
||||||
|
|
||||||
|
Flags:
|
||||||
|
--help Show help.
|
||||||
|
-t, --timeout=5s Set connection timeout.
|
||||||
|
-H, --headers=HEADER=VALUE
|
||||||
|
Add HTTP headers to the request.
|
||||||
|
|
||||||
|
Commands:
|
||||||
|
help [<command>...]
|
||||||
|
get [<flags>]
|
||||||
|
url <url>
|
||||||
|
file <file>
|
||||||
|
post [<flags>] <url>
|
||||||
|
```
|
||||||
25
vendor/gopkg.in/alecthomas/kingpin.v2/values.json
generated
vendored
Normal file
25
vendor/gopkg.in/alecthomas/kingpin.v2/values.json
generated
vendored
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
[
|
||||||
|
{"type": "bool", "parser": "strconv.ParseBool(s)"},
|
||||||
|
{"type": "string", "parser": "s, error(nil)", "format": "string(*f.v)", "plural": "Strings"},
|
||||||
|
{"type": "uint", "parser": "strconv.ParseUint(s, 0, 64)", "plural": "Uints"},
|
||||||
|
{"type": "uint8", "parser": "strconv.ParseUint(s, 0, 8)"},
|
||||||
|
{"type": "uint16", "parser": "strconv.ParseUint(s, 0, 16)"},
|
||||||
|
{"type": "uint32", "parser": "strconv.ParseUint(s, 0, 32)"},
|
||||||
|
{"type": "uint64", "parser": "strconv.ParseUint(s, 0, 64)"},
|
||||||
|
{"type": "int", "parser": "strconv.ParseFloat(s, 64)", "plural": "Ints"},
|
||||||
|
{"type": "int8", "parser": "strconv.ParseInt(s, 0, 8)"},
|
||||||
|
{"type": "int16", "parser": "strconv.ParseInt(s, 0, 16)"},
|
||||||
|
{"type": "int32", "parser": "strconv.ParseInt(s, 0, 32)"},
|
||||||
|
{"type": "int64", "parser": "strconv.ParseInt(s, 0, 64)"},
|
||||||
|
{"type": "float64", "parser": "strconv.ParseFloat(s, 64)"},
|
||||||
|
{"type": "float32", "parser": "strconv.ParseFloat(s, 32)"},
|
||||||
|
{"name": "Duration", "type": "time.Duration", "no_value_parser": true},
|
||||||
|
{"name": "IP", "type": "net.IP", "no_value_parser": true},
|
||||||
|
{"name": "TCPAddr", "Type": "*net.TCPAddr", "plural": "TCPList", "no_value_parser": true},
|
||||||
|
{"name": "ExistingFile", "Type": "string", "plural": "ExistingFiles", "no_value_parser": true},
|
||||||
|
{"name": "ExistingDir", "Type": "string", "plural": "ExistingDirs", "no_value_parser": true},
|
||||||
|
{"name": "ExistingFileOrDir", "Type": "string", "plural": "ExistingFilesOrDirs", "no_value_parser": true},
|
||||||
|
{"name": "Regexp", "Type": "*regexp.Regexp", "parser": "regexp.Compile(s)"},
|
||||||
|
{"name": "ResolvedIP", "Type": "net.IP", "parser": "resolveHost(s)", "help": "Resolve a hostname or IP to an IP."},
|
||||||
|
{"name": "HexBytes", "Type": "[]byte", "parser": "hex.DecodeString(s)", "help": "Bytes as a hex string."}
|
||||||
|
]
|
||||||
17
vendor/modules.txt
vendored
Normal file
17
vendor/modules.txt
vendored
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
# github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc
|
||||||
|
github.com/alecthomas/template
|
||||||
|
github.com/alecthomas/template/parse
|
||||||
|
# github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf
|
||||||
|
github.com/alecthomas/units
|
||||||
|
# github.com/fatih/color v1.7.0
|
||||||
|
github.com/fatih/color
|
||||||
|
# github.com/mattn/go-colorable v0.0.9
|
||||||
|
github.com/mattn/go-colorable
|
||||||
|
# github.com/mattn/go-isatty v0.0.6
|
||||||
|
github.com/mattn/go-isatty
|
||||||
|
# github.com/pkg/errors v0.8.0
|
||||||
|
github.com/pkg/errors
|
||||||
|
# golang.org/x/sys v0.0.0-20190310054646-10058d7d4faa
|
||||||
|
golang.org/x/sys/unix
|
||||||
|
# gopkg.in/alecthomas/kingpin.v2 v2.2.6
|
||||||
|
gopkg.in/alecthomas/kingpin.v2
|
||||||
Loading…
Add table
Add a link
Reference in a new issue