Bugs: https://bugs.gentoo.org/875602 Taken from: https://github.com/mitchellh/gox/compare/v1.0.1...master#diff-8cf5108e51f76a4e330f413081b626cf56afd8a75dccbb8b5c679c9ba2dcd7feR153 Upstream status: master branch already support riscv https://github.com/mitchellh/gox/blob/master/platform.go#L153 , but didn't make a new release. From a76c2b89f74aaad92c3e7de5f98b58e4313674ef Mon Sep 17 00:00:00 2001 From: Christopher Swenson Date: Thu, 30 Jun 2022 12:44:14 -0700 Subject: [PATCH] Add GitHub actions; remove vendor and TravisCI config Notes: This patch only use on riscv platform, when upstream make a new release(include riscv support) this patch can remove. --- a/go.go 2019-04-10 23:02:03.000000000 +0800 +++ b/go.go 2022-10-06 16:54:17.000000000 +0800 @@ -32,6 +32,7 @@ type CompileOpts struct { Cgo bool Rebuild bool GoCmd string + Race bool } // GoCrossCompile @@ -111,6 +112,9 @@ func GoCrossCompile(opts *CompileOpts) e if opts.ModMode != "" { args = append(args, "-mod", opts.ModMode) } + if opts.Race { + args = append(args, "-race") + } args = append(args, "-gcflags", opts.Gcflags, "-ldflags", opts.Ldflags, --- a/go.mod 2019-04-10 23:02:03.000000000 +0800 +++ b/go.mod 2022-10-06 16:54:17.000000000 +0800 @@ -1,5 +1,7 @@ module github.com/mitchellh/gox +go 1.17 + require ( github.com/hashicorp/go-version v1.0.0 github.com/mitchellh/iochan v1.0.0 --- a/go.sum 2019-04-10 23:02:03.000000000 +0800 +++ b/go.sum 2022-10-06 16:54:17.000000000 +0800 @@ -1,6 +1,4 @@ github.com/hashicorp/go-version v1.0.0 h1:21MVWPKDphxa7ineQQTrCU5brh7OuVVAzGOCnnCPtE8= github.com/hashicorp/go-version v1.0.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/mitchellh/iochan v0.0.0-20150529224432-87b45ffd0e95 h1:aHWVygBsLb+Kls/35B3tevL1hvDxZ0UklPA0BmhqTEk= -github.com/mitchellh/iochan v0.0.0-20150529224432-87b45ffd0e95/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/iochan v1.0.0 h1:C+X3KsSTLFVBr/tK1eYN/vs4rJcvsiLU338UhYPJWeY= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= --- a/go_test.go 2019-04-10 23:02:03.000000000 +0800 +++ b/go_test.go 2022-10-06 16:54:17.000000000 +0800 @@ -12,13 +12,26 @@ func TestGoVersion(t *testing.T) { } acceptable := []string{ - "devel", "go1.0", "go1.1", "go1.2", "go1.3", - "go1.4", "go1.4.1", "go1.4.2", "go1.4.3", - "go1.5", "go1.5.1", "go1.5.2", "go1.5.3", "go1.5.4", - "go1.6", "go1.6.1", "go1.6.2", "go1.6.3", "go1.6.4", - "go1.7", "go1.7.1", "go1.7.2", "go1.7.3", "go1.7.4", "go1.7.5", "go1.7.6", - "go1.8", "go1.8.1", "go1.8.2", "go1.8.3", "go1.8.4", - "go1.9", "go1.9.1", "go1.9.2", + "devel", + "go1.0", + "go1.1", + "go1.2", + "go1.3", + "go1.4", + "go1.5", + "go1.6", + "go1.7", + "go1.8", + "go1.9", + "go1.10", + "go1.11", + "go1.12", + "go1.13", + "go1.14", + "go1.15", + "go1.16", + "go1.17", + "go1.18", } found := false for _, expected := range acceptable { --- a/main.go 2019-04-10 23:02:03.000000000 +0800 +++ b/main.go 2022-10-06 16:54:17.000000000 +0800 @@ -27,7 +27,7 @@ func realMain() int { var tags string var verbose bool var flagGcflags, flagAsmflags string - var flagCgo, flagRebuild, flagListOSArch bool + var flagCgo, flagRebuild, flagListOSArch, flagRaceFlag bool var flagGoCmd string var modMode string flags := flag.NewFlagSet("gox", flag.ExitOnError) @@ -44,6 +44,7 @@ func realMain() int { flags.BoolVar(&flagCgo, "cgo", false, "") flags.BoolVar(&flagRebuild, "rebuild", false, "") flags.BoolVar(&flagListOSArch, "osarch-list", false, "") + flags.BoolVar(&flagRaceFlag, "race", false, "") flags.StringVar(&flagGcflags, "gcflags", "", "") flags.StringVar(&flagAsmflags, "asmflags", "", "") flags.StringVar(&flagGoCmd, "gocmd", "go", "") @@ -162,6 +163,7 @@ func realMain() int { Cgo: flagCgo, Rebuild: flagRebuild, GoCmd: flagGoCmd, + Race: flagRaceFlag, } // Determine if we have specific CFLAGS or LDFLAGS for this @@ -219,6 +221,7 @@ Options: -osarch-list List supported os/arch pairs for your Go version -output="foo" Output path template. See below for more info -parallel=-1 Amount of parallelism, defaults to number of CPUs + -race Build with the go race detector enabled, requires CGO -gocmd="go" Build command, defaults to Go -rebuild Force rebuilding of package that were up to date -verbose Verbose mode --- a/platform.go 2019-04-10 23:02:03.000000000 +0800 +++ b/platform.go 2022-10-06 16:54:17.000000000 +0800 @@ -25,6 +25,36 @@ func (p *Platform) String() string { return fmt.Sprintf("%s/%s", p.OS, p.Arch) } +// addDrop appends all of the "add" entries and drops the "drop" entries, ignoring +// the "Default" parameter. +func addDrop(base []Platform, add []Platform, drop []Platform) []Platform { + newPlatforms := make([]Platform, len(base)+len(add)) + copy(newPlatforms, base) + copy(newPlatforms[len(base):], add) + + // slow, but we only do this during initialization at most once per version + for _, platform := range drop { + found := -1 + for i := range newPlatforms { + if newPlatforms[i].Arch == platform.Arch && newPlatforms[i].OS == platform.OS { + found = i + break + } + } + if found < 0 { + panic(fmt.Sprintf("Expected to remove %+v but not found in list %+v", platform, newPlatforms)) + } + if found == len(newPlatforms)-1 { + newPlatforms = newPlatforms[:found] + } else if found == 0 { + newPlatforms = newPlatforms[found:] + } else { + newPlatforms = append(newPlatforms[:found], newPlatforms[found+1:]...) + } + } + return newPlatforms +} + var ( Platforms_1_0 = []Platform{ {"darwin", "386", true}, @@ -40,64 +70,115 @@ var ( {"windows", "amd64", true}, } - Platforms_1_1 = append(Platforms_1_0, []Platform{ + Platforms_1_1 = addDrop(Platforms_1_0, []Platform{ {"freebsd", "arm", true}, {"netbsd", "386", true}, {"netbsd", "amd64", true}, {"netbsd", "arm", true}, {"plan9", "386", false}, - }...) + }, nil) - Platforms_1_3 = append(Platforms_1_1, []Platform{ + Platforms_1_3 = addDrop(Platforms_1_1, []Platform{ {"dragonfly", "386", false}, {"dragonfly", "amd64", false}, {"nacl", "amd64", false}, {"nacl", "amd64p32", false}, {"nacl", "arm", false}, {"solaris", "amd64", false}, - }...) + }, nil) - Platforms_1_4 = append(Platforms_1_3, []Platform{ + Platforms_1_4 = addDrop(Platforms_1_3, []Platform{ {"android", "arm", false}, {"plan9", "amd64", false}, - }...) + }, nil) - Platforms_1_5 = append(Platforms_1_4, []Platform{ + Platforms_1_5 = addDrop(Platforms_1_4, []Platform{ {"darwin", "arm", false}, {"darwin", "arm64", false}, {"linux", "arm64", false}, {"linux", "ppc64", false}, {"linux", "ppc64le", false}, - }...) + }, nil) - Platforms_1_6 = append(Platforms_1_5, []Platform{ + Platforms_1_6 = addDrop(Platforms_1_5, []Platform{ {"android", "386", false}, + {"android", "amd64", false}, {"linux", "mips64", false}, {"linux", "mips64le", false}, - }...) + {"nacl", "386", false}, + {"openbsd", "arm", true}, + }, nil) - Platforms_1_7 = append(Platforms_1_5, []Platform{ + Platforms_1_7 = addDrop(Platforms_1_5, []Platform{ // While not fully supported s390x is generally useful {"linux", "s390x", true}, {"plan9", "arm", false}, // Add the 1.6 Platforms, but reflect full support for mips64 and mips64le {"android", "386", false}, + {"android", "amd64", false}, {"linux", "mips64", true}, {"linux", "mips64le", true}, - }...) + {"nacl", "386", false}, + {"openbsd", "arm", true}, + }, nil) - Platforms_1_8 = append(Platforms_1_7, []Platform{ + Platforms_1_8 = addDrop(Platforms_1_7, []Platform{ {"linux", "mips", true}, {"linux", "mipsle", true}, - }...) + }, nil) // no new platforms in 1.9 Platforms_1_9 = Platforms_1_8 - // no new platforms in 1.10 - Platforms_1_10 = Platforms_1_9 + // unannounced, but dropped support for android/amd64 + Platforms_1_10 = addDrop(Platforms_1_9, nil, []Platform{{"android", "amd64", false}}) + + Platforms_1_11 = addDrop(Platforms_1_10, []Platform{ + {"js", "wasm", true}, + }, nil) + + Platforms_1_12 = addDrop(Platforms_1_11, []Platform{ + {"aix", "ppc64", false}, + {"windows", "arm", true}, + }, nil) + + Platforms_1_13 = addDrop(Platforms_1_12, []Platform{ + {"illumos", "amd64", false}, + {"netbsd", "arm64", true}, + {"openbsd", "arm64", true}, + }, nil) + + Platforms_1_14 = addDrop(Platforms_1_13, []Platform{ + {"freebsd", "arm64", true}, + {"linux", "riscv64", true}, + }, []Platform{ + // drop nacl + {"nacl", "386", false}, + {"nacl", "amd64", false}, + {"nacl", "arm", false}, + }) + + Platforms_1_15 = addDrop(Platforms_1_14, []Platform{ + {"android", "arm64", false}, + }, []Platform{ + // drop i386 macos + {"darwin", "386", false}, + }) + + Platforms_1_16 = addDrop(Platforms_1_15, []Platform{ + {"android", "amd64", false}, + {"darwin", "arm64", true}, + {"openbsd", "mips64", false}, + }, nil) + + Platforms_1_17 = addDrop(Platforms_1_16, []Platform{ + {"windows", "arm64", true}, + }, nil) + + // no new platforms in 1.18 + Platforms_1_18 = Platforms_1_17 - PlatformsLatest = Platforms_1_10 + PlatformsLatest = Platforms_1_18 ) // SupportedPlatforms returns the full list of supported platforms for @@ -131,7 +212,15 @@ func SupportedPlatforms(v string) []Plat {">= 1.7, < 1.8", Platforms_1_7}, {">= 1.8, < 1.9", Platforms_1_8}, {">= 1.9, < 1.10", Platforms_1_9}, - {">=1.10, < 1.11", Platforms_1_10}, + {">= 1.10, < 1.11", Platforms_1_10}, + {">= 1.11, < 1.12", Platforms_1_11}, + {">= 1.12, < 1.13", Platforms_1_12}, + {">= 1.13, < 1.14", Platforms_1_13}, + {">= 1.14, < 1.15", Platforms_1_14}, + {">= 1.15, < 1.16", Platforms_1_15}, + {">= 1.16, < 1.17", Platforms_1_16}, + {">= 1.17, < 1.18", Platforms_1_17}, + {">= 1.18, < 1.19", Platforms_1_18}, } for _, p := range platforms { @@ -145,5 +234,5 @@ func SupportedPlatforms(v string) []Plat } // Assume latest - return Platforms_1_9 + return PlatformsLatest } --- a/platform_test.go 2019-04-10 23:02:03.000000000 +0800 +++ b/platform_test.go 2022-10-06 16:54:17.000000000 +0800 @@ -63,6 +63,55 @@ func TestSupportedPlatforms(t *testing.T t.Fatalf("bad: %#v", ps) } + ps = SupportedPlatforms("go1.10") + if !reflect.DeepEqual(ps, Platforms_1_10) { + t.Fatalf("bad: %#v", ps) + } + + ps = SupportedPlatforms("go1.11") + if !reflect.DeepEqual(ps, Platforms_1_11) { + t.Fatalf("bad: %#v", ps) + } + + ps = SupportedPlatforms("go1.12") + if !reflect.DeepEqual(ps, Platforms_1_12) { + t.Fatalf("bad: %#v", ps) + } + + ps = SupportedPlatforms("go1.13") + if !reflect.DeepEqual(ps, Platforms_1_13) { + t.Fatalf("bad: %#v", ps) + } + + ps = SupportedPlatforms("go1.14") + if !reflect.DeepEqual(ps, Platforms_1_14) { + t.Fatalf("bad: %#v", ps) + } + + ps = SupportedPlatforms("go1.15") + if !reflect.DeepEqual(ps, Platforms_1_15) { + t.Fatalf("bad: %#v", ps) + } + + ps = SupportedPlatforms("go1.16") + if !reflect.DeepEqual(ps, Platforms_1_16) { + t.Fatalf("bad: %#v", ps) + } + + ps = SupportedPlatforms("go1.17") + if !reflect.DeepEqual(ps, Platforms_1_17) { + t.Fatalf("bad: %#v", ps) + } + + ps = SupportedPlatforms("go1.18") + if !reflect.DeepEqual(ps, Platforms_1_18) { + t.Fatalf("bad: %#v", ps) + } + + ps = SupportedPlatforms("go1.10") + if !reflect.DeepEqual(ps, Platforms_1_10) { + t.Fatalf("bad: %#v", ps) + } // Unknown ps = SupportedPlatforms("foo") if !reflect.DeepEqual(ps, PlatformsLatest) { @@ -72,17 +121,30 @@ func TestSupportedPlatforms(t *testing.T func TestMIPS(t *testing.T) { g16 := SupportedPlatforms("go1.6") + found := false for _, p := range g16 { - if p.Arch == "mips64" && p.Default { - t.Fatal("mips64 should not be default for 1.6") + if p.OS == "linux" && p.Arch == "mips64" && !p.Default { + found = true + } + if p.OS == "linux" && p.Arch == "mips64" && p.Default { + t.Fatalf("mips64 should not be default for 1.6, but got %+v, %+v", p, g16) } } + if !found { + t.Fatal("Expected to find linux/mips64/false in go1.6 supported platforms") + } + found = false g17 := SupportedPlatforms("go1.7") for _, p := range g17 { - if p.Arch == "mips64" && !p.Default { + if p.OS == "linux" && p.Arch == "mips64" && p.Default { + found = true + } + if p.OS == "linux" && p.Arch == "mips64" && !p.Default { t.Fatal("mips64 should be default for 1.7") } } - + if !found { + t.Fatal("Expected to find linux/mips64/true in go1.7 supported platforms") + } } --- a/vendor/github.com/hashicorp/go-version/constraint.go 2019-04-10 23:02:03.000000000 +0800 +++ b/vendor/github.com/hashicorp/go-version/constraint.go 2022-10-06 17:13:18.000000000 +0800 @@ -2,6 +2,7 @@ package version import ( "fmt" + "reflect" "regexp" "strings" ) @@ -113,6 +114,26 @@ func parseSingle(v string) (*Constraint, }, nil } +func prereleaseCheck(v, c *Version) bool { + switch vPre, cPre := v.Prerelease() != "", c.Prerelease() != ""; { + case cPre && vPre: + // A constraint with a pre-release can only match a pre-release version + // with the same base segments. + return reflect.DeepEqual(c.Segments64(), v.Segments64()) + + case !cPre && vPre: + // A constraint without a pre-release can only match a version without a + // pre-release. + return false + + case cPre && !vPre: + // OK, except with the pessimistic operator + case !cPre && !vPre: + // OK + } + return true +} + //------------------------------------------------------------------- // Constraint functions //------------------------------------------------------------------- @@ -126,22 +147,27 @@ func constraintNotEqual(v, c *Version) b } func constraintGreaterThan(v, c *Version) bool { - return v.Compare(c) == 1 + return prereleaseCheck(v, c) && v.Compare(c) == 1 } func constraintLessThan(v, c *Version) bool { - return v.Compare(c) == -1 + return prereleaseCheck(v, c) && v.Compare(c) == -1 } func constraintGreaterThanEqual(v, c *Version) bool { - return v.Compare(c) >= 0 + return prereleaseCheck(v, c) && v.Compare(c) >= 0 } func constraintLessThanEqual(v, c *Version) bool { - return v.Compare(c) <= 0 + return prereleaseCheck(v, c) && v.Compare(c) <= 0 } func constraintPessimistic(v, c *Version) bool { + // Using a pessimistic constraint with a pre-release, restricts versions to pre-releases + if !prereleaseCheck(v, c) || (c.Prerelease() != "" && v.Prerelease() == "") { + return false + } + // If the version being checked is naturally less than the constraint, then there // is no way for the version to be valid against the constraint if v.LessThan(c) { --- a/vendor/github.com/hashicorp/go-version/version.go 2019-04-10 23:02:03.000000000 +0800 +++ b/vendor/github.com/hashicorp/go-version/version.go 2022-10-06 17:13:18.000000000 +0800 @@ -15,7 +15,7 @@ var versionRegexp *regexp.Regexp // The raw regular expression string used for testing the validity // of a version. const VersionRegexpRaw string = `v?([0-9]+(\.[0-9]+)*?)` + - `(-?([0-9A-Za-z\-~]+(\.[0-9A-Za-z\-~]+)*))?` + + `(-([0-9]+[0-9A-Za-z\-~]*(\.[0-9A-Za-z\-~]+)*)|(-?([A-Za-z\-~]+[0-9A-Za-z\-~]*(\.[0-9A-Za-z\-~]+)*)))?` + `(\+([0-9A-Za-z\-~]+(\.[0-9A-Za-z\-~]+)*))?` + `?` @@ -25,6 +25,7 @@ type Version struct { pre string segments []int64 si int + original string } func init() { @@ -59,11 +60,17 @@ func NewVersion(v string) (*Version, err segments = append(segments, 0) } + pre := matches[7] + if pre == "" { + pre = matches[4] + } + return &Version{ - metadata: matches[7], - pre: matches[4], + metadata: matches[10], + pre: pre, segments: segments, si: si, + original: v, }, nil } @@ -301,11 +308,19 @@ func (v *Version) Segments() []int { // for a version "1.2.3-beta", segments will return a slice of // 1, 2, 3. func (v *Version) Segments64() []int64 { - return v.segments + result := make([]int64, len(v.segments)) + copy(result, v.segments) + return result } // String returns the full version string included pre-release // and metadata information. +// +// This value is rebuilt according to the parsed segments and other +// information. Therefore, ambiguities in the version string such as +// prefixed zeroes (1.04.0 => 1.4.0), `v` prefix (v1.0.0 => 1.0.0), and +// missing parts (1.0 => 1.0.0) will be made into a canonicalized form +// as shown in the parenthesized examples. func (v *Version) String() string { var buf bytes.Buffer fmtParts := make([]string, len(v.segments)) @@ -324,3 +339,9 @@ func (v *Version) String() string { return buf.String() } + +// Original returns the original parsed version as-is, including any +// potential whitespace, `v` prefix, etc. +func (v *Version) Original() string { + return v.original +} --- a/vendor/modules.txt 1970-01-01 08:00:00.000000000 +0800 +++ b/vendor/modules.txt 2022-10-06 17:13:18.000000000 +0800 @@ -0,0 +1,6 @@ +# github.com/hashicorp/go-version v1.0.0 +## explicit +github.com/hashicorp/go-version +# github.com/mitchellh/iochan v1.0.0 +## explicit +github.com/mitchellh/iochan