xtool/safesplit:properly handle consecutive short flags
This commit is contained in:
@@ -446,6 +446,12 @@ func TestFlagMergingScenarios(t *testing.T) {
|
|||||||
expectComp: []string{"-O3", "-fPIC", "-Wall", "-Wextra", "-std=c11"},
|
expectComp: []string{"-O3", "-fPIC", "-Wall", "-Wextra", "-std=c11"},
|
||||||
expectLink: []string{"-O3", "-lm", "-lpthread", "-static"},
|
expectLink: []string{"-O3", "-lm", "-lpthread", "-static"},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
// case from https://github.com/goplus/llgo/issues/1244
|
||||||
|
name: "issue 1244",
|
||||||
|
envCFlags: "-w -pipe -mmacosx-version-min=15 -isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX15.sdk",
|
||||||
|
expectComp: []string{"-w", "-pipe", "-mmacosx-version-min=15", "-isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX15.sdk"},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
// Save original environment
|
// Save original environment
|
||||||
|
|||||||
@@ -49,6 +49,13 @@ func SplitPkgConfigFlags(s string) []string {
|
|||||||
for i < len(s) && (s[i] == ' ' || s[i] == '\t') {
|
for i < len(s) && (s[i] == ' ' || s[i] == '\t') {
|
||||||
i++
|
i++
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check if next character is another flag (short flag with no argument)
|
||||||
|
if i < len(s) && s[i] == '-' {
|
||||||
|
// This is a short flag with no argument, finish current flag
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
// Read content until next space
|
// Read content until next space
|
||||||
for i < len(s) {
|
for i < len(s) {
|
||||||
if s[i] == '\\' && i+1 < len(s) && (s[i+1] == ' ' || s[i+1] == '\t') {
|
if s[i] == '\\' && i+1 < len(s) && (s[i+1] == ' ' || s[i+1] == '\t') {
|
||||||
|
|||||||
@@ -50,8 +50,8 @@ func TestSplitPkgConfigFlags(t *testing.T) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
t.Run("consecutive_flags", func(t *testing.T) {
|
t.Run("consecutive_flags", func(t *testing.T) {
|
||||||
ftest("-I -L", `["-I-L"]`)
|
ftest("-I -L", `["-I" "-L"]`)
|
||||||
ftest("-I -L /usr/lib", `["-I-L /usr/lib"]`)
|
ftest("-I -L /usr/lib", `["-I" "-L/usr/lib"]`)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("edge_cases", func(t *testing.T) {
|
t.Run("edge_cases", func(t *testing.T) {
|
||||||
@@ -59,7 +59,7 @@ func TestSplitPkgConfigFlags(t *testing.T) {
|
|||||||
ftest(" ", "[]")
|
ftest(" ", "[]")
|
||||||
ftest("-", `["-"]`)
|
ftest("-", `["-"]`)
|
||||||
ftest("-I", `["-I"]`)
|
ftest("-I", `["-I"]`)
|
||||||
ftest("-I -", `["-I-"]`)
|
ftest("-I -", `["-I" "-"]`)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("escaped_spaces", func(t *testing.T) {
|
t.Run("escaped_spaces", func(t *testing.T) {
|
||||||
@@ -77,6 +77,12 @@ func TestSplitPkgConfigFlags(t *testing.T) {
|
|||||||
ftest("-DVERSION=2.1 -DDEBUG=1", `["-DVERSION=2.1" "-DDEBUG=1"]`)
|
ftest("-DVERSION=2.1 -DDEBUG=1", `["-DVERSION=2.1" "-DDEBUG=1"]`)
|
||||||
ftest("-D VERSION=2.1 -D DEBUG=1", `["-DVERSION=2.1" "-DDEBUG=1"]`)
|
ftest("-D VERSION=2.1 -D DEBUG=1", `["-DVERSION=2.1" "-DDEBUG=1"]`)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// case for https://github.com/goplus/llgo/issues/1244
|
||||||
|
t.Run("w_pipe", func(t *testing.T) {
|
||||||
|
ftest("-w -pipe", `["-w" "-pipe"]`)
|
||||||
|
ftest("-Os -w -pipe", `["-Os" "-w" "-pipe"]`)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func toString(ss []string) string {
|
func toString(ss []string) string {
|
||||||
|
|||||||
Reference in New Issue
Block a user