mirror of
https://github.com/golang/go
synced 2024-11-19 16:04:48 -07:00
cmd/go: ensure pkgsFilter is run before build
Return an error when a user passes -o and -buildmode=exe to build a package without a main. Fixes #20017. Change-Id: I07d49c75e7088a96f00afe18c9faa842c5d71afb Reviewed-on: https://go-review.googlesource.com/49371 Run-TryBot: Russ Cox <rsc@golang.org> Reviewed-by: Russ Cox <rsc@golang.org>
This commit is contained in:
parent
d85a3535fe
commit
0c14345c96
@ -2045,6 +2045,16 @@ func TestGoTestMutexprofileDashOControlsBinaryLocation(t *testing.T) {
|
|||||||
tg.wantExecutable("myerrors.test"+exeSuffix, "go test -mutexprofile -o myerrors.test did not create myerrors.test")
|
tg.wantExecutable("myerrors.test"+exeSuffix, "go test -mutexprofile -o myerrors.test did not create myerrors.test")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGoBuildNonMain(t *testing.T) {
|
||||||
|
tg := testgo(t)
|
||||||
|
defer tg.cleanup()
|
||||||
|
// TODO: tg.parallel()
|
||||||
|
tg.setenv("GOPATH", filepath.Join(tg.pwd(), "testdata"))
|
||||||
|
tg.runFail("build", "-buildmode=exe", "-o", "not_main"+exeSuffix, "not_main")
|
||||||
|
tg.grepStderr("-buildmode=exe requires exactly one main package", "go build with -o and -buildmode=exe should on a non-main package should throw an error")
|
||||||
|
tg.mustNotExist("not_main" + exeSuffix)
|
||||||
|
}
|
||||||
|
|
||||||
func TestGoTestDashCDashOControlsBinaryLocation(t *testing.T) {
|
func TestGoTestDashCDashOControlsBinaryLocation(t *testing.T) {
|
||||||
tg := testgo(t)
|
tg := testgo(t)
|
||||||
defer tg.cleanup()
|
defer tg.cleanup()
|
||||||
|
@ -310,6 +310,8 @@ func runBuild(cmd *base.Command, args []string) {
|
|||||||
depMode = ModeInstall
|
depMode = ModeInstall
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pkgs = pkgsFilter(load.Packages(args))
|
||||||
|
|
||||||
if cfg.BuildO != "" {
|
if cfg.BuildO != "" {
|
||||||
if len(pkgs) > 1 {
|
if len(pkgs) > 1 {
|
||||||
base.Fatalf("go build: cannot use -o with multiple packages")
|
base.Fatalf("go build: cannot use -o with multiple packages")
|
||||||
@ -325,8 +327,6 @@ func runBuild(cmd *base.Command, args []string) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
pkgs = pkgsFilter(load.Packages(args))
|
|
||||||
|
|
||||||
a := &Action{Mode: "go build"}
|
a := &Action{Mode: "go build"}
|
||||||
for _, p := range pkgs {
|
for _, p := range pkgs {
|
||||||
a.Deps = append(a.Deps, b.AutoAction(ModeBuild, depMode, p))
|
a.Deps = append(a.Deps, b.AutoAction(ModeBuild, depMode, p))
|
||||||
|
@ -123,6 +123,12 @@ func buildModeInit() {
|
|||||||
case "exe":
|
case "exe":
|
||||||
pkgsFilter = pkgsMain
|
pkgsFilter = pkgsMain
|
||||||
ldBuildmode = "exe"
|
ldBuildmode = "exe"
|
||||||
|
// Set the pkgsFilter to oneMainPkg if the user passed a specific binary output
|
||||||
|
// and is using buildmode=exe for a better error message.
|
||||||
|
// See issue #20017.
|
||||||
|
if cfg.BuildO != "" {
|
||||||
|
pkgsFilter = oneMainPkg
|
||||||
|
}
|
||||||
case "pie":
|
case "pie":
|
||||||
if cfg.BuildRace {
|
if cfg.BuildRace {
|
||||||
base.Fatalf("-buildmode=pie not supported when -race is enabled")
|
base.Fatalf("-buildmode=pie not supported when -race is enabled")
|
||||||
|
3
src/cmd/go/testdata/src/not_main/not_main.go
vendored
Normal file
3
src/cmd/go/testdata/src/not_main/not_main.go
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
package not_main
|
||||||
|
|
||||||
|
func F() {}
|
Loading…
Reference in New Issue
Block a user