mirror of
https://github.com/taigrr/wails.git
synced 2026-04-02 05:08:54 -07:00
Support upserting environment variables
This commit is contained in:
@@ -223,9 +223,6 @@ func (b *BaseBuilder) CompileProject(options *Options) error {
|
||||
// Set the directory
|
||||
cmd.Dir = b.projectData.Path
|
||||
|
||||
// Set GO111MODULE environment variable
|
||||
cmd.Env = append(os.Environ(), "GO111MODULE=on")
|
||||
|
||||
// Add CGO flags
|
||||
// We use the project/build dir as a temporary place for our generated c headers
|
||||
buildBaseDir, err := fs.RelativeToCwd("build")
|
||||
@@ -233,7 +230,16 @@ func (b *BaseBuilder) CompileProject(options *Options) error {
|
||||
return err
|
||||
}
|
||||
|
||||
cmd.Env = append(os.Environ(), fmt.Sprintf("CGO_CFLAGS=-I%s", buildBaseDir))
|
||||
cmd.Env = os.Environ() // inherit env
|
||||
|
||||
// Use upsertEnv so we don't overwrite user's CGO_CFLAGS
|
||||
cmd.Env = upsertEnv(cmd.Env, "CGO_CFLAGS", func(v string) string {
|
||||
if v != "" {
|
||||
v += " "
|
||||
}
|
||||
v += "-I" + buildBaseDir
|
||||
return v
|
||||
})
|
||||
|
||||
// Setup buffers
|
||||
var stdo, stde bytes.Buffer
|
||||
@@ -391,3 +397,22 @@ func (b *BaseBuilder) ExtractAssets() (*html.AssetBundle, error) {
|
||||
// Read in html
|
||||
return html.NewAssetBundle(b.projectData.HTML)
|
||||
}
|
||||
|
||||
func upsertEnv(env []string, key string, update func(v string) string) []string {
|
||||
newEnv := make([]string, len(env), len(env)+1)
|
||||
found := false
|
||||
for i := range env {
|
||||
if strings.HasPrefix(env[i], key+"=") {
|
||||
eqIndex := strings.Index(env[i], "=")
|
||||
val := env[i][eqIndex+1:]
|
||||
newEnv[i] = fmt.Sprintf("%s=%v", key, update(val))
|
||||
found = true
|
||||
continue
|
||||
}
|
||||
newEnv[i] = env[i]
|
||||
}
|
||||
if !found {
|
||||
newEnv = append(newEnv, fmt.Sprintf("%s=%v", key, update("")))
|
||||
}
|
||||
return newEnv
|
||||
}
|
||||
|
||||
31
v2/pkg/commands/build/base_test.go
Normal file
31
v2/pkg/commands/build/base_test.go
Normal file
@@ -0,0 +1,31 @@
|
||||
package build
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestUpdateEnv(t *testing.T) {
|
||||
|
||||
env := []string{"one=1", "two=a=b", "three="}
|
||||
newEnv := upsertEnv(env, "two", func(v string) string {
|
||||
return v + "+added"
|
||||
})
|
||||
newEnv = upsertEnv(newEnv, "newVar", func(v string) string {
|
||||
return "added"
|
||||
})
|
||||
newEnv = upsertEnv(newEnv, "three", func(v string) string {
|
||||
return "3"
|
||||
})
|
||||
|
||||
if len(newEnv) != 4 {
|
||||
t.Errorf("expected: 4, got: %d", len(newEnv))
|
||||
}
|
||||
if newEnv[1] != "two=a=b+added" {
|
||||
t.Errorf("expected: \"two=a=b+added\", got: %q", newEnv[1])
|
||||
}
|
||||
if newEnv[2] != "three=3" {
|
||||
t.Errorf("expected: \"three=3\", got: %q", newEnv[2])
|
||||
}
|
||||
if newEnv[3] != "newVar=added" {
|
||||
t.Errorf("expected: \"newVar=added\", got: %q", newEnv[3])
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user