builder: remove environment variables when invoking Clang

This is a problem on Guix, which sets C_INCLUDE_PATH that is not
affected by `-nostdlibinc`. And therefore it affects the build in
unintended ways.

Removing all environmental variables fixes this issue, and perhaps also
other issues caused by Clang being affected by environment variables.
This commit is contained in:
Ayke van Laethem
2024-10-10 14:04:19 +02:00
committed by Ron Evans
parent 4ef5109a07
commit c6acaa981d
2 changed files with 19 additions and 18 deletions
-12
View File
@@ -3,7 +3,6 @@ package builder
import ( import (
"errors" "errors"
"fmt" "fmt"
"os"
"os/exec" "os/exec"
"runtime" "runtime"
"strings" "strings"
@@ -76,14 +75,3 @@ func LookupCommand(name string) (string, error) {
} }
return "", errors.New("none of these commands were found in your $PATH: " + strings.Join(commands[name], " ")) return "", errors.New("none of these commands were found in your $PATH: " + strings.Join(commands[name], " "))
} }
func execCommand(name string, args ...string) error {
name, err := LookupCommand(name)
if err != nil {
return err
}
cmd := exec.Command(name, args...)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
return cmd.Run()
}
+19 -6
View File
@@ -14,16 +14,29 @@ import (
// runCCompiler invokes a C compiler with the given arguments. // runCCompiler invokes a C compiler with the given arguments.
func runCCompiler(flags ...string) error { func runCCompiler(flags ...string) error {
// Find the right command to run Clang.
var cmd *exec.Cmd
if hasBuiltinTools { if hasBuiltinTools {
// Compile this with the internal Clang compiler. // Compile this with the internal Clang compiler.
cmd := exec.Command(os.Args[0], append([]string{"clang"}, flags...)...) cmd = exec.Command(os.Args[0], append([]string{"clang"}, flags...)...)
cmd.Stdout = os.Stdout } else {
cmd.Stderr = os.Stderr // Compile this with an external invocation of the Clang compiler.
return cmd.Run() name, err := LookupCommand("clang")
if err != nil {
return err
}
cmd = exec.Command(name, flags...)
} }
// Compile this with an external invocation of the Clang compiler. cmd.Stdout = os.Stdout
return execCommand("clang", flags...) 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.
cmd.Env = []string{}
return cmd.Run()
} }
// link invokes a linker with the given name and flags. // link invokes a linker with the given name and flags.