github.com/hikaru7719/go@v0.0.0-20181025140707-c8b2ac68906a/misc/cgo/testplugin/test.bash (about)

     1  #!/usr/bin/env bash
     2  # Copyright 2016 The Go Authors. All rights reserved.
     3  # Use of this source code is governed by a BSD-style
     4  # license that can be found in the LICENSE file.
     5  
     6  set -e
     7  
     8  if [ ! -f src/host/host.go ]; then
     9  	cwd=$(pwd)
    10  	echo "misc/cgo/testplugin/test.bash is running in $cwd" 1>&2
    11  	exit 1
    12  fi
    13  
    14  goos=$(go env GOOS)
    15  goarch=$(go env GOARCH)
    16  
    17  function cleanup() {
    18  	rm -f plugin*.so unnamed*.so iface*.so life.so issue*
    19  	rm -rf host pkg sub iface
    20  }
    21  trap cleanup EXIT
    22  
    23  rm -rf pkg sub
    24  mkdir sub
    25  
    26  GOPATH=$(pwd) go build -i -gcflags "$GO_GCFLAGS" -buildmode=plugin plugin1
    27  GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -buildmode=plugin plugin2
    28  cp plugin2.so plugin2-dup.so
    29  GOPATH=$(pwd)/altpath go build -gcflags "$GO_GCFLAGS" -buildmode=plugin plugin-mismatch
    30  GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -buildmode=plugin -o=sub/plugin1.so sub/plugin1
    31  GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -buildmode=plugin -o=unnamed1.so unnamed1/main.go
    32  GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -buildmode=plugin -o=unnamed2.so unnamed2/main.go
    33  GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" host
    34  
    35  # test that DWARF sections are emitted for plugins and programs importing "plugin"
    36  if [ $GOOS != "darwin" ]; then
    37  	# On macOS, for some reason, the linker doesn't add debug sections to .so,
    38  	# see issue #27502.
    39  	go run src/checkdwarf/main.go plugin2.so plugin2.UnexportedNameReuse
    40  fi
    41  go run src/checkdwarf/main.go host main.main
    42  
    43  LD_LIBRARY_PATH=$(pwd) ./host
    44  
    45  # Test that types and itabs get properly uniqified.
    46  GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -buildmode=plugin iface_a
    47  GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -buildmode=plugin iface_b
    48  GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" iface
    49  LD_LIBRARY_PATH=$(pwd) ./iface
    50  
    51  function _timeout() (
    52  	set -e
    53  	$2 &
    54  	p=$!
    55  	(sleep $1; kill $p 2>/dev/null) &
    56  	p2=$!
    57  	wait $p 2>/dev/null
    58  	kill -0 $p2 2>/dev/null
    59  )
    60  
    61  # Test for issue 18676 - make sure we don't add the same itab twice.
    62  # The buggy code hangs forever, so use a timeout to check for that.
    63  GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -buildmode=plugin -o plugin.so src/issue18676/plugin.go
    64  GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -o issue18676 src/issue18676/main.go
    65  _timeout 10s ./issue18676
    66  
    67  # Test for issue 19534 - that we can load a plugin built in a path with non-alpha
    68  # characters
    69  GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -buildmode=plugin -ldflags='-pluginpath=issue.19534' -o plugin.so src/issue19534/plugin.go
    70  GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -o issue19534 src/issue19534/main.go
    71  ./issue19534
    72  
    73  # Test for issue 18584
    74  GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -buildmode=plugin -o plugin.so src/issue18584/plugin.go
    75  GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -o issue18584 src/issue18584/main.go
    76  ./issue18584
    77  
    78  # Test for issue 19418
    79  GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -buildmode=plugin "-ldflags=-X main.Val=linkstr" -o plugin.so src/issue19418/plugin.go
    80  GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -o issue19418 src/issue19418/main.go
    81  ./issue19418
    82  
    83  # Test for issue 19529
    84  GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -buildmode=plugin -o plugin.so src/issue19529/plugin.go
    85  
    86  # Test for issue 22175
    87  GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -buildmode=plugin -o issue22175_plugin1.so src/issue22175/plugin1.go
    88  GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -buildmode=plugin -o issue22175_plugin2.so src/issue22175/plugin2.go
    89  GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -o issue22175 src/issue22175/main.go
    90  ./issue22175
    91  
    92  # Test for issue 22295
    93  GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -buildmode=plugin -o issue.22295.so issue22295.pkg
    94  GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -o issue22295 src/issue22295.pkg/main.go
    95  ./issue22295
    96  
    97  # Test for issue 24351
    98  GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -buildmode=plugin -o issue24351.so src/issue24351/plugin.go
    99  GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -o issue24351 src/issue24351/main.go
   100  ./issue24351
   101  
   102  # Test for issue 25756
   103  GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -buildmode=plugin -o life.so issue25756/plugin
   104  GOPATH=$(pwd) go build -gcflags "$GO_GCFLAGS" -o issue25756 src/issue25756/main.go
   105  # Fails intermittently, but 20 runs should cause the failure
   106  for i in `seq 1 20`;
   107  do
   108    ./issue25756 > /dev/null
   109  done