1 # SPDX-License-Identifier: GPL-2.0
4 SLOGAN := the dyadic snapshot scheduler
6 $(PACKAGE) maintains hardlink-based snapshots of a given directory on a
7 remote or local host using rsync's link-dest feature. The snapshots
8 are organized so that any snapshot can directly be deployed as an
9 (emergency) replacement for the primary system.
11 define DESCRIPTION2 :=
12 $(PACKAGE) is admin friendly: It is easy to configure and needs little
13 attention after the initial setup. In particular, no full, incremental
14 or differential backups need to be configured, and there is no database
15 to maintain. $(PACKAGE) is also user-friendly: Assuming the snapshot server
16 allows read-only user access over the network, users can restore
17 accidentically removed files without admin intervention, using their
18 favorite file browser to copy files from the snapshot directory back
19 to the primary system.
21 define DESCRIPTION3 :=
22 $(PACKAGE) keeps track of the age and the state of existing snapshots and
23 triggers snapshot creation and removal according to the configuration
24 settings. It tries to maintain a scheme where many recent snapshots
25 and few old snapshots exist, for example 16 snapshots newer than a
26 week, 8 snapshots between one and two weeks old, 4 snapshots between
27 two and three weeks old, and so on.
30 EMAIL := maan@tuebingen.mpg.de
31 URL := https://people.tuebingen.mpg.de/maan/$(PACKAGE)/
32 CLONE_URL := https://git.tuebingen.mpg.de/$(PACKAGE)
33 GITWEB_URL := https://git.tuebingen.mpg.de/$(PACKAGE).git
34 PACKAGE_HOMEPAGE := https://people.tuebingen.mpg.de/maan/$(PACKAGE)/
35 HOME_URL := https://people.tuebingen.mpg.de/maan/
37 LICENSE_URL := https://www.gnu.org/licenses/
41 INSTALL_PROGRAM ?= $(INSTALL)
42 INSTALL_DATA ?= $(INSTALL) -m 644
45 VERSION := $(shell $(MKDIR_P) $(B) && ./version-gen.sh $(PACKAGE) $(B)/version.c)
48 GROFF := groff -m man -Thtml -P -l -P -r
51 -D "AUTHOR=$(AUTHOR)" \
52 -D "PACKAGE=$(PACKAGE)" \
53 -D "SLOGAN=$(SLOGAN)" \
56 -D "CLONE_URL=$(CLONE_URL)" \
57 -D "GITWEB_URL=$(GITWEB_URL)" \
58 -D "HOME_URL=$(HOME_URL)" \
59 -D "PACKAGE_HOMEPAGE=$(PACKAGE_HOMEPAGE)" \
60 -D "LICENSE=$(LICENSE)" \
61 -D "LICENSE_URL=$(LICENSE_URL)" \
62 -D "DESCRIPTION1=$(DESCRIPTION1)" \
63 -D "DESCRIPTION2=$(DESCRIPTION2)" \
64 -D "DESCRIPTION3=$(DESCRIPTION3)"
65 c_source := $(PACKAGE) str file exec sig daemon df tv snap ipc
66 c_generated := $(B)/$(PACKAGE).lsg $(B)/version
67 objs := $(addsuffix .o, $(c_generated) $(addprefix $(B)/, $(c_source)))
69 all := $(PACKAGE) $(PACKAGE).1.gz
73 $(objs): $(B)/$(PACKAGE).lsg.h Makefile
76 DSS_CPPFLAGS += -Wunused-macros
77 DSS_CPPFLAGS += -I$(B)
79 DSS_CFLAGS := -Wno-sign-compare -g -Wunused -Wundef
80 DSS_CFLAGS += -Wredundant-decls
83 DSS_CFLAGS += -Wuninitialized
84 DSS_CFLAGS += -Wchar-subscripts
85 DSS_CFLAGS += -Wformat-security
86 DSS_CFLAGS += -Werror-implicit-function-declaration
87 DSS_CFLAGS += -Wmissing-format-attribute
88 DSS_CFLAGS += -Wunused-parameter
89 DSS_CFLAGS += -Wbad-function-cast
90 DSS_CFLAGS += -Wshadow
92 CC_CMD = $(CC) -c -o $@ $(DSS_CPPFLAGS) $(CPPFLAGS) $(DSS_CFLAGS) $(CFLAGS) \
93 -MMD -MF $(B)/$(*F).d -MT $@ $<
97 ifeq ("$(origin V)", "command line")
100 SAY = @printf '%s\n' '$(strip $(1))'
104 ./version-gen.sh $(PACKAGE) version.c > /dev/null
107 $(CC) -o $@ $(objs) $(LDFLAGS) -llopsub
115 .PHONY: all clean install README
116 .PRECIOUS: $(B)/%.lsg.c $(B)/%.lsg.h $(B)/%.suite $(B)/%.1
117 $(B)/$(PACKAGE).suite: $(PACKAGE).suite.m4 Makefile
120 $(B)/%.lsg.h: $(B)/%.suite
122 $(LSG) --gen-h=$@ < $<
123 $(B)/%.lsg.c: $(B)/%.suite
125 $(LSG) --gen-c=$@ < $<
126 $(B)/%.1: $(B)/%.suite
128 $(LSG) --gen-man=$@ --version-string=$(VERSION) < $<
132 $(B)/%.1.html: $(B)/%.1
133 $(call SAY, GROFF $<)
139 ifneq ($(findstring strip, $(MAKECMDGOALS)),)
142 bindir := $(DESTDIR)$(PREFIX)/bin
143 mandir := $(DESTDIR)$(PREFIX)/share/man/man1
144 install install-strip: all
145 $(MKDIR_P) $(bindir) $(mandir)
146 $(INSTALL_PROGRAM) $(strip_option) $(PACKAGE) $(bindir)
147 $(INSTALL_DATA) $(PACKAGE).1.gz $(mandir)
150 $(PACKAGE) - $(SLOGAN)
160 web page: $(PACKAGE_HOMEPAGE)
161 git clone URL: $(CLONE_URL)
162 gitweb: $(GITWEB_URL)
163 author home page: $(HOME_URL)
164 report bugs to: $(AUTHOR) <$(EMAIL)>
168 @printf '%s\n' "$(README)"
170 $(B)/index.html: index.html.m4 Makefile
174 -include Makefile.local