|
| 1 | +package main |
| 2 | + |
| 3 | +import ( |
| 4 | + "builder/installer" |
| 5 | + "flag" |
| 6 | + "fmt" |
| 7 | + "os" |
| 8 | + "regexp" |
| 9 | + "strings" |
| 10 | + |
| 11 | + "github.com/roemer/gotaskr/execr" |
| 12 | + "github.com/roemer/gover" |
| 13 | +) |
| 14 | + |
| 15 | +////////// |
| 16 | +// Configuration |
| 17 | +////////// |
| 18 | + |
| 19 | +const packageName = "build-essential" |
| 20 | + |
| 21 | +var versionOnlyRegex *regexp.Regexp = regexp.MustCompile(`[^\|]*\|\s+([^\|]*)\s+\|.*$`) |
| 22 | +var buildEssentialVersionRegex *regexp.Regexp = regexp.MustCompile(`^(?P<d1>\d+)\.(?P<d2>\d+)`) |
| 23 | + |
| 24 | +////////// |
| 25 | +// Main |
| 26 | +////////// |
| 27 | + |
| 28 | +func main() { |
| 29 | + if err := runMain(); err != nil { |
| 30 | + fmt.Printf("Error: %v\n", err) |
| 31 | + os.Exit(1) |
| 32 | + } |
| 33 | +} |
| 34 | + |
| 35 | +func runMain() error { |
| 36 | + // Handle the flags |
| 37 | + version := flag.String("version", "latest", "The version of build-essential to install.") |
| 38 | + flag.Parse() |
| 39 | + |
| 40 | + // Create and process the feature |
| 41 | + feature := installer.NewFeature("Build Essential", true, |
| 42 | + &buildEssentialComponent{ |
| 43 | + ComponentBase: installer.NewComponentBase(packageName, *version), |
| 44 | + }) |
| 45 | + return feature.Process() |
| 46 | +} |
| 47 | + |
| 48 | +////////// |
| 49 | +// Implementation |
| 50 | +////////// |
| 51 | + |
| 52 | +type buildEssentialComponent struct { |
| 53 | + *installer.ComponentBase |
| 54 | +} |
| 55 | + |
| 56 | +func (c *buildEssentialComponent) GetAllVersions() ([]*gover.Version, error) { |
| 57 | + if err := execr.Run(true, "apt-get", "update"); err != nil { |
| 58 | + return []*gover.Version{}, err |
| 59 | + } |
| 60 | + |
| 61 | + str1, _, err := execr.RunGetOutput(true, "apt-cache", "madison", packageName) |
| 62 | + if err != nil { |
| 63 | + return []*gover.Version{}, err |
| 64 | + } |
| 65 | + |
| 66 | + allFiles := strings.Split(str1, "\n") |
| 67 | + allVersions := []*gover.Version{} |
| 68 | + for _, item := range allFiles { |
| 69 | + matches := versionOnlyRegex.FindStringSubmatch(item) |
| 70 | + if matches == nil { |
| 71 | + continue |
| 72 | + } |
| 73 | + allVersions = append(allVersions, gover.MustParseVersionFromRegex(matches[1], buildEssentialVersionRegex)) |
| 74 | + } |
| 75 | + |
| 76 | + return allVersions, nil |
| 77 | +} |
| 78 | + |
| 79 | +func (c *buildEssentialComponent) InstallVersion(version *gover.Version) error { |
| 80 | + if version == gover.EmptyVersion { |
| 81 | + return installer.Tools.Apt.InstallDependencies(packageName, "pkg-config", "libpcsclite-dev") |
| 82 | + } else { |
| 83 | + return installer.Tools.Apt.InstallDependencies(fmt.Sprintf(packageName+"=%s", version.Raw), "pkg-config", "libpcsclite-dev") |
| 84 | + } |
| 85 | +} |
0 commit comments