BCRYPT_VERSION=2.3-1

BCRYPT_DIR=libbcrypt

BCRYPT_SRC_DIR=$(BCRYPT_DIR)/lua-bcrypt-$(BCRYPT_VERSION)/src
BCRYPT_OBJ_DIR=$(BCRYPT_DIR)/obj
BCRYPT_LIB_DIR=$(BCRYPT_DIR)/lib

BCRYPT_SOURCES= \
	$(BCRYPT_SRC_DIR)/bcrypt.c \
	$(BCRYPT_SRC_DIR)/blowfish.c \
	$(BCRYPT_SRC_DIR)/ggentropy.c \
	$(BCRYPT_SRC_DIR)/safebfuns.c

BCRYPT_OBJS=$(BCRYPT_SOURCES:$(BCRYPT_SRC_DIR)/%.c=$(BCRYPT_OBJ_DIR)/%.o)

BCRYPT_LIB=$(BCRYPT_LIB_DIR)/libbcrypt.a

BCRYPT_UNPACKED=$(BCRYPT_DIR)/.unpacked

CFLAGS=-Wall -Werror -pedantic -Wno-pointer-sign -std=c11 -O2 -I$(BCRYPT_SRC_DIR)

all: bin/bcrypt-test

# === App ===

bin/bcrypt-test: obj/bcrypt-test.o $(BCRYPT_LIB) | bin
	cc -o $@ obj/bcrypt-test.o $(BCRYPT_LIB)

obj/%.o: src/%.c $(BCRYPT_UNPACKED) | obj
	cc $(CFLAGS) -c $< -o $@

obj bin:
	mkdir -p $@

# === libbcrypt ===

$(BCRYPT_UNPACKED): | $(BCRYPT_DIR)
	curl -f -L -o - https://github.com/mikejsavage/lua-bcrypt/archive/refs/tags/v$(BCRYPT_VERSION).tar.gz | tar -xzf - -C $(BCRYPT_DIR)
	touch $@

download: $(BCRYPT_UNPACKED)

# The extracted sources are generated as a side effect of unpacking.
$(BCRYPT_SOURCES): $(BCRYPT_UNPACKED)

$(BCRYPT_OBJ_DIR)/%.o: $(BCRYPT_SRC_DIR)/%.c | $(BCRYPT_OBJ_DIR)
	cc $(CFLAGS) -c $< -o $@

$(BCRYPT_LIB): $(BCRYPT_OBJS) | $(BCRYPT_LIB_DIR)
	ar -crs $@ $^

$(BCRYPT_DIR) $(BCRYPT_LIB_DIR) $(BCRYPT_OBJ_DIR):
	mkdir -p $@

# === clean ===

.PHONY: clean
clean:
	rm -rf bin obj $(BCRYPT_DIR)

