chiark / gitweb /
Progress.
[qpweb] / Makefile
1 ### -*-makefile-*-
2
3 all:
4 clean::
5 .PHONY: all clean
6
7 TARGETS                  =
8 CLEAN                    =
9
10 CTANGLE                  = ctangle
11 CWEAVE                   = cweave
12 LATEX                    = pdflatex
13 CC                       = gcc
14 OPTIMIZE                 = -Og -g3
15 WARNINGS                 = -pedantic -Wall
16 CFLAGS                   = -std=gnu99 $(OPTIMIZE) $(WARNINGS)
17 LD                       = gcc
18 LDFLAGS                  =
19 -include local.mk
20
21 V                        = 0
22 V_AT                     = $(V_AT.$V)
23 V_AT.0                   = @
24
25 v-tag                    = $(call v-tag.$V,$1,$2)
26 v-tag.0                  = @printf "  %-8s %s\n" '$1' '$2';
27
28 SRCEXT                   =
29 objify                   = $(addsuffix .o, \
30                                 $(basename \
31                                         $(filter $(addprefix %, $(SRCEXT)), \
32                                                 $1)))
33 CLEAN                   += *.o
34
35 compile                  = $(call v-tag,$1,$@)$($1) -c $(CFLAGS) $4 \
36                                 -MD -MF $(2:.o=.d) -o$2 $3
37 DEPOBJS                  =
38 CLEAN                   += *.d
39
40 SRCEXT                  += .c
41 %.o: %.c
42         $(call compile,CC,$@,$<)
43
44 WEBS                     = qp.w
45 qp_WEBSRCS               =
46
47 qp_WEBSRCS              += Tbl.h Tbl.c
48 qp_WEBSRCS              += qp.h qp.c qp-debug.c
49 qp_WEBSRCS              += fn.h fn.c fn-debug.c
50 qp_WEBSRCS              += toy.c
51
52 ALL_WEBSRCS              = $(foreach w,$(WEBS:.w=), $($w_WEBSRCS))
53 CLEAN                   += $(ALL_WEBSRCS)
54
55 ALL_PDFS                 = $(WEBS:.w=.pdf)
56 TARGETS                 += $(ALL_PDFS)
57 CLEAN                   += $(foreach e,aux idx log out pdf scn tex toc, \
58                                 $(WEBS:.w=.$e))
59 %.tex: %.w
60         $(call v-tag,CWEAVE,$@)$(CWEAVE) $<
61 .SECONDARY:
62
63 %.pdf: %.tex
64         $(call v-tag,LATEX,$@)$(LATEX) --interaction=batchmode $<
65
66 otherwords               = $(wordlist 2,$(words $1),$1)
67
68 define tangle-web
69 $$(call otherwords,$$($1_WEBSRCS)): $$(firstword $$($1_WEBSRCS))
70 $$(firstword $$($1_WEBSRCS)): $1.w
71         $$(call v-tag,CTANGLE,$$<)$$(CTANGLE) $$<
72 endef
73 $(foreach w,$(WEBS:.w=), $(eval $(call tangle-web,$w)))
74 %.c: %.w # don't use implicit rule
75
76 TARGETS                 += qptoy fntoy
77
78 COMMON_SRCS              =
79 COMMON_SRCS             += Tbl.c
80 COMMON_SRCS             += toy.c
81
82 qptoy_SRCS               = $(COMMON_SRCS)
83 qptoy_SRCS              += qp.c qp-debug.c
84 qptoy_OBJS               = $(call objify,$(qptoy_SRCS))
85 DEPOBJS                 += $(qptoy_OBJS)
86 qptoy: $(qptoy_OBJS)
87         $(call v-tag,LD,$@)$(LD) $(LDFLAGS) -o$@ $+
88 CLEAN                   += qptoy
89
90 fntoy_SRCS               = $(COMMON_SRCS)
91 fntoy_SRCS              += fn.c fn-debug.c
92 fntoy_OBJS               = $(call objify,$(fntoy_SRCS))
93 DEPOBJS                 += $(fntoy_OBJS)
94 fntoy: $(fntoy_OBJS)
95         $(call v-tag,LD,$@)$(LD) $(LDFLAGS) -o$@ $+
96 CLEAN                   += fntoy
97
98 all: $(TARGETS)
99 clean::; rm -f $(CLEAN)
100
101 p:; : $p
102
103 -include $(DEPOBJS:.o=.d)