aboutsummaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile83
1 files changed, 83 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..3688316
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,83 @@
+.POSIX:
+CC = c99
+CFLAGS = -std=c99 -Wall -Wextra -Wpedantic -fPIC -g -DVERSION='"$(VERSION)"' -DDATE='"$(DATE)"'
+LDFLAGS =
+LDLIBS =
+PREFIX = /usr/local
+MANPREFIX = $(PREFIX)/share/man
+VERSION = 0.2.0
+DATE = 2021-02-21
+
+sources = src/remembering.c
+
+manpages = \
+ doc/remembering.1 \
+ doc/remembering.5
+
+all: remembering remembering-c run-tests
+
+remembering: src/remembering.in
+ $(do_subst) < $? > $@-t
+ chmod +x $@-t
+ mv $@-t $@
+
+remembering-c: $(sources)
+ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(sources) $(LDLIBS)
+
+run-tests: $(sources)
+ $(CC) $(CFLAGS) $(LDFLAGS) -DTEST -o $@ $(sources) $(LDLIBS)
+
+fallible-tests: $(sources)
+ $(CC) $(CFLAGS) $(LDFLAGS) -DTEST -DFALLIBLE -o $@ $(sources) $(LDLIBS)
+
+check: all
+ ./run-tests
+ sh tests/cli-opts.sh
+ sh tests/ranking.sh
+ sh tests/signals.sh
+ if [ -d .git ]; then \
+ echo 'Assuming Git repository, running development checks.'; \
+ $(MAKE) dev-check; \
+ fi
+
+VALGRIND_FLAGS= \
+ --show-error-list=yes \
+ --show-leak-kinds=all \
+ --leak-check=full \
+ --track-origins=yes \
+ --error-exitcode=1
+
+dev-check: all fallible-tests
+ valgrind $(VALGRIND_FLAGS) ./run-tests
+ fallible-check ./fallible-tests
+ sh aux/assert-clang-format.sh
+ sh aux/assert-shellcheck.sh
+ sh aux/workflow/assert-todos.sh
+
+clean:
+ rm -rf public/ tests/test-profiles/ remembering remembering-c run-tests fallible* vgcore*
+
+do_subst = sed \
+ -e 's:[@]VERSION[@]:$(VERSION):g' \
+ -e 's:[@]DATE[@]:$(DATE):g'
+
+install: all
+ install -m 755 -D remembering $(DESTDIR)$(PREFIX)/bin/remembering
+ for m in $(manpages); do \
+ n=$${m##*.}; \
+ mkdir -p $(DESTDIR)$(MANPREFIX)/man$$n; \
+ $(do_subst) < $$m | gzip > $(DESTDIR)$(MANPREFIX)/man$$n/`basename $$m`.gz; \
+ done
+
+uninstall:
+ rm -f $(DESTDIR)$(PREFIX)/bin/remembering
+ for m in $(manpages); do rm -f $(DESTDIR)$(MANPREFIX)/man$${##*.}/`basename $$m`.gz; done
+
+dist:
+ sh aux/workflow/dist.sh $(DATE) $(VERSION)
+
+public: README.md TODOs.md CHANGELOG.md $(manpages)
+ sh aux/workflow/public.sh Remembering remembering public-inbox
+ for m in $(manpages); do groff -m man -Thtml $$m > public/`basename $$m`.html; done
+
+.PHONY: all clean check dev-check dist install uninstall