5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-03 22:20:06 +08:00
wails/cmd/prerequisites.go
2018-12-19 12:49:04 -08:00

93 lines
2.4 KiB
Go

package cmd
import (
"fmt"
"runtime"
)
// binaryPrerequisite defines a binaryPrerequisite
type binaryPrerequisite struct {
Name string
Help string
Path string
}
func newBinaryPrerequisite(name, help string) *binaryPrerequisite {
return &binaryPrerequisite{Name: name, Help: help}
}
// binaryPrerequisites is a list of binaryPrerequisites
type binaryPrerequisites []*binaryPrerequisite
// Add given prereq object to list
func (p *binaryPrerequisites) Add(prereq *binaryPrerequisite) {
*p = append(*p, prereq)
}
func (p *binaryPrerequisites) check() (success *binaryPrerequisites, failed *binaryPrerequisites) {
success = &binaryPrerequisites{}
failed = &binaryPrerequisites{}
programHelper := NewProgramHelper()
for _, prereq := range *p {
bin := programHelper.FindProgram(prereq.Name)
if bin == nil {
failed.Add(prereq)
} else {
path, err := bin.GetFullPathToBinary()
if err != nil {
failed.Add(prereq)
} else {
prereq.Path = path
success.Add(prereq)
}
}
}
return success, failed
}
var platformbinaryPrerequisites = make(map[string]*binaryPrerequisites)
func init() {
platformbinaryPrerequisites["darwin"] = &binaryPrerequisites{}
newDarwinbinaryPrerequisite("clang", "Please install with `xcode-select --install` and try again")
platformbinaryPrerequisites["linux"] = &binaryPrerequisites{}
linuxInfo := GetLinuxDistroInfo()
switch linuxInfo.Distribution {
case Ubuntu:
newLinuxbinaryPrerequisite("gcc", "Please install with 'sudo apt install build-essential' ")
default:
newLinuxbinaryPrerequisite("gcc", "Please install with your system package manager.")
}
}
func newDarwinbinaryPrerequisite(name, help string) {
prereq := newBinaryPrerequisite(name, help)
platformbinaryPrerequisites["darwin"].Add(prereq)
}
func newLinuxbinaryPrerequisite(name, help string) {
prereq := newBinaryPrerequisite(name, help)
platformbinaryPrerequisites["linux"].Add(prereq)
}
func CheckBinaryPrerequisites() (*binaryPrerequisites, *binaryPrerequisites, error) {
platformPreReqs := platformbinaryPrerequisites[runtime.GOOS]
if platformPreReqs == nil {
return nil, nil, fmt.Errorf("Platform '%s' is not supported at this time", runtime.GOOS)
}
success, failed := platformPreReqs.check()
return success, failed, nil
}
func CheckNonBinaryPrerequisites() error {
var err error
// Check non-binaries
if runtime.GOOS == "linux" {
}
return err
}