summaryrefslogtreecommitdiff
path: root/pluginCheck.go
diff options
context:
space:
mode:
Diffstat (limited to 'pluginCheck.go')
-rw-r--r--pluginCheck.go62
1 files changed, 43 insertions, 19 deletions
diff --git a/pluginCheck.go b/pluginCheck.go
index b7657f6..8e50ade 100644
--- a/pluginCheck.go
+++ b/pluginCheck.go
@@ -3,7 +3,6 @@ package gui
import (
"debug/buildinfo"
"errors"
- "fmt"
"os"
"os/exec"
"path/filepath"
@@ -13,9 +12,11 @@ import (
"go.wit.com/log"
)
-// CheckPluginCompatibility verifies that the plugin .so file was built
+// this doesn't work with GO111MODULE=off so it's mostly worthless
+// TODO: fix the GO binary so this works
+// verifies that the plugin .so file was built
// with the same Go version and dependency versions as the host binary.
-func CheckPluginCompatibility(pluginPath string) error {
+func checkPluginCompatibility(pluginPath string) error {
pluginInfo, err := buildinfo.ReadFile(pluginPath)
if err != nil {
return log.Errorf("failed to read plugin build info: %w", err)
@@ -55,66 +56,89 @@ func CheckPluginCompatibility(pluginPath string) error {
log.Printf("DEP HASH: version %s: plugin=%s, host=%s\n", dep.Path, dep.Version, hostVer)
}
+ log.Info("CHECK FINAL OK:", pluginPath)
return nil
}
// tests the plugin file will load
func testPluginOld() {
- _, err := plugin.Open(argGui.GuiTest)
+ _, err := plugin.Open(argGui.GuiPluginHack)
if err != nil {
- log.Log(PLUG, "plugin.Open() FAILED =", argGui.GuiTest, err)
+ log.Log(PLUG, "plugin.Open() FAILED =", argGui.GuiPluginHack, err)
os.Exit(-1)
}
- log.Log(PLUG, "plugin.Open() SUCCESS loading plugin =", argGui.GuiTest)
+ log.Log(PLUG, "plugin.Open() SUCCESS loading plugin =", argGui.GuiPluginHack)
os.Exit(0)
}
+func CheckPlugin() string {
+ if argGui.GuiPluginHack != "" {
+ // does os.Exec() and does not return
+ testPluginAndExit()
+ }
+ return "boo"
+}
+
// loads the plugin, then exits with 0 or -1
-func TestPluginAndExit() {
- log.Log(WARN, "TEST plugin START", argGui.GuiCheck)
+func testPluginAndExit() {
+ log.Log(WARN, "TEST plugin START", argGui.GuiPluginHack)
- absPath, err := filepath.Abs(argGui.GuiCheck)
+ absPath, err := filepath.Abs(argGui.GuiPluginHack)
if err != nil {
- log.Log(WARN, "TEST plugin FAILED", argGui.GuiCheck, absPath, err)
+ log.Log(WARN, "TEST plugin FAILED", argGui.GuiPluginHack, absPath, err)
os.Exit(-1)
}
- log.Log(WARN, "TEST plugin START abs:", absPath, argGui.GuiCheck)
+ log.Log(WARN, "TEST plugin START abs:", absPath, argGui.GuiPluginHack)
plug, err := checkPlug(absPath)
if plug == nil {
- log.Log(WARN, "TEST plugin failed (returned nil):", argGui.GuiCheck, absPath, err)
+ log.Log(WARN, "TEST plugin failed (returned nil):", argGui.GuiPluginHack, absPath, err)
+ log.Sleep(1)
os.Exit(-1)
}
if err == nil {
- log.Log(WARN, "TEST plugin probably worked", argGui.GuiCheck, absPath)
+ log.Log(WARN, "TEST plugin probably worked", argGui.GuiPluginHack, absPath)
+ log.Log(WARN, "os.Exit(0)")
os.Exit(0)
}
- log.Log(WARN, "TEST plugin failed", argGui.GuiCheck, absPath, err)
+ log.Log(WARN, "TEST plugin failed", argGui.GuiPluginHack, absPath, err)
+ log.Sleep(1)
os.Exit(-1)
}
-func CheckPluginViaSubprocess(path string) error {
+func checkPluginViaSubprocess(path string) error {
exe, err := os.Executable()
if err != nil {
- return fmt.Errorf("failed to get executable path: %w", err)
+ return log.Errorf("failed to get executable path: %w", err)
}
resolved, err := filepath.EvalSymlinks(exe)
if err != nil {
- return fmt.Errorf("failed to resolve executable symlink: %w", err)
+ return log.Errorf("failed to resolve executable symlink: %w", err)
}
- cmd := exec.Command(resolved, "--gui-check-plugin", path)
+ argv := []string{resolved, "--gui-check-plugin", path, "--no-port"}
+ log.Warn("RUNNING:", argv)
+ // cmd := exec.Command(resolved, "--gui-check-plugin", path, "--no-port")
+ cmd := exec.Command(argv[0], argv[1:]...)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
return cmd.Run()
}
+// retuns true if
+func IsGoPluginTestHack() bool {
+ if argGui.GuiPluginHack == "" {
+ return false
+ }
+ return true
+}
+
func checkPlug(pluginPath string) (*plugin.Plugin, error) {
// const pluginPath = "/tmp/gocui.so"
// ../../../toolkits/gocui/gocui.so
// /usr/lib/go-gui-toolkits/gocui.v0.22.46.so
- if err := CheckPluginCompatibility(pluginPath); err != nil {
+ if err := checkPluginCompatibility(pluginPath); err != nil {
log.Printf("Plugin check failed: %v\n", err)
return nil, err
}