From: Anthony Martin Date: Wed, 30 Jan 2013 23:09:34 +0000 (-0800) Subject: cmd/go: fix build -n for cgo enabled packages X-Git-Tag: go1.1rc2~1230 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=6d2d2ae4d9af028ff13819497baeecfd984dc3e6;p=gostls13.git cmd/go: fix build -n for cgo enabled packages R=golang-dev, minux.ma, rsc CC=golang-dev https://golang.org/cl/7095067 --- diff --git a/src/cmd/go/build.go b/src/cmd/go/build.go index 4591225ef4..2d1f252770 100644 --- a/src/cmd/go/build.go +++ b/src/cmd/go/build.go @@ -1534,10 +1534,28 @@ func gccgoCleanPkgpath(p *Package) string { // libgcc returns the filename for libgcc, as determined by invoking gcc with // the -print-libgcc-file-name option. func (b *builder) libgcc(p *Package) (string, error) { + var buf bytes.Buffer + + prev := b.print + if buildN { + // In -n mode we temporarily swap out the builder's + // print function to capture the command-line. This + // let's us assign it to $LIBGCC and produce a valid + // buildscript for cgo packages. + b.print = func(a ...interface{}) (n int, err error) { + return fmt.Fprint(&buf, a...) + } + } f, err := b.runOut(p.Dir, p.ImportPath, b.gccCmd(p.Dir), "-print-libgcc-file-name") if err != nil { return "", fmt.Errorf("gcc -print-libgcc-file-name: %v (%s)", err, f) } + if buildN { + s := fmt.Sprintf("LIBGCC=$(%s)\n", buf.Next(buf.Len()-1)) + b.print = prev + b.print(s) + return "$LIBGCC", nil + } return strings.Trim(string(f), "\r\n"), nil }