X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=Makefile;h=46b9c8cf8d00e98f648b4d813fb2fe8c02c9202a;hb=4134fdc354e0b268169030c1b6a356306f126876;hp=eaf3e540f4c08885de9f82c456f11bc1121a6ea6;hpb=1df2c02183b05dfb2b70dec12749423b79169579;p=dss.git diff --git a/Makefile b/Makefile index eaf3e54..46b9c8c 100644 --- a/Makefile +++ b/Makefile @@ -1,22 +1,74 @@ # SPDX-License-Identifier: GPL-2.0 + +PACKAGE := dss +SLOGAN := the dyadic snapshot scheduler +define DESCRIPTION1 := + $(PACKAGE) maintains hardlink-based snapshots of a given directory on a + remote or local host using rsync's link-dest feature. The snapshots + are organized so that any snapshot can directly be deployed as an + (emergency) replacement for the primary system. +endef +define DESCRIPTION2 := + $(PACKAGE) is admin friendly: It is easy to configure and needs little + attention after the initial setup. In particular, no full, incremental + or differential backups need to be configured, and there is no database + to maintain. $(PACKAGE) is also user-friendly: Assuming the snapshot server + allows read-only user access over the network, users can restore + accidentically removed files without admin intervention, using their + favorite file browser to copy files from the snapshot directory back + to the primary system. +endef +define DESCRIPTION3 := + $(PACKAGE) keeps track of the age and the state of existing snapshots and + triggers snapshot creation and removal according to the configuration + settings. It tries to maintain a scheme where many recent snapshots + and few old snapshots exist, for example 16 snapshots newer than a + week, 8 snapshots between one and two weeks old, 4 snapshots between + two and three weeks old, and so on. +endef +AUTHOR := Andre Noll +EMAIL := maan@tuebingen.mpg.de +URL := https://people.tuebingen.mpg.de/maan/$(PACKAGE)/ +CLONE_URL := https://git.tuebingen.mpg.de/$(PACKAGE) +GITWEB_URL := https://git.tuebingen.mpg.de/$(PACKAGE).git +PACKAGE_HOMEPAGE := https://people.tuebingen.mpg.de/maan/$(PACKAGE)/ +HOME_URL := https://people.tuebingen.mpg.de/maan/ +LICENSE := GPL-2.0 +LICENSE_URL := https://www.gnu.org/licenses/ + PREFIX ?= /usr/local INSTALL ?= install INSTALL_PROGRAM ?= $(INSTALL) INSTALL_DATA ?= $(INSTALL) -m 644 MKDIR_P := mkdir -p -VERSION := $(shell ./version-gen.sh dss version.c) +VERSION := $(shell ./version-gen.sh $(PACKAGE) version.c) RM := rm -f LSG := lopsubgen GROFF := groff -m man -Thtml -P -l -P -r GZIP := gzip -cfn9 - -units := dss str file exec sig daemon df tv snap ipc dss.lsg version +units := $(PACKAGE) $(PACKAGE).lsg str file exec sig daemon df tv snap ipc version +M4 := m4 \ + -D "AUTHOR=$(AUTHOR)" \ + -D "PACKAGE=$(PACKAGE)" \ + -D "SLOGAN=$(SLOGAN)" \ + -D "EMAIL=$(EMAIL)" \ + -D "URL=$(URL)" \ + -D "CLONE_URL=$(CLONE_URL)" \ + -D "GITWEB_URL=$(GITWEB_URL)" \ + -D "HOME_URL=$(HOME_URL)" \ + -D "PACKAGE_HOMEPAGE=$(PACKAGE_HOMEPAGE)" \ + -D "LICENSE=$(LICENSE)" \ + -D "LICENSE_URL=$(LICENSE_URL)" \ + -D "DESCRIPTION1=$(DESCRIPTION1)" \ + -D "DESCRIPTION2=$(DESCRIPTION2)" \ + -D "DESCRIPTION3=$(DESCRIPTION3)" objs := $(addsuffix .o, $(units)) deps := $(addsuffix .d, $(units)) +all := $(PACKAGE) $(PACKAGE).1.gz -all: dss dss.1.gz -man: dss.1.gz -$(objs): dss.lsg.h Makefile +all: $(all) +man: $(PACKAGE).1.gz +$(objs): $(PACKAGE).lsg.h Makefile -include $(deps) DSS_CPPFLAGS += -Wunused-macros @@ -43,15 +95,20 @@ else endif version.c: $(call SAY, VG $@) - ./version-gen.sh dss version.c > /dev/null -dss: $(objs) + ./version-gen.sh $(PACKAGE) version.c > /dev/null +$(PACKAGE): $(objs) $(call SAY, LD $@) $(CC) -o $@ $(objs) $(LDFLAGS) -llopsub %.o: %.c $(call SAY, CC $<) $(CC) -c -o $@ $(DSS_CPPFLAGS) $(CPPFLAGS) $(DSS_CFLAGS) $(CFLAGS) \ -MMD -MF $(*F).d -MT $@ $< -.PRECIOUS: %.lsg.c %.lsg.h %.1.gz + +.PHONY: all clean install README +.PRECIOUS: %.lsg.c %.lsg.h %.suite %.1 +$(PACKAGE).suite: $(PACKAGE).suite.m4 Makefile + $(call SAY, M4 $<) + $(M4) $< > $@ %.lsg.h: %.suite $(call SAY, LSGH $<) $(LSG) --gen-h=$@ < $< @@ -69,7 +126,8 @@ dss: $(objs) $(GROFF) $< | sed -e '1,/^/d; /^<\/body>/,$$d' > $@ clean: $(call SAY, CLEAN) - $(RM) *.[od] dss dss.1.* *.html dss.lsg.[ch] version.c + $(RM) *.[od] $(all) *.html $(PACKAGE).1 $(PACKAGE).suite \ + $(PACKAGE).lsg.[ch] version.c ifneq ($(findstring strip, $(MAKECMDGOALS)),) strip_option := -s @@ -78,12 +136,39 @@ bindir := $(DESTDIR)$(PREFIX)/bin mandir := $(DESTDIR)$(PREFIX)/share/man/man1 install install-strip: all $(MKDIR_P) $(bindir) $(mandir) - $(INSTALL_PROGRAM) $(strip_option) dss $(bindir) - $(INSTALL_DATA) dss.1.gz $(mandir) + $(INSTALL_PROGRAM) $(strip_option) $(PACKAGE) $(bindir) + $(INSTALL_DATA) $(PACKAGE).1.gz $(mandir) + +define README := +$(PACKAGE) - $(SLOGAN) + +$(DESCRIPTION1) + +$(DESCRIPTION2) + +$(DESCRIPTION3) + +Resources +~~~~~~~~~ +web page: $(PACKAGE_HOMEPAGE) +git clone URL: $(CLONE_URL) +gitweb: $(GITWEB_URL) +author home page: $(HOME_URL) +report bugs to: $(AUTHOR) <$(EMAIL)> +endef + +README: + @printf '%s\n' "$(README)" -index.html: dss.1.html index.html.in INSTALL README NEWS +index.html.in: index.html.m4 + $(call SAY, M4 $<) + $(M4) $< > $@ +index.html: dss.1.html index.html.in INSTALL NEWS + $(call SAY, MD $@) sed -e '/@README@/,$$d' index.html.in > $@ - markdown README >> $@ + printf '

%s

\n' "$(DESCRIPTION1)" >> $@ + printf '

%s

\n' "$(DESCRIPTION2)" >> $@ + printf '

%s

\n' "$(DESCRIPTION3)" >> $@ sed -e '1,/@README@/d' -e '/@NEWS@/,$$d' index.html.in >> $@ markdown NEWS >> $@ sed -e '1,/@NEWS@/d' -e '/@INSTALL@/,$$d' index.html.in >> $@