view Makefile @ 71:d3d3937c5756

misc: remove deprecated noreturn
author David Demelier <markand@malikania.fr>
date Wed, 29 Jun 2022 20:47:24 +0200
parents 1a6abb3ed16a
children 1a98bc0daa49
line wrap: on
line source

#
# Makefile -- basic makefile for paster
#
# Copyright (c) 2020-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:

# User options.
CC=             cc
CFLAGS=         -DNDEBUG -O3

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

VERSION=        0.2.1

CORE_SRCS=      config.c                        \
                database.c                      \
                http.c                          \
                log.c                           \
                fragment-duration.c             \
                fragment-language.c             \
                fragment-paste.c                \
                fragment.c                      \
                page-download.c                 \
                page-fork.c                     \
                page-index.c                    \
                page-new.c                      \
                page-paste.c                    \
                page-search.c                   \
                page-static.c                   \
                page.c                          \
                paste.c                         \
                util.c
CORE_OBJS=      ${CORE_SRCS:.c=.o}
CORE_LIB=       libpaster.a

TESTS_SRCS=     tests/test-database.c
TESTS_OBJS=     ${TESTS_SRCS:.c=.o}
TESTS=          ${TESTS_SRCS:.c=}

SQLITE_FLAGS=   -DSQLITE_THREADSAFE=0           \
                -DSQLITE_OMIT_LOAD_EXTENSION    \
                -DSQLITE_OMIT_DEPRECATED        \
                -DSQLITE_DEFAULT_FOREIGN_KEYS=1
SQLITE_LIB=     libsqlite3.a

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

INCS=           -I. -Iextern ${KCGI_INCS}
DEFS=           -D_POSIX_C_SOURCE=200809L -DVARDIR=\"${VARDIR}\" -DSHAREDIR=\"${SHAREDIR}\"
LIBS=           ${KCGI_LIBS}
SED=            sed -e "s|@SHAREDIR@|${SHAREDIR}|" \
                    -e "s|@VARDIR@|${VARDIR}|"

.SUFFIXES:
.SUFFIXES: .o .c .sh

all: pasterd pasterd-clean paster

.c.o:
	${CC} ${INCS} ${DEFS} ${CFLAGS} -c $< -o $@

.o:
	${CC} ${INCS} ${DEFS} ${CFLAGS} $< -o $@ ${CORE_LIB} ${SQLITE_LIB} ${LIBS} ${LDFLAGS}

.sh:
	${SED} < $< > $@

${SQLITE_LIB}: extern/sqlite3.c extern/sqlite3.h
	${CC} ${CFLAGS} ${SQLITE_FLAGS} -c extern/sqlite3.c -o extern/sqlite3.o
	${AR} -rc $@ extern/sqlite3.o

${CORE_LIB}: ${CORE_OBJS}
	${AR} -rc $@ ${CORE_OBJS}

paster: paster.sh
	cp paster.sh paster
	chmod +x paster

pasterd.o pasterd-clean.o: ${CORE_LIB} ${SQLITE_LIB}

clean:
	rm -f ${SQLITE_LIB} extern/sqlite3.o
	rm -f ${CORE_LIB} ${CORE_OBJS}
	rm -f paster pasterd-clean pasterd
	rm -f test.db ${TESTS_OBJS}

install-paster:
	mkdir -p ${DESTDIR}${BINDIR}
	mkdir -p ${DESTDIR}${MANDIR}/man1
	cp paster ${DESTDIR}${BINDIR}
	chmod 755 ${DESTDIR}${BINDIR}/paster
	${SED} < paster.1 > ${DESTDIR}${MANDIR}/man1/paster.1

install-pasterd:
	mkdir -p ${DESTDIR}${BINDIR}
	mkdir -p ${DESTDIR}${MANDIR}/man5
	mkdir -p ${DESTDIR}${MANDIR}/man8
	cp pasterd ${DESTDIR}${BINDIR}
	cp pasterd-clean ${DESTDIR}${BINDIR}
	mkdir -p ${DESTDIR}${SHAREDIR}/paster
	cp -R themes ${DESTDIR}${SHAREDIR}/paster
	${SED} < pasterd.8 > ${DESTDIR}${MANDIR}/man8/pasterd.8
	${SED} < pasterd-clean.8 > ${DESTDIR}${MANDIR}/man8/pasterd-clean.8
	${SED} < pasterd-themes.5 > ${DESTDIR}${MANDIR}/man5/pasterd-themes.5

install: install-pasterd install-paster

${TESTS_OBJS}: ${CORE_LIB} ${SQLITE_LIB}

tests: ${TESTS}
	for t in ${TESTS}; do $$t; done

.PHONY: all clean tests