.POSIX: DATE = 1970-01-01 VERSION = 0.1.0 NAME = papo NAME_UC = $(NAME) URL = papo.im MAILING_LIST = list@$(URL) LANGUAGES = ## Installation prefix. Defaults to "/usr". PREFIX = /usr BINDIR = $(PREFIX)/bin LIBDIR = $(PREFIX)/lib JSLIBDIR = $(LIBDIR)/node/$(NAME) SRCDIR = $(PREFIX)/src/$(NAME) SHAREDIR = $(PREFIX)/share LOCALEDIR = $(SHAREDIR)/locale MANDIR = $(SHAREDIR)/man EXEC = ./ ## Where to store the installation. Empty by default. DESTDIR = .SUFFIXES: .SUFFIXES: .in .c .bin .in: sed \ -e 's:@MAILING_LIST@:$(MAILING_LIST):g' \ -e 's:@VERSION@:$(VERSION):g' \ -e 's:@DATE@:$(DATE):g' \ -e 's:@NAME@:$(NAME):g' \ -e 's:@URL@:$(URL):g' \ < $< > $@ if [ -x $< ]; then chmod +x $@; fi .c.bin: $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LDLIBS) all: include deps.mk manpages = $(manpages.in:.in=) sources = \ $(sources.mjs) \ installable = \ $(sources.sql) \ $(sources.mjs) \ src/sqlite.cjs \ src/package.json \ derived-assets = \ $(manpages) \ tests/rand.bin \ tests/bigger-rand-output.txt \ side-assets = \ tests/hero-*.pipe \ tests/hero-*.socket \ web.pipe \ lighttpd.socket \ ircd.socket \ web.socket \ ## Default target. Builds all artifacts required for testing ## and installation. all: $(derived-assets) tests/bigger-rand-output.txt: tests/rand.bin printf '[\n\t%s\n]\n' \ "`./$? | tr '\n' ',' | sed -e 's|,$$||' -e 's|,|,\n\t|g'`" > $@ tests/rand.bin $(manpages): Makefile deps.mk tests/js/rand.mjs-check: tests/bigger-rand-output.txt .SUFFIXES: .mjs .mjs-check tests.mjs-check = $(tests.mjs:.mjs=.mjs-check) $(tests.mjs-check): node $*.mjs check-unit: $(tests.mjs-check) integration-tests = \ tests/cli-opts.sh \ $(integration-tests): ALWAYS sh $@ $(EXEC)src/bin.mjs check-integration: $(integration-tests) ## Run all tests. Each test suite is isolated, so that a parallel ## build can run tests at the same time. The required artifacts ## are created if missing. check: check-unit check-integration ## Remove *all* derived artifacts produced during the build. ## A dedicated test asserts that this is always true. clean: rm -rf $(derived-assets) $(side-assets) ## Installs into $(DESTDIR)$(PREFIX). Its dependency target ## ensures that all installable artifacts are crafted beforehand. install: all mkdir -p \ '$(DESTDIR)$(BINDIR)' \ '$(DESTDIR)$(JSLIBDIR)' ln -fs '$(DESTDIR)$(JSLIBDIR)'/bin.mjs '$(DESTDIR)$(BINDIR)'/$(NAME) for f in $(installable); do \ dir='$(DESTDIR)$(JSLIBDIR)'/"`dirname "$${f#src/}"`"; \ mkdir -p "$$dir"; \ cp -P "$$f" "$$dir"; \ done for f in $(sources); do \ dir='$(DESTDIR)$(SRCDIR)'/"`dirname "$${f#src/}"`"; \ mkdir -p "$$dir"; \ cp -P "$$f" "$$dir"; \ done sh tools/manpages.sh -ip '$(DESTDIR)$(MANDIR)' $(manpages) ## Uninstalls from $(DESTDIR)$(PREFIX). This is a perfect mirror ## of the "install" target, and removes *all* that was installed. ## A dedicated test asserts that this is always true. uninstall: rm -rf \ '$(DESTDIR)$(BINDIR)'/$(NAME) \ '$(DESTDIR)$(JSLIBDIR)' \ '$(DESTDIR)$(SRCDIR)' sh tools/manpages.sh -up '$(DESTDIR)$(MANDIR)' $(manpages) run-ircd: all ./src/bin.mjs ircd ircd.socket run-web: all ./src/bin.mjs web web.socket web.pipe run-proxy: all lighttpd -Df tests/lighttpd.conf run-binder: all socat tcp-listen:6001,fork,reuseaddr unix:lighttpd.socket ## Run the web and IRC server locally. run: all for c in ircd web proxy binder; do \ $(MAKE) run-$$c & \ done; \ wait ## Show this help. help: sh tools/makehelp.sh < Makefile ALWAYS: