diff options
Diffstat (limited to 'main.go')
| -rw-r--r-- | main.go | 73 |
1 files changed, 62 insertions, 11 deletions
@@ -5,12 +5,16 @@ package main import ( "debug/buildinfo" + "embed" "fmt" "os" + "os/exec" "path/filepath" + "plugin" "unicode" "go.wit.com/dev/alexflint/arg" + "go.wit.com/gui" "go.wit.com/log" ) @@ -18,9 +22,16 @@ import ( var VERSION string var BUILDTIME string +// used for shell auto completion +var ARGNAME string = "fixup" // todo: get this from $0 ? + +//go:embed resources/* +var resources embed.FS + func main() { me = new(autoType) - me.argpp = arg.MustParse(&argv) + gui.InitArg() + me.pp = arg.MustParse(&argv) if argv.Bash { argv.doBash() @@ -31,12 +42,21 @@ func main() { os.Exit(0) } - if argv.Drives != nil { - doDrives() - doDrives2() - } + // checkPlug("../../../toolkits/gocui/gocui.so") + // checkPlug("/usr/lib/go-gui-toolkits/gocui.v0.22.46.so") + + /* + if argv.Drives != nil { + doDrives() + doDrives2() + } + */ - listenForBlockEvents() + // doDrives() + // okExit("everything compiled") + + go listenForBlockEvents() + doGui() okExit("everything compiled") } @@ -71,26 +91,57 @@ func dumpDebug() { // Get absolute path of the currently running binary exePath, err := os.Executable() if err != nil { - fmt.Println("Error getting executable path:", err) + log.Println("Error getting executable path:", err) return } // Resolve symlinks if necessary exePath, err = filepath.EvalSymlinks(exePath) if err != nil { - fmt.Println("Error resolving symlink:", err) + log.Println("Error resolving symlink:", err) return } // Read build info bi, err := buildinfo.ReadFile(exePath) if err != nil { - fmt.Println("Error reading build info:", err) + log.Println("Error reading build info:", err) return } - fmt.Println("Go Version:", bi.GoVersion) + log.Println("Go Version:", bi.GoVersion) for _, dep := range bi.Deps { - fmt.Printf("Dependency: %s %s\n", dep.Path, dep.Version) + log.Printf("Dependency: %s %s\n", dep.Path, dep.Version) + } +} + +func checkPlug(pluginPath string) *plugin.Plugin { + if err := checkPluginViaSubprocess(pluginPath); err != nil { + fmt.Printf("Plugin check failed: %v\n", err) + return nil + } + + p, err := plugin.Open(pluginPath) + if err != nil { + log.Fatalf("plugin.Open failed: %v", err) + } + + log.Println("Plugin loaded successfully.") + return p +} + +func checkPluginViaSubprocess(path string) error { + exe, err := os.Executable() + if err != nil { + return fmt.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) + } + + cmd := exec.Command(resolved, "--gui-check-plugin", path) + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + return cmd.Run() } |
