]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: don't add C compiler ID to hash for standard library
authorIan Lance Taylor <iant@golang.org>
Sun, 18 Jul 2021 20:58:13 +0000 (13:58 -0700)
committerIan Lance Taylor <iant@golang.org>
Tue, 20 Jul 2021 20:23:41 +0000 (20:23 +0000)
No test because a real test requires installing two different compilers.

For #40042
For #47251

Change-Id: Iefddd67830d242a119378b7ce20be481904806e4
Reviewed-on: https://go-review.googlesource.com/c/go/+/335409
Trust: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
Reviewed-by: Jay Conrod <jayconrod@google.com>
src/cmd/go/go_test.go
src/cmd/go/internal/work/exec.go

index c0c86ab9f583b182f71abba5dc86abfecd7fc588..6ce276537babd88765937e1f7ec0f3c98cc5ac68 100644 (file)
@@ -2848,3 +2848,35 @@ func TestExecInDeletedDir(t *testing.T) {
        // `go version` should not fail
        tg.run("version")
 }
+
+// A missing C compiler should not force the net package to be stale.
+// Issue 47215.
+func TestMissingCC(t *testing.T) {
+       if !canCgo {
+               t.Skip("test is only meaningful on systems with cgo")
+       }
+       cc := os.Getenv("CC")
+       if cc == "" {
+               cc = "gcc"
+       }
+       if filepath.IsAbs(cc) {
+               t.Skipf(`"CC" (%s) is an absolute path`, cc)
+       }
+       _, err := exec.LookPath(cc)
+       if err != nil {
+               t.Skipf(`"CC" (%s) not on PATH`, cc)
+       }
+
+       tg := testgo(t)
+       defer tg.cleanup()
+       netStale, _ := tg.isStale("net")
+       if netStale {
+               t.Skip(`skipping test because "net" package is currently stale`)
+       }
+
+       tg.setenv("PATH", "") // No C compiler on PATH.
+       netStale, _ = tg.isStale("net")
+       if netStale {
+               t.Error(`clearing "PATH" causes "net" to be stale`)
+       }
+}
index b506b836561cb3465008e8586efbe432d19709e4..5a225fb9f1f62666ca959add62e75a458fc8f279 100644 (file)
@@ -252,8 +252,15 @@ func (b *Builder) buildActionID(a *Action) cache.ActionID {
 
                ccExe := b.ccExe()
                fmt.Fprintf(h, "CC=%q %q %q %q\n", ccExe, cppflags, cflags, ldflags)
-               if ccID, err := b.gccToolID(ccExe[0], "c"); err == nil {
-                       fmt.Fprintf(h, "CC ID=%q\n", ccID)
+               // Include the C compiler tool ID so that if the C
+               // compiler changes we rebuild the package.
+               // But don't do that for standard library packages like net,
+               // so that the prebuilt .a files from a Go binary install
+               // don't need to be rebuilt with the local compiler.
+               if !p.Standard {
+                       if ccID, err := b.gccToolID(ccExe[0], "c"); err == nil {
+                               fmt.Fprintf(h, "CC ID=%q\n", ccID)
+                       }
                }
                if len(p.CXXFiles)+len(p.SwigCXXFiles) > 0 {
                        cxxExe := b.cxxExe()