diff --git a/v2/internal/system/packagemanager/apt.go b/v2/internal/system/packagemanager/apt.go index 7fe9f444..a01c8b03 100644 --- a/v2/internal/system/packagemanager/apt.go +++ b/v2/internal/system/packagemanager/apt.go @@ -4,6 +4,9 @@ package packagemanager import ( + "bytes" + "os" + "os/exec" "regexp" "strings" @@ -62,8 +65,13 @@ func (a *Apt) PackageInstalled(pkg *Package) (bool, error) { if pkg.SystemPackage == false { return false, nil } - stdout, _, err := shell.RunCommand(".", "apt", "-qq", "list", pkg.Name) - return strings.Contains(stdout, "[installed]"), err + cmd := exec.Command("apt", "-qq", "list", pkg.Name) + var stdo, stde bytes.Buffer + cmd.Stdout = &stdo + cmd.Stderr = &stde + cmd.Env = append(os.Environ(), "LC_ALL=en_US.utf8") + err := cmd.Run() + return strings.Contains(stdo.String(), "[installed]"), err } // PackageAvailable tests if the given package is available for installation diff --git a/v2/internal/system/system.go b/v2/internal/system/system.go index 341f7594..de6067d5 100644 --- a/v2/internal/system/system.go +++ b/v2/internal/system/system.go @@ -1,11 +1,10 @@ package system import ( - "os/exec" - "strings" - "github.com/wailsapp/wails/v2/internal/system/operatingsystem" "github.com/wailsapp/wails/v2/internal/system/packagemanager" + "os/exec" + "strings" ) var ( @@ -98,6 +97,53 @@ func checkNSIS() *packagemanager.Dependancy { } } +func checkGCC() *packagemanager.Dependancy { + + version := packagemanager.AppVersion("gcc") + + return &packagemanager.Dependancy{ + Name: "gcc ", + PackageName: "N/A", + Installed: version != "", + InstallCommand: "Install via your package manager", + Version: version, + Optional: false, + External: false, + } +} + +func checkPkgConfig() *packagemanager.Dependancy { + + version := packagemanager.AppVersion("pkg-config") + + return &packagemanager.Dependancy{ + Name: "pkg-config ", + PackageName: "N/A", + Installed: version != "", + InstallCommand: "Install via your package manager", + Version: version, + Optional: false, + External: false, + } +} + +func checkLibrary(name string) func() *packagemanager.Dependancy { + return func() *packagemanager.Dependancy { + output, _, _ := shell.RunCommand(".", "pkg-config", "--cflags", name) + installed := len(strings.TrimSpace(output)) > 0 + + return &packagemanager.Dependancy{ + Name: "lib" + name + " ", + PackageName: "N/A", + Installed: installed, + InstallCommand: "Install via your package manager", + Version: "N/A", + Optional: false, + External: false, + } + } +} + func checkDocker() *packagemanager.Dependancy { // Check for npm diff --git a/v2/internal/system/system_linux.go b/v2/internal/system/system_linux.go index a591d741..213222e2 100644 --- a/v2/internal/system/system_linux.go +++ b/v2/internal/system/system_linux.go @@ -8,6 +8,26 @@ import ( "github.com/wailsapp/wails/v2/internal/system/packagemanager" ) +func checkLocallyInstalled(checker func() *packagemanager.Dependancy, dependency *packagemanager.Dependancy) { + if !dependency.Installed { + locallyInstalled := checker() + if locallyInstalled.Installed { + dependency.Installed = true + dependency.Version = locallyInstalled.Version + } + } +} + +var checkerFunctions = map[string]func() *packagemanager.Dependancy{ + "npm": checkNPM, + "docker": checkDocker, + "upx": checkUPX, + "gcc": checkGCC, + "pkg-config": checkPkgConfig, + "libgtk-3": checkLibrary("libgtk-3"), + "libwebkit": checkLibrary("libwebkit"), +} + func (i *Info) discover() error { var err error @@ -24,26 +44,9 @@ func (i *Info) discover() error { return err } for _, dep := range dependencies { - if dep.Name == "npm" { - locallyInstalled := checkNPM() - if locallyInstalled.Installed { - dep.Installed = true - dep.Version = locallyInstalled.Version - } - } - if dep.Name == "docker" { - locallyInstalled := checkDocker() - if locallyInstalled.Installed { - dep.Installed = true - dep.Version = locallyInstalled.Version - } - } - if dep.Name == "upx" { - locallyInstalled := checkUPX() - if locallyInstalled.Installed { - dep.Installed = true - dep.Version = locallyInstalled.Version - } + checker := checkerFunctions[dep.Name] + if checker != nil { + checkLocallyInstalled(checker, dep) } if dep.Name == "nsis" { locallyInstalled := checkNSIS()