mirror of
https://github.com/wailsapp/wails.git
synced 2025-05-02 20:03:01 +08:00
143 lines
6.7 KiB
Go
143 lines
6.7 KiB
Go
package cmd
|
|
|
|
import (
|
|
"fmt"
|
|
"runtime"
|
|
)
|
|
|
|
// Prerequisite defines a Prerequisite!
|
|
type Prerequisite struct {
|
|
Name string
|
|
Help string
|
|
Path string
|
|
}
|
|
|
|
func newPrerequisite(name, help string) *Prerequisite {
|
|
return &Prerequisite{Name: name, Help: help}
|
|
}
|
|
|
|
// Prerequisites is a list of things required to use Wails
|
|
type Prerequisites []*Prerequisite
|
|
|
|
// Add given prereq object to list
|
|
func (p *Prerequisites) Add(prereq *Prerequisite) {
|
|
*p = append(*p, prereq)
|
|
}
|
|
|
|
// GetRequiredPrograms returns a list of programs required for the platform
|
|
func GetRequiredPrograms() (*Prerequisites, error) {
|
|
switch runtime.GOOS {
|
|
case "darwin":
|
|
return getRequiredProgramsOSX(), nil
|
|
case "linux":
|
|
return getRequiredProgramsLinux(), nil
|
|
case "windows":
|
|
return getRequiredProgramsWindows(), nil
|
|
default:
|
|
return nil, fmt.Errorf("platform '%s' not supported at this time", runtime.GOOS)
|
|
}
|
|
}
|
|
|
|
func getRequiredProgramsOSX() *Prerequisites {
|
|
result := &Prerequisites{}
|
|
result.Add(newPrerequisite("clang", "Please install with `xcode-select --install` and try again"))
|
|
result.Add(newPrerequisite("npm", "Please install from https://nodejs.org/en/download/ and try again"))
|
|
return result
|
|
}
|
|
|
|
func getRequiredProgramsLinux() *Prerequisites {
|
|
result := &Prerequisites{}
|
|
distroInfo := GetLinuxDistroInfo()
|
|
switch distroInfo.Distribution {
|
|
case Debian:
|
|
result.Add(newPrerequisite("gcc", "Please install with `sudo apt install build-essentials` and try again"))
|
|
result.Add(newPrerequisite("pkg-config", "Please install with `sudo apt install pkg-config` and try again"))
|
|
result.Add(newPrerequisite("npm", "Please install with `curl -sL https://deb.nodesource.com/setup_12.x | sudo bash - && sudo apt-get install -y nodejs` and try again"))
|
|
case Ubuntu:
|
|
result.Add(newPrerequisite("gcc", "Please install with `sudo apt install build-essentials` and try again"))
|
|
result.Add(newPrerequisite("pkg-config", "Please install with `sudo apt install pkg-config` and try again"))
|
|
result.Add(newPrerequisite("npm", "Please install with `curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash - && sudo apt-get install -y nodejs` and try again"))
|
|
case Zorin:
|
|
result.Add(newPrerequisite("gcc", "Please install with `sudo apt install build-essentials` and try again"))
|
|
result.Add(newPrerequisite("pkg-config", "Please install with `sudo apt install pkg-config` and try again"))
|
|
result.Add(newPrerequisite("npm", "Please install with `sudo snap install node --channel=12/stable --classic` and try again"))
|
|
case Fedora:
|
|
result.Add(newPrerequisite("gcc", "Please install with `sudo yum install gcc-c++ make` and try again"))
|
|
result.Add(newPrerequisite("pkg-config", "Please install with `sudo yum install pkgconf-pkg-config` and try again"))
|
|
result.Add(newPrerequisite("npm", "Please install with `curl -sL https://rpm.nodesource.com/setup_12.x | sudo bash - && sudo yum install -y nodejs` and try again"))
|
|
case CentOS:
|
|
result.Add(newPrerequisite("gcc", "Please install with `sudo yum install gcc gcc-c++ make` and try again"))
|
|
result.Add(newPrerequisite("pkg-config", "Please install with `sudo yum install pkgconfig` and try again"))
|
|
result.Add(newPrerequisite("npm", "Please install with `curl -sL https://rpm.nodesource.com/setup_12.x | sudo bash - && sudo yum install -y nodejs` and try again"))
|
|
default:
|
|
result.Add(newPrerequisite("gcc", "Please install with your system package manager and try again"))
|
|
result.Add(newPrerequisite("pkg-config", "Please install with your system package manager and try again"))
|
|
result.Add(newPrerequisite("npm", "Please install from https://nodejs.org/en/download/ and try again"))
|
|
}
|
|
return result
|
|
}
|
|
|
|
// TODO: Test this on Windows
|
|
func getRequiredProgramsWindows() *Prerequisites {
|
|
result := &Prerequisites{}
|
|
result.Add(newPrerequisite("gcc", "Please install gcc from here and try again: http://tdm-gcc.tdragon.net/download. You will need to add the bin directory to your path, EG: C:\\TDM-GCC-64\\bin\\"))
|
|
result.Add(newPrerequisite("npm", "Please install node/npm from here and try again: https://nodejs.org/en/download/"))
|
|
return result
|
|
}
|
|
|
|
// GetRequiredLibraries returns a list of libraries (packages) required for the platform
|
|
func GetRequiredLibraries() (*Prerequisites, error) {
|
|
switch runtime.GOOS {
|
|
case "darwin":
|
|
return getRequiredLibrariesOSX()
|
|
case "linux":
|
|
return getRequiredLibrariesLinux()
|
|
case "windows":
|
|
return getRequiredLibrariesWindows()
|
|
default:
|
|
return nil, fmt.Errorf("platform '%s' not supported at this time", runtime.GOOS)
|
|
}
|
|
}
|
|
|
|
func getRequiredLibrariesOSX() (*Prerequisites, error) {
|
|
result := &Prerequisites{}
|
|
return result, nil
|
|
}
|
|
|
|
func getRequiredLibrariesLinux() (*Prerequisites, error) {
|
|
result := &Prerequisites{}
|
|
distroInfo := GetLinuxDistroInfo()
|
|
switch distroInfo.Distribution {
|
|
case Debian:
|
|
result.Add(newPrerequisite("libgtk-3-dev", "Please install with `sudo apt install libgtk-3-dev` and try again"))
|
|
result.Add(newPrerequisite("libwebkit2gtk-4.0-dev", "Please install with `sudo apt install libwebkit2gtk-4.0-dev` and try again"))
|
|
case Ubuntu:
|
|
result.Add(newPrerequisite("libgtk-3-dev", "Please install with `sudo apt install libgtk-3-dev` and try again"))
|
|
result.Add(newPrerequisite("libwebkit2gtk-4.0-dev", "Please install with `sudo apt install libwebkit2gtk-4.0-dev` and try again"))
|
|
case Zorin:
|
|
result.Add(newPrerequisite("libgtk-3-dev", "Please install with `sudo apt install libgtk-3-dev` and try again"))
|
|
result.Add(newPrerequisite("libwebkit2gtk-4.0-dev", "Please install with `sudo apt install libwebkit2gtk-4.0-dev` and try again"))
|
|
case Gentoo:
|
|
result.Add(newPrerequisite("gtk+:3", "Please install with `sudo emerge gtk+:3` and try again"))
|
|
result.Add(newPrerequisite("webkit-gtk", "Please install with `sudo emerge webkit-gtk` and try again"))
|
|
case Arch:
|
|
result.Add(newPrerequisite("gtk3", "Please install with `sudo pacman -S gtk3` and try again"))
|
|
result.Add(newPrerequisite("webkit2gtk", "Please install with `sudo pacman -S webkit2gtk` and try again"))
|
|
case Fedora:
|
|
result.Add(newPrerequisite("gtk3-devel", "Please install with `sudo yum install gtk3-devel` and try again"))
|
|
result.Add(newPrerequisite("webkit2gtk3-devel", "Please install with `sudo yum install webkit2gtk3-devel` and try again"))
|
|
case CentOS:
|
|
result.Add(newPrerequisite("gtk3-devel", "Please install with `sudo yum install gtk3-devel` and try again"))
|
|
result.Add(newPrerequisite("webkitgtk3-devel", "Please install with `sudo yum install webkitgtk3-devel` and try again"))
|
|
default:
|
|
result.Add(newPrerequisite("libgtk-3-dev", "Please install with your system package manager and try again"))
|
|
result.Add(newPrerequisite("libwebkit2gtk-4.0-dev", "Please install with your system package manager and try again"))
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
func getRequiredLibrariesWindows() (*Prerequisites, error) {
|
|
result := &Prerequisites{}
|
|
return result, nil
|
|
}
|