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:
parent
a278c9e164
commit
d7395fc56a
@ -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
|
||||
|
@ -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
|
||||
|
@ -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()
|
||||
|
Loading…
Reference in New Issue
Block a user