view GNUmakefile @ 83:28fd8b5247f0

scid: make sure index page list most recents first
author David Demelier <markand@malikania.fr>
date Tue, 28 Feb 2023 16:31:34 +0100
parents 377ea81b4ecf
children
line wrap: on
line source

#
# GNUmakefile -- GNU Makefile for sci
#
# Copyright (c) 2021-2023 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.
#

PREFIX :=               /usr/local
BINDIR :=               $(PREFIX)/bin
MANDIR :=               $(PREFIX)/share/man
SHAREDIR :=             $(PREFIX)/share
VARDIR :=               $(PREFIX)/var

WITH_SCID :=            yes
WITH_SCICTL :=          yes
WITH_SCIWORKERD :=      yes
WITH_DEBUG :=           no

LIBCURL_INCS :=         $(shell pkg-config --cflags libcurl)
LIBCURL_LIBS :=         $(shell pkg-config --libs libcurl)

JANSSON_INCS=           $(shell pkg-config --cflags jansson)
JANSSON_LIBS=           $(shell pkg-config --libs jansson)

ifeq ($(WITH_SCID),yes)

KCGI_INCS=              $(shell pkg-config --cflags kcgi)
KCGI_LIBS=              $(shell pkg-config --libs kcgi)

endif

-include config.mk

VERSION :=              0.1.0

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

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

ifeq ($(WITH_DEBUG),yes)
OPTS :=                 -g -O0
else
OPTS :=                 -DNDEBUG -O3
endif

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

all:

%.o: %.c
	$(CC) $(INCS) $(DEFS) $(OPTS) $(CFLAGS) -MMD -c $< -o $@

%: %.c
	$(CC) $(INCS) $(DEFS) $(OPTS) $(CFLAGS) -o $@ $< $(OBJS) $(LIBS) $(LDFLAGS)

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

# {{{ libsci

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-group.sql \
                        sql/jobresult-list-by-job.sql \
                        sql/jobresult-list-by-worker.sql \
                        sql/project-find.sql \
                        sql/project-list.sql \
                        sql/project-save.sql \
                        sql/property-get.sql \
                        sql/property-set.sql \
                        sql/worker-find.sql \
                        sql/worker-list.sql \
                        sql/worker-save.sql
SQL_OBJS :=             $(SQL_SRCS:.sql=.h)

-include $(LIBSCI_DEPS)

$(SQL_OBJS): extern/bcc/bcc

$(LIBSCI_OBJS): $(SQL_OBJS)

$(LIBSCI): $(LIBSCI_OBJS)
	$(AR) -rc $@ $(LIBSCI_OBJS)

# }}}

# {{{ scictl

SCICTL :=               scictl/scictl

ifeq ($(WITH_SCICTL),yes)

$(SCICTL): $(LIBSCI)
$(SCICTL): private LIBS += $(LIBSCI) $(JANSSON_LIBS) $(LIBCURL_LIBS)

all: $(SCICTL)

endif

# }}}

# {{{ scid

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-projects.c \
                        scid/page-static.c \
                        scid/page-workers.c \
                        scid/pageutil.c \
                        scid/theme.c
SCID_OBJS :=            $(SCID_SRCS:.c=.o)
SCID_DEPS :=            $(SCID_SRCS:.c=.d)

ifeq ($(WITH_SCID),yes)

-include $(SCID_DEPS)

$(SCID): $(SCID_OBJS) $(LIBSCI)
$(SCID): private OBJS += $(SCID_OBJS)
$(SCID): private INCS += $(KCGI_INCS)
$(SCID): private LIBS += $(LIBSCI) $(KCGI_LIBS) $(JANSSON_LIBS)

all: $(SCID)

endif

# }}}

# {{{ sciworkerd

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

ifeq ($(WITH_SCIWORKERD),yes)

-include $(SCIWORKERD_DEPS)

$(SCIWORKERD): $(SCIWORKERD_OBJS) $(LIBSCI)
$(SCIWORKERD): private OBJS += $(SCIWORKERD_OBJS)
$(SCIWORKERD): private LIBS += $(LIBSCI) $(LIBCURL_LIBS) $(JANSSON_LIBS)

all: $(SCIWORKERD)

endif

# }}}

install:
	mkdir -p $(DESTDIR)$(BINDIR)
ifeq ($(WITH_SCID),yes)
	cp scid/scid $(DESTDIR)$(BINDIR)
endif
ifeq ($(WITH_SCICTL),yes)
	cp scictl/scictl $(DESTDIR)$(BINDIR)
endif
ifeq ($(WITH_SCIWORKERD),yes)
	cp sciworkerd/sciworkerd $(DESTDIR)$(BINDIR)
endif
	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
	mkdir -p $(DESTDIR)$(SHAREDIR)/sci
	cp -R themes $(DESTDIR)$(SHAREDIR)/sci

clean:
	rm -f extern/bcc/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)

doxygen:
	sed $(SUBST) < doc/Doxyfile | doxygen -

.PHONY: all clean doxygen install