view Makefile @ 15:2c642e18a5c0

make: minor fixes
author David Demelier <markand@malikania.fr>
date Thu, 08 Jul 2021 21:04:04 +0200
parents cb2d7f365b7c
children 600204c31bf0
line wrap: on
line source

#
# Makefile -- POSIX Makefile for sci
#
# Copyright (c) 2021 David Demelier <markand@malikania.fr>
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#

.POSIX:

include config.mk

LIBSCI_SRCS=            db.c \
                        log.c \
                        req.c \
                        types.c \
                        util.c \
                        extern/libsqlite/sqlite3.c
LIBSCI_DATA=            sql/init.h \
                        sql/job-add.h \
                        sql/job-todo.h \
                        sql/jobresult-add.h \
                        sql/project-add.h \
                        sql/project-find-id.h \
                        sql/project-find.h \
                        sql/project-list.h \
                        sql/project-update.h \
                        sql/worker-add.h \
                        sql/worker-find.h \
                        sql/worker-find-id.h \
                        sql/worker-list.h
LIBSCI_OBJS=            ${LIBSCI_SRCS:.c=.o}
LIBSCI_DEPS=            ${LIBSCI_SRCS:.c=.d}

SCID_SRCS=              scid.c
SCID_OBJS=              ${SCID_SRCS:.c=.o}
SCID_DEPS=              ${SCID_SRCS:.c=.d}

SCIWORKERD_SRCS=        sciworkerd.c
SCIWORKERD_OBJS=        ${SCIWORKERD_SRCS:.c=.o}
SCIWORKERD_DEPS=        ${SCIWORKERD_SRCS:.c=.d}

SCICTL_SRCS=            scictl.c
SCICTL_OBJS=            ${SCICTL_SRCS:.c=.o}
SCICTL_DEPS=            ${SCICTL_SRCS:.c=.d}

SCIWEBD_SRCS=           http.c \
                        page-api-jobs.c \
                        page-api-projects.c \
                        page-api-workers.c \
                        page.c \
                        sciwebd.c
SCIWEBD_OBJS=           ${SCIWEBD_SRCS:.c=.o}
SCIWEBD_DEPS=           ${SCIWEBD_SRCS:.c=.d}

MAN7=                   man/sci.7
MAN8=                   man/scictl.8 \
                        man/scid.8 \
                        man/sciwebd.8 \
                        man/sciworkerd.8

TESTS=                  tests/test-db.c
TESTS_OBJS=             ${TESTS:.c=}
TESTS_DEPS=             ${TESTS:.c=.d}

LIBBSD_INCS=            `pkg-config --silence-errors --cflags libbsd-overlay`
LIBBSD_LIBS=            `pkg-config --silence-errors --libs libbsd-overlay`

LIBCURL_INCS=           `pkg-config --cflags libcurl`
LIBCURL_LIBS=           `pkg-config --libs libcurl`

JANSSON_INCS=           `pkg-config --cflags jansson`
JANSSON_LIBS=           `pkg-config --libs jansson`

KCGI_INCS=              `pkg-config --cflags kcgi`
KCGI_LIBS=              `pkg-config --libs kcgi`

INCS=                   -Iextern/libsqlite \
                        -Iextern/libgreatest \
                        -I.
DEFS=                   -DVARDIR=\"${VARDIR}\" \
                        -DTMPDIR=\"${TMPDIR}\" \
                        -DSQLITE_THREADSAFE=0 \
                        -DSQLITE_OMIT_LOAD_EXTENSION=0 \
                        -DSQLITE_OMIT_DEPRECATED=0 \
                        -DSQLITE_DEFAULT_FOREIGN_KEY=1

.SUFFIXES:
.SUFFIXES: .c .o .sql .h .in

all: scid scictl sciwebd sciworkerd ${MAN7} ${MAN8}

# for unit tests.
.c:
	${CC} ${INCS} ${DEFS} ${LIBBSD_INCS} ${KCGI_INCS} ${JANSSON_INCS} \
		${CFLAGS} -MMD $< -o $@ libsci.a ${LIBBSD_LIBS} ${JANSSON_LIBS}

.c.o:
	${CC} ${INCS} ${DEFS} ${LIBBSD_INCS} ${KCGI_INCS} ${JANSSON_INCS} \
		${CFLAGS} -MMD -c $< -o $@

.in:
	sed -e "s,@VARDIR@,${VARDIR},g" \
	    -e "s,@SHAREDIR@,${SHAREDIR},g" < $< > $@

.sql.h:
	./bcc -sc0 $< $< > $@

-include ${LIBSCI_DEPS} ${SCID_DEPS} ${SCIWORKERD_DEPS} ${SCICTL_DEPS} ${SCIWEBD_DEPS} ${TESTS_DEPS}

config.h:
	@echo "using default configuration"
	cp config.def.h $@

bcc: extern/bcc/bcc.c
	${CC} ${CFLAGS} -o $@ $< ${LDFLAGS}

${LIBSCI_DATA}: bcc
${LIBSCI_OBJS}: config.h ${LIBSCI_DATA}

libsci.a: ${LIBSCI_OBJS}
	${AR} -rc $@ ${LIBSCI_OBJS}

${SCID_OBJS}: libsci.a

scid: ${SCID_OBJS}
	${CC} ${CFLAGS} -o $@ ${SCID_OBJS} libsci.a ${LIBBSD_LIBS} \
		${JANSSON_LIBS} ${LDFLAGS}

${SCIWORKERD_OBJS}: libsci.a

sciworkerd: ${SCIWORKERD_OBJS}
	${CC} ${CFLAGS} -o $@ ${SCIWORKERD_OBJS} libsci.a ${LIBBSD_LIBS} \
		${LIBCURL_LIBS} ${JANSSON_LIBS} ${LDFLAGS}

${SCICTL_OBJS}: libsci.a

scictl: ${SCICTL_OBJS}
	${CC} ${CFLAGS} -o $@ ${SCICTL_OBJS} libsci.a ${LIBBSD_LIBS} \
		${JANSSON_LIBS} ${LDFLAGS}

${SCIWEBD_OBJS}: libsci.a

sciwebd: ${SCIWEBD_OBJS}
	${CC} ${CFLAGS} -o $@ ${SCIWEBD_OBJS} libsci.a ${LIBBSD_LIBS} \
		${KCGI_LIBS} ${JANSSON_LIBS} ${LDFLAGS}

install:
	mkdir -p ${DESTDIR}${BINDIR}
	cp scid scictl sciwebd sciworkerd ${DESTDIR}${BINDIR}
	mkdir -p ${DESTDIR}${MANDIR}/man7
	cp ${MAN7} ${DESTDIR}${MANDIR}/man7
	mkdir -p ${DESTDIR}${MANDIR}/man8
	cp ${MAN8} ${DESTDIR}${MANDIR}/man8

clean:
	rm -f bcc config.h tags cscope.out ${MAN7} ${MAN8}
	rm -f libsci.a ${LIBSCI_OBJS} ${LIBSCI_DATA} ${LIBSCI_DEPS}
	rm -f scid ${SCID_OBJS} ${SCID_DEPS}
	rm -f scictl ${SCICTL_OBJS} ${SCICTL_DEPS}
	rm -f sciworkerd ${SCIWORKERD_OBJS} ${SCIWORKERD_DEPS}
	rm -f sciwebd ${SCIWEBD_OBJS} ${SCIWEBD_DEPS}
	rm -f ${TESTS_OBJS} ${TESTS_DEPS}

${TESTS_OBJS}: libsci.a

tests: ${TESTS_OBJS}
	for t in ${TESTS_OBJS}; do $$t -v; done

.PHONY: all clean install tests