### -*-makefile-*- all: clean:: .PHONY: all clean TARGETS = CLEAN = CTANGLE = ctangle CWEAVE = cweave LATEX = pdflatex CC = gcc OPTIMIZE = -Og -g3 WARNINGS = -pedantic -Wall CFLAGS = -std=gnu99 $(OPTIMIZE) $(WARNINGS) LD = gcc LDFLAGS = -include local.mk V = 0 V_AT = $(V_AT.$V) V_AT.0 = @ v-tag = $(call v-tag.$V,$1,$2) v-tag.0 = @printf " %-8s %s\n" '$1' '$2'; SRCEXT = objify = $(addsuffix .o, \ $(basename \ $(filter $(addprefix %, $(SRCEXT)), \ $1))) CLEAN += *.o compile = $(call v-tag,$1,$@)$($1) -c $(CFLAGS) $4 \ -MD -MF $(2:.o=.d) -o$2 $3 DEPOBJS = CLEAN += *.d SRCEXT += .c %.o: %.c $(call compile,CC,$@,$<) WEBS = qp.w qp_WEBSRCS = qp_WEBSRCS += Tbl.h Tbl.c qp_WEBSRCS += qp.h qp.c qp-debug.c qp_WEBSRCS += fn.h fn.c fn-debug.c qp_WEBSRCS += toy.c ALL_WEBSRCS = $(foreach w,$(WEBS:.w=), $($w_WEBSRCS)) CLEAN += $(ALL_WEBSRCS) ALL_PDFS = $(WEBS:.w=.pdf) TARGETS += $(ALL_PDFS) CLEAN += $(foreach e,aux idx log out pdf scn tex toc, \ $(WEBS:.w=.$e)) %.tex: %.w $(call v-tag,CWEAVE,$@)$(CWEAVE) $< .SECONDARY: %.pdf: %.tex $(call v-tag,LATEX,$@)$(LATEX) --interaction=batchmode $< otherwords = $(wordlist 2,$(words $1),$1) define tangle-web $$(call otherwords,$$($1_WEBSRCS)): $$(firstword $$($1_WEBSRCS)) $$(firstword $$($1_WEBSRCS)): $1.w $$(call v-tag,CTANGLE,$$<)$$(CTANGLE) $$< endef $(foreach w,$(WEBS:.w=), $(eval $(call tangle-web,$w))) %.c: %.w # don't use implicit rule TARGETS += qptoy fntoy COMMON_SRCS = COMMON_SRCS += Tbl.c COMMON_SRCS += toy.c qptoy_SRCS = $(COMMON_SRCS) qptoy_SRCS += qp.c qp-debug.c qptoy_OBJS = $(call objify,$(qptoy_SRCS)) DEPOBJS += $(qptoy_OBJS) qptoy: $(qptoy_OBJS) $(call v-tag,LD,$@)$(LD) $(LDFLAGS) -o$@ $+ CLEAN += qptoy fntoy_SRCS = $(COMMON_SRCS) fntoy_SRCS += fn.c fn-debug.c fntoy_OBJS = $(call objify,$(fntoy_SRCS)) DEPOBJS += $(fntoy_OBJS) fntoy: $(fntoy_OBJS) $(call v-tag,LD,$@)$(LD) $(LDFLAGS) -o$@ $+ CLEAN += fntoy all: $(TARGETS) clean::; rm -f $(CLEAN) p:; : $p -include $(DEPOBJS:.o=.d)