.POSIX: DATE = 1970-01-01 VERSION = 0.1.0 NAME = papod NAME_UC = $(NAME) LANGUAGES = en ## Installation prefix. Defaults to "/usr". PREFIX = /usr BINDIR = $(PREFIX)/bin LIBDIR = $(PREFIX)/lib INCLUDEDIR = $(PREFIX)/include SRCDIR = $(PREFIX)/src/$(NAME) SHAREDIR = $(PREFIX)/share LOCALEDIR = $(SHAREDIR)/locale MANDIR = $(SHAREDIR)/man DATADIR = $(SHAREDIR)/$(NAME) EXEC = ./ ## Where to store the installation. Empty by default. DESTDIR = LDLIBS = GOFLAGS = -tags 'linux libsqlite3 json1 fts5 sqlite_omit_load_extension' -ldflags '-extldflags "-static -lm"' .SUFFIXES: .SUFFIXES: .go .bin all: include deps.mk sources = \ src/lib.go \ src/cmd/main.go \ $(sources.static) \ $(sources.sql) \ derived-assets = \ $(NAME).bin \ tests/lib_test.bin \ side-assets = \ papod.public.socket \ papod.command.socket \ papod.db \ wscat.socket \ glaze.socket \ ## Default target. Builds all artifacts required for testing ## and installation. all: $(derived-assets) $(NAME).bin: src/lib.go src/cmd/main.go Makefile env CGO_ENABLED=1 go build -o $@ -v $(GOFLAGS) src/cmd/main.go tests/lib_test.bin: src/lib.go tests/lib_test.go Makefile go test -c -o $@ -v $(GOFLAGS) $*.go check-unit: tests/lib_test.bin ./tests/lib_test.bin integration-tests = \ tests/cli-opts.sh \ $(integration-tests): $(NAME).bin ALWAYS sh $@ 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)' \ cp $(NAME).bin '$(DESTDIR)$(BINDIR)'/$(NAME) for f in $(sources.sql) $(sources.static); do \ dir='$(DESTDIR)$(DATADIR)'/"`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 ## 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)$(DATADIR)' \ '$(DESTDIR)$(SRCDIR)' \ run-papod: $(NAME).bin rm -f papod.public.socket papod.command.socket ./$(NAME).bin run-wscat: rm -f wscat.socket wscat wscat.socket papod.public.socket run-glaze: rm -f glaze.socket glaze -P '/api/socket:wscat.socket' -P '*:src/static/' glaze.socket run-binder-web: binder localhost:4443 glaze.socket run-binder-ircd: binder localhost:6667 papod.public.socket ## Run it locally, alongside its helper programs. run: all for c in wscat papod binder-web binder-ircd glaze; do \ $(MAKE) run-$$c & \ done; \ wait ALWAYS: