.DEFAULT_GOAL := all

DOXYGEN ?= doxygen
DOXYFILE := Doxyfile

VERSION := $(shell cat VERSION)
ARCH := $(shell uname -m)
KERNEL := $(shell uname -s)

SRCDIR := src
INCDIR := include
DOCDIR := doc
DOCSDIR := docs

INSTALL ?= install
CC ?= cc
TAR ?= tar
RM ?= rm

MASTER_CFLAGS := -I$(INCDIR) -MMD -MP -std=c89 -Wall -Wextra -pedantic -D_XOPEN_SOURCE=700 -DSHUSH_VERSION=\"$(VERSION)\" -DSHUSH_ARCH=\"$(ARCH)\" -DSHUSH_KRNL=\"$(KERNEL)\"

LDFLAGS ?=
LDLIBS ?=

SOURCE := $(wildcard $(SRCDIR)/*.c)
OBJECTS := $(SOURCE:.c=.o)
TARGET = shush.$(ARCH)
SHUSH_1 := doc/man/shush.1

DESTDIR ?=
PREFIX ?= /usr/local
BINDIR ?= $(PREFIX)/bin
SHAREDIR ?= $(PREFIX)/share
MANDIR ?= $(SHAREDIR)/man
DOCPREFIX := $(SHAREDIR)/doc/shush

INSTALL_MAN ?= true
INSTALL_API ?= false

DISTSRC := doc include src .clang-format .gitignore CHANGELOG.md CONTRIBUTING.md Doxyfile LICENSE Makefile README.md VERSION
DISTDIR := shush-$(VERSION)
DISTFILE := $(DISTDIR).tar.xz
ifeq ($(INSTALL_MAN),true)
install: install-docs
endif

ifeq ($(INSTALL_API),true)
install: install-api
endif

%.o: %.c
	@echo " CC $@"
	@$(CC) $(MASTER_CFLAGS) $(CFLAGS) -c $< -o $@

$(TARGET): $(OBJECTS)
	@echo " CC $@"
	@$(CC) $(LDFLAGS) -o $@ $^ $(LDLIBS)

all: $(TARGET)

clean: clean-docs
	@echo " RM $(TARGET) $(OBJECTS) $(OBJECTS:.o=.d)"
	@$(RM) $(TARGET) $(OBJECTS) $(OBJECTS:.o=.d)

install: $(TARGET)
	@echo " INSTALL $(TARGET:.$(ARCH)=)"
	@$(INSTALL) -Dm755 $(TARGET)	$(DESTDIR)$(BINDIR)/$(TARGET:.$(ARCH)=)

docs:
	@echo " DOXYGEN $(DOXYFILE)"
	@$(DOXYGEN) $(DOXYFILE)

clean-docs:
	@echo " RM docs"
	@$(RM) -r docs

install-docs: $(SHUSH_1)
	@echo " INSTALL $(SHUSH_1)"
	@$(INSTALL) -Dm644 $(SHUSH_1) \
		$(DESTDIR)$(MANDIR)/man1/$(notdir $(SHUSH_1))

install-api: $(DOCSDIR)
	@echo " INSTALL docs"
	@$(INSTALL) -d $(DESTDIR)$(DOCPREFIX)
	@cp -r docs/. $(DESTDIR)$(DOCPREFIX)


dist: clean
	@echo " MKDIR $(DISTDIR)"
	@mkdir -p $(DISTDIR)
	@echo " CP $(DISTSRC)"
	@cp -r $(DISTSRC) $(DISTDIR)/
	@echo " TAR $(DISTFILE)"
	@$(TAR) -cJf $(DISTFILE) $(DISTDIR)
	@echo " RM $(DISTDIR)"
	@$(RM) -rf $(DISTDIR)
	@echo " SHA256 $(DISTFILE).sha256"
	@sha256sum $(DISTFILE) > $(DISTFILE).sha256

-include $(OBJECTS:.o=.d)
.PHONY: all install clean docs clean-docs install-docs dist
