build: support pkg-config and link args

This commit is contained in:
Li Jie
2024-06-04 16:30:21 +08:00
parent 2ddf8a44bc
commit 52d60d9623
4 changed files with 88 additions and 6 deletions

View File

@@ -0,0 +1,26 @@
package check
import (
"errors"
"os/exec"
"runtime"
"strings"
)
func CheckLinkArgs(args string) error {
cmdArgs := strings.Split(args, " ")
cmd := exec.Command("clang")
nul := "/dev/null"
if runtime.GOOS == "windows" {
nul = "NUL"
}
cmd.Args = append(cmd.Args, cmdArgs...)
cmd.Args = append(cmd.Args, "-x", "c", "-o", nul, "-")
src := "int main() {return 0;}"
srcIn := strings.NewReader(src)
cmd.Stdin = srcIn
if out, err := cmd.CombinedOutput(); err != nil {
return errors.New(string(out))
}
return nil
}

32
xtool/env/env.go vendored Normal file
View File

@@ -0,0 +1,32 @@
package env
import (
"os"
"os/exec"
"regexp"
"runtime"
"strings"
)
func ExpandEnv(s string) string {
return expandEnvWithCmd(s)
}
func expandEnvWithCmd(s string) string {
re := regexp.MustCompile(`\$\(([^)]+)\)`)
expanded := re.ReplaceAllStringFunc(s, func(m string) string {
cmd := re.FindStringSubmatch(m)[1]
var out []byte
var err error
if runtime.GOOS == "windows" {
out, err = exec.Command("cmd", "/C", cmd).Output()
} else {
out, err = exec.Command("sh", "-c", cmd).Output()
}
if err != nil {
return ""
}
return strings.TrimSpace(string(out))
})
return os.Expand(expanded, os.Getenv)
}