# dk window manager
# see license file for copyright and license details

# install paths
VPATH   = src
PREFIX ?= /usr/local
MAN    ?= ${PREFIX}/share/man
DOC    ?= ${PREFIX}/share/doc/dk
SES    ?= /usr/share/xsessions

ifeq ($(PREFIX),/usr/local)
	VERSION = $(shell git describe --tags | sed 's+-+.r+' | tr - . | cut -c2-)
else
	VERSION = 2.2
endif

# source and object files
SRC  = dk.c cmd.c event.c layout.c parse.c status.c strl.c util.c
OBJ  = ${SRC:.c=.o}
CSRC = dkcmd.c strl.c util.c
COBJ = ${CSRC:.c=.o}

# compiler and linker flags
OPTLVL = -O3

CPPFLAGS += -D_DEFAULT_SOURCE -D_BSD_SOURCE -DVERSION=\"${VERSION}\"
CFLAGS   += -flto=auto -std=c17 -pedantic -Wall -Wextra -I/usr/X11R6/include
LDFLAGS  += -s -L/usr/X11R6/lib -lxcb -lxcb-keysyms -lxcb-util -lxcb-cursor -lxcb-icccm -lxcb-randr -lxcb-res

all: dk dkcmd

debug: CPPFLAGS += -DDEBUG
debug: all

fdebug: CFLAGS   += -finstrument-functions -export-dynamic
fdebug: LDFLAGS  += -lmcheck -ldl -Wl,--export-dynamic
fdebug: CPPFLAGS += -DFUNCDEBUG
fdebug: debug

leak: OPTLVL  = -Og
leak: CFLAGS += -ggdb3
leak: all

.c.o:
	${CC} ${CFLAGS} ${OPTLVL} ${CPPFLAGS} -c $<

${OBJ}: config.h

config.h:
	@test -e src/$@ || cp -v src/config.def.h src/$@

dk: config.h ${OBJ}
	${CC} ${CFLAGS} ${OPTLVL} ${OBJ} -o $@ ${LDFLAGS}

dkcmd: ${COBJ}
	${CC} ${CFLAGS} ${OPTLVL} ${COBJ} -o $@

clean:
	rm -f *.o dk dkcmd

install: all
	mkdir -p ${DESTDIR}${PREFIX}/bin ${DESTDIR}${SES} ${DESTDIR}${MAN}/man1 ${DESTDIR}${DOC}
	install -Dm755 dk dkcmd ${DESTDIR}${PREFIX}/bin/
	sed "s/VERSION/${VERSION}/g" man/dk.1 > ${DESTDIR}${MAN}/man1/dk.1
	cp -rfp man/dkcmd.1 ${DESTDIR}${MAN}/man1/dkcmd.1
	chmod 644 ${DESTDIR}${MAN}/man1/dk.1 ${DESTDIR}${MAN}/man1/dkcmd.1
	cp -rf doc/* ${DESTDIR}${DOC}
	install -Dm644 dk.desktop ${DESTDIR}${SES}/

uninstall:
	rm -f ${DESTDIR}${PREFIX}/bin/dk ${DESTDIR}${PREFIX}/bin/dkcmd
	rm -f ${DESTDIR}${MAN}/man1/dk.1 ${DESTDIR}${MAN}/man1/dkcmd.1
	rm -rf ${DESTDIR}${DOC}
	rm -f ${DESTDIR}${SES}/dk.desktop

.PHONY: all debug fdebug leak clean install uninstall
