5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-02 20:51:38 +08:00

Check system for user installed Linux dependencies (#1180)

* [linux] Fix discovery of other deps

* Update v2/internal/system/system_linux.go

Co-authored-by: stffabi <stffabi@users.noreply.github.com>

* Try setting locale before running apt

* Use LC_ALL

* Remove continue

Co-authored-by: stffabi <stffabi@users.noreply.github.com>
This commit is contained in:
Lea Anthony 2022-03-15 20:25:23 +11:00 committed by GitHub
parent a278c9e164
commit d7395fc56a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 82 additions and 25 deletions

View File

@ -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

View File

@ -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

View File

@ -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()