.POSIX: PREFIX = /usr/local MANPREFIX = $(PREFIX)/share/man DATE = 1970-01-01 VERSION = 0.1.0 NAME = gistatic MAILING_LIST = public-inbox TRANSLATIONS = pt fr eo CONTRIBLANGS = LDLIBS = -lgit2 .SUFFIXES: .in .t .in: sed -e 's:@VERSION@:$(VERSION):g' -e 's:@DATE@:$(DATE):g' < $< > $@ .c.t: $(CC) $(CFLAGS) $(LDFLAGS) -DTEST -o $@ $< $(LDLIBS) manpages.en.in = \ doc/gistatic.en.1.in manpages.in = $(manpages.en.in) \ doc/gistatic.pt.1.in \ doc/gistatic.fr.1.in \ doc/gistatic.eo.1.in manpages = $(manpages.in:.in=) sources = \ src/tar.c \ src/gistatic.c objects = $(sources:.c=.o) tests = $(sources:.c=.t) all: src/config.h $(manpages) src/gistatic libgistatic.a src/gistatic: $(objects) src/main.o $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(objects) src/main.o $(LDLIBS) libgistatic.a: $(objects) $(AR) $(ARFLAGS) $@ $(objects) src/config.h: touch $@ printf '#ifndef GISTATIC_CONFIG_H\n' >> $@ printf '#define GISTATIC_CONFIG_H\n\n' >> $@ printf '#define _POSIX_C_SOURCE 200809L\n' >> $@ printf '#define VERSION "$(VERSION)"\n' >> $@ printf '#define DATE "$(DATE)"\n' >> $@ printf '\n#endif\n' >> $@ $(objects): src/config.h $(tests): src/config.h src/gistatic.o: src/gistatic.h src/tar.o src/tar.h src/main.o: src/gistatic.h src/gistatic.o check: all $(tests) rm -f tests/resources/repositories/repo-1/.git rm -f tests/resources/repositories/repo-2/.git ln -s .gitdir tests/resources/repositories/repo-1/.git ln -s .gitdir tests/resources/repositories/repo-2/.git sh tests/build-sample.sh for t in $(tests); do ./$$t; done sh tests/assert-catgets.sh src/gistatic.c sh tests/integration.sh sh tests/c-lint.sh src/*.c clean: rm -rf public/ $(manpages) README.*.md CHANGELOG.*.md messages.mo \ vgcore.* tmp/ src/config.h \ src/*.o src/*.t src/gistatic libgistatic.a \ tests/resources/repositories/repo-1/.git \ tests/resources/repositories/repo-2/.git install: all mkdir -p \ $(DESTDIR)$(PREFIX)/bin \ $(DESTDIR)$(PREFIX)/lib \ $(DESTDIR)$(PREFIX)/include cp src/gistatic $(DESTDIR)$(PREFIX)/bin cp libgistatic.a $(DESTDIR)$(PREFIX)/lib cp src/gistatic.h $(DESTDIR)$(PREFIX)/include sh doc/manpages.sh -ip $(DESTDIR)$(MANPREFIX) $(manpages) uninstall: sh doc/manpages.sh -up $(DESTDIR)$(MANPREFIX) $(manpages) # # Personal workflow targets # dev-check: check public sh tests/dev-integration.sh sh aux/assert-shellcheck.sh sh aux/workflow/assert-todos.sh sh aux/workflow/assert-changelog.sh -n $(NAME) sh aux/workflow/assert-readme.sh -n $(NAME) -m $(MAILING_LIST) sh aux/workflow/assert-manpages.sh -n $(NAME) -m $(MAILING_LIST) \ -l '$(TRANSLATIONS) en' $(manpages.en.in) sh aux/workflow/repocheck.sh -x1 -l1 -f7 dist: sh aux/workflow/dist.sh -d $(DATE) -V $(VERSION) \ -n $(NAME) -m $(MAILING_LIST) README.en.md: README.md ln -fs $? $@ CHANGELOG.en.md: CHANGELOG.md ln -fs $? $@ l10n-gen: README.en.md CHANGELOG.en.md $(manpages.en.in) sh aux/workflow/l10n.sh -l '$(TRANSLATIONS)' -L '$(CONTRIBLANGS)' $? public: l10n-gen TODOs.md $(manpages) sh aux/workflow/public.sh -l '$(TRANSLATIONS) $(CONTRIBLANGS) en' \ -n $(NAME) -m $(MAILING_LIST) -o public sh doc/manpages.sh -Ho public $(manpages) spellcheck: public sh aux/workflow/assert-spelling.sh -l '$(TRANSLATIONS) en' \ $$(find public -type f -name '*.html')