diff --git a/Makefile b/Makefile index 917ca5b..f5c96d7 100644 --- a/Makefile +++ b/Makefile @@ -1,32 +1,35 @@ -SHELL := /bin/bash +# Installation paths +PREFIX ?= /usr/local +BINDIR ?= $(PREFIX)/bin +SYSCONFDIR := $(PREFIX)/etc -ifeq ($(PREFIX),) - PREFIX := /usr/local -endif -ifeq ($(BINDIR),) - BINDIR := $(PREFIX)/bin -endif -ifeq ($(SYSCONFDIR),) - SYSCONFDIR := $(PREFIX)/etc -endif -ifeq ($(GO),) - GO := $(shell type -a -P go | head -n 1) -endif +# Compilers and tools +GO ?= go + +# Build-time variables +VERSION ?= $(shell git describe --tags --dirty) build: mkdir -p build - cd src; $(GO) build -ldflags "-w -X 'main.systemConfigDir=$(SYSCONFDIR)'" -o ../build/stormfetch stormfetch + cd src; $(GO) build -ldflags "-w -X 'main.StormfetchVersion=$(VERSION)' -X 'main.SystemConfigDir=$(SYSCONFDIR)'" -o ../build/stormfetch stormfetch install: build/stormfetch config/ - mkdir -p $(DESTDIR)$(BINDIR) - mkdir -p $(DESTDIR)$(SYSCONFDIR)/stormfetch/ - cp build/stormfetch $(DESTDIR)$(BINDIR)/stormfetch - cp -r config/. $(DESTDIR)$(SYSCONFDIR)/stormfetch/ + # Create directoriy + install -dm755 $(DESTDIR)$(BINDIR) + # Install binary + install -m755 build/stormfetch $(DESTDIR)$(BINDIR)/stormfetch -run: build/stormfetch - build/stormfetch +install-config: + # Create directory + install -dm755 $(DESTDIR)$(SYSCONFDIR) + # Install files + cp -r config $(DESTDIR)$(SYSCONFDIR)/stormfetch/ + +uninstall: + -rm -f $(DESTDIR)$(BINDIR)/stormfetch + -rm -rf $(DESTDIR)$(SYSCONFDIR)/stormfetch clean: rm -r build/ -.PHONY: build +.PHONY: build install install-config uninstall clean diff --git a/src/config.go b/src/config.go index 98069c2..adaf6b5 100644 --- a/src/config.go +++ b/src/config.go @@ -28,8 +28,8 @@ func readConfig() { // Find valid config directory if _, err := os.Stat(path.Join(userConfigDir, "stormfetch/config.yaml")); err == nil { configPath = path.Join(userConfigDir, "stormfetch/config.yaml") - } else if _, err := os.Stat(path.Join(systemConfigDir, "stormfetch/config.yaml")); err == nil { - configPath = path.Join(systemConfigDir, "stormfetch/config.yaml") + } else if _, err := os.Stat(path.Join(SystemConfigDir, "stormfetch/config.yaml")); err == nil { + configPath = path.Join(SystemConfigDir, "stormfetch/config.yaml") } else { log.Fatalf("Config file not found: %s", err.Error()) } diff --git a/src/main.go b/src/main.go index ff74592..319eff2 100644 --- a/src/main.go +++ b/src/main.go @@ -9,9 +9,11 @@ import ( ) // Build-time variables -var systemConfigDir = "/etc/" +var StormfetchVersion = "dev" +var SystemConfigDir = "/etc/" // Flag variables +var ShowVersion = false var ShowModuleTimeTaken = false var configPath = "" @@ -24,13 +26,19 @@ func main() { } func parseFlags() { + flag.BoolVar(&ShowVersion, "version", false, "Show Stormfetch version") + flag.BoolVar(&ShowModuleTimeTaken, "time-taken", false, "Show time taken to execute each module") flag.StringVar(&config.Ascii, "ascii", config.Ascii, "Set distro ascii") flag.StringVar(&config.DistroName, "distro-name", config.DistroName, "Set distro name") - flag.BoolVar(&ShowModuleTimeTaken, "time-taken", false, "Show time taken to execute each module") flag.Parse() } func run() { + if ShowVersion { + fmt.Printf("Stormfetch version %s\n", StormfetchVersion) + return + } + // Fetch ascii art and remove header asciiArt := GetDistroAsciiArt() asciiArtHeader := "" diff --git a/src/system.go b/src/system.go index 8a427c0..8b162c7 100644 --- a/src/system.go +++ b/src/system.go @@ -73,8 +73,8 @@ func GetDistroAsciiArt() string { } userConfDir, err := os.UserConfigDir() if err != nil { - if _, err := os.Stat(path.Join(systemConfigDir, "stormfetch/ascii/", id)); err == nil { - bytes, err := os.ReadFile(path.Join(systemConfigDir, "stormfetch/ascii/", id)) + if _, err := os.Stat(path.Join(SystemConfigDir, "stormfetch/ascii/", id)); err == nil { + bytes, err := os.ReadFile(path.Join(SystemConfigDir, "stormfetch/ascii/", id)) if err != nil { return defaultAscii } @@ -89,8 +89,8 @@ func GetDistroAsciiArt() string { return defaultAscii } return string(bytes) - } else if _, err := os.Stat(path.Join(systemConfigDir, "stormfetch/ascii/", id)); err == nil { - bytes, err := os.ReadFile(path.Join(systemConfigDir, "stormfetch/ascii/", id)) + } else if _, err := os.Stat(path.Join(SystemConfigDir, "stormfetch/ascii/", id)); err == nil { + bytes, err := os.ReadFile(path.Join(SystemConfigDir, "stormfetch/ascii/", id)) if err != nil { return defaultAscii }