
We currently do not keep track of header files in our Makefile so if one is changed it can lead to multiple incompatible binary files being linked. Instead we now create dependency lists for each source file and recompile them if the need arises. Fixes #594
189 lines
5.2 KiB
Makefile
189 lines
5.2 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} ${INCS} -MMD -MP
|
|
LDFLAGS := ${DEFAULT_LDFLAGS} ${LDFLAGS} ${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)
|
|
DEPS := ${SRC:.c=.d} ${TEST_SRC:.c=.d}
|
|
|
|
|
|
.PHONY: all debug
|
|
all: doc dunst service
|
|
|
|
debug: CFLAGS += ${CPPFLAGS_DEBUG} ${CFLAGS_DEBUG}
|
|
debug: LDFLAGS += ${LDFLAGS_DEBUG}
|
|
debug: CPPFLAGS += ${CPPFLAGS_DEBUG}
|
|
debug: all
|
|
|
|
-include $(DEPS)
|
|
|
|
${OBJ} ${TEST_OBJ}: Makefile config.mk
|
|
|
|
%.o: %.c
|
|
${CC} -o $@ -c $< ${CFLAGS}
|
|
|
|
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
|
|
./test/test -v
|
|
|
|
test-valgrind: test/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 -v
|
|
|
|
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 main.d ${DEPS}
|
|
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 test/*.d
|
|
|
|
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
|