Makefile improvements and compatibility fixes - frontends - front-ends for some sites (experiment) (DIR) Log (DIR) Files (DIR) Refs (DIR) README (DIR) LICENSE --- (DIR) commit a1f945aa4e2f95e49c370cee3736cdd9b61839aa (DIR) parent 3aa7cb6937a6c5219f87ac14e29619d2a34d7fda (HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org> Date: Sat, 2 May 2020 16:31:21 +0200 Makefile improvements and compatibility fixes Diffstat: M Makefile | 258 +++++++++++++++---------------- M util.h | 5 +++++ 2 files changed, 129 insertions(+), 134 deletions(-) --- (DIR) diff --git a/Makefile b/Makefile @@ -1,141 +1,131 @@ .POSIX: -COMPATOBJ = strlcpy.o strlcat.o +RANLIB = ranlib + +# OpenBSD CFLAGS = -I../ -I. +LIBTLS_LDFLAGS = -ltls +LIBTLS_LDFLAGS_STATIC = -ltls -lssl -lcrypto -static + +# linux +#CFLAGS = -I../ -I. -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=700 +#LIBTLS_LDFLAGS = -ltls +#LIBTLS_LDFLAGS_STATIC = -pthread -ltls -lssl -lcrypto -static + +BIN = \ + duckduckgo/cli \ + duckduckgo/gopher \ + reddit/cli \ + reddit/gopher \ + twitch/cgi \ + twitch/gopher \ + youtube/cgi \ + youtube/cli \ + youtube/gopher + +SRC = ${BIN:=.c} \ + duckduckgo/duckduckgo.c \ + reddit/reddit.c \ + twitch/twitch.c \ + youtube/youtube.c + +HDR = \ + duckduckgo/duckduckgo.h \ + reddit/reddit.h \ + twitch/twitch.h \ + 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} + +duckduckgo: duckduckgo/cli duckduckgo/gopher + +duckduckgo/cli: ${LIB} duckduckgo/duckduckgo.o duckduckgo/cli.o + ${CC} -o $@ duckduckgo/cli.o duckduckgo/duckduckgo.o ${LIB} ${LDFLAGS} ${LIBTLS_LDFLAGS} + +duckduckgo/gopher: ${LIB} duckduckgo/duckduckgo.o duckduckgo/gopher.o + ${CC} -o $@ duckduckgo/gopher.o duckduckgo/duckduckgo.o ${LIB} ${LDFLAGS} ${LIBTLS_LDFLAGS_STATIC} + +reddit: reddit/cgi reddit/cli reddit/gopher + +reddit/cgi: ${LIB} reddit/reddit.o reddit/cgi.o + ${CC} -o $@ reddit/cgi.o reddit/reddit.o ${LIB} ${LDFLAGS} ${LIBTLS_LDFLAGS_STATIC} + +reddit/cli: ${LIB} reddit/reddit.o reddit/cli.o + ${CC} -o $@ reddit/cli.o reddit/reddit.o ${LIB} ${LDFLAGS} ${LIBTLS_LDFLAGS} + +reddit/gopher: ${LIB} reddit/reddit.o reddit/gopher.o + ${CC} -o $@ reddit/gopher.o reddit/reddit.o ${LIB} ${LDFLAGS} ${LIBTLS_LDFLAGS_STATIC} + +twitch: twitch/cgi twitch/twitch/gopher + +twitch/cgi: ${LIB} twitch/twitch.o twitch/cgi.o + ${CC} -o $@ twitch/cgi.o twitch/twitch.o ${LIB} ${LDFLAGS} ${LIBTLS_LDFLAGS_STATIC} + +twitch/gopher: ${LIB} twitch/twitch.o twitch/gopher.o + ${CC} -o $@ twitch/gopher.o twitch/twitch.o ${LIB} ${LDFLAGS} ${LIBTLS_LDFLAGS_STATIC} + +youtube: youtube/cgi youtube/cli 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/gopher: ${LIB} youtube/youtube.o youtube/gopher.o + ${CC} -o $@ youtube/gopher.o youtube/youtube.o ${LIB} ${LDFLAGS} ${LIBTLS_LDFLAGS_STATIC} + +.o: + ${CC} ${LDFLAGS} -o $@ $< ${LIB} + +.c.o: + ${CC} ${CFLAGS} ${CPPFLAGS} -o $@ -c $< + +${LIBHTTPS}: ${LIBHTTPSOBJ} + ${AR} rc $@ $? + ${RANLIB} $@ + +${LIBJSON}: ${LIBJSONOBJ} + ${AR} rc $@ $? + ${RANLIB} $@ + +${LIBUTIL}: ${LIBUTILOBJ} + ${AR} rc $@ $? + ${RANLIB} $@ -build: clean deps duckduckgo reddit twitch youtube -#build: clean deps reddit - -deps: - ${CC} -c json.c ${CFLAGS} - ${CC} -c xml.c ${CFLAGS} - ${CC} -c https.c ${CFLAGS} - ${CC} -c util.c ${CFLAGS} - # compat - ${CC} -c strlcpy.c ${CFLAGS} - ${CC} -c strlcat.c ${CFLAGS} - -# front-end: duckduckgo search -duckduckgo: - ${CC} -o duckduckgo/duckduckgo.o -c duckduckgo/duckduckgo.c ${CFLAGS} - # CLI - ${CC} -o duckduckgo/cli.o -c duckduckgo/cli.c ${CFLAGS} - # Gopher - ${CC} -o duckduckgo/gopher.o -c duckduckgo/gopher.c ${CFLAGS} - # Link CLI UI - ${CC} -o duckduckgo/cli \ - https.o \ - util.o \ - xml.o \ - duckduckgo/duckduckgo.o duckduckgo/cli.o \ - ${COMPATOBJ} \ - ${LDFLAGS} \ - -ltls - # Link gopher CGI (static-link for chroot) - ${CC} -o duckduckgo/gopher \ - https.o \ - xml.o \ - util.o \ - duckduckgo/duckduckgo.o duckduckgo/gopher.o \ - ${COMPATOBJ} \ - ${LDFLAGS} \ - -ltls -lssl -lcrypto -static - -# front-end: reddit -reddit: - ${CC} -o reddit/reddit.o -c reddit/reddit.c ${CFLAGS} - # CLI - ${CC} -o reddit/cli.o -c reddit/cli.c ${CFLAGS} - # CLI - ${CC} -o reddit/gopher.o -c reddit/gopher.c ${CFLAGS} - # Link CLI UI - ${CC} -o reddit/cli \ - https.o \ - json.o \ - util.o \ - reddit/reddit.o reddit/cli.o \ - ${COMPATOBJ} \ - ${LDFLAGS} \ - -ltls - # Link gopher CGI (static-link for chroot) - ${CC} -o reddit/gopher \ - https.o \ - json.o \ - util.o \ - reddit/reddit.o reddit/gopher.o \ - ${COMPATOBJ} \ - ${LDFLAGS} \ - -ltls -lssl -lcrypto -static - -# front-end: twitch -twitch: - ${CC} -o twitch/twitch.o -c twitch/twitch.c ${CFLAGS} - # CGI - ${CC} -o twitch/cgi.o -c twitch/cgi.c ${CFLAGS} - # Gopher - ${CC} -o twitch/gopher.o -c twitch/gopher.c ${CFLAGS} - # Link HTML CGI (static-link for chroot) - ${CC} -o twitch/cgi \ - https.o \ - json.o \ - util.o \ - twitch/twitch.o twitch/cgi.o \ - ${COMPATOBJ} \ - ${LDFLAGS} \ - -ltls -lssl -lcrypto -static - # Link gopher CGI (static-link for chroot) - ${CC} -o twitch/gopher \ - https.o \ - json.o \ - util.o \ - twitch/twitch.o twitch/gopher.o \ - ${COMPATOBJ} \ - ${LDFLAGS} \ - -ltls -lssl -lcrypto -static - -# front-end: youtube -youtube: - ${CC} -o youtube/youtube.o -c youtube/youtube.c ${CFLAGS} - # UIs - # HTML - ${CC} -o youtube/cgi.o -c youtube/cgi.c ${CFLAGS} - # CLI - ${CC} -o youtube/cli.o -c youtube/cli.c ${CFLAGS} - # Gopher - ${CC} -o youtube/gopher.o -c youtube/gopher.c ${CFLAGS} - # Link HTML CGI (static-link for chroot) - ${CC} -o youtube/cgi \ - https.o \ - util.o \ - xml.o \ - youtube/youtube.o youtube/cgi.o \ - ${COMPATOBJ} \ - ${LDFLAGS} \ - -ltls -lssl -lcrypto -static - # Link gopher UI (static-link for chroot) - ${CC} -o youtube/gopher \ - https.o \ - util.o \ - xml.o \ - youtube/youtube.o youtube/gopher.o \ - ${COMPATOBJ} \ - ${LDFLAGS} \ - -ltls -lssl -lcrypto -static - # Link CLI UI - ${CC} -o youtube/cli \ - https.o \ - util.o \ - xml.o \ - youtube/youtube.o youtube/cli.o \ - ${COMPATOBJ} \ - ${LDFLAGS} \ - -ltls +${LIBXML}: ${LIBXMLOBJ} + ${AR} rc $@ $? + ${RANLIB} $@ clean: - rm -f *.o - rm -f duckduckgo/cgi duckduckgo/cli duckduckgo/gopher duckduckgo/*.o - rm -f reddit/cgi reddit/cli reddit/gopher reddit/*.o - rm -f twitch/cgi twitch/cli twitch/gopher twitch/*.o - rm -f youtube/cgi youtube/cli youtube/gopher youtube/*.o + rm -f ${BIN} ${OBJ} ${LIBUTIL} ${LIBJSON} ${LIBHTTPS} ${LIBXML} -.PHONY: clean deps duckduckgo reddit twitch youtube +.PHONY: clean duckduckgo reddit twitch youtube (DIR) diff --git a/util.h b/util.h @@ -3,6 +3,11 @@ #define unveil(p1,p2) 0 #endif +#undef strlcat +size_t strlcat(char *, const char *, size_t); +#undef strlcpy +size_t strlcpy(char *, const char *, size_t); + int decodeparam(char *buf, size_t bufsiz, const char *s); int friendlytime(time_t now, time_t t); char *getparam(const char *query, const char *s);