From 595db6eb8779b15c2713cc64d1b1cfd693d54d54 Mon Sep 17 00:00:00 2001 From: Per Johansson Date: Fri, 30 Aug 2019 14:24:23 +0200 Subject: [PATCH] Add support for go modules/plugins. As we call the similar C binary a module I went with that name for the Go version as well. There's some trickery needed, Go does currently not support nocgo for modules, as noted in https://github.com/golang/go/issues/30986 so that functionality has to be disabled. Also this triggers the CC environment variable problem again so I had to change the test CC value used. --- cmd/seb/bindata.go | 8 +++---- docs/arguments/destdir.md | 3 ++- docs/descriptors/gomodule.md | 20 ++++++++++++++++++ docs/index.md | 1 + internal/tools/gobuild.sh | 3 +++ pkg/buildbuild/descriptor.go | 1 + pkg/buildbuild/go.go | 37 ++++++++++++++++++++++++++++----- rules/rules.ninja | 2 +- test/Builddesc | 2 ++ test/compile.sh | 7 +++++-- test/gomodules/loader/Builddesc | 2 ++ test/gomodules/loader/main.go | 22 ++++++++++++++++++++ test/gomodules/module/Builddesc | 2 ++ test/gomodules/module/module.go | 17 +++++++++++++++ test/rules.ninja | 2 +- 15 files changed, 115 insertions(+), 14 deletions(-) create mode 100644 docs/descriptors/gomodule.md create mode 100644 test/gomodules/loader/Builddesc create mode 100644 test/gomodules/loader/main.go create mode 100644 test/gomodules/module/Builddesc create mode 100644 test/gomodules/module/module.go diff --git a/cmd/seb/bindata.go b/cmd/seb/bindata.go index 262ed1d..1a7cb7b 100644 --- a/cmd/seb/bindata.go +++ b/cmd/seb/bindata.go @@ -145,7 +145,7 @@ func internalToolsGoInstallSh() (*asset, error) { return a, nil } -var _internalToolsGobuildSh = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x58\x6f\x53\x1c\xb9\xd1\x7f\xbd\xfa\x14\x7d\xda\x79\x0e\x78\x8a\x19\x8c\xef\x92\x5c\x41\xed\x25\xd8\x60\x6e\xcb\x1c\x50\x01\xca\xae\xb2\x09\xa5\x99\xe9\x99\x11\x68\xa5\x89\xa4\x61\x59\x63\xf2\xd9\x53\x2d\xcd\xb2\x83\xff\x24\x76\x25\x79\x05\x23\xb5\xba\x5b\xdd\xbf\x5f\x77\x6b\xc7\x3f\x6c\x75\xce\x6e\xe5\x52\x6f\xa1\xbe\x85\x5c\xb8\x86\x8d\xe1\xa5\x69\x17\x56\xd6\x8d\x87\xe7\xcf\xb6\x7f\x81\xb3\xa2\x91\xb9\xf3\x58\x32\x36\x86\x17\xb6\xf3\x08\x95\xb1\x05\xc2\xdc\x8a\xb6\x45\x0b\xae\xb0\xb2\xf5\xe0\x0d\x48\xed\xb1\xb6\xc2\x23\xe4\x9d\x54\xa5\xd4\x35\xd4\x06\x0a\x53\x22\x6d\x19\x30\x9d\x65\xe3\xb8\x07\x6e\xe1\x3c\xce\x32\x38\x6f\x90\x84\xbc\x31\xca\x81\xb0\x08\x62\x26\x3e\xd0\xc9\xca\xd8\xcf\xd4\x6c\x42\xde\x79\x36\x06\xdf\xe0\x22\x0a\x43\x2e\x3d\xb4\xd6\xdc\x4a\x5d\x48\xa1\x82\x3e\x8b\x20\x5d\xd8\xaa\x6b\xb4\x30\x37\x56\x95\x60\x3a\x4f\xc7\xe8\x8c\x2e\xd9\x18\x9c\x99\xa1\x97\x33\x74\xb0\x30\x1d\x68\xc4\x92\x6e\x50\x18\xd3\x62\xb8\xc1\x5c\xfa\x06\x0c\x9d\x70\x9b\x41\xa4\x10\x7a\xcd\xc3\x75\xe7\x7c\x74\x8b\x8d\x69\xd9\x82\x99\x6b\x68\xd1\x56\x58\x78\xe8\xbc\x69\xa5\x20\x0b\xd0\x5a\xf4\xa8\x4b\xf0\x8d\x08\x86\x57\x6e\x38\x59\x22\x94\x06\x9d\x5e\xa3\xbb\xe0\x9d\x74\x3e\xa3\xe0\xbe\x41\xc0\xbb\x96\xf4\x90\xfc\xe1\xc9\xe9\xde\xf9\x6f\x70\x2b\xac\x14\xb9\x42\xf2\x2e\x47\x70\xe8\xa1\x35\x52\x7b\x8a\x8a\x37\x20\x94\x82\xda\xb0\x71\x08\x0f\xdd\x5e\x3a\xba\x7c\x69\x34\xc5\x1c\x0a\xa3\x2b\x59\x67\x5a\xea\x6b\x91\x91\x81\xb9\x54\xaa\xcf\x00\x19\x69\x45\x71\x23\x6a\x84\x99\x90\x1a\xa4\x66\x63\x28\xa5\xc5\xc2\x1b\xbb\x80\xe4\x39\x19\x20\xa9\x5c\x6a\x61\x17\xa4\x2f\xf9\x69\x13\xe6\x8d\x54\x94\x7d\x19\x7c\xa0\xb8\x96\xd8\xa2\x2e\x51\x17\x12\x1d\x1b\xc7\x5c\xd3\xb9\x8a\x04\x93\x9f\x63\x92\x87\x42\xbd\x1b\x08\xc2\x41\x61\x2c\x59\xa4\x7f\xe7\x48\x51\x86\x99\xb8\xc1\x98\xe4\x19\x38\x13\x23\x38\xa7\x90\x51\x02\x1a\x71\x1b\x62\x61\x3b\x4d\xa8\x88\x57\x11\x35\xf9\xdf\x69\x85\x2e\x68\xe9\x85\x08\x6c\x58\x88\xce\x21\xe0\x2d\xea\x98\x53\x01\x4e\xce\x5a\x85\xd0\xa0\x52\xa6\x4f\x4b\x6b\x4d\x6d\xc5\x0c\xa4\x5f\x73\xf0\xfc\xd9\x1d\x38\x65\xe6\x68\xc9\x36\x05\xc5\x76\x5a\xc7\xcb\xda\xa7\xf0\x65\xec\xf4\xf5\xe1\x24\xd9\x66\xd3\xe3\x49\xf2\x9c\x9d\x5c\x9c\x4f\x92\x9f\xd8\xfe\xc1\xe9\xab\xe9\xd1\xc1\x24\xf9\x99\x15\x95\x12\xb5\x9b\xf0\xe4\x0f\x9c\xa9\x72\xf9\xf1\x47\xce\x66\xa6\xc4\x09\x4f\xfe\xc4\x59\x7b\x53\x97\xd2\x4e\x78\xf2\x0b\x67\x8c\xed\xbd\x38\x9b\x1e\x4f\x78\xb2\x5e\x94\xc0\x93\xfb\xe9\xf1\x4e\x9a\x3d\x70\x78\xfe\xeb\x56\x89\xb7\x5b\xba\x53\x0a\x76\xa1\x9d\x97\x1b\x9c\x05\xae\xea\x5b\xb4\x1e\x2c\x2a\xe1\xe5\x2d\x25\xd4\x37\x2e\x00\x23\x77\x46\x75\x1e\x37\xc1\x49\x5d\x04\x8e\x85\xa0\x17\x8d\xd0\x35\xae\xd2\x9c\xb1\x97\x87\x27\x57\x2f\x5f\x1d\xed\x1d\x9e\x4d\x38\x67\x44\xbb\x2a\xa4\x3a\xba\xbe\x0b\xa5\x61\xa3\x77\xef\x80\x27\x15\x87\xc9\x3f\xe0\x6f\xef\xd2\xad\x4b\xb8\xbc\x84\x8f\x1f\xa1\x9a\xf0\xe4\xf4\xcd\xfe\x56\x52\x71\x36\x1a\xea\x49\x56\x1f\x40\x9b\x84\x47\x86\x77\xad\xb1\x1e\x56\x5b\xc1\xf4\xd1\xfe\xa3\x6d\x93\x5f\xbb\xa7\x3e\xf4\x21\xfb\x76\x27\x64\x05\x03\xb1\xf7\x99\x49\xe0\xf2\x72\x97\xb0\xa4\xd9\x68\x14\x0d\x24\xf4\x27\xb8\x35\x42\xe5\x90\x8d\x46\x4f\xfc\x48\x06\x5f\x51\xaa\x92\x9f\x5d\xa0\xdf\x67\x8c\x0c\x42\x54\xc9\xe1\x87\x09\x70\x0e\x8f\xf6\xc6\x30\xad\x1e\xe1\x68\xf2\x6b\x82\x39\x71\xc2\x6d\xd2\xea\x5c\xe8\x50\x35\x8d\x56\x0b\x68\x85\x73\x11\xf1\x8f\xdc\xd1\x42\x81\x92\xfa\x66\x93\x14\x85\x4a\x34\x97\x0e\x63\xed\x9b\x85\xfa\x4c\x04\x2a\x4b\xaa\x5c\x73\x59\x60\x06\x17\xba\x32\xd6\x77\x5a\x78\x54\x8b\xcd\xa1\xa4\xc5\x0a\x2d\xea\x02\x49\x97\xc6\x39\x28\x99\x5b\xe2\x74\xf4\xca\x6d\x12\xd1\x56\xc4\x89\xee\x50\x6d\x21\x57\xa2\x2c\xd1\x36\x70\x54\xa9\x8c\x8d\x0e\xde\x9e\x2f\x03\xb6\x9e\xf6\x59\x02\x9e\xe2\x9d\x5f\x7e\xbc\x5f\xc6\x79\x10\xae\xf7\x9c\x6f\xb0\x18\xf3\xa1\x82\x0d\x56\xc9\x21\x9a\xfb\xd2\xf7\x65\x14\x97\x38\x13\xba\x74\x20\x7d\x06\x7b\xca\x19\xa8\x64\xdd\x59\x0c\x85\xa8\xbd\xa9\x41\x8b\x19\x82\xac\xa0\xd3\x0e\x7d\xc6\x8c\x95\xf5\xd5\xf4\x15\xe5\x75\xfa\xea\x8c\xb3\xf0\xef\x0e\x67\xb5\x21\xaa\x2c\xd1\xd6\x06\xb4\x45\xbb\x11\x6c\x7b\x2f\xce\x4e\x1f\x69\xd8\x3e\x25\xe0\x8f\x3f\xf6\x0c\x1c\xbd\x83\xf4\x03\xf0\x84\x84\x39\x5c\xd2\x46\x61\xa8\x36\x77\xc8\x46\x4b\x0b\x49\xfc\x67\x27\x4a\x45\x24\x45\x87\x96\xbe\x71\x36\x86\x33\x6f\x25\x79\x21\xbd\x14\x0a\x76\x58\xf4\x65\xc2\x93\xfb\xfe\xf8\xf6\x43\x60\xfc\x00\x51\x42\x53\xbf\x50\xb2\x90\xab\x90\x35\xa8\xa1\x94\x2e\x74\x8c\xda\xc0\xcc\x94\x9d\x42\x97\xb1\x31\x9c\x5a\x93\x8b\x5c\x2d\x62\x19\x58\x82\xaf\xb4\xa6\x05\xd7\xb5\x01\xd8\x14\x89\x5e\xd1\xdf\x3b\xe9\x11\x9c\x31\x3a\xf4\xdc\x58\x84\x5d\x63\x3a\x55\x42\x4e\xd5\x59\xc0\x4c\x5c\x1b\x4b\x95\x07\x85\x23\x51\x90\x3e\xea\x5e\x82\x68\x2e\x64\xd4\x49\x87\xb3\xc8\x94\x54\x03\xef\xe3\x3c\x20\x4a\x4f\xac\xc3\x93\xed\xed\xed\xdf\x4f\xf6\x2f\x8e\x0e\x26\xa6\xaa\x02\x2a\xe2\x29\x0a\x32\x55\xcc\xc1\x99\x58\x40\xa9\x70\xf3\x95\xe0\x52\x6a\x02\xdc\xa3\xf3\x03\xf1\x5e\xc9\xe9\xeb\xc3\x65\xa2\xca\x98\xb8\xe9\x31\xd5\x81\x3b\x2c\xc2\x18\x82\xce\x13\x0e\x5e\x5c\x4c\x8f\xf6\xaf\xfa\x12\xb0\xfc\x3c\x3f\x38\x3b\x5f\xae\x9d\xbe\x3e\x24\xab\x9f\x1a\xcd\x51\x17\xcd\xff\xd4\x2a\xa4\xc1\x06\x24\x3f\x7f\xc9\x7e\x61\x6e\xd1\x5e\x35\x7e\xa6\x9e\x44\xb7\x37\x63\x8c\x82\x20\x01\x29\x89\x4c\x92\xe9\x31\xa4\x06\x78\x72\x72\x71\xce\x7b\x0e\xbe\x7d\xfb\x16\xa6\x6e\x39\x2a\x41\x8e\xde\xd3\x0c\x25\x16\x7f\x86\x83\xbb\x02\xdb\x1e\x25\xc7\x17\x60\x51\x94\x54\x9f\x68\x20\x28\x9a\xbe\x79\xaf\x51\x23\x77\xdd\x0c\x33\x66\x3a\xff\x48\xa0\xf5\x52\xda\x40\xcc\x68\x6b\x83\xf7\x4d\x6c\x2b\x59\xcf\x85\xc3\x27\x5b\xac\xc4\x96\xaa\xe4\x97\x0e\xf7\x9d\xf5\x6b\x0a\x56\xdb\x43\xe0\xac\xa2\xdf\xe3\x6f\x7d\x90\x85\x4f\x89\x5d\x1b\xa0\x59\xf8\xf0\xe4\xf7\x93\xfd\xe1\xde\xc6\x20\xa0\xd4\xf3\x79\xb6\x95\x50\x12\x2b\xc9\xfe\x55\x92\xe1\x57\x78\x54\x41\xe1\xdd\x8f\xd5\xbd\xc4\xd6\xc5\xf1\x48\xb8\x85\x2e\x88\x2d\xae\xa5\x19\x54\x7a\xe8\x5a\x70\x8a\xaa\xb6\x5a\x10\x6f\xa7\x34\x92\x10\x95\xb0\x0c\xa1\xef\xc7\x49\x9a\x2d\x85\x03\x65\x74\x4d\x7f\x69\xa9\x30\xb3\x36\x8c\x66\xc6\xde\x60\x99\xb1\x75\xc0\xa2\x31\xf1\xca\x27\x17\xe7\x3b\x40\x41\xab\x0d\x28\xf9\x39\xdc\xd2\xe0\x51\x5a\xc1\xda\xfd\x7d\x52\x4a\xbb\x33\xc9\xf6\xa5\x7d\x78\xb8\xbf\xb7\x61\x5e\xc8\x0e\xcd\x2b\xea\x5c\xb4\x42\xfb\x0f\x0f\x5b\xf7\xf7\xd9\xc3\x03\xdc\xdf\xa3\x2e\x07\x72\x2f\xeb\x6f\x14\xfc\xed\x1b\xf5\x7d\x9b\xd8\x39\x3a\xff\x6f\x5c\x5c\x8b\xfc\xd9\x80\x5f\x81\x27\x3d\xc6\x38\xfc\xc8\x58\x41\xf5\x6b\x49\x22\xa9\xd9\x28\x70\x64\x83\x8d\x46\x5f\xe1\x66\x1a\x04\x5a\x6b\x7a\x98\x9a\xce\xf3\xaf\x97\x89\xd1\xee\x2e\x1b\x51\x9d\x4a\xb5\x29\x6a\xb3\xd1\xcf\x1b\x07\xc7\x7b\x2f\x8e\x0e\xf6\x27\xcf\xd8\x68\x34\x18\x2c\xfa\xe5\x68\x3c\xce\x9a\x9f\x5a\x27\xc6\x06\x93\x3c\xb9\x5f\xb5\xd1\x77\x7f\xb9\x7c\xe0\xf1\x8a\x1f\x3f\xd2\xab\xc2\xc3\x76\xb4\x4d\x57\x48\xc9\x81\xe1\x95\xd2\xe2\x3f\xd6\xcb\xf9\xc7\x81\xd6\xff\x8e\xaf\xff\x4f\xda\xc6\xab\xc9\x9e\x0a\x8c\x8b\x9d\x0e\x8b\xce\x2f\x5f\x42\x78\xe7\xad\xe8\x1f\x4a\x6e\x31\xcb\x8d\x72\x19\xb5\x46\xdf\xbf\x7f\x04\xb4\xaa\xab\xa5\x8e\x75\x6c\x2d\x3c\x36\x82\xe2\x4e\x5b\x74\x46\xdd\x62\x39\x38\x57\x6b\x63\x11\xb4\x99\x6f\x42\x23\x74\xa9\xc2\xd3\x69\x35\x80\x65\x6c\x34\xea\x0b\xed\xfa\x63\x79\x38\x39\xdb\x08\xf3\x5e\x29\xec\x5c\xea\x55\x6d\xf8\x64\x98\x4c\xdf\xa8\xcd\x34\x5d\x59\x4d\x7b\xab\x13\x19\x8c\xa6\x52\xa7\x71\x04\x4b\xc3\x60\xf8\x64\x5a\xe2\x6c\x44\xa3\xe7\x68\x14\x22\xba\x54\x28\x21\x8d\x2f\x06\x58\x0e\x27\xe1\xeb\xb1\x20\xd6\xa6\xbd\xa9\xaf\x02\x9a\x21\x95\xda\x79\xa1\x94\xeb\xaa\x4a\xde\x4d\xe2\xe2\xd3\x14\x71\xb6\xba\xdd\x63\x1b\x69\x65\xa1\x64\xce\x87\xb7\x1a\x43\x2a\xc2\x1b\x34\x3e\x7f\xbc\xd0\xa5\xb0\x94\x9f\xdc\xc5\x77\x55\xea\x1a\x61\xb1\x24\xd9\x15\x1a\x56\x9e\x43\x1a\x96\x42\xd7\x2e\x52\x61\x8b\x86\x9e\x2b\x69\xdd\x3f\x90\xd6\xfa\xe3\x6b\x90\x0a\x37\xfb\x7c\xed\xfb\x90\xb4\x9c\xeb\xbf\xc7\x93\xef\xd2\x1f\xd2\x32\x8e\x88\xa3\x46\x39\xa7\xe9\x9a\x7a\x9f\x5e\x40\x24\x73\x2c\xc9\x0d\x8a\x32\xfc\x04\x41\x9b\x39\x42\x61\x51\x78\x2c\xe3\x4c\x35\x5f\xbe\xf7\x63\xdd\x8f\x0f\xfc\xa0\x8f\x10\xe7\x4d\x57\x34\xe4\xcc\xc9\xc5\xf9\xff\x65\xe2\x21\x6b\x86\xa9\xfa\x16\x20\x8e\xe1\xdc\x2e\xc2\x90\xd7\x0f\x84\xa2\xf3\x26\x75\x5e\x58\x0f\xa6\x22\x8e\xd9\x4e\x7b\x39\xc3\xf8\xcb\x40\x3f\x11\xd2\xa3\xa2\x67\x59\x65\x6c\x00\xff\x88\xfa\x16\xdd\xe0\x46\x9b\x39\x34\x66\x1e\x94\x86\x81\xcf\x68\xd8\x8f\x86\xe3\x4f\x46\xda\xcc\xc3\x09\x93\x5f\x17\xa6\x5d\x40\x9a\xda\xd0\x9c\x53\x87\x85\x97\x46\x43\x46\x23\xee\x95\xb0\x56\x2c\x26\xb5\xb9\xa2\x2f\x48\xd3\x5a\x99\x5c\x28\xf9\x01\x7b\x7e\x4c\xf8\x95\xf5\xcf\xae\x06\xd7\xdc\xfb\xeb\xcb\xdf\x36\xae\x9e\xde\xfb\x2a\x80\x34\xa6\xad\x4f\xca\xee\x2e\x43\x27\x8a\xf0\x73\xca\x72\xfc\xec\x6b\x3d\xd4\xa8\xd1\x0a\x6f\x6c\xc6\xa8\x9f\xb2\x7f\x06\x00\x00\xff\xff\xab\x03\x11\xe9\xff\x12\x00\x00" +var _internalToolsGobuildSh = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x58\x61\x53\xe3\x38\xd2\xfe\x1c\xfd\x8a\x5e\xc5\xef\x02\x6f\x61\x33\x61\xf7\x6e\xb7\xa0\xb2\x77\xcc\xc0\xb0\xa9\x65\x09\x75\x40\xed\x54\xcd\x70\x9c\x62\xb7\x1d\x0d\x8a\xe4\x92\x64\x42\x36\x70\xbf\xfd\xaa\x25\x27\x31\x33\x3b\x75\x4c\xdd\xdd\xa7\xc4\x56\xab\xbb\xd5\xdd\x4f\xf7\x23\xf7\xbf\xd9\x6b\x9c\xdd\x9b\x48\xbd\x87\xfa\x1e\x26\xc2\x4d\x59\x1f\xde\x98\x7a\x61\x65\x35\xf5\xb0\xff\x6a\xf0\x23\x5c\xe6\x53\x39\x71\x1e\x0b\xc6\xfa\xf0\xda\x36\x1e\xa1\x34\x36\x47\x98\x5b\x51\xd7\x68\xc1\xe5\x56\xd6\x1e\xbc\x01\xa9\x3d\x56\x56\x78\x84\x49\x23\x55\x21\x75\x05\x95\x81\xdc\x14\x48\x4b\x06\x4c\x63\x59\x3f\xae\x81\x5b\x38\x8f\xb3\x0c\xae\xa6\x48\x42\xde\x18\xe5\x40\x58\x04\x31\x13\xbf\xd3\xce\xd2\xd8\xcf\xd4\xec\xc2\xa4\xf1\xac\x0f\x7e\x8a\x8b\x28\x0c\x13\xe9\xa1\xb6\xe6\x5e\xea\x5c\x0a\x15\xf4\x59\x04\xe9\xc2\x52\x55\xa1\x85\xb9\xb1\xaa\x00\xd3\x78\xda\x46\x7b\x74\xc1\xfa\xe0\xcc\x0c\xbd\x9c\xa1\x83\x85\x69\x40\x23\x16\x74\x82\xdc\x98\x1a\xc3\x09\xe6\xd2\x4f\xc1\xd0\x0e\xb7\x1b\x44\x72\xa1\xb7\x3c\x7c\x6c\x9c\x8f\x6e\xb1\x3e\xbd\xb6\x60\xe6\x1a\x6a\xb4\x25\xe6\x1e\x1a\x6f\x6a\x29\xc8\x02\xd4\x16\x3d\xea\x02\xfc\x54\x04\xc3\x1b\x37\x9c\x2c\x10\x0a\x83\x4e\x6f\xd1\x59\xf0\x41\x3a\x9f\x51\x70\x7f\x43\xc0\x87\x9a\xf4\x90\xfc\xe9\xf8\xe2\xe8\xea\x67\xb8\x17\x56\x8a\x89\x42\xf2\x6e\x82\xe0\xd0\x43\x6d\xa4\xf6\x14\x15\x6f\x40\x28\x05\x95\x61\xfd\x10\x1e\x3a\xbd\x74\x74\xf8\xc2\x68\x8a\x39\xe4\x46\x97\xb2\xca\xb4\xd4\x1f\x45\x46\x06\xe6\x52\xa9\x36\x03\x64\xa4\x16\xf9\x9d\xa8\x10\x66\x42\x6a\x90\x9a\xf5\xa1\x90\x16\x73\x6f\xec\x02\x92\x7d\x32\x40\x52\x13\xa9\x85\x5d\x90\xbe\xe4\xbb\x5d\x98\x4f\xa5\xa2\xec\xcb\xe0\x03\xc5\xb5\xc0\x1a\x75\x81\x3a\x97\xe8\x58\x3f\xe6\x9a\xf6\x95\x24\x98\x7c\x1f\x93\xdc\x15\x6a\xdd\x40\x10\x0e\x72\x63\xc9\x22\xfd\x9d\x23\x45\x19\x66\xe2\x0e\x63\x92\x67\xe0\x4c\x8c\xe0\x9c\x42\x46\x09\x98\x8a\xfb\x10\x0b\xdb\x68\xaa\x8a\x78\x14\x51\x91\xff\x8d\x56\xe8\x82\x96\x56\x88\x8a\x0d\x73\xd1\x38\x04\xbc\x47\x1d\x73\x2a\xc0\xc9\x59\xad\x10\xa6\xa8\x94\x69\xd3\x52\x5b\x53\x59\x31\x03\xe9\xb7\x1c\xec\xbf\x7a\x00\xa7\xcc\x1c\x2d\xd9\xa6\xa0\xd8\x46\xeb\x78\x58\xfb\xbc\x7c\x19\xbb\xf8\xe5\x74\x98\x0c\xd8\xe8\x7c\x98\xec\xb3\xf1\xf5\xd5\x30\xf9\x8e\x1d\x9f\x5c\xbc\x1d\x9d\x9d\x0c\x93\xef\x59\x5e\x2a\x51\xb9\x21\x4f\xfe\xc4\x99\x2a\x56\x0f\x7f\xe6\x6c\x66\x0a\x1c\xf2\xe4\x07\xce\xea\xbb\xaa\x90\x76\xc8\x93\x1f\x39\x63\xec\xe8\xf5\xe5\xe8\x7c\xc8\x93\xed\xbc\x00\x9e\x2c\x47\xe7\x07\x69\xf6\xc4\x61\xff\xa7\xbd\x02\xef\xf7\x74\xa3\x14\x1c\x42\x3d\x2f\x76\x38\x0b\x58\xd5\xf7\x68\x3d\x58\x54\xc2\xcb\x7b\x4a\xa8\x9f\xba\x50\x18\x13\x67\x54\xe3\x71\x17\x9c\xd4\x79\xc0\x58\x08\x7a\x3e\x15\xba\xc2\x4d\x9a\x33\xf6\xe6\x74\x7c\xfb\xe6\xed\xd9\xd1\xe9\xe5\x90\x73\x46\xb0\x2b\x43\xaa\xa3\xeb\x87\x50\x18\xd6\x7b\xff\x1e\x78\x52\x72\x18\xfe\x13\xfe\xfe\x3e\xdd\xbb\x81\x9b\x1b\x78\x7c\x84\x72\xc8\x93\x8b\xdf\x8e\xf7\x92\x92\xb3\x5e\x57\x4f\xb2\x79\x00\x5a\xa4\x7a\x64\xf8\x50\x1b\xeb\x61\xb3\x14\x4c\x9f\x1d\xaf\x6d\x9b\xc9\x47\xf7\xdc\x87\x36\x64\x2f\x77\x42\x96\xd0\x11\xfb\x90\x99\x04\x6e\x6e\x0e\xa9\x96\x34\xeb\xf5\xa2\x81\x84\x7e\x82\x5b\x3d\x54\x0e\x59\xaf\xf7\xcc\x8f\xa4\xf3\x14\xa5\x4a\xf9\xd9\x01\xda\x75\xc6\xc8\x20\x44\x95\x1c\xbe\x19\x02\xe7\xb0\xb6\xd7\x87\x51\xb9\x2e\x47\x33\xf9\x48\x65\x4e\x98\x70\xbb\xf4\x76\x2e\x74\xe8\x9a\x46\xab\x05\xd4\xc2\xb9\x58\xf1\x6b\xec\x68\xa1\x40\x49\x7d\xb7\x4b\x8a\x42\x27\x9a\x4b\x87\xb1\xf7\xcd\x42\x7f\x26\x00\x15\x05\x75\xae\xb9\xcc\x31\x83\x6b\x5d\x1a\xeb\x1b\x2d\x3c\xaa\xc5\x6e\x57\xd2\x62\x89\x16\x75\x8e\xa4\x4b\xe3\x1c\x94\x9c\x58\xc2\x74\xf4\xca\xed\x12\xd0\x36\xc0\x89\xee\x50\x6f\x21\x57\xa2\x2c\xc1\x36\x60\x54\xa9\x8c\xf5\x4e\xde\x5d\xad\x02\xb6\x9d\xb6\x59\x02\x9e\xe2\x83\x5f\x3d\x7c\x58\xc5\xb9\x13\xae\x0f\x9c\xef\xb0\x18\xf3\xae\x82\x1d\x56\xca\x6e\x35\xb7\xad\xef\x8f\xab\xb8\xc0\x99\xd0\x85\x03\xe9\x33\x38\x52\xce\x40\x29\xab\xc6\x62\x68\x44\xf5\x5d\x05\x5a\xcc\x10\x64\x09\x8d\x76\xe8\x33\x66\xac\xac\x6e\x47\x6f\x29\xaf\xa3\xb7\x97\x9c\x85\xbf\x07\x9c\x55\x86\xa0\xb2\xaa\xb6\x3a\x54\x5b\xb4\x1b\x8b\xed\xe8\xf5\xe5\xc5\x1a\x86\xf5\x73\x00\x7e\xfb\x6d\x8b\xc0\xde\x7b\x48\x7f\x07\x9e\x90\x30\x87\x1b\x5a\xc8\x0d\xf5\xe6\x06\x59\x6f\x65\x21\x89\x7f\x0e\xa2\x54\xac\xa4\xe8\xd0\xca\x37\xce\xfa\x70\xe9\xad\x24\x2f\xa4\x97\x42\xc1\x01\x8b\xbe\x0c\x79\xb2\x6c\xb7\x0f\x9e\x78\x5b\x6d\xc1\x24\xf5\x8f\x4e\xa9\xc5\x76\x42\x6d\x8c\x87\x60\xb6\x65\x19\xa5\x86\xc0\x3d\x3a\xdf\x11\x6f\x95\x5c\xfc\x72\xba\x72\xbb\x88\xc7\x18\x9d\x13\x2a\x1e\x30\x0f\x43\x19\x9d\xa7\xa8\xbc\xbe\x1e\x9d\x1d\xdf\xb6\x80\x58\x3d\x5e\x9d\x5c\x5e\xad\xde\x5d\xfc\x72\x4a\x56\x3f\x35\x3a\x41\x9d\x4f\xff\xa7\x56\x21\x0d\x36\x20\xf9\xfe\x8f\xec\xe7\xe6\x1e\xed\xed\xd4\xcf\xd4\x33\x50\x8e\x35\x9c\x1a\x18\x64\x83\x41\x98\xd4\x83\x6c\xb0\x1f\x40\xb8\x0b\xa2\xf1\x06\x66\xa6\x68\x14\xba\x16\x39\xa5\x90\x0a\x02\x6f\x28\x9a\x76\x08\x4b\x5d\x91\x1a\x9a\x40\xa5\x35\xb3\xf5\x4c\x8f\x89\x22\x8a\x42\x53\xe5\x2e\x0c\x0c\x1d\x01\x0f\x52\x93\x48\xb6\x36\x2c\x1d\x68\xe3\x49\x8d\x6b\x6a\xea\x2a\x58\x64\x21\x40\x1a\x78\x5b\x87\x6d\x8c\xe8\x44\xcb\xd3\xf1\x60\x30\xf8\x75\x7c\x7c\x7d\x76\x72\x90\x92\x97\x4f\x74\xc0\xe0\xee\x5a\x68\xbb\x32\x70\x8f\xd6\x49\xa3\x1f\xf3\xc6\x43\x3a\x81\xc1\x7e\x3a\xf8\x61\x87\x44\x2b\x13\x8e\x19\x84\xdb\x36\xd6\xd1\x39\x34\x65\xd9\x49\x80\x31\x0a\x42\xec\x20\xa5\xe0\x0d\x93\xd1\x39\xa4\x06\x78\x32\xbe\xbe\xe2\x2d\x56\xdf\xbd\x7b\x07\x23\xb7\xa2\x54\x30\x41\xef\x89\x6b\x89\xc5\x5f\xe0\xe4\x21\xc7\xda\x07\x02\x77\x7a\x7e\x0d\x16\x45\x41\x7d\x8c\x88\x43\x3e\x6d\x87\xfc\x16\x0d\x7c\xd7\xcc\x30\x63\xa6\xf1\x6b\xa0\x6d\x17\xd2\x06\x00\x47\x5b\x3b\xbc\x1d\x76\x7b\xc9\xf6\x44\x38\x7c\xb6\xc4\x0a\xac\x29\xb8\x7f\xb4\xb9\x9d\xc0\x5f\x52\xb0\x59\x66\x74\x96\x6b\x47\xb9\x12\xcf\xa7\x28\xf1\x83\x3a\x1c\x10\xd0\x5a\x63\x61\x86\xce\x89\x8a\x9a\x77\xec\x45\x9f\x52\x12\x22\x61\x71\xb8\xd2\x9e\xbc\xb1\x16\xb5\xdf\x0c\xda\xc0\x5d\x41\x52\x6d\xd0\x26\xaa\x10\x6a\x53\x81\x71\x68\xe3\x03\x39\x91\x9a\xf6\x12\x3b\x25\x3f\x63\x21\x66\xac\x32\x33\x53\x0c\x63\x82\x89\xa7\x9f\x8e\x7f\x1d\x1f\xef\xf0\x4e\x33\xd8\x20\xaa\xad\xa0\xb0\xa5\x53\x40\xdb\x1d\xa4\x7d\xda\xca\xba\x5a\xbb\x6b\xa1\x6e\x36\xaa\x56\xf8\x21\xc2\xc3\xb3\xbd\x84\x30\xbb\xc2\x5c\xc7\x89\x95\x58\xd7\xe0\x4f\xb0\x56\xca\x7a\x98\x4f\x0d\xf0\xca\x04\x1e\x75\x00\x27\xda\xa3\xa5\xf0\x6f\x88\xe7\x87\x7f\xc4\x8d\x5b\xab\x5a\x3b\x8e\x23\xb1\xc0\xda\x45\x4e\x29\xdc\x42\xe7\x04\x46\x57\x13\x71\x97\x1e\x9a\x1a\x9c\x22\xc0\xaa\x45\xc6\xfa\x30\xa2\xa8\xce\x85\xf4\x58\x84\x3a\x6c\x39\x38\x11\x72\xe1\x40\x19\x4a\x77\xcc\x6d\x6e\x66\x75\xe0\xb3\xc6\xde\x11\x06\xb7\x21\x38\x18\xa2\x38\xbe\xbe\x3a\x00\xaa\xa0\xca\x80\x92\x9f\x77\xa5\x34\x78\x94\x96\xb0\xb5\x5c\x26\x85\xb4\x07\xc3\xec\x58\xda\xa7\xa7\xe5\xd2\x86\x3a\xc8\x4e\xcd\x5b\x42\x3f\xbd\xa1\xf5\xa7\xa7\xbd\xe5\x32\x7b\x7a\x82\xe5\x12\x75\xd1\x91\x7b\x53\xbd\x50\xf0\xe7\x17\xea\x7b\x99\xd8\x15\x3a\xff\x6f\x5c\xdc\x8a\x6d\x76\x07\x7e\x02\x9e\xb4\x80\xe3\xf0\x2d\x63\xb9\x70\xb8\xee\xb5\x92\x12\x4e\x0d\x63\x87\xf5\x7a\x5f\x68\xe1\x69\x10\xa8\xad\x69\x31\x6b\x1a\xcf\xbf\x3c\x4d\x7a\x87\x87\xac\x47\xe3\x2c\xd5\x26\xaf\xcc\x4e\x4b\xd2\x4e\xce\x8f\x5e\x9f\x9d\x1c\x0f\x5f\xb1\x5e\xaf\xc3\xc6\xda\xd7\xd1\x78\x24\xe8\x9f\x5a\xa7\xf6\x15\x4c\xf2\x64\xb9\xe1\x1e\xef\xff\x7a\xf3\xc4\xe3\x11\x1f\x1f\xe9\x2a\xe6\x61\x10\x6d\xd3\x11\x52\x72\xa0\x7b\xa4\x34\xff\x8f\xf5\x72\xfe\xd8\xd1\xfa\xdf\xf1\x35\x36\x8a\x97\xa9\x4c\xc3\x7a\xa0\x0b\xb5\x6a\x2a\xa9\x5f\x6a\xe4\xff\x49\x7f\x7f\x73\xe7\xa2\x96\xee\x40\x68\xa0\xb1\xd1\xf8\xd5\x1d\x15\x1f\xbc\x15\xed\x15\xd6\x2d\x66\x13\xa3\x5c\x46\x34\xd8\xb7\x37\x53\x01\xad\xd9\x30\x39\xb6\xc2\x35\x30\x28\x6e\xb4\x45\x67\xd4\x3d\x16\x9d\x7d\x95\x36\x16\x41\x9b\xf9\x2e\x4c\x85\x2e\x54\xb8\xd4\x6e\xa8\x71\xc6\x7a\xbd\x76\xe8\x6f\x9a\xe3\xf8\x72\x27\x30\xf1\x42\xd8\xb9\xd4\x9b\x8e\xf4\x09\xcd\x4f\x7f\x53\xbb\x69\xba\xb1\x9a\xb6\x56\x87\x32\x18\x4d\xa5\x4e\x23\x39\x4e\xe3\x04\xef\xf2\x58\xce\x7a\x74\x29\xe8\xf5\x42\x8c\x57\x0a\x25\xa4\xf1\x2e\x07\x2b\xda\x18\x9e\xd6\x23\xa8\x32\xf5\x5d\x75\x1b\x20\x03\xa9\xd4\xce\x0b\xa5\x5c\x53\x96\xf2\x61\x18\x5f\x3e\x4f\x1a\x67\x9b\xd3\xad\x29\x4d\x2d\x73\x25\x27\xbc\x7b\xaa\x3e\xa4\x22\x10\x93\x78\x31\xf5\x42\x17\xc2\x52\x7e\x26\x2e\xde\x78\x53\x37\x15\x16\x0b\x92\xdd\xd4\xc7\xc6\xf3\x6e\x49\xe4\xa9\xb0\xf9\x94\x46\x60\x5a\xb5\x57\xd7\xad\x76\xfb\x16\xa4\xc2\xcd\x3e\x7f\xf7\x75\xe5\xba\xba\x71\x7d\x8d\x27\x5f\xa5\x3f\xa4\xa5\x1f\x2b\x8e\xa8\xc9\x9c\xee\x3d\xc4\x36\xf4\xa2\x25\x3e\xb1\xef\x4f\x51\x14\xe1\xe3\x10\x2d\x4e\x10\x72\x8b\xc2\x63\x11\xa7\xf4\x7c\xf5\x25\x26\x0e\x97\xf8\xe9\x25\xe8\xa3\x8a\xf3\xa6\xc9\xa7\xe4\xcc\xf8\xfa\xea\xff\x32\xf1\x94\x4d\xbb\xa9\x7a\x49\x21\xf6\xe1\xca\x2e\x48\x6d\x21\x5d\x00\x0e\x31\xb9\xd4\x79\x61\x3d\x98\x92\x30\x66\x1b\xed\xe5\x0c\xe3\x37\x9b\xf6\xa2\x48\xd7\xbd\x16\x65\xa5\xb1\xa1\xf8\x7b\x34\x1c\xe9\x04\x77\xda\xcc\x61\x6a\xe6\x41\xa9\x21\xa7\x8d\x86\xe3\x68\x38\x7e\xcc\xd3\x66\x1e\x76\x98\xc9\xc7\xdc\xd4\x0b\x48\x53\x1b\xe8\x50\xea\x30\xf7\xd2\x68\xc8\xe8\xf2\x71\x2b\xac\x15\x8b\x61\x65\x6e\xe9\x09\xd2\xb4\x52\x66\x22\x94\xfc\x1d\x5b\x7c\x0c\xf9\xad\xf5\xaf\x6e\x3b\xc7\x3c\xfa\xdb\x9b\x9f\x77\x6e\x9f\x9f\xfb\x36\x14\x69\x4c\x5b\x9b\x94\xc3\x43\x86\x4e\xe4\xe1\x43\x97\x90\x91\x1e\xb6\x03\x05\x2a\xd4\x68\x85\x37\x36\x63\x34\xb4\xd9\xbf\x02\x00\x00\xff\xff\xf3\xc9\x3a\x34\x99\x14\x00\x00" func internalToolsGobuildShBytes() ([]byte, error) { return bindataRead( @@ -160,7 +160,7 @@ func internalToolsGobuildSh() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "internal/tools/gobuild.sh", size: 4863, mode: os.FileMode(493), modTime: time.Unix(1561717583, 0)} + info := bindataFileInfo{name: "internal/tools/gobuild.sh", size: 5273, mode: os.FileMode(493), modTime: time.Unix(1567166482, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -445,7 +445,7 @@ func rulesFlavorReleaseNinja() (*asset, error) { return a, nil } -var _rulesRulesNinja = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x59\x6f\x6f\xe3\xb8\xd1\x7f\xef\x4f\x31\x70\x84\x6c\x16\x39\x3a\x97\xc5\xed\x3d\x0f\xba\xd0\xa1\xb9\x64\x37\x4d\x91\xc4\xc5\x26\xdb\xbe\x59\x40\xa0\x29\x5a\xe2\x85\x22\x55\x92\x8a\xed\xe2\x3e\x7c\x31\x14\x25\xcb\xb2\x62\x27\xd9\x6e\xff\x00\x41\x6c\x51\xc3\xdf\xcc\x6f\x38\x1c\xce\xd0\x07\x70\xae\xcb\x95\x11\x59\xee\xe0\xdd\x8f\xa7\xff\x0f\x77\x2c\x17\x33\xeb\x78\x3a\x1a\x99\x4a\x72\x60\xcb\xe5\x08\x00\x80\xe9\xa2\xa0\x2a\x85\x18\x22\xb6\x5c\x42\x54\x0a\x36\x97\x34\x83\x68\x2e\xe9\xa3\x36\x89\x7f\xb2\x10\xb5\x9f\xcb\x65\xf3\x6d\x41\x8d\x0a\xdf\x33\xa6\x1f\x13\xa6\x4b\x87\xe3\xf5\x87\x35\xf5\x17\x72\x35\x01\x72\x15\x09\xc5\x52\x61\x00\x3f\x65\x95\x72\x0b\x51\xca\xe7\x42\x71\x0b\xe4\xe6\xe6\x02\xc8\xcd\x27\x88\x74\xe5\x26\x29\x90\x9b\x7b\xff\x15\x08\x43\x71\x20\xda\x3f\x7a\x6b\x53\x5e\xce\x85\xe4\x68\xad\x17\x0e\x83\x96\x19\x51\x3a\xa1\x15\xc4\x70\x7e\x7c\x8c\xa4\x4a\x14\xf3\xf3\x02\x5f\xb6\x45\x97\x3d\x83\xad\x56\x72\xf5\x5f\xce\x77\x90\xed\x72\x99\x50\x45\xe5\xca\xf2\x1e\x6d\x53\x00\x31\xf3\x5a\xe1\x07\x28\x1e\xd0\x48\x52\x36\xcf\x4c\x52\x95\x1d\x1f\x43\x14\x26\x9b\x24\x10\xfe\xf7\x87\xc5\xb6\x2b\xfa\xab\x1c\x6c\xdc\x5c\xe5\xd7\xd3\x7e\x05\xe9\xef\x10\x1d\x7b\x68\xf7\x48\x87\xa7\xc4\x69\x2d\x31\x48\x66\x95\x90\x29\x3e\xa4\xc2\x9c\x08\xe5\xb8\x51\x54\x9e\xe0\x80\x3d\x61\xba\x5c\x35\xde\x99\x94\x32\x38\xac\x33\xd8\xdf\x20\x1b\xe0\xde\x53\x91\x50\x43\x46\xe9\x72\xd5\xda\xe5\x74\x77\x3d\xe6\x42\x51\xf9\x2c\x7c\xe2\x45\x77\xa9\xf9\xe4\x05\x1a\x3d\x42\x05\x3d\x52\xa8\x87\x64\x61\x68\x59\x72\xb3\xcf\x05\x28\xdb\x52\xc7\x87\xed\x24\xb8\x01\x57\xa7\x44\x99\x86\x75\x95\x69\xbd\x98\x7e\x7d\xc3\x03\xb9\xc6\x39\x33\x1f\x4f\xd7\x10\x59\x56\x30\xad\x4d\x9a\x30\xad\x9c\x11\xb3\x13\x29\x66\xcd\x7a\xc2\x1f\xfd\x26\x36\xb6\x44\x28\x29\x66\x76\x80\x25\xea\x5f\xaf\xbe\xb1\x1b\xfb\xdf\xd8\xb2\x3b\xec\x95\x70\xe5\xf0\xb5\x50\xa3\x35\xad\x3d\xa4\xd8\xff\x1a\xa7\x92\x1a\x27\xa8\xdc\x4b\x4d\xa6\x40\xcc\xb6\x69\x03\x26\x35\x88\x2b\x6f\x9c\xc0\xdd\xff\x0d\xf6\x51\xd3\x33\x8b\x1a\x60\x66\x57\x30\x53\x03\x52\xcc\x0c\x35\xab\x8d\xed\x22\xf9\x56\x44\xe2\x18\x90\x63\x20\x7a\x07\x1c\xca\x74\x70\x56\x94\x6d\x9f\xef\x33\x61\xb5\x02\xb2\x02\x92\x02\x21\x29\x9f\x55\x59\xeb\xaa\x61\x54\x84\xe9\xc2\x0a\x65\x1d\x95\x12\x5d\x30\xef\x81\x87\x57\x40\x8a\x1f\x7f\xfe\xe9\x27\x9f\xc5\x9e\x48\x61\x98\x71\xfc\xfb\xcd\x4c\xd1\x60\xd7\xa2\x4f\xa3\xff\xdf\xfb\xf7\xdf\x80\x9e\x73\x9a\xf2\xfe\x62\xed\x4c\x19\xf5\x0c\x12\x00\x26\x36\xdf\xab\xbd\x9e\xf1\x84\x01\xe5\xea\x25\xca\xcb\x95\xcb\xb5\x7a\xa6\xf2\x5a\x78\x9f\x07\xca\xbc\xec\x59\x50\xe6\x25\x10\xe9\xa7\xfc\x02\x27\x29\x7f\x3c\x51\x95\x94\x70\x78\xf8\x82\x45\x45\x0c\xbb\x52\x8e\x2e\x81\xe5\x9c\x3d\x00\x42\x3f\x61\x89\x3f\x72\x32\xfd\x12\x3f\x64\xfa\x99\x3e\xc8\x34\xcc\x0b\xf7\x1c\x1b\x14\xa3\xfd\x28\x63\xd4\x05\x2f\x3c\xb9\xbc\x38\x8b\x2b\xea\xf8\x00\xa6\xd3\x15\xcb\x7b\x90\x7e\x2c\x08\x65\x25\x37\xf3\x84\xab\xaa\xd8\x4b\xb7\x95\x6c\x0f\xab\xf5\x50\xdf\x6f\x1d\xd8\x1d\x5b\xb9\x27\x35\xea\xa2\xda\x85\x70\x5b\x96\x77\x71\x89\x7d\x25\x74\x0f\xd3\x8f\xe1\x91\x72\x76\x7b\x77\x45\xce\x81\x10\x5d\xb9\xb2\x72\x04\x13\x6b\xbc\x4f\x45\x17\xdd\x7b\x2f\x79\xe4\xc6\x0a\xad\x7a\x5a\x38\xcb\x35\x7c\x3d\xa8\x0b\x2a\xf8\xf5\xcb\xd5\xf5\x45\xf2\xd7\x8f\x9f\xef\xae\xa6\xb7\xf0\x75\x5c\x3b\x3e\xcc\xfc\x3a\x6e\x16\xbb\x86\xb5\x0b\x91\x25\xf5\x3e\xea\x82\xc6\x38\x0e\x24\x6c\x30\xe2\x72\xc3\x69\x6a\x81\x4c\x37\xf2\xe7\x16\xc4\x40\xb6\x89\x77\xae\xbb\x9f\x5b\x4f\xea\xc6\xf9\x90\xe6\xc6\xcb\x5c\x71\x43\x1d\x4f\x94\x50\xbf\x51\xdb\xf3\x44\xcd\xbd\xfe\xff\xe9\xf3\xf4\x26\xb9\xbd\xba\xfd\xf3\x59\x7c\x0a\xe7\xe7\xf1\x38\x62\x6c\x5c\x4b\xdc\x4f\xa7\xd7\x17\x57\x9f\xe3\xf1\x86\x71\xe3\x10\xa3\x89\xff\xef\x91\x83\x36\x6d\xe2\xd1\xe8\x00\xee\x84\x62\x1c\x77\x9c\x17\x00\x53\x29\x0b\x0b\xe1\x72\x60\x95\x75\xba\x80\xf2\x21\x4b\x85\xb1\x6d\x16\x49\x79\xc9\x55\xca\x15\x5b\x41\x49\xd9\x03\xcd\xb8\x1d\x1d\x80\xcb\xf9\x0a\x18\x55\x6f\x1c\xcc\x38\x82\x60\x65\x57\x52\x43\xa5\xe4\xf2\x07\xc0\x0a\x1b\xa8\x94\x7a\x01\x5a\x71\xa0\x0e\x28\x38\x51\x70\x98\x6b\x83\x73\x2d\x87\x42\xa7\xdc\x4e\x46\x25\x56\x91\x99\xf6\xc6\xd8\x44\x8a\x59\xd3\x40\xb9\x1c\x62\x38\xed\xbd\x2f\x05\xdb\x16\x19\x1d\xc0\x7d\xce\x1b\x21\xa8\x23\x10\x2a\xcb\x2d\x58\x5d\x70\xe0\xea\x51\x18\xad\x0a\x3c\xfe\x1f\xa9\x11\x74\x26\xb9\x9d\xc0\xdf\x78\xb0\xb0\xb6\xc7\x69\x64\x62\xb9\x1b\x1d\x20\x17\x3c\x2c\x45\xf6\x48\x8d\x05\xbf\x48\x80\xc1\x6e\x27\xa8\x69\x05\x0b\xe1\x1d\x33\xa7\x95\x74\x38\xd1\xe5\x1c\x94\x36\x05\x95\x5d\x65\xa3\x83\xb5\x3a\x10\x73\x50\xda\x21\x3e\x4a\x1b\x0e\xb9\x5e\xf0\x47\x6e\x26\x00\xf7\xb9\xb0\x20\xac\xf7\x4d\xeb\x6d\xc1\x2d\x22\x2f\xb4\x79\x80\x42\x1b\x3e\x3a\x80\xd2\xe8\x92\x1b\x74\xac\xed\x9a\x17\xf8\xb2\x9c\xaa\x8c\x5b\x30\xdc\x19\x91\x65\xdc\xd4\x0b\x6c\x61\x56\xb9\x27\xad\x4a\x35\x5a\x35\x19\x05\xdf\xf9\x9a\x3e\xbe\x9c\xfe\xe5\xec\xfe\x4f\xf1\x38\xca\x74\x49\x5d\x3e\x86\xcb\x69\x08\xc6\xeb\xb3\xcb\xbb\x38\x6a\x84\xeb\x52\xb4\x79\x79\xff\xf1\xee\xbe\x2f\xe1\xb8\x75\x41\xec\xfc\x72\x9a\x7c\xbc\x3d\xfb\xf5\xfa\xe3\x45\x1c\xb1\x4c\x27\x5c\xa1\x09\xe9\xbe\x13\xc4\xbf\x9d\xd8\xbc\xd9\x39\x7a\x1d\xd7\xeb\x1d\x73\x39\x9d\xde\x79\x7b\xb5\x45\x6b\xcf\x3e\x9f\xd7\xe6\x53\xc3\xf2\x31\x44\x5d\x76\xe0\x69\x3d\x64\x63\x18\x47\x42\xe1\x7f\x5d\x39\xff\x31\xfb\x0d\x0d\x08\xad\x3b\x89\x32\x8d\x11\x3a\x86\x31\xb9\x82\x81\xc6\xaf\x94\xd4\xcd\xb5\x29\x92\x66\x08\x25\x9f\x51\x80\x87\x72\xdb\x5b\x85\x0a\x20\x6c\x5f\xdc\xba\x5b\x77\x07\x83\x26\x0d\x24\x5a\x8f\x80\xd5\x70\xa6\x31\x4a\x32\x43\xc3\xa9\x32\x37\xba\xe8\x64\xb9\xe0\x88\x66\x0b\xfd\x6b\x1d\x18\xcc\xc4\xaf\x4d\x07\xfe\x9f\x73\x5d\xf8\xba\xc7\x57\xdd\x5a\x7e\xed\x2b\x9c\x53\xd6\x9d\x79\x9b\x78\x1a\xdf\x37\x7e\xc4\xc8\xde\x3a\x7a\x77\x79\xa9\xfe\xfb\x4e\x0e\x41\x6b\x06\xbc\xd1\xa5\x8d\x22\x4d\x84\xd4\x69\xdc\xf7\xe2\xdd\xd0\xe0\x6a\xa0\x9c\xd8\xc3\x29\xf2\xb3\xfc\x16\xef\xd1\xfb\x66\x52\x1e\x79\x0f\x2b\x2f\xb3\x9b\x16\xd3\x8f\xdb\xad\xc3\x6b\x32\x82\x07\xfa\x7e\x6b\xe8\xe1\x5f\x90\x0d\xd6\xbc\x86\x17\xda\xbf\x47\x7f\xe8\xf9\x3e\xef\x24\xb9\x2b\xe4\x6b\x5c\xf4\x9d\xbd\xe1\xed\xda\x13\x01\x2d\x4d\xa7\xc1\x8b\xef\xa4\x4b\xd3\xb4\xa0\xa2\x5f\x7a\xae\x1b\x26\xec\x97\xba\x14\x07\x14\x5a\xee\xaa\x12\x55\x20\x50\xab\xa7\x5b\x8d\xae\x8a\xf6\xc6\xe3\x00\x6e\x39\x4f\xd1\x36\xd3\x64\x64\x61\xac\xfb\x01\x34\x16\x01\x0b\x81\x75\x90\xbf\xec\x77\x66\x85\x52\xcc\x70\xdf\xa5\xe8\xca\x9d\x44\x47\x33\x6a\xb9\xa2\x45\xfd\xfc\x36\x00\x5e\xde\x7e\x81\x9c\x5a\x20\xf7\xe0\x73\x2c\x1e\xef\x2e\x54\x10\x58\x28\xf8\x7b\x65\xea\xc4\x4c\xf2\xc9\xc0\x6d\x6a\xb8\x4c\x3d\x3c\x04\xa9\x80\xd8\x39\x44\x8e\x9a\x8c\xbb\xa7\x9a\xa7\xc0\xa6\xbd\x6a\x09\x37\x3b\x46\x3b\xbd\x75\x37\x5f\x8f\x02\x21\xfe\x4b\x82\xc5\x43\x1c\x45\x47\xa9\x30\x35\x0b\xa1\xde\x02\x21\xac\x2c\x13\x5d\xb9\x8d\x37\xc8\xaf\x7b\x71\xe4\x81\xc8\x30\x3e\xd9\xaf\x61\x1f\x7e\xaa\x17\x4a\x6a\xda\x2f\x23\x8e\x80\x55\x46\x62\xdf\x44\xae\xd7\x3d\x42\x74\x84\xb5\x3d\x90\xd3\x1a\xfe\xf0\xb0\x49\xb7\xd1\x91\xcd\xe9\xbb\xf7\x3f\xdb\xd0\x42\xbd\x1d\x43\xec\x87\x1d\x15\xb2\x95\x87\x7a\xaf\xbc\x85\xdf\x7f\x87\xa3\xee\x12\x7c\x00\xbe\x14\x0e\x4e\xe1\xed\x80\xdb\x2f\x82\x85\xe8\x77\xb4\xa9\x77\x90\x57\xea\x1f\xa2\x7f\x21\xe0\xc7\xfc\xed\x38\x06\xbd\xcf\x1a\x75\x97\xf4\x02\xcd\x31\x7c\xf1\x28\xf5\xf4\x9e\xd2\x99\xd7\xf0\x6e\xe7\x15\x7d\x90\x01\x42\x1e\x38\x2f\x81\x90\xbf\x57\x82\x3b\x20\xc4\xba\x34\x74\x5c\x4d\xef\x56\x97\xba\x09\x42\x27\x61\x5a\xdc\xde\x63\xb4\x3c\xdd\xd6\x25\x9d\xa3\x06\xc8\xd2\xb7\x71\xf3\x6f\xe5\x8a\x58\x5b\x5c\xb5\x52\xcf\xbd\x99\xee\xca\x62\x91\xea\x8d\xc6\xc1\x7e\x36\xdd\x00\xdd\x71\x13\x72\x19\x3a\x43\x28\x28\x26\x97\x8c\x43\x65\x31\x06\x3c\x66\x68\x74\xe6\x1a\xdb\x16\x3f\x5a\xf9\x22\xde\x3b\x12\xb4\xea\x14\xf6\x2e\xc7\x9e\xcb\x70\xa8\xfb\xe9\x14\x84\xc2\xae\x4d\x6b\xe9\xe7\x4c\x7c\x4f\xe3\xbb\x19\x30\x9c\x5a\xad\x42\x67\x56\xe7\x11\x3f\xdb\xb7\x78\x42\x81\xab\x0c\xce\x5d\x6b\xc1\x5d\x67\x5b\xe0\xd9\x0a\x4a\x6e\x48\xfd\x5b\xcb\x46\xaf\x34\x1a\x09\xf5\x9c\x5f\x38\x84\x6a\xef\x4b\xb6\x52\x73\x14\x20\x30\x29\x63\xcf\x33\xde\x74\x9e\xe1\xd6\x51\x17\x9f\xb6\xb7\x65\x75\x5f\x34\x74\xb5\xf0\x06\x27\xfd\xc1\x4f\x7f\xf3\x4b\xfd\xb3\xdc\x87\xe6\x78\x8d\xc3\x6f\x7a\x5d\x2b\x37\x7b\x7e\x88\x1a\xec\x4e\x08\xb7\xc1\x36\x1c\x69\xbd\xdf\x00\xff\x19\x00\x00\xff\xff\x26\xbc\xd8\xd2\xdc\x1d\x00\x00" +var _rulesRulesNinja = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x59\x6f\x6f\xe3\xb8\xd1\x7f\xef\x4f\x31\x70\x84\x6c\x16\x39\x3a\x97\xc5\xed\x3d\x0f\xba\xd0\xa1\xb9\x64\x37\x4d\x91\xc4\xc5\x26\xdb\xbe\x59\x40\xa0\x29\x5a\xe2\x85\x22\x55\x92\x8a\xed\xe2\x3e\x7c\x31\x14\x25\xcb\xb2\x62\x27\xd9\x6e\xff\x00\x41\x2c\x51\xc3\xdf\xcc\x6f\x38\x1c\xcd\x50\x07\x70\xae\xcb\x95\x11\x59\xee\xe0\xdd\x8f\xa7\xff\x0f\x77\x2c\x17\x33\xeb\x78\x3a\x1a\x99\x4a\x72\x60\xcb\xe5\x08\x00\x80\xe9\xa2\xa0\x2a\x85\x18\x22\xb6\x5c\x42\x54\x0a\x36\x97\x34\x83\x68\x2e\xe9\xa3\x36\x89\xbf\xb3\x10\xb5\xbf\xcb\x65\x73\xb5\xa0\x46\x85\xeb\x8c\xe9\xc7\x84\xe9\xd2\xe1\x78\xfd\x63\x4d\x7d\x41\xae\x26\x40\xae\x22\xa1\x58\x2a\x0c\xe0\xaf\xac\x52\x6e\x21\x4a\xf9\x5c\x28\x6e\x81\xdc\xdc\x5c\x00\xb9\xf9\x04\x91\xae\xdc\x24\x05\x72\x73\xef\x2f\x81\x30\x14\x07\xa2\xfd\xad\xb7\x36\xe5\xe5\x5c\x48\x8e\xd6\x7a\xe1\x30\x68\x99\x11\xa5\x13\x5a\x41\x0c\xe7\xc7\xc7\x48\xaa\x44\x31\x3f\x2f\xf0\x65\x5b\x74\xd9\x33\xd8\x6a\x25\x57\xff\xe5\x7c\x07\xd9\x2e\x97\x09\x55\x54\xae\x2c\xef\xd1\x36\x05\x10\x33\xaf\x15\x7e\x80\xe2\x01\x8d\x24\x65\x73\xcf\x24\x55\xd9\xf1\x31\x44\x61\xb2\x49\x02\xe1\x7f\x7f\x58\x6c\xbb\xa2\xbf\xca\xc1\xc6\xcd\x55\x7e\x3d\xed\x57\x90\xfe\x0e\xd1\xb1\x87\x76\x8f\x74\xb8\x4b\x9c\xd6\x12\x83\x64\x56\x09\x99\xe2\x4d\x2a\xcc\x89\x50\x8e\x1b\x45\xe5\x09\x0e\xd8\x13\xa6\xcb\x55\xe3\x9d\x49\x29\x83\xc3\x3a\x83\xfd\x0d\xb2\x01\xee\x3d\x15\x09\x35\x64\x94\x2e\x57\xad\x5d\x4e\x77\xd7\x63\x2e\x14\x95\xcf\xc2\x27\x5e\x74\x97\x9a\x4f\x5e\xa0\xd1\x23\x54\xd0\x23\x85\x7a\x48\x16\x86\x96\x25\x37\xfb\x5c\x80\xb2\x2d\x75\xbc\xd9\x4e\x82\x1b\x70\x75\x4a\x94\x69\x58\x57\x99\xd6\x8b\xe9\xd7\x37\xdc\x90\x6b\x9c\x33\xf3\xf1\x74\x0d\x91\x65\x05\xd3\xda\xa4\x09\xd3\xca\x19\x31\x3b\x91\x62\xd6\xac\x27\xfc\xd1\x6f\x62\x63\x4b\x84\x92\x62\x66\x07\x58\xa2\xfe\xf5\xea\x1b\xbb\xb1\xff\x8d\x2d\xbb\xc3\x5e\x09\x57\x0e\x1f\x0b\x35\x5a\xd3\xda\x43\x8a\xfd\xaf\x71\x2a\xa9\x71\x82\xca\xbd\xd4\x64\x0a\xc4\x6c\x9b\x36\x60\x52\x83\xb8\xf2\xc6\x09\xdc\xfd\xdf\x60\x1f\x35\x3d\xb3\xa8\x01\x66\x76\x05\x33\x35\x20\xc5\xcc\x50\xb3\xda\xd8\x2e\x92\x6f\x45\x24\x8e\x01\x39\x06\xa2\x77\xc0\xa1\x4c\x07\x67\x45\xd9\xf6\xfb\x7d\x26\xac\x56\x40\x56\x40\x52\x20\x24\xe5\xb3\x2a\x6b\x5d\x35\x8c\x8a\x30\x5d\x58\xa1\xac\xa3\x52\xa2\x0b\xe6\x3d\xf0\xf0\x08\x48\xf1\xe3\xcf\x3f\xfd\xe4\xb3\xd8\x13\x29\x0c\x33\x8e\x7f\xbe\x99\x29\x1a\xec\x5a\xf4\x69\xf4\xff\x7b\xff\xfe\x1b\xd0\x73\x4e\x53\xde\x5f\xac\x9d\x29\xa3\x9e\x41\x02\xc0\xc4\xe6\x7b\xb5\xd7\x33\x9e\x30\xa0\x5c\xbd\x44\x79\xb9\x72\xb9\x56\xcf\x54\x5e\x0b\xef\xf3\x40\x99\x97\x3d\x0b\xca\xbc\x04\x22\xfd\x94\x5f\xe0\x24\xe5\x8f\x27\xaa\x92\x12\x0e\x0f\x5f\xb0\xa8\x88\x61\x57\xca\xd1\x25\xb0\x9c\xb3\x07\x40\xe8\x27\x2c\xf1\xaf\x9c\x4c\xbf\xc4\x0f\x99\x7e\xa6\x0f\x32\x0d\xf3\xc2\x3d\xc7\x06\xc5\x68\x3f\xca\x18\x75\xc1\x0b\x4f\x2e\x2f\xce\xe2\x8a\x3a\x3e\x80\xe9\x74\xc5\xf2\x1e\xa4\x1f\x0b\x42\x59\xc9\xcd\x3c\xe1\xaa\x2a\xf6\xd2\x6d\x25\xdb\x97\xd5\x7a\xa8\xef\xb7\x0e\xec\x8e\xad\xdc\x93\x1a\x75\x51\xed\x42\xb8\x2d\xcb\xbb\xb8\xc4\xbe\x12\xba\x87\xe9\xc7\xf0\x95\x72\x76\x7b\x77\x45\xce\x81\x10\x5d\xb9\xb2\x72\x04\x13\x6b\xbc\x4f\x45\x17\xdd\x7b\x2f\x79\xe4\xc6\x0a\xad\x7a\x5a\x38\xcb\x35\x7c\x3d\xa8\x0b\x2a\xf8\xf5\xcb\xd5\xf5\x45\xf2\xd7\x8f\x9f\xef\xae\xa6\xb7\xf0\x75\x5c\x3b\x3e\xcc\xfc\x3a\x6e\x16\xbb\x86\xb5\x0b\x91\x25\xf5\x3e\xea\x82\xc6\x38\x0e\x24\x6c\x30\xe2\x72\xc3\x69\x6a\x81\x4c\x37\xf2\xe7\x16\xc4\x40\xb6\x89\x77\xae\xbb\x9f\x5b\x4f\xea\xc6\xf9\x90\xe6\xc6\xcb\x5c\x71\x43\x1d\x4f\x94\x50\xbf\x51\xdb\xf3\x44\xcd\xbd\xfe\xff\xe9\xf3\xf4\x26\xb9\xbd\xba\xfd\xf3\x59\x7c\x0a\xe7\xe7\xf1\x38\x62\x6c\x5c\x4b\xdc\x4f\xa7\xd7\x17\x57\x9f\xe3\xf1\x86\x71\xe3\x10\xa3\x89\xff\xef\x91\x83\x36\x6d\xe2\xd1\xe8\x00\xee\x84\x62\x1c\x77\x9c\x17\x00\x53\x29\x0b\x0b\xe1\x72\x60\x95\x75\xba\x80\xf2\x21\x4b\x85\xb1\x6d\x16\x49\x79\xc9\x55\xca\x15\x5b\x41\x49\xd9\x03\xcd\xb8\x1d\x1d\x80\xcb\xf9\x0a\x18\x55\x6f\x1c\xcc\x38\x82\x60\x65\x57\x52\x43\xa5\xe4\xf2\x07\xc0\x0a\x1b\xa8\x94\x7a\x01\x5a\x71\xa0\x0e\x28\x38\x51\x70\x98\x6b\x83\x73\x2d\x87\x42\xa7\xdc\x4e\x46\x25\x56\x91\x99\xf6\xc6\xd8\x44\x8a\x59\xd3\x40\xb9\x1c\x62\x38\xed\x3d\x2f\x05\xdb\x16\x19\x1d\xc0\x7d\xce\x1b\x21\xa8\x23\x10\x2a\xcb\x2d\x58\x5d\x70\xe0\xea\x51\x18\xad\x0a\x7c\xfd\x3f\x52\x23\xe8\x4c\x72\x3b\x81\xbf\xf1\x60\x61\x6d\x8f\xd3\xc8\xc4\x72\x37\x3a\x40\x2e\xf8\xb2\x14\xd9\x23\x35\x16\xfc\x22\x01\x06\xbb\x9d\xa0\xa6\x15\x2c\x84\x77\xcc\x9c\x56\xd2\xe1\x44\x97\x73\x50\xda\x14\x54\x76\x95\x8d\x0e\xd6\xea\x40\xcc\x41\x69\x87\xf8\x28\x6d\x38\xe4\x7a\xc1\x1f\xb9\x99\x00\xdc\xe7\xc2\x82\xb0\xde\x37\xad\xb7\x05\xb7\x88\xbc\xd0\xe6\x01\x0a\x6d\xf8\xe8\x00\x4a\xa3\x4b\x6e\xd0\xb1\xb6\x6b\x5e\xe0\xcb\x72\xaa\x32\x6e\xc1\x70\x67\x44\x96\x71\x53\x2f\xb0\x85\x59\xe5\x9e\xb4\x2a\xd5\x68\xd5\x64\x14\x7c\xe7\x6b\xfa\xf8\x72\xfa\x97\xb3\xfb\x3f\xc5\xe3\x28\xd3\x25\x75\xf9\x18\x2e\xa7\x21\x18\xaf\xcf\x2e\xef\xe2\xa8\x11\xae\x4b\xd1\xe6\xe1\xfd\xc7\xbb\xfb\xbe\x84\xe3\xd6\x05\xb1\xf3\xcb\x69\xf2\xf1\xf6\xec\xd7\xeb\x8f\x17\x71\xc4\x32\x9d\x70\x85\x26\xa4\xfb\xde\x20\xfe\xe9\xc4\xe6\xcd\xce\xd1\xeb\xb8\x5e\xef\x98\xcb\xe9\xf4\xce\xdb\xab\x2d\x5a\x7b\xf6\xf9\xbc\x36\x9f\x1a\x96\x8f\x21\xea\xb2\x03\x4f\xeb\x21\x1b\xc3\x38\x12\x0a\xff\xeb\xca\xf9\x9f\xd9\x6f\x68\x40\x68\xdd\x49\x94\x69\x8c\xd0\x31\x8c\xc9\x15\x0c\x34\x7e\xa5\xa4\x6e\xae\x4d\x91\x34\x43\x28\xf9\x8c\x02\x3c\x94\xdb\xde\x2a\x54\x00\x61\xfb\xe2\xd6\xdd\x3a\x3b\x18\x34\x69\x20\xd1\x7a\x04\xac\x86\x33\xdd\xe2\xfa\x14\x34\x37\xba\xe8\x64\xb9\xe0\x88\x66\x0b\xfd\x6b\x1d\x18\xcc\xc4\xcb\xa6\x03\xff\xcf\xb9\x2e\x5c\xee\xf1\x55\xb7\x96\x5f\xfb\x0a\xe7\x94\x75\x67\xde\x26\x9e\xc6\xf7\x8d\x1f\x31\xb2\xb7\x5e\xbd\xbb\xbc\x54\xff\x7d\x27\x87\xa0\x35\x03\xde\xe8\xd2\x46\x91\xc0\x3a\xa4\x71\xdf\x8b\x77\x43\x83\xab\x81\x72\x62\x0f\xa7\xc8\xcf\xf2\x5b\xbc\x47\xef\x9b\x49\x79\xe4\x3d\xac\xbc\xcc\x6e\x5a\x4c\x3f\x6e\xb7\x0e\xaf\xc9\x08\x1e\xe8\xfb\xad\xa1\x87\x7f\x41\x36\x58\xf3\x1a\x5e\x68\xff\x1c\xfd\xa1\xe7\xfb\xbc\x93\xe4\xae\x90\xaf\x71\xd1\x77\xf6\x86\xb7\x6b\x4f\x04\xb4\x34\x9d\x06\x2f\xbe\x93\x2e\x4d\xd3\x82\x8a\x7e\xe9\xb9\x6e\x98\xb0\x5f\xea\x52\x1c\x50\x68\xb9\xab\x4a\x54\x81\x40\xad\x9e\x6e\x35\xba\x2a\xda\x13\x8f\x03\xb8\xe5\x3c\x45\xdb\x4c\xa8\xf3\xe7\xc2\x58\xf7\x03\x68\x2c\x02\x16\x02\xeb\x20\x7f\xd8\xef\xcc\x0a\xa5\x98\xe1\xbe\x4b\xd1\x95\x3b\x89\x8e\x66\xd4\x72\x45\x8b\xfa\xfe\x6d\x00\xbc\xbc\xfd\x02\x39\xb5\x40\xee\xc1\xe7\x58\x7c\xbd\xbb\x50\x41\x60\xa1\xe0\xcf\x95\xa9\x13\x33\xc9\x27\x03\xa7\xa9\xe1\x30\xf5\xf0\x10\xa4\x02\x62\xe7\x10\x39\x6a\x32\xee\x9e\x6a\x9e\x02\x9b\xf6\xa8\x25\x9c\xec\x18\xed\xf4\xd6\xd9\x7c\x3d\x0a\x84\xf8\x8b\x04\x8b\x87\x38\x8a\x8e\x52\x61\x6a\x16\x42\xbd\x05\x42\x58\x59\x26\xba\x72\x1b\x4f\x90\x5f\xf7\xe0\xc8\x03\x91\x61\x7c\xb2\x5f\xc3\x3e\xfc\x54\x2f\x94\xd4\xb4\x5f\x46\x1c\x01\xab\x8c\xc4\xbe\x89\x5c\xaf\x7b\x84\xe8\x08\x6b\x7b\x20\xa7\x35\xfc\xe1\x61\x93\x6e\xa3\x23\x9b\xd3\x77\xef\x7f\xb6\xa1\x85\x7a\x3b\x86\xd8\x0f\x3b\x2a\x64\x2b\x0f\xf5\x5e\x79\x0b\xbf\xff\x0e\x47\xdd\x25\xf8\x00\x7c\x29\x1c\x9c\xc2\xdb\x01\xb7\x5f\x04\x0b\xd1\xef\x68\x53\xef\x45\x5e\xa9\x7f\x88\xfe\x81\x80\x1f\xf3\xa7\xe3\x18\xf4\x3e\x6b\xd4\x5d\xd2\x0b\x34\xc7\xf0\xc5\xa3\xd4\xd3\x7b\x4a\x67\x5e\xc3\xbb\x9d\x47\xf4\x41\x06\x08\x79\xe0\xbc\x04\x42\xfe\x5e\x09\xee\x80\x10\xeb\xd2\xd0\x71\x35\xbd\x5b\x5d\xea\x26\x08\x9d\x84\x69\x71\x7b\x8e\xd1\xf2\x74\x5b\x87\x74\x8e\x1a\x20\x4b\xdf\xc6\xcd\xbf\x95\x2b\x62\x6d\x71\xd5\x4a\x3d\xf7\x64\xba\x2b\x8b\x45\xaa\x37\x1a\x07\xfb\xd9\x74\x03\x74\xc7\x49\xc8\x65\xe8\x0c\xa1\xa0\x98\x5c\x32\x0e\x95\xc5\x18\xf0\x98\xa1\xd1\x99\x6b\x6c\x5b\xfc\x68\xe5\x8b\x78\xef\x48\xd0\xaa\x53\xd8\xbb\x1c\x7b\x2e\xc3\xa1\xee\xa7\x53\x10\x0a\xbb\x36\xad\xa5\x9f\x33\xf1\x3d\x8d\xef\x66\xc0\x70\x6a\xb5\x0a\x9d\x59\x9d\x47\xfc\x6c\xdf\xe2\x09\x05\xae\x32\x38\x77\xad\x05\x77\x9d\x6d\x81\x67\x2b\x28\xb9\x21\xf5\xb7\x96\x8d\x5e\x69\x34\x12\xea\x39\x5f\x38\x84\x6a\xcf\x4b\xb6\x52\x73\x14\x20\x30\x29\x63\xcf\x33\xde\x74\x9e\xe1\xd6\x51\x17\x9f\xb6\xa7\x65\x75\x5f\x34\x74\xb4\xf0\x06\x27\xfd\xc1\x4f\x7f\xf3\x4b\xfd\x59\xee\x43\xf3\x7a\x8d\xc3\x37\xbd\xae\x95\x9b\x3d\x3f\x44\x0d\x76\x27\x84\xdb\x60\x1b\x8e\xb4\xde\x37\xc0\x7f\x06\x00\x00\xff\xff\x14\xce\xba\x1e\xdc\x1d\x00\x00" func rulesRulesNinjaBytes() ([]byte, error) { return bindataRead( @@ -460,7 +460,7 @@ func rulesRulesNinja() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "rules/rules.ninja", size: 7644, mode: os.FileMode(420), modTime: time.Unix(1561717583, 0)} + info := bindataFileInfo{name: "rules/rules.ninja", size: 7644, mode: os.FileMode(420), modTime: time.Unix(1567162042, 0)} a := &asset{bytes: bytes, info: info} return a, nil } diff --git a/docs/arguments/destdir.md b/docs/arguments/destdir.md index 12afb1a..9d91121 100644 --- a/docs/arguments/destdir.md +++ b/docs/arguments/destdir.md @@ -4,7 +4,8 @@ Normally PROG and MODULE installs in predefined target directories, but in some cases you might need to override this, for example for perl modules or to -install to libexec/ instead of bin/. +install to libexec/ instead of bin/. This argument works for GOPROG and +GOMODULE as well. There are some special values for the first step in `destdir`. You write these like a normal directory path but they will be translated by Sebuild into other diff --git a/docs/descriptors/gomodule.md b/docs/descriptors/gomodule.md new file mode 100644 index 0000000..10b3040 --- /dev/null +++ b/docs/descriptors/gomodule.md @@ -0,0 +1,20 @@ +# Go Dynamic Modules - GOMODULE + + GOMODULE(foo + ) + +Similar to [GOPROG](goprog.md) this uses go build to compile the directory into +a binary. Unlike goprog, this descriptor creates a dynamic loadable module +instead of a runnable progam. By default the module is created in the +`modules/` [destination directory](../arguments/destdir.md) and will have a +`.so` file suffix. + +In the Go echosystem, these are known as plugins and you use the standard +[plugin](https://godoc.org/plugin) package to load them. + +GOMODULE support most the same arguments as GOPROG does, so refer to +[GOPROG arguments](goprog.md#arguments) for descriptions of additional +arguments. Special conditions and ninja variables are described on that +page as well. Since Go doesn't support compiling these modules without +cgo the `nocgo` argument is not available. Other settings disabling cgo +are also ignored. diff --git a/docs/index.md b/docs/index.md index 96a2cb0..ec7c60e 100644 --- a/docs/index.md +++ b/docs/index.md @@ -51,6 +51,7 @@ directory. * [Go Program - GOPROG](descriptors/goprog.md) * [Go Tests - GOTEST](descriptors/gotest.md) * [Dynamic Modules - MODULE](descriptors/module.md) +* [Go Dynamic Modules - GOMODULE](descriptors/gomodule.md) * [Scripts, Configuration and Other Files - INSTALL](descriptors/install.md) The next set is for generating intermediate libraries and tool files in the diff --git a/internal/tools/gobuild.sh b/internal/tools/gobuild.sh index 6d58289..e997fc5 100755 --- a/internal/tools/gobuild.sh +++ b/internal/tools/gobuild.sh @@ -125,6 +125,9 @@ case "$mode" in ""|prog) go build $GOBUILD_FLAGS -o "$out" "${EXTLDFLAGS[@]}" $PKG || exit 1 ;; + module) + go build $GOBUILD_FLAGS -o "$out" -buildmode=plugin "${EXTLDFLAGS[@]}" $PKG || exit 1 + ;; *) # go build links an executable to extract the symbols. If this is a plugin there'll be # unresolved symbols. Ignore now, handle in final link. diff --git a/pkg/buildbuild/descriptor.go b/pkg/buildbuild/descriptor.go index fc92748..6d00e4e 100644 --- a/pkg/buildbuild/descriptor.go +++ b/pkg/buildbuild/descriptor.go @@ -67,6 +67,7 @@ type Analyser struct { var DefaultDescriptors = map[string]Descriptor{ "PROG": &ProgTemplate, "GOPROG": &GoprogTemplate, + "GOMODULE": &GomoduleTemplate, "GOTEST": &GotestTemplate, "TOOL_PROG": &ToolProgTemplate, "TOOL_INSTALL": &ToolInstallTemplate, diff --git a/pkg/buildbuild/go.go b/pkg/buildbuild/go.go index 26473f9..0e70085 100644 --- a/pkg/buildbuild/go.go +++ b/pkg/buildbuild/go.go @@ -2,11 +2,15 @@ package buildbuild -import "strings" +import ( + "fmt" + "strings" +) type GoProgDesc struct { LinkDesc Pkg string + Mode string NoCgo bool GOOS string GOARCH string @@ -21,6 +25,7 @@ type GoTestDesc struct { func (tmpl *GoProgDesc) NewFromTemplate(bd, tname string, flavors []string) Descriptor { return &GoProgDesc{ LinkDesc: *tmpl.LinkDesc.NewFromTemplate(bd, tname, flavors), + Mode: tmpl.Mode, } } @@ -31,7 +36,12 @@ func (tmpl *GoTestDesc) NewFromTemplate(bd, tname string, flavors []string) Desc } func (g *GoProgDesc) Parse(ops *GlobalOps, realsrcdir string, args map[string][]string) Descriptor { - desc := g.GenericParse(g, ops, realsrcdir, args, LinkerExtra("gopkg", "nocgo", "goos", "goarch")) + lextra := LinkerExtra("gopkg", "nocgo", "goos", "goarch") + // Go plugins currently does not support cgo disabled. + if g.Mode == "module" { + lextra = LinkerExtra("gopkg", "goos", "goarch") + } + desc := g.GenericParse(g, ops, realsrcdir, args, lextra) g.LinkerParse(realsrcdir, args) g.Pkg = strings.Join(args["gopkg"], " ") g.NoCgo = args["nocgo"] != nil @@ -58,9 +68,9 @@ func (g *GoProgDesc) Finalize(ops *GlobalOps) { eas = append(eas, "gopkg="+g.Pkg) } if g.NoCgo { - eas = append(eas, "gomode=prog-nocgo") + eas = append(eas, fmt.Sprintf("gomode=%s-nocgo", g.Mode)) } else { - eas = append(eas, "gomode=prog") + eas = append(eas, "gomode="+g.Mode) } if g.GOOS != "" { eas = append(eas, "goos="+g.GOOS) @@ -69,7 +79,13 @@ func (g *GoProgDesc) Finalize(ops *GlobalOps) { eas = append(eas, "goarch="+g.GOARCH) } - target := g.AddTarget(g.TargetName, "gobuild", []string{g.Srcdir}, g.Destdir, "", eas, g.TargetOptions) + tname := g.TargetName + if g.Mode == "module" { + tname += ".so" + // Buildmode plugin currently does not support cgo disabled. + eas = append(eas, "cgo_enabled=1") + } + target := g.AddTarget(tname, "gobuild", []string{g.Srcdir}, g.Destdir, "", eas, g.TargetOptions) AddGodeps(target, ops) g.GeneralDesc.Finalize(ops) } @@ -124,6 +140,7 @@ func (g *GoTestDesc) Finalize(ops *GlobalOps) { } var GoprogTemplate = GoProgDesc{ + Mode: "prog", LinkDesc: LinkDesc{ GeneralDesc: GeneralDesc{ Destdir: "dest_bin", @@ -132,6 +149,16 @@ var GoprogTemplate = GoProgDesc{ }, } +var GomoduleTemplate = GoProgDesc{ + Mode: "module", + LinkDesc: LinkDesc{ + GeneralDesc: GeneralDesc{ + Destdir: "dest_mod", + TargetOptions: map[string]bool{"all": true, "incdeps": true, "libdeps": true}, + }, + }, +} + var GotestTemplate = GoTestDesc{ LinkDesc: LinkDesc{ GeneralDesc: GeneralDesc{ diff --git a/rules/rules.ninja b/rules/rules.ninja index dfa5c5f..4f54769 100644 --- a/rules/rules.ninja +++ b/rules/rules.ninja @@ -132,7 +132,7 @@ gobuild_tool=GOPATH="$gopath" GOBUILD_FLAGS=$gobuild_flags GOBUILD_TEST_FLAGS=$g rule gobuild command = GOOS="$goos" GOARCH="$goarch" $gobuild_tool "$gopkg" "$in" "$out" "$objdir/depfile-$gomode" "-I $incdir $includes $platform_includes" "-L $libdir -L $scmcoord_contrib/lib $ldlibs" $gomode "$builddir" depfile = $objdir/depfile-$gomode - description = building go program $out from $in + description = building go $gomode $out from $in rule gobuildlib command = GOOS="$goos" GOARCH="$goarch" $gobuild_tool "$gopkg" "$in" "$out" "$depfile" "$picflag -I $incdir $includes $platform_includes" "-L $libdir -L $scmcoord_contrib/lib $ldlibs" $gomode "$builddir" diff --git a/test/Builddesc b/test/Builddesc index d900077..6582785 100644 --- a/test/Builddesc +++ b/test/Builddesc @@ -3,6 +3,8 @@ COMPONENT([ goarch go/src/gopath + gomodules/loader + gomodules/module collect_special srcdir c diff --git a/test/compile.sh b/test/compile.sh index fd7e1be..b7d742f 100755 --- a/test/compile.sh +++ b/test/compile.sh @@ -4,7 +4,7 @@ set -xe test -z "$BUILDPATH" && BUILDPATH=build -CC='env cc' seb -condition cfoo -condition cbar +CC="cc -std=gnu11" seb -condition cfoo -condition cbar touch Builddesc # to make ninja invoke seb. ninja -f $BUILDPATH/build.ninja @@ -21,6 +21,9 @@ grep -q rt0_386_darwin $BUILDPATH/regress/bin/goarch # Check prod flavor is executable. $BUILDPATH/prod/bin/goarch +# Load the built go module. +$BUILDPATH/regress/bin/loader $BUILDPATH/regress/modules/gomod.so + ninja -f $BUILDPATH/build.ninja $BUILDPATH/regress/gotest/gopath ninja -f $BUILDPATH/build.ninja $BUILDPATH/regress/gocover/gopath-coverage.html env GOPATH=$PWD/go $BUILDPATH/regress/gotest/gopath.test @@ -40,4 +43,4 @@ if ! (ninja -f $BUILDPATH/build.ninja $BUILDPATH/regress/gocover/gopath-coverage test -f $BUILDPATH/obj/regress/lib/enabled ! test -f $BUILDPATH/obj/regress/lib/disabled -[ -n "$NODEPTEST" ] || CC='env cc' BUILDBUILD_ARGS="-condition cfoo -condition cbar" ../contrib/helpers/dep-tester.sh +[ -n "$NODEPTEST" ] || CC="cc -std=gnu11" BUILDBUILD_ARGS="-condition cfoo -condition cbar" ../contrib/helpers/dep-tester.sh diff --git a/test/gomodules/loader/Builddesc b/test/gomodules/loader/Builddesc new file mode 100644 index 0000000..02a292f --- /dev/null +++ b/test/gomodules/loader/Builddesc @@ -0,0 +1,2 @@ +GOPROG(loader +) diff --git a/test/gomodules/loader/main.go b/test/gomodules/loader/main.go new file mode 100644 index 0000000..946ad42 --- /dev/null +++ b/test/gomodules/loader/main.go @@ -0,0 +1,22 @@ +package main + +import ( + "fmt" + "log" + "os" + "plugin" +) + +func main() { + for _, pstr := range os.Args[1:] { + p, err := plugin.Open(pstr) + if err != nil { + log.Fatal(err) + } + test, err := p.Lookup("Test") + if err != nil { + log.Fatal(err) + } + fmt.Println(test.(func() string)()) + } +} diff --git a/test/gomodules/module/Builddesc b/test/gomodules/module/Builddesc new file mode 100644 index 0000000..472ac2f --- /dev/null +++ b/test/gomodules/module/Builddesc @@ -0,0 +1,2 @@ +GOMODULE(gomod +) diff --git a/test/gomodules/module/module.go b/test/gomodules/module/module.go new file mode 100644 index 0000000..199658d --- /dev/null +++ b/test/gomodules/module/module.go @@ -0,0 +1,17 @@ +package main + +import ( + "context" + "log" + "net" + "strings" +) + +func Test() string { + // Use the net package to try to explicitly use cgo + addrs, err := net.DefaultResolver.LookupHost(context.Background(), "localhost") + if err != nil { + log.Fatal(err) + } + return strings.Join(addrs, ", ") +} diff --git a/test/rules.ninja b/test/rules.ninja index 648ea7d..abaff1d 100644 --- a/test/rules.ninja +++ b/test/rules.ninja @@ -1,7 +1,7 @@ # Copyright 2018 Schibsted rule persist_cc - command = test "$cc" = "env cc" && touch $out + command = test "$cc" = "cc -std=gnu11" && touch $out rule test_zlib_config command = test -n "$zlib_config" && touch $out