From 5af625af70fed546f66fa5e23e66ff36d05b6cd4 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Mon, 16 Jan 2023 11:21:20 -0700 Subject: [PATCH] Properly lookup for ldflags inside GOFLAGS. --- cmd/fyne/internal/commands/build.go | 43 +++++++++++++++++------- cmd/fyne/internal/commands/build_test.go | 21 ++++++++++++ 2 files changed, 51 insertions(+), 13 deletions(-) diff --git a/cmd/fyne/internal/commands/build.go b/cmd/fyne/internal/commands/build.go index b44c93603e..bf2df572ef 100644 --- a/cmd/fyne/internal/commands/build.go +++ b/cmd/fyne/internal/commands/build.go @@ -229,22 +229,27 @@ func (b *Builder) build() error { env = append(env, "CGO_ENABLED=1") // in case someone is trying to cross-compile... if b.release { - appendEnv(&env, "GOFLAGS", "-s -w") + b.ldFlags += " -s -w" args = append(args, "-trimpath") } if goos == "windows" { - appendEnv(&env, "GOFLAGS", "-H=windowsgui") + b.ldFlags += " -H=windowsgui" } } - if b.ldFlags != "" { - appendEnv(&env, "GOFLAGS", b.ldFlags) + goFlags := os.Getenv("GOFLAGS") + goLdFlags, goFlags := extractLdFlags(goFlags) + if goLdFlags != "" { + b.ldFlags += " " + goLdFlags + } + if goFlags != "" { + os.Setenv("GOFLAGS", goFlags) } - ldFlags := getEnv(env, "GOFLAGS") - if len(ldFlags) > 0 { - args = append(args, "-ldflags", ldFlags) + if len(b.ldFlags) > 0 { + b.ldFlags = strings.TrimSpace(b.ldFlags) + args = append(args, "-ldflags", b.ldFlags) } if b.target != "" { @@ -372,13 +377,25 @@ func appendEnv(env *[]string, varName, value string) { *env = append(*env, varName+"="+value) } -func getEnv(env []string, varName string) string { - for _, e := range env { - keyValue := strings.SplitN(e, "=", 2) +func extractLdFlags(goFlags string) (string, string) { + if goFlags == "" { + return "", "" + } + + flags := strings.Fields(goFlags) + ldflags := "" + newGoFlags := "" - if keyValue[0] == "GOFLAGS" { - return keyValue[1] + for _, flag := range flags { + if strings.HasPrefix(flag, "-ldflags=") { + ldflags += strings.TrimPrefix(flag, "-ldflags=") + " " + } else { + newGoFlags += flag + " " } } - return "" + + ldflags = strings.TrimSpace(ldflags) + newGoFlags = strings.TrimSpace(newGoFlags) + + return ldflags, newGoFlags } diff --git a/cmd/fyne/internal/commands/build_test.go b/cmd/fyne/internal/commands/build_test.go index 07feab1be6..3335b7341f 100644 --- a/cmd/fyne/internal/commands/build_test.go +++ b/cmd/fyne/internal/commands/build_test.go @@ -281,3 +281,24 @@ func Test_AppendEnv(t *testing.T) { assert.Equal(t, "foo2=baz2", env[3]) } } + +type extractTest struct { + value string + wantLdFlags string + wantGoFlags string +} + +func Test_ExtractLdFlags(t *testing.T) { + goFlagsTests := []extractTest{ + {"-ldflags=-w", "-w", ""}, + {"-ldflags=-s", "-s", ""}, + {"-ldflags=-w -ldflags=-s", "-w -s", ""}, + {"-mod=vendor", "", "-mod=vendor"}, + } + + for _, test := range goFlagsTests { + ldFlags, goFlags := extractLdFlags(test.value) + assert.Equal(t, test.wantLdFlags, ldFlags) + assert.Equal(t, test.wantGoFlags, goFlags) + } +}