.DEFAULT_GOAL = all .PHONY: install enable all: install enable ifneq (0,$(shell id -u)) %: sudo $(MAKE) -$(MAKEFLAGS) $@ else config_dir = /etc/btrfs/remotes bindir = /usr/local/bin unitdir = /etc/systemd/system main_unit_name = push-btrfs remotes = $(notdir $(basename $(wildcard $(config_dir)/*.json))) timers = $(addprefix $(main_unit_name)@, $(addsuffix .timer, $(remotes))) services = $(addprefix $(main_unit_name)@, $(addsuffix .service, $(remotes))) ifeq ($(remotes),) $(error You must put at least one *.json configuration file into ). endif enable_unit = $(main_unit_name).timer unit_files = $(wildcard src/*.service src/*.timer) plain_units = $(enable_unit) $(shell printf '%s\n' $(notdir $(unit_files)) | grep -v '@') template_units = $(timers) $(services) units = $(plain_units) $(template_units) binaries = $(addprefix src/,push-btrfs retain-snapshots) install: install -t $(bindir) -- $(binaries) install -m644 -t $(unitdir) -- $(unit_files) systemctl daemon-reload enable: systemctl reset-failed $(units) 2>/dev/null || true systemctl enable --now $(enable_unit) status start stop restart: systemctl $@ $(units) go: for remote in $(remotes); do bash$(if $(verbose), -x) $(main_unit_name) $$remote$(if $(verbose),;, &) done; wait endif