.POSIX: CC = c99 CFLAGS = -std=c99 -Wall -Wextra -Wpedantic LDFLAGS = LDLIBS = PREFIX = @PREFIX@ MANPREFIX = $(PREFIX)/share/man VERSION = @VERSION@ DATE = @DATE@ headers = \ src/vendor/sharedc/testing.h sources = \ src/remembering.c manpages = \ doc/remembering.1 \ doc/remembering.5 .SUFFIXES: .c .o .t .t-fallible .c.o: $(CC) -c $(CFLAGS) $(LDFLAGS) .c.t: $(CC) $(CFLAGS) $(LDFLAGS) -DTEST -o $@ $< $(LDLIBS) .c.t-fallible: $(CC) $(CFLAGS) $(LDFLAGS) -DTEST -DFALLIBLE -o $@ $< $(LDLIBS) -lfallible objects = $(sources:.c=.o) tests = $(sources:.c=.t) fallible-tests = $(sources:.c=.t-fallible) all: $(tests) remembering remembering: src/remembering.in $(do_subst) < $? > $@-t chmod +x $@-t mv $@-t $@ check: all for t in $(tests); do echo $$t && ./$$t; done 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 dev-check: $(fallible-tests) for t in $(fallible-tests); do fallible-check ./$$t; done sh aux/assert-clang-format.sh sh aux/assert-shellcheck.sh sh aux/workflow/assert-todos.sh dist: if git show v$(VERSION) 1>/dev/null 2>/dev/null; then \ echo 'Version v$(VERSION) already exists.'; \ exit 1; \ fi if [ '$(DATE)' != "$$(git log -1 --format=%cd --date=short HEAD)" ]; then \ echo 'Date $(DATE) is not up-to-date.'; \ exit 1; \ fi git tag v$(VERSION) clean: rm -rf public/ tests/test-profiles/ remembering $(tests) $(fallible-tests) 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 \ $(DESTDIR)$(MANPREFIX)/man1/remembering.1 \ $(DESTDIR)$(MANPREFIX)/man5/remembering.5 for m in $(manpages); do rm -f $(DESTDIR)$(MANPREFIX)/man$${##*.}/`basename $$m`.gz; done NAME_UC = Reemembering NAME = remembering MAILING_LIST = public-inbox public: README.md TODOs.md CHANGELOG.md $(manpages) sh aux/workflow/TODOs.sh $(NAME_UC) $(NAME) $(MAILING_LIST) sh aux/workflow/README.sh $(NAME_UC) $(NAME) sh aux/workflow/commonmark.sh $(NAME_UC) CHANGELOG.md sh aux/ci/report.sh $(NAME_UC) for m in $(manpages); do groff -m man -Thtml $$m > public/`basename $$m`.html; done .PHONY: all clean check dev-check dist install uninstall