view Makefile @ 41:00b9af607524

scid: implement /jobresults/id page
author David Demelier <markand@malikania.fr>
date Tue, 09 Aug 2022 14:52:34 +0200
parents 62aefd02ac59
children 576f4b1ec79f
line wrap: on
line source

#
# Makefile -- POSIX Makefile for sci
#
# Copyright (c) 2021-2022 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:

CC=                     cc
CFLAGS=                 -O0

PREFIX=                 /usr/local
BINDIR=                 ${PREFIX}/bin
MANDIR=                 ${PREFIX}/share/man
SHAREDIR=               ${PREFIX}/share
VARDIR=                 ${PREFIX}/var

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`

-include config.mk

VERSION=                0.1.0

LIBSCI=                 libsci/libsci.a
LIBSCI_SRCS=            libsci/apic.c \
                        libsci/log.c \
                        libsci/strlcpy.c \
                        libsci/strtonum.c \
                        libsci/util.c
LIBSCI_OBJS=            ${LIBSCI_SRCS:.c=.o}
LIBSCI_DEPS=            ${LIBSCI_SRCS:.c=.d}

SQL_SRCS=               sql/init.sql \
                        sql/job-add.sql \
                        sql/job-list.sql \
                        sql/job-todo.sql \
                        sql/jobresult-add.sql \
                        sql/jobresult-list-by-job.sql \
                        sql/jobresult-list-by-job-group.sql \
                        sql/jobresult-list-by-worker.sql \
                        sql/project-find.sql \
                        sql/project-list.sql \
                        sql/project-save.sql \
                        sql/worker-find.sql \
                        sql/worker-list.sql \
                        sql/worker-save.sql
SQL_OBJS=               ${SQL_SRCS:.sql=.h}

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

SCID=                   scid/scid
SCID_SRCS=              extern/libduktape/duktape.c \
                        extern/libmustache4c/mustache.c \
                        extern/libsqlite/sqlite3.c \
                        scid/crud.c \
                        scid/db.c \
                        scid/http.c \
                        scid/main.c \
                        scid/page-api-jobresults.c \
                        scid/page-api-jobs.c \
                        scid/page-api-projects.c \
                        scid/page-api-todo.c \
                        scid/page-api-workers.c \
                        scid/page-index.c \
                        scid/page-jobresults.c \
                        scid/page-static.c \
                        scid/pageutil.c \
                        scid/scid.c \
                        scid/theme.c
SCID_OBJS=              ${SCID_SRCS:.c=.o}
SCID_DEPS=              ${SCID_SRCS:.c=.d}

SCIWORKERD=             sciworkerd/sciworkerd
SCIWORKERD_SRCS=        sciworkerd/main.c \
                        sciworkerd/sciworkerd.c \
                        sciworkerd/task.c
SCIWORKERD_OBJS=        ${SCIWORKERD_SRCS:.c=.o}
SCIWORKERD_DEPS=        ${SCIWORKERD_SRCS:.c=.d}

MAN7=                   sci.7
MAN8=                   scid.8 sciworkerd.8

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

INCS=                   -Iextern/libsqlite \
                        -Iextern/libutlist \
                        -Iextern/libgreatest \
                        -Iextern/libmustache4c \
                        -Iextern/libduktape \
                        -Ilibsci \
                        -I.
DEFS=                   -DVARDIR=\"${VARDIR}\" \
                        -DVERSION=\"${VERSION}\" \
                        -DSQLITE_THREADSAFE=0 \
                        -DSQLITE_OMIT_LOAD_EXTENSION=0 \
                        -DSQLITE_OMIT_DEPRECATED=0 \
                        -DSQLITE_DEFAULT_FOREIGN_KEY=1
SUBST=                  -e "s,@VERSION@,${VERSION},g"

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

all: ${SCICTL} ${SCID} ${SCIWORKERD}

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

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

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

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

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

# {{{ libsci

${SQL_OBJS}: bcc

${LIBSCI_OBJS}: ${SQL_OBJS}

${LIBSCI}: ${LIBSCI_OBJS}
	${AR} -rc $@ ${LIBSCI_OBJS}

# }}}

# {{{ scictl

${SCICTL_OBJS}: ${LIBSCI}

${SCICTL}: ${SCICTL_OBJS}
	${CC} ${CFLAGS} -o $@ ${SCICTL_OBJS} ${LIBSCI} ${LIBCURL_LIBS} ${JANSSON_LIBS} ${LDFLAGS}

# }}}

# {{{ scid

${SCID_OBJS}: ${LIBSCI}

${SCID}: ${SCID_OBJS}
	${CC} ${CFLAGS} -o $@ ${SCID_OBJS} ${LIBSCI} ${JANSSON_LIBS} ${KCGI_LIBS} -lm ${LDFLAGS}

# }}}

# {{{ sciworkerd

${SCIWORKERD_OBJS}: ${LIBSCI}

${SCIWORKERD}: ${SCIWORKERD_OBJS}
	${CC} ${CFLAGS} -o $@ ${SCIWORKERD_OBJS} ${LIBSCI} ${LIBCURL_LIBS} ${JANSSON_LIBS} ${LDFLAGS}

# }}}

install:
	mkdir -p ${DESTDIR}${BINDIR}
	cp scid/scid sciworkerd/sciworkerd ${DESTDIR}${BINDIR}
	mkdir -p ${DESTDIR}${MANDIR}/man7
	for m in ${MAN7}; do \
		sed ${SUBST} < man/$$m > ${DESTDIR}${MANDIR}/man7/$$m; \
	done
	mkdir -p ${DESTDIR}${MANDIR}/man8
	for m in ${MAN8}; do \
		sed ${SUBST} < man/$$m > ${DESTDIR}${MANDIR}/man8/$$m; \
	done

clean:
	rm -f bcc tags cscope.out ${MAN7} ${MAN8} ${SQL_OBJS}
	rm -f ${LIBSCI} ${LIBSCI_OBJS} ${LIBSCI_DEPS}
	rm -f ${SCICTL} ${SCICTL_OBJS} ${SCICTL_DEPS}
	rm -f ${SCID} ${SCID_OBJS} ${SCID_DEPS}
	rm -f ${SCIWORKERD}${SCIWORKERD_OBJS} ${SCIWORKERD_DEPS}
	rm -f ${TESTS_OBJS} ${TESTS_DEPS}

doxygen:
	sed ${SUBST} < doc/Doxyfile | doxygen -

${TESTS_OBJS}: lib/libsci.a

tests: lib/libsci.a ${TESTS_OBJS}
	for t in ${TESTS_OBJS}; do $$t -v; done

.PHONY: all clean doxygen install tests