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);