CC ?= cc
AR ?= ar
CFLAGS ?= -O2 -g
CPPFLAGS ?=
LDFLAGS ?=

WARNINGS = -Wall -Wextra -Wpedantic -Wconversion -Wshadow -Wstrict-prototypes
INCLUDES = -Iinclude
PNG_CFLAGS := $(shell pkg-config --cflags libpng 2>/dev/null)
PNG_LIBS := $(shell pkg-config --libs libpng 2>/dev/null)
X11_CFLAGS := $(shell pkg-config --cflags x11 2>/dev/null)
X11_LIBS := $(shell pkg-config --libs x11 2>/dev/null)
LIB = libvpe.a
OBJS = src/vpe.o
TEST = tests/test_vpe
TOOLS = tools/vpe_decrypt_png tools/vpe_x11_receiver

.PHONY: all clean test tools

all: $(LIB) $(TOOLS)

$(LIB): $(OBJS)
	$(AR) rcs $@ $^

src/%.o: src/%.c include/vpe.h
	$(CC) $(CPPFLAGS) $(CFLAGS) $(WARNINGS) $(INCLUDES) -c -o $@ $<

$(TEST): tests/test_vpe.c $(LIB) include/vpe.h
	$(CC) $(CPPFLAGS) $(CFLAGS) $(WARNINGS) $(INCLUDES) -o $@ tests/test_vpe.c $(LIB) $(LDFLAGS)

tools: $(TOOLS)

tools/vpe_decrypt_png: tools/vpe_decrypt_png.c $(LIB) include/vpe.h
	$(CC) $(CPPFLAGS) $(CFLAGS) $(WARNINGS) $(INCLUDES) $(PNG_CFLAGS) -o $@ tools/vpe_decrypt_png.c $(LIB) $(LDFLAGS) $(PNG_LIBS)

tools/vpe_x11_receiver: tools/vpe_x11_receiver.c $(LIB) include/vpe.h
	$(CC) $(CPPFLAGS) $(CFLAGS) $(WARNINGS) $(INCLUDES) $(X11_CFLAGS) $(PNG_CFLAGS) -o $@ tools/vpe_x11_receiver.c $(LIB) $(LDFLAGS) $(X11_LIBS) $(PNG_LIBS)

test: $(TEST)
	./$(TEST)

clean:
	rm -f $(OBJS) $(LIB) $(TEST) $(TOOLS)
