5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-03 06:51:26 +08:00
wails/v2/internal/system/system.go
Ian M. Jones 82cc5498f1
Add nixpkgs support to doctor command. (#1551)
* Dependancy => Dependency typo fix.

* Add Nixpkgs support to doctor command.

* Add mention of nixpkgs to linux distro support doc.
2022-07-13 07:29:41 +10:00

152 lines
3.8 KiB
Go

package system
import (
"github.com/wailsapp/wails/v2/internal/shell"
"github.com/wailsapp/wails/v2/internal/system/operatingsystem"
"github.com/wailsapp/wails/v2/internal/system/packagemanager"
"os/exec"
"strings"
)
var (
IsAppleSilicon bool
)
// Info holds information about the current operating system,
// package manager and required dependancies
type Info struct {
OS *operatingsystem.OS
PM packagemanager.PackageManager
Dependencies packagemanager.DependencyList
}
// GetInfo scans the system for operating system details,
// the system package manager and the status of required
// dependancies.
func GetInfo() (*Info, error) {
var result Info
err := result.discover()
if err != nil {
return nil, err
}
return &result, nil
}
func checkNPM() *packagemanager.Dependency {
// Check for npm
output, err := exec.Command("npm", "-version").Output()
installed := true
version := ""
if err != nil {
installed = false
} else {
version = strings.TrimSpace(strings.Split(string(output), "\n")[0])
}
return &packagemanager.Dependency{
Name: "npm ",
PackageName: "N/A",
Installed: installed,
InstallCommand: "Available at https://nodejs.org/en/download/",
Version: version,
Optional: false,
External: false,
}
}
func checkUPX() *packagemanager.Dependency {
// Check for npm
output, err := exec.Command("upx", "-V").Output()
installed := true
version := ""
if err != nil {
installed = false
} else {
version = strings.TrimSpace(strings.Split(string(output), "\n")[0])
}
return &packagemanager.Dependency{
Name: "upx ",
PackageName: "N/A",
Installed: installed,
InstallCommand: "Available at https://upx.github.io/",
Version: version,
Optional: true,
External: false,
}
}
func checkNSIS() *packagemanager.Dependency {
// Check for nsis installer
output, err := exec.Command("makensis", "-VERSION").Output()
installed := true
version := ""
if err != nil {
installed = false
} else {
version = strings.TrimSpace(strings.Split(string(output), "\n")[0])
}
return &packagemanager.Dependency{
Name: "nsis ",
PackageName: "N/A",
Installed: installed,
InstallCommand: "Available at https://nsis.sourceforge.io/Download",
Version: version,
Optional: true,
External: false,
}
}
func checkLibrary(name string) func() *packagemanager.Dependency {
return func() *packagemanager.Dependency {
output, _, _ := shell.RunCommand(".", "pkg-config", "--cflags", name)
installed := len(strings.TrimSpace(output)) > 0
return &packagemanager.Dependency{
Name: "lib" + name + " ",
PackageName: "N/A",
Installed: installed,
InstallCommand: "Install via your package manager",
Version: "N/A",
Optional: false,
External: false,
}
}
}
func checkDocker() *packagemanager.Dependency {
// Check for npm
output, err := exec.Command("docker", "version").Output()
installed := true
version := ""
// Docker errors if it is not running so check for that
if len(output) == 0 && err != nil {
installed = false
} else {
// Version is in a line like: " Version: 20.10.5"
versionOutput := strings.Split(string(output), "\n")
for _, line := range versionOutput[1:] {
splitLine := strings.Split(line, ":")
if len(splitLine) > 1 {
key := strings.TrimSpace(splitLine[0])
if key == "Version" {
version = strings.TrimSpace(splitLine[1])
break
}
}
}
}
return &packagemanager.Dependency{
Name: "docker ",
PackageName: "N/A",
Installed: installed,
InstallCommand: "Available at https://www.docker.com/products/docker-desktop",
Version: version,
Optional: true,
External: false,
}
}