diff --git a/cmd/linux.go b/cmd/linux.go index 067e3068..baecd48e 100644 --- a/cmd/linux.go +++ b/cmd/linux.go @@ -1,6 +1,8 @@ package cmd -import "fmt" +import ( + "strings" +) // LinuxDistribution is of type int type LinuxDistribution int @@ -12,23 +14,45 @@ const ( // DistroInfo contains all the information relating to a linux distribution type DistroInfo struct { - distribution LinuxDistribution - name string - release string + Distribution LinuxDistribution + Description string + Release string + Codename string + DistributorId string } -func getLinuxDistroInfo() *DistroInfo { +func GetLinuxDistroInfo() *DistroInfo { result := &DistroInfo{} program := NewProgramHelper() // Does lsb_release exist? lsbRelease := program.FindProgram("lsb_release") if lsbRelease != nil { - stdout, _, err := lsbRelease.Run("-a") + stdout, _, err, _ := lsbRelease.Run("-a") if err != nil { return nil } - fmt.Println(stdout) + + for _, line := range strings.Split(stdout, "\n") { + if strings.Contains(line, ":") { + // Iterate lines a + details := strings.Split(line, ":") + key := strings.TrimSpace(details[0]) + value := strings.TrimSpace(details[1]) + switch key { + case "Distributor ID": + result.DistributorId = value + case "Description": + result.Description = value + case "Release": + result.Release = value + case "Codename": + result.Codename = value + + } + } + } + } return result } diff --git a/cmd/prerequisites.go b/cmd/prerequisites.go index bdc8c573..d5dcd2c7 100644 --- a/cmd/prerequisites.go +++ b/cmd/prerequisites.go @@ -51,6 +51,14 @@ 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) { @@ -58,6 +66,11 @@ func newDarwinbinaryPrerequisite(name, help string) { 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 {