CFLAGS=-Wall -Wextra -ggdb

LIBWS=./vendor/libmicrohttpd/
LIBSHA=./vendor/sha256/

SHARED_LIB_FILES=output/libshared.a
SHARED_LIBS=-L./output -lshared

################################################################################

SERVER_LDFLAGS=-lm -luuid -L $(LIBWS)lib -lmicrohttpd $(SHARED_LIBS)
SERVER_INCL_FLAGS=-I$(LIBWS)include

SERVER_SRC=src/server.c \
           src/id_store.c src/library.c \
           src/opds_handler.c src/get_handler.c

server: output/server
output/server: $(SERVER_SRC) $(SHARED_LIB_FILES) | output
	gcc $(CFLAGS) $(SERVER_INCL_FLAGS) -o output/server src/server.c $(SERVER_LDFLAGS)

################################################################################

USERCTL_LDFLAGS=-lm $(SHARED_LIBS)
USERCTL_INCL_FLAGS=

USERCTL_SRC=src/userctl.c

userctl: output/userctl
output/userctl: $(USERCTL_SRC) $(SHARED_LIB_FILES) | output
	gcc $(CFLAGS) $(USERCTL_INCL_FLAGS) -o output/userctl src/userctl.c $(USERCTL_LDFLAGS)

################################################################################

output/libshared.a: output/users.o output/noh.o output/path.o output/sha.o | output
	ar rcsD output/libshared.a output/users.o output/path.o output/noh.o output/sha.o

output/users.o: src/users.c src/users.h | output
	gcc $(CFLAGS) -c -o output/users.o src/users.c -I$(LIBSHA)

output/sha.o: $(LIBSHA)sha256.c $(LIBSHA)sha256.h | output
	gcc $(CFLAGS) -c -o output/sha.o $(LIBSHA)sha256.c

output/path.o: src/path.c src/path.h | output
	gcc $(CFLAGS) -x c -c -o output/path.o src/path.c -L ./output -lnoh

output/noh.o: src/noh.h | output
	gcc $(CFLAGS) -x c -c -o output/noh.o src/noh.h -DNOH_IMPLEMENTATION

################################################################################

test: output/test
output/test: test/test_path.c $(SHARED_LIB_FILES) | output
	gcc $(CFLAGS) -I./src -o output/test test/test_path.c $(SHARED_LIBS)

################################################################################

output:
	mkdir -p output

