From 4313c2886160613ca62742d0f46665cf8954213c Mon Sep 17 00:00:00 2001 From: Andrey Bokhanko Date: Sat, 13 Mar 2021 00:21:18 +0800 Subject: [PATCH] cmd/cgo: check whether C compiler exists Currently we print a cryptic message if a C compiler doesn't exist. This patch adds more graceful handling. Fixes #44271 Change-Id: I44f16ef6eb2853fee22fa1d996e41ec6c9ee82f1 Reviewed-on: https://go-review.googlesource.com/c/go/+/301249 Run-TryBot: Ian Lance Taylor TryBot-Result: Go Bot Reviewed-by: Ian Lance Taylor Reviewed-by: David Chase --- src/cmd/cgo/main.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/cmd/cgo/main.go b/src/cmd/cgo/main.go index 5767c54307..77ac5e0d3a 100644 --- a/src/cmd/cgo/main.go +++ b/src/cmd/cgo/main.go @@ -20,6 +20,7 @@ import ( "io" "io/ioutil" "os" + "os/exec" "path/filepath" "reflect" "runtime" @@ -302,6 +303,14 @@ func main() { p := newPackage(args[:i]) + // We need a C compiler to be available. Check this. + gccName := p.gccBaseCmd()[0] + _, err := exec.LookPath(gccName) + if err != nil { + fatalf("C compiler %q not found: %v", gccName, err) + os.Exit(2) + } + // Record CGO_LDFLAGS from the environment for external linking. if ldflags := os.Getenv("CGO_LDFLAGS"); ldflags != "" { args, err := splitQuoted(ldflags)