Richard Musiol | e3c6847 | 2018-03-04 12:15:37 +0100 | [diff] [blame] | 1 | // +build !nacl,!js |
Josh Bleecher Snyder | 9b54444 | 2014-11-06 15:14:08 -0500 | [diff] [blame] | 2 | // run |
| 3 | |
| 4 | // Copyright 2014 The Go Authors. All rights reserved. |
| 5 | // Use of this source code is governed by a BSD-style |
| 6 | // license that can be found in the LICENSE file. |
| 7 | |
| 8 | // Run the linkx test. |
| 9 | |
| 10 | package main |
| 11 | |
| 12 | import ( |
Russ Cox | 12795c0 | 2015-05-21 14:35:02 -0400 | [diff] [blame] | 13 | "bytes" |
Josh Bleecher Snyder | 9b54444 | 2014-11-06 15:14:08 -0500 | [diff] [blame] | 14 | "fmt" |
| 15 | "os" |
| 16 | "os/exec" |
Russ Cox | 69f0d4c | 2015-06-29 13:03:11 -0400 | [diff] [blame] | 17 | "strings" |
Josh Bleecher Snyder | 9b54444 | 2014-11-06 15:14:08 -0500 | [diff] [blame] | 18 | ) |
| 19 | |
| 20 | func main() { |
Russ Cox | 51b624e | 2016-01-28 22:50:03 -0500 | [diff] [blame] | 21 | // test(" ") // old deprecated & removed syntax |
Russ Cox | 12795c0 | 2015-05-21 14:35:02 -0400 | [diff] [blame] | 22 | test("=") // new syntax |
| 23 | } |
| 24 | |
| 25 | func test(sep string) { |
Josh Bleecher Snyder | 8bbd800 | 2014-12-31 13:25:52 -0800 | [diff] [blame] | 26 | // Successful run |
Russ Cox | 12795c0 | 2015-05-21 14:35:02 -0400 | [diff] [blame] | 27 | cmd := exec.Command("go", "run", "-ldflags=-X main.tbd"+sep+"hello -X main.overwrite"+sep+"trumped -X main.nosuchsymbol"+sep+"neverseen", "linkx.go") |
| 28 | var out, errbuf bytes.Buffer |
| 29 | cmd.Stdout = &out |
| 30 | cmd.Stderr = &errbuf |
| 31 | err := cmd.Run() |
Josh Bleecher Snyder | 9b54444 | 2014-11-06 15:14:08 -0500 | [diff] [blame] | 32 | if err != nil { |
Russ Cox | 12795c0 | 2015-05-21 14:35:02 -0400 | [diff] [blame] | 33 | fmt.Println(errbuf.String()) |
| 34 | fmt.Println(out.String()) |
Josh Bleecher Snyder | 9b54444 | 2014-11-06 15:14:08 -0500 | [diff] [blame] | 35 | fmt.Println(err) |
| 36 | os.Exit(1) |
| 37 | } |
| 38 | |
| 39 | want := "hello\ntrumped\n" |
Russ Cox | 12795c0 | 2015-05-21 14:35:02 -0400 | [diff] [blame] | 40 | got := out.String() |
Josh Bleecher Snyder | 9b54444 | 2014-11-06 15:14:08 -0500 | [diff] [blame] | 41 | if got != want { |
| 42 | fmt.Printf("got %q want %q\n", got, want) |
| 43 | os.Exit(1) |
| 44 | } |
Josh Bleecher Snyder | 8bbd800 | 2014-12-31 13:25:52 -0800 | [diff] [blame] | 45 | |
| 46 | // Issue 8810 |
| 47 | cmd = exec.Command("go", "run", "-ldflags=-X main.tbd", "linkx.go") |
| 48 | _, err = cmd.CombinedOutput() |
| 49 | if err == nil { |
| 50 | fmt.Println("-X linker flag should not accept keys without values") |
| 51 | os.Exit(1) |
| 52 | } |
Russ Cox | 69f0d4c | 2015-06-29 13:03:11 -0400 | [diff] [blame] | 53 | |
| 54 | // Issue 9621 |
| 55 | cmd = exec.Command("go", "run", "-ldflags=-X main.b=false -X main.x=42", "linkx.go") |
| 56 | outx, err := cmd.CombinedOutput() |
| 57 | if err == nil { |
| 58 | fmt.Println("-X linker flag should not overwrite non-strings") |
| 59 | os.Exit(1) |
| 60 | } |
| 61 | outstr := string(outx) |
| 62 | if !strings.Contains(outstr, "main.b") { |
David Crawshaw | 7acb642 | 2016-04-20 10:29:43 -0400 | [diff] [blame] | 63 | fmt.Printf("-X linker flag did not diagnose overwrite of main.b:\n%s\n", outstr) |
Russ Cox | 69f0d4c | 2015-06-29 13:03:11 -0400 | [diff] [blame] | 64 | os.Exit(1) |
| 65 | } |
| 66 | if !strings.Contains(outstr, "main.x") { |
David Crawshaw | 7acb642 | 2016-04-20 10:29:43 -0400 | [diff] [blame] | 67 | fmt.Printf("-X linker flag did not diagnose overwrite of main.x:\n%s\n", outstr) |
Russ Cox | 69f0d4c | 2015-06-29 13:03:11 -0400 | [diff] [blame] | 68 | os.Exit(1) |
| 69 | } |
Josh Bleecher Snyder | 9b54444 | 2014-11-06 15:14:08 -0500 | [diff] [blame] | 70 | } |