.PHONY: all clean test_s test_c install parsers
all: luksrku

BUILD_REVISION := $(shell git describe --abbrev=10 --dirty --always --tags)
INSTALL_PREFIX := /usr/local/
CFLAGS := -Wall -Wextra -Wshadow -Wswitch -Wpointer-arith -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Werror=implicit-function-declaration -Werror=format -Wno-unused-parameter
CFLAGS += -O3 -std=c11 -pthread -D_POSIX_SOURCE -D_POSIX_C_SOURCE=200112L -D_XOPEN_SOURCE=500 -DBUILD_REVISION='"$(BUILD_REVISION)"'
CFLAGS += `pkg-config --cflags openssl`
#CFLAGS += -ggdb3 -DDEBUG -fsanitize=address -fsanitize=undefined -fsanitize=leak
PYPGMOPTS := ../Python/pypgmopts/pypgmopts

LDFLAGS := `pkg-config --libs openssl`
TEST_PREFIX := local

OBJS := \
	argparse_client.o \
	argparse_edit.o \
	argparse_server.o \
	blacklist.o \
	client.o \
	editor.o \
	exec.o \
	file_encryption.o \
	keydb.o \
	log.o \
	luks.o \
	luksrku.o \
	openssl.o \
	pgmopts.o \
	server.o \
	signals.o \
	thread.o \
	udp.o \
	util.o \
	uuid.o \
	vaulted_keydb.o \
	vault.o

parsers:
	$(PYPGMOPTS) -n edit parsers/parser_edit.py
	$(PYPGMOPTS) -n server parsers/parser_server.py
	$(PYPGMOPTS) -n client parsers/parser_client.py

install: all
	strip luksrku
	cp luksrku $(INSTALL_PREFIX)sbin/
	chown root:root $(INSTALL_PREFIX)sbin/luksrku
	chmod 755 $(INSTALL_PREFIX)sbin/luksrku

clean:
	rm -f $(OBJS) $(OBJS_CFG) luksrku

test_s: luksrku
	./luksrku server -vv testdata/$(TEST_PREFIX)_server.bin

test_c: luksrku
	./luksrku client -vv --no-luks testdata/$(TEST_PREFIX)_client.bin

.c.o:
	$(CC) $(CFLAGS) -c -o $@ $<

luksrku: $(OBJS)
	$(CC) $(CFLAGS) -o $@ $(OBJS) $(LDFLAGS)