Parcourir la source

Detect when binutils are not installed on OSX and skip the test. (#352)

Fixes #342.
Alexey Alexandrov il y a 7 ans
Parent
révision
6facc27a70
3 fichiers modifiés avec 31 ajouts et 1 suppressions
  1. 4
    1
      .travis.yml
  2. 20
    0
      internal/binutils/binutils.go
  3. 7
    0
      internal/binutils/binutils_test.go

+ 4
- 1
.travis.yml Voir le fichier

@@ -42,6 +42,9 @@ matrix:
42 42
     - os: osx
43 43
       osx_image: xcode8.3
44 44
       go: master
45
+    - os: osx
46
+      env: SKIP_BINUTILS=1
47
+      go: master
45 48
 
46 49
 addons:
47 50
   apt:
@@ -51,7 +54,7 @@ addons:
51 54
 before_install:
52 55
   - go get -u github.com/golang/lint/golint honnef.co/go/tools/cmd/...
53 56
   - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update ; fi
54
-  - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install binutils ; fi
57
+  - if [[ "$TRAVIS_OS_NAME" == "osx" && -z $SKIP_BINUTILS ]]; then brew install binutils ; fi
55 58
   - if [[ "$TRAVIS_OS_NAME" == "osx" && -z $SKIP_GRAPHVIZ ]]; then brew install graphviz; fi
56 59
 
57 60
 script:

+ 20
- 0
internal/binutils/binutils.go Voir le fichier

@@ -81,6 +81,26 @@ func (bu *Binutils) update(fn func(r *binrep)) {
81 81
 	bu.rep = r
82 82
 }
83 83
 
84
+// String returns string representation of the binutils state for debug logging.
85
+func (bu *Binutils) String() string {
86
+	r := bu.get()
87
+	var llvmSymbolizer, addr2line, nm, objdump string
88
+	if r.llvmSymbolizerFound {
89
+		llvmSymbolizer = r.llvmSymbolizer
90
+	}
91
+	if r.addr2lineFound {
92
+		addr2line = r.addr2line
93
+	}
94
+	if r.nmFound {
95
+		nm = r.nm
96
+	}
97
+	if r.objdumpFound {
98
+		objdump = r.objdump
99
+	}
100
+	return fmt.Sprintf("llvm-symbolizer=%q addr2line=%q nm=%q objdump=%q fast=%t",
101
+		llvmSymbolizer, addr2line, nm, objdump, r.fast)
102
+}
103
+
84 104
 // SetFastSymbolization sets a toggle that makes binutils use fast
85 105
 // symbolization (using nm), which is much faster than addr2line but
86 106
 // provides only symbol name information (no file/line).

+ 7
- 0
internal/binutils/binutils_test.go Voir le fichier

@@ -298,6 +298,13 @@ func TestMachoFiles(t *testing.T) {
298 298
 			if err != nil {
299 299
 				t.Fatalf("Open: unexpected error %v", err)
300 300
 			}
301
+			t.Logf("binutils: %v", bu)
302
+			if runtime.GOOS == "darwin" && !bu.rep.addr2lineFound && !bu.rep.llvmSymbolizerFound {
303
+				// On OSX user needs to install gaddr2line or llvm-symbolizer with
304
+				// Homebrew, skip the test when the environment doesn't have it
305
+				// installed.
306
+				t.Skip("couldn't find addr2line or gaddr2line")
307
+			}
301 308
 			defer f.Close()
302 309
 			syms, err := f.Symbols(nil, 0)
303 310
 			if err != nil {