package main import ( "flag" "log" "os" "os/exec" "path/filepath" "vrc_osc_go/internal/app" "vrc_osc_go/internal/buildinfo" ) func main() { log.Printf("vrc_osc version=%s build=%s", buildinfo.Version, buildinfo.BuildTime) log.Printf("runtime main begin") var configPath string var mode string var noGUI bool flag.StringVar(&configPath, "config", "config/config.toml", "path to config.toml") flag.StringVar(&mode, "mode", "", "generate-json or extract-log") flag.BoolVar(&noGUI, "no-gui", false, "do not launch the GUI companion") flag.Parse() if mode == "" && !noGUI { log.Printf("launching gui companion") launchGUI() } log.Printf("calling app.Run config=%s mode=%s noGUI=%v", configPath, mode, noGUI) if err := app.Run(configPath, mode); err != nil { log.SetOutput(os.Stderr) log.Fatalf("vrc_osc_go: %v", err) } log.Printf("app.Run returned cleanly") } func launchGUI() { exe, err := os.Executable() if err != nil { log.Printf("launchGUI: os.Executable failed: %v", err) return } gui := filepath.Join(filepath.Dir(exe), "vrc_osc_gui.exe") log.Printf("launchGUI: exe=%s gui=%s", exe, gui) if _, err := os.Stat(gui); err != nil { log.Printf("launchGUI: gui missing: %v", err) return } if err := exec.Command(gui).Start(); err != nil { log.Printf("launchGUI: start failed: %v", err) return } log.Printf("launchGUI: started gui companion") }