feat: add gccversioncommand + windows support

This commit is contained in:
Lea Anthony
2019-08-07 08:54:28 +10:00
parent 6b78cdd838
commit eca750e895
3 changed files with 51 additions and 48 deletions

View File

@@ -7,15 +7,20 @@ import (
"gopkg.in/yaml.v3"
)
// LinuxDB is the database for linux distribution data.
type LinuxDB struct {
Distributions map[string]*Distribution `yaml:"distributions"`
}
// Distribution holds the os-release ID and a map of releases.
type Distribution struct {
ID string `yaml:"id"`
Releases map[string]*Release `yaml:"releases"`
}
// GetRelease attempts to return the specific Release information
// for the given release name. If there is no specific match, the
// default release data is returned.
func (d *Distribution) GetRelease(name string) *Release {
result := d.Releases[name]
if result == nil {
@@ -24,18 +29,29 @@ func (d *Distribution) GetRelease(name string) *Release {
return result
}
// Release holds the name and version of the release as given by
// os-release. Programs is a slice of dependant programs required
// to be present on the local installation for Wails to function.
// Libraries is a slice of libraries that must be present for Wails
// applications to compile.
type Release struct {
Name string `yaml:"name"`
Version string `yaml:"version"`
Programs []*Prerequisite `yaml:"programs"`
Libraries []*Prerequisite `yaml:"libraries"`
Name string `yaml:"name"`
Version string `yaml:"version"`
GccVersionCommand string `yaml:"gccversioncommand"`
Programs []*Prerequisite `yaml:"programs"`
Libraries []*Prerequisite `yaml:"libraries"`
}
// Prerequisite is a simple struct containing a program/library name
// plus the distribution specific help text indicating how to install
// it.
type Prerequisite struct {
Name string `yaml:"name"`
Help string `yaml:"help,omitempty"`
}
// Load will load the given filename from disk and attempt to
// import the data into the LinuxDB.
func (l *LinuxDB) Load(filename string) error {
if fs.FileExists(filename) {
data, err := fs.LoadAsBytes(filename)
@@ -47,41 +63,21 @@ func (l *LinuxDB) Load(filename string) error {
return nil
}
// ImportData will unmarshal the given YAML formatted data
// into the LinuxDB
func (l *LinuxDB) ImportData(data []byte) error {
return yaml.Unmarshal(data, l)
}
// GetDistro returns the Distribution information for the
// given distribution name. If the distribution is not supported,
// nil is returned.
func (l *LinuxDB) GetDistro(name string) *Distribution {
return l.Distributions[name]
}
// func (l *LinuxDB) GetDistribution(name string) *Distribution {
// return l.Distributions[name]
// }
// func (l *LinuxDB) Save() error {
// return fs.SaveAsJSON(l, l.filename)
// }
// func (l *LinuxDB) GetPreRequisistes(name string, version string) ([]*DistributionPrerequisite, error) {
// distro := l.GetDistribution(name)
// if distro == nil {
// return nil, fmt.Errorf("distribution %s unsupported at this time", name)
// }
// releaseInfo := distro.GetReleaseOrDefault(version)
// return releaseInfo.Prerequisites, nil
// }
// func (l *LinuxDBDistribution) GetReleaseOrDefault(release string) *DistributionRelease {
// result := l.Releases[release]
// if result == nil {
// result = l.Releases["default"]
// }
// return result
// }
// NewLinuxDB creates a new LinuxDB instance from the bundled
// linuxdb.yaml file.
func NewLinuxDB() *LinuxDB {
data := mewn.Bytes("./linuxdb.yaml")
result := LinuxDB{

View File

@@ -6,6 +6,7 @@ distributions:
default:
name: Ubuntu
version: default
gccversioncommand: &gccdumpfullversion -dumpfullversion
programs: &ubuntudefaultprograms
- name: gcc
help: Please install with `sudo apt install build-essentials` and try again
@@ -24,6 +25,7 @@ distributions:
default:
version: default
name: Debian
gccversioncommand: &gccdumpversion -dumpversion
programs: *ubuntudefaultprograms
libraries: *ubuntudefaultlibraries
parrot:
@@ -32,6 +34,7 @@ distributions:
default:
version: default
name: Parrot
gccversioncommand: *gccdumpversion
programs: *ubuntudefaultprograms
libraries: *ubuntudefaultlibraries
zorin:
@@ -40,6 +43,7 @@ distributions:
default:
version: default
name: Zorin
gccversioncommand: *gccdumpversion
programs:
- name: gcc
help: Please install with `sudo apt install build-essentials` and try again
@@ -54,6 +58,7 @@ distributions:
default:
version: default
name: CentOS
gccversioncommand: *gccdumpversion
programs:
- name: gcc
help: Please install with `sudo yum install gcc-c++ make` and try again
@@ -72,6 +77,7 @@ distributions:
default:
version: default
name: Fedora
gccversioncommand: *gccdumpfullversion
programs:
- name: gcc
help: Please install with `sudo yum install gcc-c++ make` and try again
@@ -86,6 +92,7 @@ distributions:
default:
version: default
name: Arch Linux
gccversioncommand: *gccdumpversion
prerequisites:
- name: gtk3
help: Please install with `sudo pacman -S gtk3` and try again
@@ -103,6 +110,7 @@ distributions:
default:
version: default
name: Gentoo
gccversioncommand: *gccdumpversion
prerequisites:
- name: gtk+:3
help: Please install with `sudo emerge gtk+:3` and try again

View File

@@ -58,24 +58,23 @@ To help you in this process, we will ask for some information, add Go/Wails deta
case "linux":
// for linux we have to collect
// the distribution name
distro := cmd.GetLinuxDistroInfo()
// and use it as nested switch
switch distro.ID {
default: // most supported distros are printing the right result with just 'gcc -dumpversion'
gcc := program.FindProgram("gcc")
if gcc != nil {
stdout, _, _, _ := gcc.Run("-dumpversion")
gccVersion = strings.TrimSpace(stdout)
}
case "fedora", "ubuntu": // except fedora & ubuntu that require 'gcc -dumpfullversion'
gcc := program.FindProgram("gcc")
if gcc != nil {
stdout, _, _, _ := gcc.Run("-dumpfullversion")
gccVersion = strings.TrimSpace(stdout)
}
}
distroInfo := cmd.GetLinuxDistroInfo()
linuxDB := cmd.NewLinuxDB()
distro := linuxDB.GetDistro(distroInfo.ID)
release := distro.GetRelease(distroInfo.Release)
gccVersionCommand := release.GccVersionCommand
// TODO: windows support
gcc := program.FindProgram("gcc")
if gcc != nil {
stdout, _, _, _ := gcc.Run(gccVersionCommand)
gccVersion = strings.TrimSpace(stdout)
}
case "windows":
gcc := program.FindProgram("gcc")
if gcc != nil {
stdout, _, _, _ := gcc.Run("-dumpversion")
gccVersion = strings.TrimSpace(stdout)
}
}
npm := program.FindProgram("npm")