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
70 www := $(B)/index.html $(B)/$(PACKAGE).1.html
75 $(objs): $(B)/$(PACKAGE).lsg.h Makefile
78 DSS_CPPFLAGS += -Wunused-macros
79 DSS_CPPFLAGS += -I$(B)
81 DSS_CFLAGS := -Wno-sign-compare -g -Wunused -Wundef
82 DSS_CFLAGS += -Wredundant-decls
85 DSS_CFLAGS += -Wuninitialized
86 DSS_CFLAGS += -Wchar-subscripts
87 DSS_CFLAGS += -Wformat-security
88 DSS_CFLAGS += -Werror-implicit-function-declaration
89 DSS_CFLAGS += -Wmissing-format-attribute
90 DSS_CFLAGS += -Wunused-parameter
91 DSS_CFLAGS += -Wbad-function-cast
92 DSS_CFLAGS += -Wshadow
94 CC_CMD = $(CC) -c -o $@ $(DSS_CPPFLAGS) $(CPPFLAGS) $(DSS_CFLAGS) $(CFLAGS) \
95 -MMD -MF $(B)/$(*F).d -MT $@ $<
99 ifeq ("$(origin V)", "command line")
102 SAY = @printf '%s\n' '$(strip $(1))'
106 ./version-gen.sh $(PACKAGE) version.c > /dev/null
109 $(CC) -o $@ $(objs) $(LDFLAGS) -llopsub
117 .PHONY: all www clean install README
118 .PRECIOUS: $(B)/%.lsg.c $(B)/%.lsg.h $(B)/%.suite $(B)/%.1
119 $(B)/$(PACKAGE).suite: $(PACKAGE).suite.m4 Makefile
122 $(B)/%.lsg.h: $(B)/%.suite
124 $(LSG) --gen-h=$@ < $<
125 $(B)/%.lsg.c: $(B)/%.suite
127 $(LSG) --gen-c=$@ < $<
128 $(B)/%.1: $(B)/%.suite
130 $(LSG) --gen-man=$@ --version-string=$(VERSION) < $<
134 $(B)/%.1.html: $(B)/%.1
135 $(call SAY, GROFF $<)
137 $(B)/index.html: index.html.m4 Makefile
144 ifneq ($(findstring strip, $(MAKECMDGOALS)),)
147 bindir := $(DESTDIR)$(PREFIX)/bin
148 mandir := $(DESTDIR)$(PREFIX)/share/man/man1
149 install install-strip: all
150 $(MKDIR_P) $(bindir) $(mandir)
151 $(INSTALL_PROGRAM) $(strip_option) $(PACKAGE) $(bindir)
152 $(INSTALL_DATA) $(PACKAGE).1.gz $(mandir)
155 $(PACKAGE) - $(SLOGAN)
165 web page: $(PACKAGE_HOMEPAGE)
166 git clone URL: $(CLONE_URL)
167 gitweb: $(GITWEB_URL)
168 author home page: $(HOME_URL)
169 report bugs to: $(AUTHOR) <$(EMAIL)>
173 @printf '%s\n' "$(README)"
175 -include Makefile.local