# Testsuite makefile for GNU sed

SHELL = /bin/sh

# These are only fallback values. They are usually overridden by runtest.
srcdir = .
SED = ../sed/sed

TIME=
#TIME=time

SEDENV_2 = LC_ALL=C
SEDENV = $(SEDENV_2) $(TIME)
TR = $(SEDENV_2) tr

CMP=cmp
RM=rm -f

SKIP = :>$@.skip; exit 77

enable sep inclib 8bit 8to7 newjis xabcx dollar noeol bkslashes \
numsub head madding mac-mf empty xbxcx xbxcx3 recall recall2 xemacs \
appquit fasts uniq manis linecnt khadafy allsub flipcase space modulo \
y-bracket y-newline insert brackets::
	$(SEDENV) $(SED) -f $(srcdir)/$@.sed \
		< $(srcdir)/$@.inp | $(TR) -d \\r > $@.out 
	$(CMP) $(srcdir)/$@.good $@.out 
	@$(RM) $@.out 

0range::
	$(SEDENV) $(SED) -s -f $(srcdir)/$@.sed \
		< $(srcdir)/$@.inp | $(TR) -d \\r > $@.out 
	$(CMP) $(srcdir)/$@.good $@.out 
	@$(RM) $@.out 

badenc::
	LANG=ru_RU.UTF-8 $(TIME) $(SED) -nf $(srcdir)/$@.sed \
		< $(srcdir)/$@.inp | $(TR) -d \\r > $@.out 
	$(CMP) $(srcdir)/$@.good $@.out 
	LANG=it_IT.UTF-8 $(TIME) $(SED) -nf $(srcdir)/$@.sed \
		< $(srcdir)/$@.inp | $(TR) -d \\r > $@.out 
	$(CMP) $(srcdir)/$@.good $@.out 
	LANG=en_US.UTF-8 $(TIME) $(SED) -nf $(srcdir)/$@.sed \
		< $(srcdir)/$@.inp | $(TR) -d \\r > $@.out 
	$(CMP) $(srcdir)/$@.good $@.out 
	LANG=en_GB.UTF-8 $(TIME) $(SED) -nf $(srcdir)/$@.sed \
		< $(srcdir)/$@.inp | $(TR) -d \\r > $@.out 
	$(CMP) $(srcdir)/$@.good $@.out 
	@$(RM) $@.out 

# Try with ru_RU.UTF-8.  If it is presumably not installed, see if the current
# locale is UTF-8 and run it in the current locale.
utf8-1 utf8-2 utf8-3 utf8-4::
	echo "LANG=ru_RU.UTF-8" \
	  "$(TIME) $(SED) -f $(srcdir)/$@.sed" \
	  "< $(srcdir)/$@.inp | $(TR) -d \\r > $@.out"; \
	LANG=ru_RU.UTF-8 \
	  $(TIME) $(SED) -f $(srcdir)/$@.sed \
		< $(srcdir)/$@.inp | $(TR) -d \\r > $@.out; \
	$(CMP) $(srcdir)/$@.good $@.out && exit 0; \
	$(CMP) $(srcdir)/$@.inp $@.out || exit 1; \
	locale > $@.info 2>/dev/null || { rm $@.info; $(SKIP); }; \
	. $@.info; rm $@.info; \
	case "$$LC_CTYPE" in \
	  *UTF-8 | *UTF8 | *utf8 | *utf-8) \
	    echo "$(TIME) $(SED) -f $(srcdir)/$@.sed" \
	      " < $(srcdir)/$@.inp | $(TR) -d \\r > $@.out"; \
	    $(TIME) $(SED) -f $(srcdir)/$@.sed \
		< $(srcdir)/$@.inp | $(TR) -d \\r > $@.out; \
	    $(CMP) $(srcdir)/$@.good $@.out && exit 0; \
	    $(CMP) $(srcdir)/$@.inp $@.out || exit 1 ;; \
	  *) ;; \
	esac; \
	$(SKIP)

# This checks for a bug in 3.02 and 3.02.80
stdin::
	($(SEDENV) $(SED) d; $(SEDENV) $(SED) G) < $(srcdir)/numsub.inp \
	  | $(TR) -d \\r > $@.1out 
	$(SEDENV) cat $(srcdir)/numsub.inp \
	  | ($(SEDENV) $(SED) d; $(SEDENV) $(SED) G) | $(TR) -d \\r > $@.2out 
	$(CMP) $@.1out $@.2out 
	@$(RM) $@.1out $@.2out 

inplace-hold::
	echo x > $@.1out
	echo y > $@.2out
	echo > $@.out
	$(SEDENV) $(SED) -i x $@.1out $@.2out 
	$(CMP) $@.1out $@.out 
	$(CMP) $@.2out $@.out 
	@$(RM) $@.1out $@.2out $@.out

cv-vars classes middle dc distrib factor numsub2 numsub3 numsub4 numsub5 \
insens::
	$(SEDENV) $(SED) -n -f $(srcdir)/$@.sed \
	  < $(srcdir)/$@.inp | $(TR) -d \\r > $@.out 
	$(CMP) $(srcdir)/$@.good $@.out 
	@$(RM) $@.out 

noeolw::
	$(SEDENV) $(SED) -n -f $(srcdir)/$@.sed \
	  $(srcdir)/noeol.inp $(srcdir)/noeol.inp | $(TR) -d \\r > $@.out 
	$(CMP) $(srcdir)/$@.good $@.out 
	$(TR) -d \\r <  $@.1out | $(CMP) $(srcdir)/$@.1good -
	$(TR) -d \\r <  $@.2out | $(CMP) $(srcdir)/$@.2good -
	@$(RM) $@.1out $@.2out $@.out

subwrite::
	$(SEDENV) $(SED) -f $(srcdir)/$@.sed \
	  < $(srcdir)/$@.inp | $(TR) -d \\r > $@.1out 
	$(CMP) $(srcdir)/subwrt1.good $@.1out
	$(TR) -d \\r < $@.wout | $(CMP) $(srcdir)/subwrt2.good -
	@$(RM) $@.1out $@.wout

bsd::
	$(SEDENV_2) sh $(srcdir)/$@.sh '$(TIME) $(SED)' $@.out
	$(TR) -d \\r < $@.out | $(CMP) $(srcdir)/$@.good -
	@$(RM) $@.out 

writeout::
	$(SEDENV) $(SED) -f $(srcdir)/$@.sed \
	  < $(srcdir)/$@.inp | $(TR) -d \\r > $@.1out 
	$(CMP) $(srcdir)/wrtout1.good $@.1out 
	$(TR) -d \\r < $@.wout | $(CMP) $(srcdir)/wrtout2.good -
	@$(RM) $@.1out $@.wout

readin::
	echo MOO | $(SEDENV) $(SED) b > $@.in2
	$(SEDENV) $(SED) -f $(srcdir)/$@.sed \
	  < $(srcdir)/$@.inp | $(TR) -d \\r > $@.out 
	$(CMP) $(srcdir)/$@.good $@.out 
	@$(RM) $@.out $@.in2

eval.in2: $(srcdir)/eval.inp
	cat $(srcdir)/eval.inp > $@

eval:: eval.in2
	$(SEDENV) $(SED) -f $(srcdir)/$@.sed \
	  < $(srcdir)/$@.inp | $(TR) -d \\r > $@.out 
	$(CMP) $(srcdir)/$@.good $@.out 
	@$(RM) $@.out 

binary binary2 binary3::
	$(SEDENV) $(SED) -n -f $(srcdir)/$@.sed \
	  < $(srcdir)/binary.inp | $(TR) -d \\r > $@.out 
	$(CMP) $(srcdir)/binary.good $@.out 
	@$(RM) $@.out 

#
# cmdlines targets
#

help::
	$(SEDENV) $(SED) --help | grep E-mail > /dev/null 2>&1
	$(SEDENV) $(SED) --help | $(SEDENV) $(SED) '1s/ [^ ]* / sed /; /^E-mail/,$$d' > $@.1out 
	$(SEDENV) $(SED) 2>&1 | $(SEDENV) $(SED) '1s/ [^ ]* / sed /' > $@.2out || :
	$(CMP) $@.1out $@.2out 
	@$(RM) $@.1out $@.2out

version::
	$(SEDENV) $(SED) --version 2>&1 | $(TR) -d \\r > $@.out
	$(CMP) $@.good $@.out 
	@$(RM) $@.out

file::
	$(SEDENV) $(SED) --file=$(srcdir)/newjis.sed \
		< $(srcdir)/newjis.inp | $(TR) -d \\r > $@.out 
	$(CMP) $(srcdir)/newjis.good $@.out 
	@$(RM) $@.out 

quiet::
	$(SEDENV) $(SED) --quiet -f $(srcdir)/cv-vars.sed \
		< $(srcdir)/cv-vars.inp | $(TR) -d \\r > $@.out 
	$(CMP) $(srcdir)/cv-vars.good $@.out 
	@$(RM) $@.out 

# The following target is not used in super sed builds (only GNU sed)

bug-regex7$(EXEEXT) bug-regex8$(EXEEXT) bug-regex9$(EXEEXT) \
bug-regex10$(EXEEXT) bug-regex11$(EXEEXT) bug-regex12$(EXEEXT) \
bug-regex13$(EXEEXT) bug-regex14$(EXEEXT) bug-regex15$(EXEEXT) bug-regex16$(EXEEXT) \
bug-regex21$(EXEEXT) runtests$(EXEEXT) runptests$(EXEEXT)::
	echo "$(SEDENV) ./$@ > `echo $@ | $(SED) s/$(EXEEXT)$$/.log/`"
	@$(SEDENV) ./$@ > `echo $@ | $(SED) s/$(EXEEXT)$$/.log/`

tst-pcre$(EXEEXT)::
	$(SEDENV) ./tst-pcre $(srcdir)/PCRE.tests > tst-pcre.log

tst-boost$(EXEEXT)::
	$(SEDENV) ./tst-boost $(srcdir)/BOOST.tests > tst-boost.log

tst-rxspencer$(EXEEXT)::
	$(SEDENV) ./tst-rxspencer $(srcdir)/SPENCER.tests > tst-spencer.log

tst-regex2$(EXEEXT)::
	$(SEDENV) ./tst-regex2 $(srcdir)/tst-regex2.c > tst-regex2.log

# The following target is not used in GNU sed builds (only super-sed)

pcretest$(EXEEXT)::
	$(SEDENV) ./pcretest $(srcdir)/pcre1.inp pcre1.out
	$(CMP) $(srcdir)/pcre1.good pcre1.out
	#$(SEDENV) ./pcretest -p $(srcdir)/pcre1.inp pcre1p.out
	#$(CMP) $(srcdir)/pcre1p.good pcre1p.out
	$(SEDENV) ./pcretest -P $(srcdir)/pcre2.inp pcre2.out
	$(CMP) $(srcdir)/pcre2.good pcre2.out
	$(SEDENV) ./pcretest -P -p $(srcdir)/pcre2.inp pcre2p.out
	$(CMP) $(srcdir)/pcre2p.good pcre2p.out
	$(SEDENV) ./pcretest $(srcdir)/pcre3.inp pcre3.out
	$(CMP) $(srcdir)/pcre3.good pcre3.out
	$(SEDENV) ./pcretest -p $(srcdir)/pcre3.inp pcre3p.out
	$(CMP) $(srcdir)/pcre3p.good pcre3p.out
	@$(RM) pcre*.out

.PHONY: \
bug-regex7$(EXEEXT) bug-regex8$(EXEEXT) bug-regex9$(EXEEXT) \
bug-regex10$(EXEEXT) bug-regex11$(EXEEXT) bug-regex12$(EXEEXT) \
bug-regex13$(EXEEXT) bug-regex14$(EXEEXT) bug-regex15$(EXEEXT) bug-regex16$(EXEEXT) \
bug-regex21$(EXEEXT) runtests$(EXEEXT) runptests$(EXEEXT) tst-regex2$(EXEEXT) \
tst-pcre$(EXEEXT) tst-boost$(EXEEXT) tst-rxspencer$(EXEEXT) pcretest$(EXEEXT)