## Define TARGET
TARGET := betcha

## Define DESTDIR and PREFIX
DESTDIR :=
PREFIX := /usr/local
BINDIR := /bin
MANDIR := /share/man

## Compilation directories
OUTDIR = ./bin
SUBDIR = src
DIR_OBJ = ./obj

## Set default goal
.DEFAULT_GOAL := all

## Compilation flags
CFLAGS=-Wall -std=c99 -I.

## Library flags
LIBS=-lm

## Determine the platform
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Linux)
	LIBS += -lncurses
else
	LIBS += -lcurses
endif

## Program compilation
INCS = $(wildcard *.h $(foreach fd, $(SUBDIR), $(fd)/*.h))
SRCS = $(wildcard *.c $(foreach fd, $(SUBDIR), $(fd)/*.c))
NODIR_SRC = $(notdir $(SRCS))
OBJS = $(addprefix $(DIR_OBJ)/, $(SRCS:c=o)) # obj/xxx.o obj/folder/xxx .o
INC_DIRS = $(addprefix -I., $(SUBDIR))

## Program compilation
all: $(TARGET)

$(TARGET): $(OBJS)
	mkdir -p $(OUTDIR)
	$(CC) -o $(OUTDIR)/$@ $(OBJS) $(LIBS)

$(DIR_OBJ)/%.o: %.c $(INCS)
	mkdir -p $(@D)
	$(CC) -o $@ $(CFLAGS) -c $< $(INC_DIRS)

## Program installation
install: $(TARGET)
	install -d $(DESTDIR)$(PREFIX)$(BINDIR)
	install -m 755 $(OUTDIR)/$(TARGET) $(DESTDIR)$(PREFIX)$(BINDIR)/
	gzip -fk man/*
	mkdir -p $(DESTDIR)$(PREFIX)$(MANDIR)/man1
	cp -a man/$(TARGET).1.gz $(DESTDIR)$(PREFIX)$(MANDIR)/man1/

## Program uninstallation
uninstall:
	rm -vf $(DESTDIR)$(PREFIX)$(BINDIR)/$(TARGET)
	rm -vf $(DESTDIR)$(PREFIX)$(MANDIR)/man1/$(TARGET).1.gz

## Phony Targets
.PHONY: all clean install uninstall

## Cleanup
clean:
	rm -rf $(OUTDIR) $(DIR_OBJ) core
	rm -f man/*.gz
