.POSIX:

NAME = frontends
VERSION = 0.9

RANLIB = ranlib

# OpenBSD
FRONTENDS_CFLAGS = -I../ -I. ${CFLAGS}
FRONTENDS_CPPFLAGS = ${CPPFLAGS}
FRONTENDS_LDFLAGS = ${LDFLAGS}
LIBTLS_LDFLAGS = -ltls
LIBTLS_LDFLAGS_STATIC = -ltls -lssl -lcrypto -static

# Linux
#FRONTENDS_CFLAGS = -I../ -I. -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=700 ${CFLAGS}
#FRONTENDS_CPPFLAGS = ${CPPFLAGS}
#FRONTENDS_LDFLAGS = ${LDFLAGS}
#LIBTLS_LDFLAGS = -ltls
#LIBTLS_LDFLAGS_STATIC = -pthread -ltls -lssl -lcrypto -static

BIN = \
	youtube/cgi \
	youtube/cli \
	youtube/feed \
	youtube/gopher

SRC = ${BIN:=.c} \
	youtube/youtube.c

HDR = \
	youtube/youtube.h \
	json.h \
	https.h \
	util.h \
	xml.h

LIBUTIL = libutil.a
LIBUTILSRC = util.c
LIBUTILOBJ = ${LIBUTILSRC:.c=.o}

LIBJSON = libjson.a
LIBJSONSRC = json.c
LIBJSONOBJ = ${LIBJSONSRC:.c=.o}

LIBHTTPS = libhttps.a
LIBHTTPSSRC = https.c
LIBHTTPSOBJ = ${LIBHTTPSSRC:.c=.o}

LIBXML = libxml.a
LIBXMLSRC = xml.c
LIBXMLOBJ = ${LIBXMLSRC:.c=.o}

COMPATSRC = strlcat.c strlcpy.c
COMPATOBJ = strlcat.o strlcpy.o

LIB = ${LIBHTTPS} ${LIBJSON} ${LIBUTIL} ${LIBXML} ${COMPATOBJ}
OBJ = ${SRC:.c=.o} ${LIBHTTPSOBJ} ${LIBJSONOBJ} ${LIBUTILOBJ} ${LIBXMLOBJ} ${COMPATOBJ}

all: ${BIN}

${OBJ}: ${HDR}

youtube: youtube/cgi youtube/cli youtube/feed youtube/gopher

youtube/cgi: ${LIB} youtube/youtube.o youtube/cgi.o
	${CC} -o $@ youtube/cgi.o youtube/youtube.o ${LIB} ${LDFLAGS} ${LIBTLS_LDFLAGS_STATIC}

youtube/cli: ${LIB} youtube/youtube.o youtube/cli.o
	${CC} -o $@ youtube/cli.o youtube/youtube.o ${LIB} ${LDFLAGS} ${LIBTLS_LDFLAGS}

youtube/feed: ${LIB} youtube/youtube.o youtube/feed.o
	${CC} -o $@ youtube/feed.o youtube/youtube.o ${LIB} ${LDFLAGS} ${LIBTLS_LDFLAGS_STATIC}

youtube/gopher: ${LIB} youtube/youtube.o youtube/gopher.o
	${CC} -o $@ youtube/gopher.o youtube/youtube.o ${LIB} ${LDFLAGS} ${LIBTLS_LDFLAGS_STATIC}

.o:
	${CC} ${FRONTENDS_LDFLAGS} -o $@ $< ${LIB}

.c.o:
	${CC} ${FRONTENDS_CFLAGS} ${FRONTENDS_CPPFLAGS} -o $@ -c $<

${LIBHTTPS}: ${LIBHTTPSOBJ}
	${AR} rc $@ $?
	${RANLIB} $@

${LIBJSON}: ${LIBJSONOBJ}
	${AR} rc $@ $?
	${RANLIB} $@

${LIBUTIL}: ${LIBUTILOBJ}
	${AR} rc $@ $?
	${RANLIB} $@

${LIBXML}: ${LIBXMLOBJ}
	${AR} rc $@ $?
	${RANLIB} $@

clean:
	rm -f ${BIN} ${OBJ} ${LIBUTIL} ${LIBJSON} ${LIBHTTPS} ${LIBXML}

.PHONY: clean youtube
