diff --git a/cmd/energy/build.bat b/cmd/energy/build.bat index 207116e902c00f62eac2892a853fcc6a4e04d24c..ea081d0a89f4d1bf7e5296df67b1afec8d3cab8a 100644 --- a/cmd/energy/build.bat +++ b/cmd/energy/build.bat @@ -2,18 +2,18 @@ SET CGO_ENABLED=1 set GOARCH=386 set GOOS=windows -go build -o energy-32.exe energy.go +go build -ldflags "-s -w" -o energy-32.exe energy.go set GOARCH=amd64 set GOOS=windows -go build -o energy-64.exe energy.go +go build -ldflags "-s -w" -o energy-64.exe energy.go set GOARCH=amd64 set GOOS=darwin -go build -o energy-darwin-64 energy.go +go build -ldflags "-s -w" -o energy-darwin-64 energy.go set GOARCH=amd64 set GOOS=linux -go build -o energy-linux-64 energy.go +go build -ldflags "-s -w" -o energy-linux-64 energy.go pause \ No newline at end of file diff --git a/cmd/internal/consts.go b/cmd/internal/consts.go index 53357c1afd9926bca94fdf31f193978c75271564..fd9a3c47c198dbf029bc1fef496ccab59dcfb73a 100644 --- a/cmd/internal/consts.go +++ b/cmd/internal/consts.go @@ -10,10 +10,19 @@ package internal +import "runtime" + const ( cefKey = "cef" energyKey = "energy" download_version_config_url = "https://energy.yanghy.cn/autoconfig/edv.json" download_extract_url = "https://energy.yanghy.cn/autoconfig/extract.json" frameworkCache = "EnergyFrameworkDownloadCache" + ENERGY_HOME_KEY = "ENERGY_HOME" +) + +const ( + isWindows = runtime.GOOS == "windows" //support + isLinux = runtime.GOOS == "linux" //support + isDarwin = runtime.GOOS == "darwin" //support ) diff --git a/cmd/internal/install.go b/cmd/internal/install.go index f28d17e6ea5635d11a68fb694b5c977d5218c8ad..d85f684ecabb01d8679fad1ed0302b26c50a39a0 100644 --- a/cmd/internal/install.go +++ b/cmd/internal/install.go @@ -18,8 +18,7 @@ import ( "encoding/json" "fmt" progressbar "github.com/energye/energy/v2/cmd/internal/progress-bar" - "github.com/energye/energy/v2/common" - "github.com/energye/energy/v2/consts" + "github.com/energye/golcl/energy/homedir" "github.com/energye/golcl/tools/command" "io" "io/fs" @@ -65,9 +64,40 @@ func init() { CmdInstall.Run = runInstall } +const ( + GTK3 = iota + 1 + GTK2 +) + // https://cef-builds.spotifycdn.com/cef_binary_107.1.11%2Bg26c0b5e%2Bchromium-107.0.5304.110_windows64.tar.bz2 // 运行安装 func runInstall(c *CommandConfig) error { + var ( + gtk int + ) + if isLinux { // linux, gtk2, gtk3 install + var gtksel = []string{"", "GTK3", "GTK2"} + println(` +Your current installation environment is Linux and there are two GTK solutions available, namely GTK2 GTK3 + GTK2: Supports LCL window and can use various LCL controls. The CEF<=106 version supports by default + GTK3: does not support LCL windows and most LCL controls, CEF>=107 version default support + Enter the number to select the installation support for different versions of GTK framework + Number Description + 1: GTK3 + 2: GTK2`) + // 输入选择GTK支持框架 + for { + print("Please enter the number: ") + fmt.Scan(>k) + if gtk == GTK3 || gtk == GTK2 { + break + } else { + println("Number input error, please re-enter. Only 1: GTK3 or 2: GTK2 are supported") + } + } + println("Support framework selected:", gtksel[gtk]) + } + if c.Install.Path == "" { c.Install.Path = c.Wd } @@ -112,8 +142,19 @@ func runInstall(c *CommandConfig) error { println("Invalid version number:", c.Install.Version) os.Exit(1) } - var versionCEF = version["cef"].(string) - var versionENERGY = version["energy"].(string) + var ( + versionCEF, versionENERGY string + ) + if isLinux { + if gtk == GTK3 { + versionCEF = ToRNilString(version["cef"], "") + } else { + versionCEF = ToRNilString(version["cefgtk2"], "") + } + } else { + versionCEF = ToString(version["cef"]) + } + versionENERGY = version["energy"].(string) var downloadURL map[string]interface{} if c.Install.Download == "gitee" { downloadURL = edv["gitee"].(map[string]interface{}) @@ -124,7 +165,7 @@ func runInstall(c *CommandConfig) error { os.Exit(1) } libCEFOS, isSupport := cefOS() - libEnergyOS, isSupport := energyOS() + libEnergyOS, isSupport := energyOS(gtk) var downloadCefURL = downloadURL["cefURL"].(string) var downloadEnergyURL = downloadURL["energyURL"].(string) downloadCefURL = strings.ReplaceAll(downloadCefURL, "{version}", versionCEF) @@ -194,8 +235,8 @@ func runInstall(c *CommandConfig) error { println("Remove file", rmFile) os.Remove(rmFile) } - setEnergyHomeEnv(consts.ENERGY_HOME_KEY, installPathName) - println("\n", CmdInstall.Short, "SUCCESS \nVersion:", c.Install.Version) + setEnergyHomeEnv(ENERGY_HOME_KEY, installPathName) + println("\n", CmdInstall.Short, "SUCCESS \nVersion:", c.Install.Version, "=>", versionENERGY) return nil } @@ -205,20 +246,21 @@ func setEnergyHomeEnv(key, value string) { cmd.MessageCallback = func(s []byte, e error) { fmt.Println("CMD", s, " error", e) } - if common.IsWindows() { + if isWindows { var args = []string{"/c", "setx", key, value} cmd.Command("cmd.exe", args...) } else { var envFiles []string var energyHomeKey = fmt.Sprintf("export %s", key) var energyHome = fmt.Sprintf("export %s=%s", key, value) - if common.IsLinux() { + if isLinux { envFiles = []string{".profile", ".zshrc", ".bashrc"} - } else if common.IsDarwin() { + } else if isDarwin { envFiles = []string{".profile", ".zshrc", ".bash_profile"} } + homeDir, _ := homedir.Dir() for _, file := range envFiles { - var fp = path.Join(consts.HomeDir, file) + var fp = path.Join(homeDir, file) cmd.Command("touch", fp) f, err := os.OpenFile(fp, os.O_RDWR|os.O_APPEND, 0666) if err == nil { @@ -269,18 +311,18 @@ func setEnergyHomeEnv(key, value string) { } func cefOS() (string, bool) { - if common.IsWindows() { // windows arm for 64 bit, windows for 32/64 bit + if isWindows { // windows arm for 64 bit, windows for 32/64 bit if runtime.GOARCH == "arm64" { return "windowsarm64", true } return fmt.Sprintf("windows%d", strconv.IntSize), true - } else if common.IsLinux() { //linux for 64 bit + } else if isLinux { //linux for 64 bit if runtime.GOARCH == "arm64" { return "linuxarm64", true } else if runtime.GOARCH == "amd64" { return "linux64", true } - } else if common.IsDarwin() { // macosx for 64 bit + } else if isDarwin { // macosx for 64 bit if runtime.GOARCH == "arm64" { return "macosarm64", true } else if runtime.GOARCH == "amd64" { @@ -291,12 +333,15 @@ func cefOS() (string, bool) { return fmt.Sprintf("%v %v", runtime.GOOS, runtime.GOARCH), false } -func energyOS() (string, bool) { - if common.IsWindows() { +func energyOS(gtk int) (string, bool) { + if isWindows { return fmt.Sprintf("Windows %d bits", strconv.IntSize), true - } else if common.IsLinux() { - return "Linux x86 64 bits", true - } else if common.IsDarwin() { + } else if isLinux { + if gtk == GTK3 { + return "Linux x86 64 bits", true + } + return "Linux GTK2 x86 64 bits", true + } else if isDarwin { return "MacOSX x86 64 bits", true } //not support diff --git a/cmd/internal/tools.go b/cmd/internal/tools.go new file mode 100644 index 0000000000000000000000000000000000000000..f07139778faac2b3bcb7c0a24398d68d3378a764 --- /dev/null +++ b/cmd/internal/tools.go @@ -0,0 +1,25 @@ +//---------------------------------------- +// +// Copyright © yanghy. All Rights Reserved. +// +// Licensed under Apache License Version 2.0, January 2004 +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +//---------------------------------------- + +package internal + +func ToString(v interface{}) string { + if v == nil { + return "" + } + return v.(string) +} + +func ToRNilString(v interface{}, new string) string { + if v == nil { + return new + } + return v.(string) +} diff --git a/cmd/internal/version.go b/cmd/internal/version.go index 2aa051362d1b4d6524c8df303941dcba89b52a6b..3a28a8b3bef6b0e9d505fc48a3620e2ee8dc30de 100644 --- a/cmd/internal/version.go +++ b/cmd/internal/version.go @@ -55,9 +55,13 @@ func runVersion(c *CommandConfig) error { var version = keys[i] var ver = versionList[version].(map[string]interface{}) if c.Version.All { + cef := ToRNilString(ver["cef"], "--") + cefgtk2 := ToRNilString(ver["cefgtk2"], "--") + energy := ToRNilString(ver["energy"], "--") println(" ", version, fmt.Sprintf(` + ENERGY: %s CEF: %s - ENERGY: %s`, ver["cef"].(string), ver["energy"].(string))) + CEF-GTK2: %s`, energy, cef, cefgtk2)) } else { println(" ", version) }