chiark / gitweb /
changelog: Document changes in 1.6.0 and finalise version number
[adns.git] / regress / Makefile.in
index 2055f08cb2c3de45b527da49b45f5ba709d40cc9..993c1af66e2fbda331aee965ac2bfc8d3665c43e 100644 (file)
@@ -1,10 +1,15 @@
-# regress/Makefile - regression test Makefile
+# regress/Makefile[.in] - regression test Makefile
 # 
-#  This file is part of adns, which is Copyright (C) 1997-1999 Ian Jackson
+#  This file is part of adns, which is
+#    Copyright (C) 1997-2000,2003,2006,2014-2016,2020  Ian Jackson
+#    Copyright (C) 2014  Mark Wooding
+#    Copyright (C) 1999-2000,2003,2006  Tony Finch
+#    Copyright (C) 1991 Massachusetts Institute of Technology
+#  (See the file INSTALL for full details.)
 #  
 #  This program is free software; you can redistribute it and/or modify
 #  it under the terms of the GNU General Public License as published by
-#  the Free Software Foundation; either version 2, or (at your option)
+#  the Free Software Foundation; either version 3, or (at your option)
 #  any later version.
 #  
 #  This program is distributed in the hope that it will be useful,
 #  GNU General Public License for more details.
 #  
 #  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
+#  along with this program; if not, write to the Free Software Foundation.
 
 srcdir=                @srcdir@
 VPATH=         @srcdir@
 
-TARGETS=       hplayback hrecord
-AUTOCSRCS=     harness.h hrecord.c hplayback.c hcommon.c
-include                $(srcdir)/../settings.make
+PROGS_SYSDEP=  @PROGS_HAVE_TSEARCH@
+
+CLIENTS=       adnstest adnshost adnslogres $(PROGS_SYSDEP)
+AUTOCHDRS=     harness.h hsyscalls.h hredirect.h
+AUTOCSRCS=     hrecord.c hplayback.c hcommon.c hfuzzraw.c
+include                ../settings.make
 include                $(srcdir)/../src/adns.make
 
-DIRCFLAGS=     -I$(srcdir)/../src
+DIRCFLAGS=     -I../src -I$(srcdir) -I$(srcdir)/../src
+
+HCPPFLAGS=     -DADNS_REGRESS_TEST -I.
+#HCPPFLAGS+=   -DFUZZRAW_SYNC
+
+REDIRLIBOBJS=  $(addsuffix _d.o, $(basename $(LIBOBJS)))
+HARNLOBJS=     hcommon.o $(REDIRLIBOBJS)
+TARGETS=       $(addsuffix _record, $(CLIENTS)) \
+               $(addsuffix _playback, $(CLIENTS)) \
+               $(addsuffix _fuzz, $(CLIENTS)) \
+               $(addsuffix _fuzzraw, $(CLIENTS))
+ADH_OBJS=      adh-main_c.o adh-opts_c.o adh-query_c.o
+ALL_OBJS=      $(HARNLOBJS) dtest.o hrecord.o hplayback.o hnonfuzz.o hfuzz.o
+
+.PRECIOUS:     $(AUTOCSRCS) $(AUTOCHDRS)
+
+all install uninstall: $(TARGETS)
+
+ALL_TESTS:=$(patsubst $(srcdir)/case-%.sys,%,$(wildcard $(srcdir)/case-*.sys))
+
+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)
 
-HCPPFLAGS:= $(foreach F,                       \
-       gettimeofday select                     \
-       socket fcntl connect close              \
-       sendto recvfrom read write writev       \
-, -D$F=H$F)
+%_fuzzraw:     %_c.o hfuzzraw.o hfuzz.o $(HARNLOBJS)
+               $(LINK_CMD)
 
-HARNLOBJS=     $(addsuffix _d.o, $(basename $(LIBOBJS)))
-ALLOBJS=       $(HARNLOBJS) dtest.o hrecord.o hplayback.o hcommon.o
+.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
 
-.PRECIOUS:     $(AUTOCSRCS)
+adnshost_%:    $(ADH_OBJS) h%.o hnonfuzz.o $(HARNLOBJS)
+               $(LINK_CMD)
 
-check:         $(TARGETS)
-               ./checkall
+adnshost_fuzz: $(ADH_OBJS) hplayback.o hfuzz.o $(HARNLOBJS)
+               $(LINK_CMD)
 
-hrecord:       adnstest_c.o hrecord.o hcommon.o $(HARNLOBJS)
-hplayback:     adnstest_c.o hplayback.o hcommon.o $(HARNLOBJS)
+adnshost_fuzzraw: $(ADH_OBJS) hfuzzraw.o hfuzz.o $(HARNLOBJS)
+               $(LINK_CMD)
 
-%_d.o:         $(srcdir)/../src/%.c
-               $(CC) $(HCPPFLAGS) -c -g -o $@ $<
+%_d.o:         $(srcdir)/../src/%.c hredirect.h
+               $(CC) $(CFLAGS) $(HCPPFLAGS) -c -g -o $@ $<
 
-%_c.o:         $(srcdir)/../client/%.c
-               $(CC) $(HCPPFLAGS) -I $(srcdir)/../src -c -g -o $@ $<
+%_c.o:         $(srcdir)/../client/%.c hredirect.h
+               $(CC) $(CFLAGS) $(HCPPFLAGS) -I $(srcdir)/../src -c -g -o $@ $<
 
-$(ALLOBJS):    $(srcdir)/../src/adns.h $(srcdir)/../src/internal.h harness.h
+$(ALL_OBJS):   $(srcdir)/../src/adns.h $(srcdir)/../src/internal.h
+$(ALL_OBJS):   harness.h hsyscalls.h
+$(ADH_OBJS):   $(srcdir)/../client/adnshost.h
 
 %::    %.m4 hmacros.i4 hsyscalls.i4
-       $(M4) -P $< >$@-a.new
+       $(M4) -P -I$(srcdir) $< >$@-a.new
        sed -e 's/hm_comma/,/g; s/hm_squote/'\''/g; /^[  ]*$$/d' <$@-a.new >$@-b.new
-       @mv -f $@-b.new $@; rm -f $@-a.new
+       @mv -f $@-b.new $(srcdir)/$@; rm -f $@-a.new