Forward os.Stdin to child processes.
BUG=chromium:773875
TEST=unit tests, build glibc with compiler wrapper
Change-Id: I0b5c1f5adaee18499b72747cd6042b00a9d52c1d
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/toolchain-utils/+/1760973
Reviewed-by: George Burgess <gbiv@chromium.org>
Tested-by: Tobias Bosch <tbosch@google.com>
diff --git a/compiler_wrapper/compiler_wrapper.go b/compiler_wrapper/compiler_wrapper.go
index 4aa91c6..429484c 100644
--- a/compiler_wrapper/compiler_wrapper.go
+++ b/compiler_wrapper/compiler_wrapper.go
@@ -5,6 +5,7 @@
package main
import (
+ "bytes"
"fmt"
"io"
"path/filepath"
@@ -40,14 +41,16 @@
}
func callCompilerWithRunAndCompareToOldWrapper(env env, cfg *config, inputCmd *command) (exitCode int, err error) {
+ stdinBuffer := &bytes.Buffer{}
recordingEnv := &commandRecordingEnv{
- env: env,
+ env: env,
+ stdinReader: io.TeeReader(env.stdin(), stdinBuffer),
}
// Note: this won't do a real exec as recordingEnv redirects exec to run.
if exitCode, err = callCompilerInternal(recordingEnv, cfg, inputCmd); err != nil {
return 0, err
}
- if err = compareToOldWrapper(env, cfg, inputCmd, recordingEnv.cmdResults, exitCode); err != nil {
+ if err = compareToOldWrapper(env, cfg, inputCmd, stdinBuffer.Bytes(), recordingEnv.cmdResults, exitCode); err != nil {
return exitCode, err
}
return exitCode, nil
@@ -89,10 +92,8 @@
if err != nil {
return 0, err
}
- exitCode, err = checkClangSyntax(env, clangCmd)
- if err != nil || exitCode != 0 {
- return exitCode, err
- }
+ gccCmd := calcGccCommand(mainBuilder)
+ return checkClangSyntax(env, clangCmd, gccCmd)
}
compilerCmd = calcGccCommand(mainBuilder)
}