From 10d4942e6c1815634ce54150d8882db122beebf2 Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Thu, 6 Mar 2025 07:56:23 -0600 Subject: add options to debug plugin load failures --- argv.go | 1 + init.go | 3 +++ plugin.go | 20 ++++++++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/argv.go b/argv.go index e5514de..b7e75df 100644 --- a/argv.go +++ b/argv.go @@ -14,6 +14,7 @@ type ArgsGui struct { NoGui bool `arg:"--no-gui" help:"ignore all these gui problems"` GuiPlugin string `arg:"--gui" help:"Use this gui toolkit [andlabs,gocui,nocui,stdin]"` GuiFile string `arg:"--gui-file" help:"Use a specific plugin.so file"` + GuiTest string `arg:"--gui-test" help:"test a specific plugin.so will load"` GuiVerbose bool `arg:"--gui-verbose" help:"enable all logging"` } diff --git a/init.go b/init.go index f56fa15..d6e1678 100644 --- a/init.go +++ b/init.go @@ -281,6 +281,9 @@ func New() *Node { // trapStdout() } */ + if argGui.GuiTest != "" { + testPlugin() + } initNew() return me.rootNode diff --git a/plugin.go b/plugin.go index 0a8f993..396829d 100644 --- a/plugin.go +++ b/plugin.go @@ -149,6 +149,15 @@ func searchPaths(name string) *aplug { var pfile []byte var err error + // try the filename from the command line first + if argGui.GuiFile != "" { + p := initToolkit(name, argGui.GuiFile) + if p != nil { + log.Log(NOW, "gui.Init() loaded ok!", argGui.GuiFile) + return p + } + } + // first try to load the embedded plugin file // always try this first as it should have been // tested by whomever compiled your binary @@ -219,6 +228,17 @@ func searchPaths(name string) *aplug { return nil } +// tests the plugin file will load +func testPlugin() { + _, err := plugin.Open(argGui.GuiTest) + if err != nil { + log.Log(PLUG, "plugin.Open() FAILED =", argGui.GuiTest, err) + os.Exit(-1) + } + log.Log(PLUG, "plugin.Open() SUCCESS loading plugin =", argGui.GuiTest) + os.Exit(0) +} + // load module // 1. open the shared object file to load the symbols func initToolkit(name string, filename string) *aplug { -- cgit v1.2.3