APP := fetchit
SRC := main.cpp
BUILD_DIR := build
DIST_DIR := dist

PREFIX ?= /usr/local
BINDIR ?= $(PREFIX)/bin
DESTDIR ?=

CXX ?= g++
CXXFLAGS ?= -O2 -Wall -Wextra -std=c++17 -pipe
LDFLAGS ?= -static-libstdc++ -static-libgcc

VERSION ?= $(shell git describe --tags --dirty --always 2>/dev/null)

.PHONY: all build run install uninstall clean dist release

all: build

build: $(BUILD_DIR)/$(APP)

$(BUILD_DIR)/$(APP): $(SRC) | $(BUILD_DIR)/.dir
	$(CXX) $(CXXFLAGS) -o $@ $< $(LDFLAGS)


$(BUILD_DIR)/.dir:
	mkdir -p $(BUILD_DIR)
	touch $@

run: build
	./$(BUILD_DIR)/$(APP)

install: build
	install -d "$(DESTDIR)$(BINDIR)"
	install -m 0755 $(BUILD_DIR)/$(APP) "$(DESTDIR)$(BINDIR)/$(APP)"

uninstall:
	rm -f "$(DESTDIR)$(BINDIR)/$(APP)"

clean:
	rm -f $(BUILD_DIR)/$(APP)

dist: build | $(DIST_DIR)/.dir
	tar -C $(BUILD_DIR) -czf $(DIST_DIR)/$(APP)-$(VERSION)-linux-x86_64-gnu.tar.gz $(APP)

$(DIST_DIR)/.dir:
	mkdir -p $(DIST_DIR)
	touch $@

release: clean build dist
