From 5552a8501b605327a33d12d0cb5be6818ae00471 Mon Sep 17 00:00:00 2001 From: Greg Helton Date: Sat, 6 Jul 2019 01:43:02 -0400 Subject: [PATCH] Add support for Gentoo --- cmd/linux.go | 17 +++++++++++++++++ cmd/prerequisites.go | 3 +++ cmd/system.go | 11 +++++++++++ 3 files changed, 31 insertions(+) diff --git a/cmd/linux.go b/cmd/linux.go index c15284958..5117e5e18 100644 --- a/cmd/linux.go +++ b/cmd/linux.go @@ -25,6 +25,8 @@ const ( RedHat // Debian distribution Debian + // Gentoo distribution + Gentoo ) // DistroInfo contains all the information relating to a linux distribution @@ -66,6 +68,8 @@ func GetLinuxDistroInfo() *DistroInfo { result.Distribution = Arch case "Debian": result.Distribution = Debian + case "Gentoo": + result.Distribution = Gentoo } case "Description": result.Description = value @@ -113,6 +117,8 @@ func GetLinuxDistroInfo() *DistroInfo { result.Distribution = Arch case "Debian GNU/Linux": result.Distribution = Debian + case "Gentoo/Linux": + result.Distribution = Gentoo default: result.Distribution = Unknown result.DistributorID = osName @@ -121,6 +127,17 @@ func GetLinuxDistroInfo() *DistroInfo { return result } +// EqueryInstalled uses equery to see if a package is installed +func EqueryInstalled(packageName string) (bool, error) { + program := NewProgramHelper() + equery := program.FindProgram("equery") + if equery == nil { + return false, fmt.Errorf("cannont check dependencies: equery not found") + } + _, _, exitCode, _ := equery.Run("l", packageName) + return exitCode == 0, nil +} + // DpkgInstalled uses dpkg to see if a package is installed func DpkgInstalled(packageName string) (bool, error) { program := NewProgramHelper() diff --git a/cmd/prerequisites.go b/cmd/prerequisites.go index 0d1a5901d..2ea579434 100644 --- a/cmd/prerequisites.go +++ b/cmd/prerequisites.go @@ -96,6 +96,9 @@ func getRequiredLibrariesLinux() (*Prerequisites, error) { 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 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")) diff --git a/cmd/system.go b/cmd/system.go index 86ce69d9b..cb29708df 100644 --- a/cmd/system.go +++ b/cmd/system.go @@ -305,6 +305,17 @@ func CheckDependencies(logger *Logger) (bool, error) { } else { logger.Green("Library '%s' installed.", library.Name) } + case Gentoo: + installed, err := EqueryInstalled(library.Name) + if err != nil { + return false, err + } + if !installed { + errors = true + logger.Error("Library '%s' not found. %s", library.Name, library.Help) + } else { + logger.Green("Library '%s' installed.", library.Name) + } default: return false, RequestSupportForDistribution(distroInfo, library.Name) }