mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-05 03:27:48 +00:00
builder: whitelist temporary directory env var for Clang invocation
It looks like this breaks on Windows: https://github.com/tinygo-org/tinygo/issues/4557 I haven't confirmed this is indeed the problem, but it would make sense. And passing through the temporary directory seems like a good idea regardless, there's not much that could break due to that.
This commit is contained in:
committed by
Ron Evans
parent
6d4dfcf72f
commit
d51ef253a9
+18
-2
@@ -32,10 +32,26 @@ func runCCompiler(flags ...string) error {
|
||||
cmd.Stderr = os.Stderr
|
||||
|
||||
// Make sure the command doesn't use any environmental variables.
|
||||
// Most importantly, it should not use C_INCLUDE_PATH and the like. But
|
||||
// removing all environmental variables also works.
|
||||
// Most importantly, it should not use C_INCLUDE_PATH and the like.
|
||||
cmd.Env = []string{}
|
||||
|
||||
// Let some environment variables through. One important one is the
|
||||
// temporary directory, especially on Windows it looks like Clang breaks if
|
||||
// the temporary directory has not been set.
|
||||
// See: https://github.com/tinygo-org/tinygo/issues/4557
|
||||
// Also see: https://github.com/llvm/llvm-project/blob/release/18.x/llvm/lib/Support/Unix/Path.inc#L1435
|
||||
for _, env := range os.Environ() {
|
||||
// We could parse the key and look it up in a map, but since there are
|
||||
// only a few keys iterating through them is easier and maybe even
|
||||
// faster.
|
||||
for _, prefix := range []string{"TMPDIR=", "TMP=", "TEMP=", "TEMPDIR="} {
|
||||
if strings.HasPrefix(env, prefix) {
|
||||
cmd.Env = append(cmd.Env, env)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return cmd.Run()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user