diff Makefile @ 938:7b74df7e8913

irccd: native plugin support
author David Demelier <markand@malikania.fr>
date Mon, 11 Jan 2021 21:25:58 +0100
parents ffe985308567
children a62c56c8b5ca
line wrap: on
line diff
--- a/Makefile	Mon Jan 11 10:28:49 2021 +0100
+++ b/Makefile	Mon Jan 11 21:25:58 2021 +0100
@@ -16,58 +16,107 @@
 # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #
 
-.POSIX:
-
 .SUFFIXES:
 .SUFFIXES: .o .c
 
 include config.mk
 
-IRCCD=          irccd/irccd
-IRCCD_SRCS=     extern/libduktape/duktape.c     \
-                irccd/log.c                     \
-                irccd/server.c                  \
-                irccd/subst.c                   \
-                irccd/util.c
-IRCCD_OBJS=     ${IRCCD_SRCS:.c=.o}
-IRCCD_DEPS=     ${IRCCD_SRCS:.c=.d}
+IRCCD=                  irccd/irccd
+IRCCD_SRCS=             irccd/main.c
+IRCCD_OBJS=             ${IRCCD_SRCS:.c=.o}
+IRCCD_DEPS=             ${IRCCD_SRCS:.c=.d}
+
+LIBCOMPAT=              extern/libcompat/libirccd-compat.a
+
+ifeq (${WITH_JS},yes)
+LIBDUKTAPE=             extern/libduktape/libirccd-duktape.a
+endif
+
+LIBIRCCD=               lib/libirccd.a
+LIBIRCCD_SRCS=          lib/irccd/dl-plugin.c
+LIBIRCCD_SRCS+=         lib/irccd/log.c
+LIBIRCCD_SRCS+=         lib/irccd/plugin.c
+LIBIRCCD_SRCS+=         lib/irccd/server.c
+LIBIRCCD_SRCS+=         lib/irccd/subst.c
+LIBIRCCD_SRCS+=         lib/irccd/util.c
+LIBIRCCD_OBJS=          ${LIBIRCCD_SRCS:.c=.o}
+LIBIRCCD_DEPS=          ${LIBIRCCD_SRCS:.c=.d}
 
-TESTS=          tests/test-log.c                \
-                tests/test-util.c               \
-                tests/test-subst.c
-TESTS_OBJS=     ${TESTS:.c=}
+TESTS=                  tests/test-dl-plugin.c
+TESTS+=                 tests/test-log.c
+TESTS+=                 tests/test-util.c
+TESTS+=                 tests/test-subst.c
+TESTS_OBJS=             ${TESTS:.c=}
+
+DEFINES=                -D_BSD_SOURCE
+DEFINES+=               -DSOURCEDIR=\"`pwd`\"
 
-FLAGS=          -D_BSD_SOURCE                   \
-                -I extern/libduktape            \
-                -I extern/libgreatest           \
-                -I extern/libcompat/include     \
-                -I .
+INCS=                   -I extern/libcompat/include
+ifeq (${WITH_JS},yes)
+INCS+=                  -I extern/libduktape
+endif
+INCS+=                  -I extern/libgreatest
+INCS+=                  -I lib
+
+LIBS=                   -L extern/libcompat
+ifeq (${WITH_JS},yes)
+LIBS+=                  -L extern/libduktape
+endif
+LIBS+=                  -L lib
+
+LIBS+=                  -l irccd-compat
+ifeq (${WITH_JS},yes)
+LIBS+=                  -l irccd-duktape
+endif
+LIBS+=                  -l irccd
 
 all: ${IRCCD}
 
 .c.o:
-	${CC} -MMD ${FLAGS} ${CFLAGS} -c $< -o $@
+	${CMD.cc}
 
-.c:
-	${CC} ${FLAGS} ${CFLAGS} $< -o $@ extern/libcompat/libcompat.a ${IRCCD_OBJS} ${LDFLAGS}
-
+-include ${LIBIRCCD_DEPS}
 -include ${IRCCD_DEPS}
 
-extern/libcompat/libcompat.a:
-	${MAKE} -C extern/libcompat
+${LIBCOMPAT}:
+	${MAKE} CFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" -C extern/libcompat
 
-${IRCCD_OBJS}: extern/libcompat/libcompat.a
+ifeq (${WITH_JS},yes)
+${LIBDUKTAPE}:
+	${MAKE} CFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" -C extern/libduktape
+endif
+
+${LIBIRCCD_OBJS}: ${LIBCOMPAT}
+
+${LIBIRCCD}: ${LIBIRCCD_OBJS}
+	${CMD.ar}
 
-${IRCCD}: irccd/main.o ${IRCCD_OBJS}
-	${CC} -o $@ extern/libcompat/libcompat.a irccd/main.o ${IRCCD_OBJS} ${LDFLAGS}
+${IRCCD}: ${IRCCD_OBJS} ${LIBCOMPAT} ${LIBDUKTAPE} ${LIBIRCCD}
+	${CMD.ccld}
 
-clean:
-	${MAKE} -C extern/libcompat clean
-	rm -f irccd/main.o irccd/main.d ${IRCCD} ${IRCCD_OBJS} ${IRCCD_DEPS}
+# Unit tests.
+tests/test-%.o: tests/test-%.c
+	${CMD.cc}
+tests/test-%: tests/test-%.o ${LIBCOMPAT} ${IRCCD_OBJS}
+	${CMD.ccld}
 
-${TESTS_OBJS}: ${IRCCD_OBJS}
+${TESTS_OBJS}: ${LIBIRCCD}
+
+# Sample plugin for test-dl-plugin.
+tests/example-dl-plugin${EXT.shared}: tests/example-dl-plugin.o
+	${CMD.ld-shared}
+
+tests/test-dl-plugin: tests/example-dl-plugin${EXT.shared}
 
 tests: ${TESTS_OBJS}
 	for t in ${TESTS_OBJS}; do ./$$t; done
 
+clean:
+	${MAKE} -C extern/libcompat clean
+	${MAKE} -C extern/libduktape clean
+	rm -f ${LIBIRCCD} ${LIBIRCCD_OBJS} ${LIBIRCCD_DEPS}
+	rm -f ${IRCCD} ${IRCCD_OBJS} ${IRCCD_DEPS}
+	rm -f tests/example-dl-plugin${EXT.shared} tests/example-dl-plugin.o tests/example-dl-plugin.d
+	rm -f ${TESTS_OBJS}
+
 .PHONY: all clean tests