Makefile: practice pedantic particularity
[otpcli.git] / Makefile
blobb0d07b4d4391e9f0899ec374f4db5b89a7e1dc93
1 .POSIX:
3 # Use `make` to build utility `otpcli`
4 # Use `make V=1` for verbose output
5 # Use `make test` (or `make V=1 test`) to run the tests
7 targets :
9 all : utils targets
11 # Clean out the standard six single suffix inference rules
12 .SUFFIXES:
13 .SUFFIXES: .c .sh .f .c˜ .sh˜ .f˜
14 .c:;
15 .f:;
16 .sh:;
17 .c~:;
18 .f~:;
19 .sh~:;
20 .SUFFIXES:
21 # Since .c is part of a "cleaned out" single suffix rule, it must
22 # be LAST here otherwise some misguided implementations will choose
23 # the empty "cleaned out" do-nothing .c rule to turn a .c file into
24 # an executable instead of using the intended .o rule
25 .SUFFIXES: .o .c
27 TARGETS = \
28 otpcli \
29 #TARGETS
31 UTILS = \
32 lt/ltsha1 \
33 lt/ltsha256 \
34 lt/ltsha512 \
35 #UTILS
37 targets : $(TARGETS)
39 utils : $(UTILS)
41 Makefile Makefile/phony :
42 @-true
44 all clean depend targets utils test : Makefile/phony
46 clean :
47 $(Q) rm -f Makefile.tmp *.o $(TARGETS) $(UTILS)
49 # For overriding from command line
50 # (default for CC is just "cc" in make_conf.sh)
51 CC = cc
52 CFLAGS =
53 CPPFLAGS =
54 LDFLAGS =
55 LIBS =
57 # Default options
58 CDEFS =
59 CINCL = -Ilt
60 CWARN = -Wall
61 CFLGS =
62 COPTS = -g -O
63 LOPTS = -g
64 LLIBS =
66 CPPLINE = $(CINCL) $(CDEFS)
67 CPPLINEXDEFS0 = $(CPPLINE)
68 CPPLINEXDEFS = $(CPPLINEXDEFS0) $(CPPFLAGS)
69 CCLINE0 = $(CWARN) $(CPPLINE) $(CFLGS) $(COPTS)
70 CCLINE = $(CCLINE0) $(CFLAGS)
71 CCLINEXDEFS0 = $(CCLINE0)
72 CCLINEXDEFS = $(CCLINEXDEFS0) $(CPPFLAGS) $(CFLAGS)
74 # make V=1 to show commands
75 AT = @
76 Q_0 = $(AT)
77 Q_1 =
78 Q_ = $(Q_0)
79 Q = $(Q_$(V))
80 QCC_0 = $(AT)echo "[CC] $@" &&
81 QCC_1 =
82 QCC_ = $(QCC_0)
83 QCC = $(QCC_$(V))
84 QLD_0 = $(AT)echo "[CCLD] $@" &&
85 QLD_1 =
86 QLD_ = $(QLD_0)
87 QLD = $(QLD_$(V))
89 .c.o :
90 $(QCC) $(CC) -o "$@" -c $(CCLINEXDEFS) "$<"
92 .o :
93 $(QLD) $(CC) -o "$@" $(LOPTS) $(LDFLAGS) "$<" $($(@F)_libs) $(LLIBS) $(LIBS)
95 DEPSRCS = \
96 $(TARGETS)
97 #DEPSRCS
99 UTILSOBJS = \
100 ltsha1.o \
101 ltsha256.o \
102 ltsha512.o \
103 #UTILSOBJS
105 LIBLTOBJS = \
106 lt1.o \
107 lt256.o \
108 lt512.o \
109 #LIBSRCS
111 LIBSRCS = \
112 #LIBSRCS
114 depend :
115 $(Q) >Makefile.tmp
116 $(Q) for s in $(DEPSRCS); do $(CC) -E $(CPPLINEXDEFS0) "$$s.c" 2>/dev/null | \
117 ./awkdep.sh "$$s.o" >>Makefile.tmp; printf "$$s : %s\n" "$$s.o" '$$('"$${s}_libs"')' >>Makefile.tmp; done
118 $(Q) for s in $(UTILSOBJS); do $(CC) -E $(CPPLINEXDEFS0) -D LT_NO_EMBED "lt/$${s%.o}.c" 2>/dev/null | \
119 ./awkdep.sh "$$s" >>Makefile.tmp; printf "lt/$${s%.o} : %s\n" "$$s" '$$('"$${s%.o}_libs"')' >>Makefile.tmp; done
120 $(Q) for s in $(LIBLTOBJS); do $(CC) -E $(CPPLINEXDEFS0) "lt/$${s%.o}.c" 2>/dev/null | \
121 ./awkdep.sh "$$s" >>Makefile.tmp; done
122 $(Q) printf '\043 %s\n' "autogenerated with make depend" >Makefile.dep
123 $(Q) LC_ALL=C sort -u <Makefile.tmp >>Makefile.dep && rm -f Makefile.tmp
125 Makefile.dep :
126 $(Q) printf '\043 %s\n' "autogenerated with make depend" >Makefile.dep
128 $(LIBLTOBJS) :
129 $(QCC) $(CC) -o "$@" -c $(CCLINEXDEFS) "lt/$(@:.o=.c)"
131 $(UTILSOBJS) :
132 $(QCC) $(CC) -o "$@" -c $(CCLINEXDEFS) -D LT_NO_EMBED "lt/$(@:.o=.c)"
134 lt/ltsha1 :
135 $(QLD) $(CC) -o "$@" $(LOPTS) $(LDFLAGS) ltsha1.o lt1.o $(LLIBS) $(LIBS)
137 lt/ltsha256 :
138 $(QLD) $(CC) -o "$@" $(LOPTS) $(LDFLAGS) ltsha256.o lt256.o $(LLIBS) $(LIBS)
140 lt/ltsha512 :
141 $(QLD) $(CC) -o "$@" $(LOPTS) $(LDFLAGS) ltsha512.o lt512.o $(LLIBS) $(LIBS)
143 common_libs = lt1.o lt256.o lt512.o
145 otpcli_libs = $(common_libs)
147 ltsha1_libs = lt1.o
148 ltsha256_libs = lt256.o
149 ltsha512_libs = lt512.o
151 CHECKTAP = awk -v V="$(V)" 'BEGIN{c=0} {if(V)print} /^ok [0-9]/{++c} END{if(NR!=c+1){print "Test failure";exit 1}}'
153 test : utils otpcli
154 $(Q) cd lt && echo "Testing sha1" && ./ltsha1-test.sh | $(CHECKTAP)
155 $(Q) cd lt && echo "Testing sha256" && ./ltsha256-test.sh | $(CHECKTAP)
156 $(Q) cd lt && echo "Testing sha512" && ./ltsha512-test.sh | $(CHECKTAP)
157 $(Q) echo All hash tests pass
158 $(Q) echo "Testing otpcli" && ./otpcli-test.sh | $(CHECKTAP)
159 $(Q) echo All otpcli tests pass
161 # Must be after all ..._libs assignments above
162 include Makefile.dep