# Makefile for hygate-c - POSIX-compatible (builds on Linux, FreeBSD, macOS)
# Third-party dependencies: libcurl and json-c (auto-detected via pkg-config).

CC       ?= cc
CFLAGS   ?= -O3 -flto -pipe -std=c11 -Wall -D_POSIX_C_SOURCE=200809L -pthread
SRCS     = main.c server.c jsonapi.c util.c tokenizer.c tokenizer_data.c
HDRS     = hygate.h
BINDIR   = bin
BIN      = $(BINDIR)/hygate
STATICBIN = $(BINDIR)/hygate.static

# Library flags resolved at recipe time via pkg-config (portable).
# Falls back to plain -lcurl -ljson-c when pkg-config is unavailable.
LIBS = $$(pkg-config --cflags --libs libcurl json-c 2>/dev/null || echo '-lcurl -ljson-c') -pthread

# For static builds we need the full transitive dependency list, which
# pkg-config --static provides (nghttp2, ssl, crypto, z, ...).
STATICLIBS = $$(pkg-config --static --cflags --libs libcurl json-c 2>/dev/null || echo '-lcurl -ljson-c')

.PHONY: all static clean

all: $(BIN)

static: $(STATICBIN)

$(BIN): $(SRCS) $(HDRS)
	@test -d $(BINDIR) || mkdir $(BINDIR)
	$(CC) $(CFLAGS) $(SRCS) -o $@ $(LIBS)

$(STATICBIN): $(SRCS) $(HDRS)
	@test -d $(BINDIR) || mkdir $(BINDIR)
	$(CC) $(CFLAGS) -static $(SRCS) -o $@ $(STATICLIBS)

clean:
	rm -rf $(BINDIR)