+check: $(TARGETS) $(addprefix check-,$(ALL_TESTS))
+ @echo
+ @echo 'all tests passed or maybe skipped.'
+
+checkfuzz: $(TARGETS) \
+ $(addprefix checkfuzz-,$(ALL_TESTS)) \
+ $(addprefix checkfuzzraw-,$(ALL_TESTS))
+ @echo
+ @echo 'all fuzzes passed or maybe skipped.'
+# this target is mostly useful as prep work for running the fuzzer;
+# it doesn't really test any of adns
+
+fuzzcat.d: checkfuzz
+ $(srcdir)/categorisefuzz $(ALL_TESTS)
+ perl -ne 'print $$1,"\n" while m/\"([^"% ]{2,})\"/g' \
+ $(srcdir)/../src/*.[ch] $(srcdir)/../client/*.[ch] \
+ | sort -u >fuzzcat.d/dictionary
+ perl -p -e 'chomp;' \
+ -e 's/[^0-9a-z-_]/sprintf "\\x%02x", ord $$&/ige;' \
+ -e 's/^/l$$.="/; ' \
+ -e 's/$$/"\n/;' \
+ fuzzcat.d/dictionary >fuzzcat.d/dictionary.afl
+
+check-%: case-%.sys
+ @srcdir=$(srcdir) $(srcdir)/r1test $* || test $$? = 5
+
+fuzz-%: case-%.sys $(TARGETS) make1fuzz shlib
+ srcdir=$(srcdir) $(srcdir)/make1fuzz $*
+
+fuzzraw-%: fuzz-%
+
+.PRECIOUS: fuzz-%
+
+checkfuzz-%: fuzz-% $(TARGETS)
+ @srcdir=$(srcdir) $(srcdir)/check1fuzz $<
+
+checkfuzzraw-%: fuzz-% $(TARGETS)
+ @srcdir=$(srcdir) $(srcdir)/check1fuzz $<
+
+LINK_CMD= $(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@
+
+%_record: %_c.o hrecord.o hnonfuzz.o $(HARNLOBJS)
+ $(LINK_CMD)
+
+%_playback: %_c.o hplayback.o hnonfuzz.o $(HARNLOBJS)
+ $(LINK_CMD)
+
+%_fuzz: %_c.o hplayback.o hfuzz.o $(HARNLOBJS)
+ $(LINK_CMD)
+
+%_fuzzraw: %_c.o hfuzzraw.o hfuzz.o $(HARNLOBJS)
+ $(LINK_CMD)
+
+.SECONDARY: $(addsuffix _c.o, $(filter-out adnshost, $(CLIENTS)))
+# Without this, make will remove <client>_c.o after building <client>.
+# This wastes effort. (Debian bug #4073.)
+#
+# Also, it exposes us to a bug (in make 3.81, at least) which can
+# cause make to run the rule for building <client> without building
+# <client>_c.o! (Debian #756123.)
+#
+# See also Savannah #29620, http://savannah.gnu.org/bugs/index.php?29620
+
+adnshost_%: $(ADH_OBJS) h%.o hnonfuzz.o $(HARNLOBJS)
+ $(LINK_CMD)
+
+adnshost_fuzz: $(ADH_OBJS) hplayback.o hfuzz.o $(HARNLOBJS)
+ $(LINK_CMD)
+
+adnshost_fuzzraw: $(ADH_OBJS) hfuzzraw.o hfuzz.o $(HARNLOBJS)
+ $(LINK_CMD)
+
+%_d.o: $(srcdir)/../src/%.c hredirect.h hsyscalls.h
+ $(CC) $(CFLAGS) $(HCPPFLAGS) -c -g -o $@ $<
+
+%_c.o: $(srcdir)/../client/%.c hredirect.h hsyscalls.h
+ $(CC) $(CFLAGS) $(HCPPFLAGS) -I $(srcdir)/../src -c -g -o $@ $<
+
+$(ALL_OBJS): $(srcdir)/../src/adns.h $(srcdir)/../src/internal.h
+$(ALL_OBJS): harness.h hsyscalls.h
+$(ADH_OBJS): $(srcdir)/../client/adnshost.h