mirror of
https://github.com/burrowers/garble.git
synced 2025-12-24 12:58:05 +08:00
This mainly cleans up the few bits of code where we explicitly kept support for Go 1.15.x. With v0.1.0 released, we can drop support now, since the next v0.2.0 release will only support Go 1.16.x. Also updates all modules, including test ones, to 'go 1.16'. Note that the TOOLEXEC_IMPORTPATH refactor is not done here, despite all the TODOs about doing so when we drop 1.15 support. This is because that refactor needs to be done carefully and might have side effects, so it's best to keep it to a separate commit. Finally, update the deps.
70 lines
1.4 KiB
Plaintext
70 lines
1.4 KiB
Plaintext
skip # TODO: get plugins working properly. See issue #87
|
|
|
|
[windows] skip 'Go plugins are not supported on Windows'
|
|
|
|
env GOPRIVATE=test/main
|
|
|
|
garble build -buildmode=plugin ./plugin
|
|
binsubstr plugin.so 'PublicVar' 'PublicFunc'
|
|
! binsubstr plugin.so 'privateFunc'
|
|
|
|
# Note that we need -trimpath; see the caveat section in the README.
|
|
go build -trimpath
|
|
exec ./main
|
|
cmp stderr main.stderr
|
|
binsubstr main$exe 'PublicVar' 'PublicFunc'
|
|
|
|
[short] stop # no need to verify this with -short
|
|
|
|
# This used to fail, since in this case the package path for the ad-hoc plugin
|
|
# package isn't "main", but "plugin/unnamed-*".
|
|
garble build -buildmode=plugin plugin/main.go
|
|
|
|
go build -buildmode=plugin ./plugin
|
|
binsubstr plugin.so 'PublicVar' 'PublicFunc' 'privateFunc'
|
|
go build
|
|
exec ./main
|
|
cmp stderr main.stderr
|
|
|
|
-- go.mod --
|
|
module test/main
|
|
|
|
go 1.16
|
|
-- plugin/main.go --
|
|
package main
|
|
|
|
import "test/main/plugin/lib"
|
|
|
|
var PublicVar int = lib.ImportedFunc()
|
|
|
|
func privateFunc(n int) { println("Hello, number", n) }
|
|
|
|
func PublicFunc() { privateFunc(PublicVar) }
|
|
-- plugin/lib/lib.go --
|
|
package lib
|
|
|
|
func ImportedFunc() int { return 4 }
|
|
-- main.go --
|
|
package main
|
|
|
|
import "plugin"
|
|
|
|
func main() {
|
|
p, err := plugin.Open("plugin.so")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
v, err := p.Lookup("PublicVar")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
f, err := p.Lookup("PublicFunc")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
*v.(*int) = 7
|
|
f.(func())()
|
|
}
|
|
-- main.stderr --
|
|
Hello, number 7
|