SRC_DIR     := src
BUILD_DIR   := build
RELEASE_DIR := $(BUILD_DIR)/release
DEBUG_DIR   := $(BUILD_DIR)/debug
BINARY      := stj
CORES       := $(shell nproc --all)
PREFIX      := /usr/local
MANPREFIX   := $(PREFIX)/share/man

all: debug
.PHONY: all


# Installation & removal
install: release
	mkdir -p $(DESTDIR)$(PREFIX)/bin
	cp -f build/release/stj $(DESTDIR)$(PREFIX)/bin
	chmod 755 $(DESTDIR)$(PREFIX)/bin/stj
	mkdir -p $(DESTDIR)$(MANPREFIX)/man1
	sed "s/VERSION/$(VERSION)/g" < data/stj.1 > $(DESTDIR)$(MANPREFIX)/man1/stj.1
	chmod 644 $(DESTDIR)$(MANPREFIX)/man1/stj.1
	tic -sx data/stj.info
	cp -f data/stj.desktop $(DESTDIR)$(PREFIX)/share/applications

uninstall:
	rm -f $(DESTDIR)$(PREFIX)/bin/stj
	rm -f $(DESTDIR)$(MANPREFIX)/man1/stj.1
	rm -f $(DESTDIR)$(PREFIX)/share/applications/stj.desktop


# Full clean
clean:
	@ [ ! -e '$(BINARY)' ] || rm '$(BINARY)'
	@ rm -rf '$(BUILD_DIR)'
.PHONY: clean


# Release
run-release: release
	@ ./'$(RELEASE_DIR)/$(BINARY)'
.PHONY: run-release

release: $(RELEASE_DIR)/Makefile
	@ make -C '$(RELEASE_DIR)' -j'$(CORES)' && \
		ln -sf '$(RELEASE_DIR)'/'$(BINARY)' ./'$(BINARY)'
.PHONY: release

$(RELEASE_DIR)/Makefile: $(SRC_DIR)/CMakeLists.txt
	@ cmake \
		-H'$(SRC_DIR)' \
		-B'$(RELEASE_DIR)' \
		-DCMAKE_BUILD_TYPE=Release \
		-DCMAKE_EXPORT_COMPILE_COMMANDS=ON

clean-release:
	@ rm -rf '$(RELEASE_DIR)'
.PHONY: clean-release


# Debug
run-debug: debug
	@ ./'$(DEBUG_DIR)/$(BINARY)'
.PHONY: run-debug

debug: $(DEBUG_DIR)/Makefile
	@ make -C '$(DEBUG_DIR)' -j'$(CORES)' && \
		ln -sf '$(DEBUG_DIR)/$(BINARY)' ./'$(BINARY)'
.PHONY: debug

$(DEBUG_DIR)/Makefile: $(SRC_DIR)/CMakeLists.txt
	@ cmake \
		-H'$(SRC_DIR)' \
		-B'$(DEBUG_DIR)' \
		-DCMAKE_BUILD_TYPE=Debug \
		-DCMAKE_EXPORT_COMPILE_COMMANDS=ON

clean-debug:
	@ rm -rf '$(DEBUG_DIR)'
.PHONY: clean-debug