path.go\
syslist.go\
-CLEANFILES+=syslist.go cgotest/_obj
+CLEANFILES+=syslist.go pkgtest/_obj cmdtest/_obj cgotest/_obj
include ../../../Make.pkg
package build
import (
+ "exec"
"path/filepath"
"runtime"
"strings"
"testing"
)
-// TODO(adg): test building binaries
-
var buildPkgs = []string{
- "path",
- "big",
+ "go/build/pkgtest",
+ "go/build/cmdtest",
"go/build/cgotest",
}
+const cmdtestOutput = "3"
+
func TestBuild(t *testing.T) {
for _, pkg := range buildPkgs {
if runtime.GOARCH == "arm" && strings.Contains(pkg, "/cgo") {
// no cgo for arm, yet.
continue
}
+
tree := Path[0] // Goroot
- testBuild(t, tree, pkg)
- }
-}
+ dir := filepath.Join(tree.SrcDir(), pkg)
-func testBuild(t *testing.T, tree *Tree, pkg string) {
- dir := filepath.Join(tree.SrcDir(), pkg)
- info, err := ScanDir(dir, true)
- if err != nil {
- t.Error(err)
- return
- }
- s, err := Build(tree, pkg, info)
- if err != nil {
- t.Error(err)
- return
- }
- for _, c := range s.Cmd {
- t.Log("Run:", c)
- err = c.Run()
+ info, err := ScanDir(dir, true)
if err != nil {
- t.Error(c, err)
- return
+ t.Error("ScanDir:", err)
+ continue
}
- }
- if err := s.Clean(); err != nil {
- t.Errorf("cleaning: %v", err)
- t.Logf("Intermediate: %v", s.Intermediate)
+
+ s, err := Build(tree, pkg, info)
+ if err != nil {
+ t.Error("Build:", err)
+ continue
+ }
+
+ if err := s.Run(); err != nil {
+ t.Error("Run:", err)
+ continue
+ }
+
+ if pkg == "go/build/cmdtest" {
+ bin := s.Output[0]
+ b, err := exec.Command(bin).CombinedOutput()
+ if err != nil {
+ t.Errorf("exec: %s: %v", bin, err)
+ continue
+ }
+ if string(b) != cmdtestOutput {
+ t.Errorf("cmdtest output: %s want: %s", b, cmdtestOutput)
+ }
+ }
+
+ defer func(s *Script) {
+ if err := s.Nuke(); err != nil {
+ t.Errorf("nuking: %v", err)
+ }
+ }(s)
}
}
--- /dev/null
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package cgotest
+
+/*
+char* greeting = "hello, world";
+*/
+import "C"
+
+var Greeting = C.GoString(C.greeting)
+++ /dev/null
-// Copyright 2009 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-/*
-A trivial example of wrapping a C library in Go.
-For a more complex example and explanation,
-see ../gmp/gmp.go.
-*/
-
-package stdio
-
-/*
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/stat.h>
-#include <errno.h>
-
-char* greeting = "hello, world";
-*/
-import "C"
-import "unsafe"
-
-type File C.FILE
-
-// TODO(brainman): uncomment once stdout and stderr references are working on Windows.
-//var Stdout = (*File)(C.stdout)
-//var Stderr = (*File)(C.stderr)
-
-// Test reference to library symbol.
-// Stdout and stderr are too special to be a reliable test.
-var myerr = C.sys_errlist
-
-func (f *File) WriteString(s string) {
- p := C.CString(s)
- C.fputs(p, (*C.FILE)(f))
- C.free(unsafe.Pointer(p))
- f.Flush()
-}
-
-func (f *File) Flush() {
- C.fflush((*C.FILE)(f))
-}
-
-var Greeting = C.GoString(C.greeting)
--- /dev/null
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import "go/build/pkgtest"
+
+func main() {
+ pkgtest.Foo()
+ print(int(pkgtest.Sqrt(9)))
+}
--- /dev/null
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package pkgtest
+
+func Foo() {}
+
+func Sqrt(x float64) float64
--- /dev/null
+// Copyright 2009 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// func Sqrt(x float64) float64
+TEXT ·Sqrt(SB),7,$0
+ FMOVD x+0(FP),F0
+ FSQRT
+ FMOVDP F0,r+8(FP)
+ RET
--- /dev/null
+// Copyright 2009 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// func Sqrt(x float64) float64
+TEXT ·Sqrt(SB),7,$0
+ SQRTSD x+0(FP), X0
+ MOVSD X0, r+8(FP)
+ RET
--- /dev/null
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// func Sqrt(x float64) float64
+TEXT ·Sqrt(SB),7,$0
+ MOVD x+0(FP),F0
+ SQRTD F0,F0
+ MOVD F0,r+8(FP)
+ RET