
To assert static objects, we either have to add a method into the object under test itself and recompile on a test run with the activated test method (but also recompile after tests, so that method is gone on release builds). Alternatively we can include the whole .c file in our test infrastructure and save the object in the test directory. So there's no necessity to clean it up prior to a release build and it's contained away. This requires, that the test folder isn't excluded in coveralls.
186 lines
5.1 KiB
Makefile
186 lines
5.1 KiB
Makefile
# dunst - Notification-daemon
|
|
# See LICENSE file for copyright and license details.
|
|
|
|
include config.mk
|
|
|
|
VERSION := "1.3.2-non-git"
|
|
ifneq ($(wildcard ./.git/),)
|
|
VERSION := $(shell git describe --tags)
|
|
endif
|
|
|
|
ifeq (,${SYSTEMD})
|
|
# Check for systemctl to avoid discrepancies on systems, where
|
|
# systemd is installed, but systemd.pc is in another package
|
|
systemctl := $(shell command -v systemctl >/dev/null && echo systemctl)
|
|
ifeq (systemctl,${systemctl})
|
|
SYSTEMD := 1
|
|
else
|
|
SYSTEMD := 0
|
|
endif
|
|
endif
|
|
|
|
SERVICEDIR_DBUS ?= $(shell $(PKG_CONFIG) dbus-1 --variable=session_bus_services_dir)
|
|
SERVICEDIR_DBUS := ${SERVICEDIR_DBUS}
|
|
ifeq (,${SERVICEDIR_DBUS})
|
|
$(error "Failed to query $(PKG_CONFIG) for package 'dbus-1'!")
|
|
endif
|
|
|
|
ifneq (0,${SYSTEMD})
|
|
SERVICEDIR_SYSTEMD ?= $(shell $(PKG_CONFIG) systemd --variable=systemduserunitdir)
|
|
SERVICEDIR_SYSTEMD := ${SERVICEDIR_SYSTEMD}
|
|
ifeq (,${SERVICEDIR_SYSTEMD})
|
|
$(error "Failed to query $(PKG_CONFIG) for package 'systemd'!")
|
|
endif
|
|
endif
|
|
|
|
LIBS := $(shell $(PKG_CONFIG) --libs ${pkg_config_packs})
|
|
INCS := $(shell $(PKG_CONFIG) --cflags ${pkg_config_packs})
|
|
|
|
ifneq (clean, $(MAKECMDGOALS))
|
|
ifeq ($(and $(INCS),$(LIBS)),)
|
|
$(error "$(PKG_CONFIG) failed!")
|
|
endif
|
|
endif
|
|
|
|
CFLAGS := ${DEFAULT_CPPFLAGS} ${CPPFLAGS} ${DEFAULT_CFLAGS} ${CFLAGS} -I. ${INCS}
|
|
LDFLAGS := ${DEFAULT_LDFLAGS} ${LDFLAGS} -L. ${LIBS}
|
|
|
|
SRC := $(sort $(shell find src/ -name '*.c'))
|
|
OBJ := ${SRC:.c=.o}
|
|
TEST_SRC := $(sort $(shell find test/ -name '*.c'))
|
|
TEST_OBJ := $(TEST_SRC:.c=.o)
|
|
|
|
.PHONY: all debug
|
|
all: doc dunst service
|
|
|
|
debug: CFLAGS += ${CPPFLAGS_DEBUG} ${CFLAGS_DEBUG}
|
|
debug: LDFLAGS += ${LDFLAGS_DEBUG}
|
|
debug: CPPFLAGS += ${CPPFLAGS_DEBUG}
|
|
debug: all
|
|
|
|
.c.o:
|
|
${CC} -o $@ -c $< ${CFLAGS}
|
|
|
|
${OBJ}: config.mk
|
|
|
|
dunst: ${OBJ} main.o
|
|
${CC} -o ${@} ${OBJ} main.o ${CFLAGS} ${LDFLAGS}
|
|
|
|
dunstify: dunstify.o
|
|
${CC} -o ${@} dunstify.o ${CFLAGS} ${LDFLAGS}
|
|
|
|
.PHONY: test test-valgrind test-coverage
|
|
test: test/test clean-coverage-run
|
|
cd test && ./test
|
|
|
|
test-valgrind: test/test
|
|
cd ./test \
|
|
&& valgrind \
|
|
--suppressions=../.valgrind.suppressions \
|
|
--leak-check=full \
|
|
--show-leak-kinds=definite \
|
|
--errors-for-leak-kinds=definite \
|
|
--num-callers=40 \
|
|
--error-exitcode=123 \
|
|
./test
|
|
|
|
test-coverage: CFLAGS += -fprofile-arcs -ftest-coverage -O0
|
|
test-coverage: test
|
|
|
|
test-coverage-report: test-coverage
|
|
mkdir -p docs/internal/coverage
|
|
gcovr \
|
|
-r . \
|
|
--exclude=test \
|
|
--html \
|
|
--html-details \
|
|
-o docs/internal/coverage/index.html
|
|
|
|
test/%.o: test/%.c src/%.c
|
|
${CC} -o $@ -c $< ${CFLAGS}
|
|
|
|
test/test: ${OBJ} ${TEST_OBJ}
|
|
${CC} -o ${@} ${TEST_OBJ} $(filter-out ${TEST_OBJ:test/%=src/%},${OBJ}) ${CFLAGS} ${LDFLAGS}
|
|
|
|
.PHONY: doc doc-doxygen
|
|
doc: docs/dunst.1
|
|
docs/dunst.1: docs/dunst.pod
|
|
pod2man --name=dunst -c "Dunst Reference" --section=1 --release=${VERSION} $< > $@
|
|
doc-doxygen:
|
|
doxygen docs/internal/Doxyfile
|
|
|
|
.PHONY: service service-dbus service-systemd
|
|
service: service-dbus
|
|
service-dbus:
|
|
@sed "s|##PREFIX##|$(PREFIX)|" org.knopwob.dunst.service.in > org.knopwob.dunst.service
|
|
ifneq (0,${SYSTEMD})
|
|
service: service-systemd
|
|
service-systemd:
|
|
@sed "s|##PREFIX##|$(PREFIX)|" dunst.systemd.service.in > dunst.systemd.service
|
|
endif
|
|
|
|
.PHONY: clean clean-dunst clean-dunstify clean-doc clean-tests clean-coverage clean-coverage-run
|
|
clean: clean-dunst clean-dunstify clean-doc clean-tests clean-coverage clean-coverage-run
|
|
|
|
clean-dunst:
|
|
rm -f dunst ${OBJ} main.o
|
|
rm -f org.knopwob.dunst.service
|
|
rm -f dunst.systemd.service
|
|
|
|
clean-dunstify:
|
|
rm -f dunstify.o
|
|
rm -f dunstify
|
|
|
|
clean-doc:
|
|
rm -f docs/dunst.1
|
|
rm -fr docs/internal/html
|
|
rm -fr docs/internal/coverage
|
|
|
|
clean-tests:
|
|
rm -f test/test test/*.o
|
|
|
|
clean-coverage: clean-coverage-run
|
|
find . -type f -name '*.gcno' -delete
|
|
find . -type f -name '*.gcna' -delete
|
|
# Cleans the coverage data before every run to not double count any lines
|
|
clean-coverage-run:
|
|
find . -type f -name '*.gcov' -delete
|
|
find . -type f -name '*.gcda' -delete
|
|
|
|
.PHONY: install install-dunst install-doc \
|
|
install-service install-service-dbus install-service-systemd \
|
|
uninstall \
|
|
uninstall-service uninstall-service-dbus uninstall-service-systemd
|
|
install: install-dunst install-doc install-service
|
|
|
|
install-dunst: dunst doc
|
|
install -Dm755 dunst ${DESTDIR}${PREFIX}/bin/dunst
|
|
install -Dm644 docs/dunst.1 ${DESTDIR}${MANPREFIX}/man1/dunst.1
|
|
|
|
install-doc:
|
|
install -Dm644 dunstrc ${DESTDIR}${PREFIX}/share/dunst/dunstrc
|
|
|
|
install-service: install-service-dbus
|
|
install-service-dbus: service-dbus
|
|
install -Dm644 org.knopwob.dunst.service ${DESTDIR}${SERVICEDIR_DBUS}/org.knopwob.dunst.service
|
|
ifneq (0,${SYSTEMD})
|
|
install-service: install-service-systemd
|
|
install-service-systemd: service-systemd
|
|
install -Dm644 dunst.systemd.service ${DESTDIR}${SERVICEDIR_SYSTEMD}/dunst.service
|
|
endif
|
|
|
|
uninstall: uninstall-service
|
|
rm -f ${DESTDIR}${PREFIX}/bin/dunst
|
|
rm -f ${DESTDIR}${MANPREFIX}/man1/dunst.1
|
|
rm -rf ${DESTDIR}${PREFIX}/share/dunst
|
|
|
|
uninstall-service: uninstall-service-dbus
|
|
uninstall-service-dbus:
|
|
rm -f ${DESTDIR}${SERVICEDIR_DBUS}/org.knopwob.dunst.service
|
|
|
|
ifneq (0,${SYSTEMD})
|
|
uninstall-service: uninstall-service-systemd
|
|
uninstall-service-systemd:
|
|
rm -f ${DESTDIR}${SERVICEDIR_SYSTEMD}/dunst.service
|
|
endif
|