mirror of
https://github.com/golang/go
synced 2024-09-04 15:34:21 +00:00
test: add ability to run tests with dynamic linking
This is a bit ugly but it's a useful test. Run go install -buildmode=shared std and then go run run.go -linkshared (it passes on linux/amd64). Change-Id: I5684c79cd03817fa1fc399788b7320f8535c08da Reviewed-on: https://go-review.googlesource.com/16343 Reviewed-by: Russ Cox <rsc@golang.org>
This commit is contained in:
parent
0e771c72ed
commit
0ae57c3b0b
47
test/run.go
47
test/run.go
|
@ -37,6 +37,7 @@ var (
|
|||
numParallel = flag.Int("n", runtime.NumCPU(), "number of parallel tests to run")
|
||||
summary = flag.Bool("summary", false, "show summary of results")
|
||||
showSkips = flag.Bool("show_skips", false, "show skipped tests")
|
||||
linkshared = flag.Bool("linkshared", false, "")
|
||||
updateErrors = flag.Bool("update_errors", false, "update error messages in test file based on compiler output")
|
||||
runoutputLimit = flag.Int("l", defaultRunOutputLimit(), "number of parallel runoutput tests to run")
|
||||
|
||||
|
@ -191,11 +192,19 @@ func goFiles(dir string) []string {
|
|||
type runCmd func(...string) ([]byte, error)
|
||||
|
||||
func compileFile(runcmd runCmd, longname string) (out []byte, err error) {
|
||||
return runcmd("go", "tool", "compile", "-e", longname)
|
||||
cmd := []string{"go", "tool", "compile", "-e"}
|
||||
if *linkshared {
|
||||
cmd = append(cmd, "-dynlink", "-installsuffix=dynlink")
|
||||
}
|
||||
cmd = append(cmd, longname)
|
||||
return runcmd(cmd...)
|
||||
}
|
||||
|
||||
func compileInDir(runcmd runCmd, dir string, names ...string) (out []byte, err error) {
|
||||
cmd := []string{"go", "tool", "compile", "-e", "-D", ".", "-I", "."}
|
||||
if *linkshared {
|
||||
cmd = append(cmd, "-dynlink", "-installsuffix=dynlink")
|
||||
}
|
||||
for _, name := range names {
|
||||
cmd = append(cmd, filepath.Join(dir, name))
|
||||
}
|
||||
|
@ -204,7 +213,12 @@ func compileInDir(runcmd runCmd, dir string, names ...string) (out []byte, err e
|
|||
|
||||
func linkFile(runcmd runCmd, goname string) (err error) {
|
||||
pfile := strings.Replace(goname, ".go", ".o", -1)
|
||||
_, err = runcmd("go", "tool", "link", "-w", "-o", "a.exe", "-L", ".", pfile)
|
||||
cmd := []string{"go", "tool", "link", "-w", "-o", "a.exe", "-L", "."}
|
||||
if *linkshared {
|
||||
cmd = append(cmd, "-linkshared", "-installsuffix=dynlink")
|
||||
}
|
||||
cmd = append(cmd, pfile)
|
||||
_, err = runcmd(cmd...)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -513,6 +527,7 @@ func (t *test) run() {
|
|||
|
||||
case "errorcheck":
|
||||
cmdline := []string{"go", "tool", "compile", "-e", "-o", "a.o"}
|
||||
// No need to add -dynlink even if linkshared if we're just checking for errors...
|
||||
cmdline = append(cmdline, flags...)
|
||||
cmdline = append(cmdline, long)
|
||||
out, err := runcmd(cmdline...)
|
||||
|
@ -628,7 +643,12 @@ func (t *test) run() {
|
|||
|
||||
case "run":
|
||||
useTmp = false
|
||||
out, err := runcmd(append([]string{"go", "run", t.goFileName()}, args...)...)
|
||||
cmd := []string{"go", "run"}
|
||||
if *linkshared {
|
||||
cmd = append(cmd, "-linkshared")
|
||||
}
|
||||
cmd = append(cmd, t.goFileName())
|
||||
out, err := runcmd(append(cmd, args...)...)
|
||||
if err != nil {
|
||||
t.err = err
|
||||
return
|
||||
|
@ -643,7 +663,12 @@ func (t *test) run() {
|
|||
<-rungatec
|
||||
}()
|
||||
useTmp = false
|
||||
out, err := runcmd(append([]string{"go", "run", t.goFileName()}, args...)...)
|
||||
cmd := []string{"go", "run"}
|
||||
if *linkshared {
|
||||
cmd = append(cmd, "-linkshared")
|
||||
}
|
||||
cmd = append(cmd, t.goFileName())
|
||||
out, err := runcmd(append(cmd, args...)...)
|
||||
if err != nil {
|
||||
t.err = err
|
||||
return
|
||||
|
@ -653,7 +678,12 @@ func (t *test) run() {
|
|||
t.err = fmt.Errorf("write tempfile:%s", err)
|
||||
return
|
||||
}
|
||||
out, err = runcmd("go", "run", tfile)
|
||||
cmd = []string{"go", "run"}
|
||||
if *linkshared {
|
||||
cmd = append(cmd, "-linkshared")
|
||||
}
|
||||
cmd = append(cmd, tfile)
|
||||
out, err = runcmd(cmd...)
|
||||
if err != nil {
|
||||
t.err = err
|
||||
return
|
||||
|
@ -664,7 +694,12 @@ func (t *test) run() {
|
|||
|
||||
case "errorcheckoutput":
|
||||
useTmp = false
|
||||
out, err := runcmd(append([]string{"go", "run", t.goFileName()}, args...)...)
|
||||
cmd := []string{"go", "run"}
|
||||
if *linkshared {
|
||||
cmd = append(cmd, "-linkshared")
|
||||
}
|
||||
cmd = append(cmd, t.goFileName())
|
||||
out, err := runcmd(append(cmd, args...)...)
|
||||
if err != nil {
|
||||
t.err = err
|
||||
return
|
||||
|
|
Loading…
Reference in a new issue