X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=Makefile;h=db232890a63e4ccf9129d898926aa50745e3abf3;hb=refs%2Fheads%2Fpu;hp=46b9c8cf8d00e98f648b4d813fb2fe8c02c9202a;hpb=df92a4bafcfef68738e7fcfad3697a9b5f85109f;p=dss.git diff --git a/Makefile b/Makefile index 46b9c8c..db23289 100644 --- a/Makefile +++ b/Makefile @@ -1,77 +1,34 @@ # 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 $(PACKAGE) version.c) +B := build +VERSION := $(shell $(MKDIR_P) $(B) && ./version-gen.sh $(PACKAGE) $(B)/version.c) RM := rm -f LSG := lopsubgen -GROFF := groff -m man -Thtml -P -l -P -r +GROFF := groff -m man -t -Thtml -P -l -P -r -P -I -P image GZIP := gzip -cfn9 -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)) +GIT := git +M4 := m4 -D "PACKAGE=$(PACKAGE)" defs.m4 +c_source := $(PACKAGE) str file exec sig daemon df tv snap ipc +c_generated := $(B)/$(PACKAGE).lsg $(B)/version +objs := $(addsuffix .o, $(c_generated) $(addprefix $(B)/, $(c_source))) +deps := $(objs:.o=.d) all := $(PACKAGE) $(PACKAGE).1.gz +www := $(B)/index.html $(B)/$(PACKAGE).1.html $(B)/$(PACKAGE) all: $(all) +www: $(www) man: $(PACKAGE).1.gz -$(objs): $(PACKAGE).lsg.h Makefile +$(objs): $(B)/$(PACKAGE).lsg.h Makefile -include $(deps) DSS_CPPFLAGS += -Wunused-macros +DSS_CPPFLAGS += -I$(B) DSS_CFLAGS := -Wno-sign-compare -g -Wunused -Wundef DSS_CFLAGS += -Wredundant-decls @@ -86,6 +43,10 @@ DSS_CFLAGS += -Wunused-parameter DSS_CFLAGS += -Wbad-function-cast DSS_CFLAGS += -Wshadow +CC_CMD = $(CC) -c -o $@ $(DSS_CPPFLAGS) $(CPPFLAGS) $(DSS_CFLAGS) $(CFLAGS) \ + -MMD -MF $(B)/$(*F).d -MT $@ $< +LD_CMD = $(CC) -o $@ $(objs) $(LDFLAGS) -llopsub + .ONESHELL: .SHELLFLAGS := -ec ifeq ("$(origin V)", "command line") @@ -93,41 +54,56 @@ ifeq ("$(origin V)", "command line") else SAY = @printf '%s\n' '$(strip $(1))' endif -version.c: +$(B)/version.c: $(call SAY, VG $@) ./version-gen.sh $(PACKAGE) version.c > /dev/null $(PACKAGE): $(objs) $(call SAY, LD $@) - $(CC) -o $@ $(objs) $(LDFLAGS) -llopsub -%.o: %.c + $(LD_CMD) +$(B)/$(PACKAGE): $(objs) + $(call SAY, LD $@) + $(LD_CMD) -static + strip $@ +$(B)/%.o: $(B)/%.c + $(call SAY, CC $<) + $(CC_CMD) +$(B)/%.o: %.c $(call SAY, CC $<) - $(CC) -c -o $@ $(DSS_CPPFLAGS) $(CPPFLAGS) $(DSS_CFLAGS) $(CFLAGS) \ - -MMD -MF $(*F).d -MT $@ $< + $(CC_CMD) -.PHONY: all clean install README -.PRECIOUS: %.lsg.c %.lsg.h %.suite %.1 -$(PACKAGE).suite: $(PACKAGE).suite.m4 Makefile +.PHONY: all www clean distclean maintainer-clean install README +.PRECIOUS: $(B)/%.lsg.c $(B)/%.lsg.h $(B)/%.suite $(B)/%.1 +$(B)/$(PACKAGE).suite: $(PACKAGE).suite.m4 defs.m4 Makefile $(call SAY, M4 $<) $(M4) $< > $@ -%.lsg.h: %.suite +$(B)/%.lsg.h: $(B)/%.suite $(call SAY, LSGH $<) $(LSG) --gen-h=$@ < $< -%.lsg.c: %.suite +$(B)/%.lsg.c: $(B)/%.suite $(call SAY, LSGC $<) $(LSG) --gen-c=$@ < $< -%.1: %.suite +$(B)/%.1: $(B)/%.suite $(call SAY, LSGM $<) $(LSG) --gen-man=$@ --version-string=$(VERSION) < $< -%.1.gz: %.1 +%.1.gz: $(B)/%.1 $(call SAY, GZIP $<) $(GZIP) < $< > $@ -%.1.html: %.1 +$(B)/%.1.html: $(B)/%.1 $(call SAY, GROFF $<) - $(GROFF) $< | sed -e '1,/^/d; /^<\/body>/,$$d' > $@ + cd $(B) + $(GROFF) ../$< > ../$@ +$(B)/index.html: index.html.m4 Makefile defs.m4 dss.svg + $(call SAY, M4 $@) + $(M4) $< > $@ clean: $(call SAY, CLEAN) - $(RM) *.[od] $(all) *.html $(PACKAGE).1 $(PACKAGE).suite \ - $(PACKAGE).lsg.[ch] version.c + $(RM) $(B)/*.o $(B)/*.d $(all) $(www) +distclean: clean + $(call SAY, DISTCLEAN) + $(RM) -r $(B) +maintainer-clean: distclean + $(call SAY, MAINTANER-CLEAN) + $(GIT) clean -dfqxe Makefile.local ifneq ($(findstring strip, $(MAKECMDGOALS)),) strip_option := -s @@ -139,42 +115,7 @@ install install-strip: all $(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.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 > $@ - 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 >> $@ - markdown INSTALL >> $@ - sed -e '1,/@INSTALL@/d' -e '/@MAN_PAGE@/,$$d' index.html.in >> $@ - cat dss.1.html >> $@ - sed -e '1,/@MAN_PAGE@/d' index.html.in >> $@ + @$(M4) README.m4 -include Makefile.local