Agda-2.3.2.2: test/fail/Makefile
# Agda 2
# Makefile for failing tests
# Author: Andreas Abel
# Created: 2004-12-06
# How this file works
# ===================
#
# Whenever a .agda file is modified,
# a corresponding .err file is generated to save the model error message
# for this file. When the test suite is processed the next time, e.g.,
# after some hacking on the Agda 2 implementation, the new error message
# is compared to the saved one. If they do not match, this is considered
# an error. Then one has to verify the new error message is actually the
# intended one (manually), and remove the .err file.
TOP = ../..
include $(TOP)/mk/paths.mk
include $(TOP)/mk/config.mk
# Path to Agda
agda=$(AGDA_BIN) $(AGDA_TEST_FLAGS)
# Verbosity default = 0, can be overridden
V = 0
# Enable read -n
SHELL=bash
# Getting all agda files
# Andreas 2010-09-24 skip over annoying Impossible.agde
# which always changes error message because it mentions a line number in a
# Agda source file
# 2010-09-25 reactivated
excluded=TwoCompilers.agda Issue138.agda RecordInMutual.agda
#Impossible.agda
allagda=$(filter-out $(excluded),$(shell ls *agda))
allstems=$(patsubst %.agda,%,$(allagda))
allout=$(patsubst %.agda,%.err,$(allagda))
.PHONY : $(allstems)
default : all customised
all : $(allstems)
debug :
@echo $(allagda)
# No error recorded
$(allout) : %.err : %.agda
@echo "$*.agda"
@if $(agda) -i. -i.. -v$(V) $(shell if [ -e $*.flags ]; then cat $*.flags; fi) $< > $*.tmp; \
then echo "Unexpected success"; rm -f $*.tmp; false; \
else if [ -s $*.tmp ]; \
then sed -E 's/[^ (]*test.fail.//g;s/[^ (]*test.Common.//g;s/:[[:digit:]]\+:$$//' $*.tmp > $@; cat $@; rm -f $*.tmp; true; \
else rm -f $@ $*.tmp; false; \
fi; \
fi
# Existing error
$(allstems) : % : %.err
@echo "$*.agda"
@if $(agda) -i. -i.. -v$(V) $(shell if [ -e $*.flags ]; then cat $*.flags; fi) $*.agda \
> $*.tmp.2; \
then echo "Unexpected success"; rm -f $*.tmp.2; false; \
else sed -e 's/[^ (]*test.fail.//g;s/[^ (]*test.Common.//g;s/\\/\//g;s/:[[:digit:]]\+:$$//' $*.tmp.2 > $*.tmp; \
echo `cat $*.err` | sed -e 's/\\/\//g' > $*.tmp.2; \
echo `cat $*.tmp` > $*.tmp.3; \
true; \
fi
@if cmp $*.tmp.2 $*.tmp.3; \
then rm -f $*.tmp $*.tmp.2 $*.tmp.3; true; \
else echo "== Old error ==="; \
cat $*.err; \
echo "== New error ==="; \
cat $*.tmp; \
/bin/echo -n "Accept new error [y/N/q]? "; \
read -n 1; \
echo ""; \
if [ "fckShPrg$$REPLY" != "fckShPrgy" ]; \
then echo "Keeping old error"; [ "X$$REPLY" != "Xq" ]; \
else echo "Replacing error, continuing..."; \
mv $*.tmp $*.err; \
rm -f $*.tmp.2 $*.tmp.3; true; \
fi; \
fi
# Customised test cases.
.PHONY:
customised : customised/NestedProjectRoots customised/FFI
customised/NestedProjectRoots.err : %.err : %.agda
@echo "$*.agda"
@if ($(AGDA_BIN) --ignore-interfaces -icustomised -icustomised/Imports $*.agda; \
$(AGDA_BIN) -icustomised/Imports customised/Imports/A.agda; \
$(AGDA_BIN) -icustomised -icustomised/Imports $*.agda) > $*.tmp; \
then echo "Unexpected success"; rm -f $*.tmp; false; \
else if [ -s $*.tmp ]; \
then sed -e "s/[^ (]*test.fail.//g" $*.tmp > $@; cat $@; rm -f $*.tmp; true; \
else rm -f $@ $*.tmp; false; \
fi; \
fi
.PHONY:
customised/NestedProjectRoots : % : %.err
@echo $*.agda
-@rm -f customised/Imports/A.agdai
-@($(AGDA_BIN) --ignore-interfaces -icustomised -icustomised/Imports $*.agda; \
$(AGDA_BIN) -icustomised/Imports customised/Imports/A.agda; \
$(AGDA_BIN) -icustomised -icustomised/Imports $*.agda) \
| sed -e 's/[^ (]*test.fail.//g;s/\\/\//g' \
> $*.err.tmp
@echo `cat $*.err.tmp` | sed -e 's/\\/\//g' > $*.err.tmp.2
@echo `cat $*.err` > $*.err.tmp.3
@if cmp $*.err.tmp.2 $*.err.tmp.3; \
then rm -f $*.err.tmp; rm -f $*.err.tmp.2; rm -f $*.err.tmp.3; \
true; \
else echo "== Old error ==="; \
cat $*.err; \
echo "== New error ==="; \
cat $*.err.tmp; \
rm -f $*.err.tmp; rm -f $*.err.tmp.2; rm -f $*.err.tmp.3; \
false; \
fi
customised/FFI.err : %.err : %.agda
@echo "$*.agda"
@if ($(AGDA_BIN) --compile -v0 --ignore-interfaces -icustomised $*.agda) > $*.tmp; \
then echo "Unexpected success"; rm -f $*.tmp; false; \
else if [ -s $*.tmp ]; \
then sed -e "s/[^ (]*test.fail.//g;s/[0-9][0-9]*://g;s/scope/Skopje/g" $*.tmp > $@; cat $@; rm -f $*.tmp; true; \
else rm -f $@ $*.tmp; false; \
fi; \
fi
.PHONY:
customised/FFI : % : %.err
@echo $*.agda
-@rm -rf customised/MAlonzo
-@$(AGDA_BIN) --compile -v0 --ignore-interfaces -icustomised $*.agda \
| sed -e 's/[^ (]*test.fail.//g;s/\\/\//g;s/[0-9][0-9]*://g;s/scope/Skopje/g' \
> $*.err.tmp
@echo `cat $*.err.tmp` | sed -e 's/\\/\//g' > $*.err.tmp.2
@echo `cat $*.err` > $*.err.tmp.3
@if cmp $*.err.tmp.2 $*.err.tmp.3; \
then rm -f $*.err.tmp; rm -f $*.err.tmp.2; rm -f $*.err.tmp.3; \
true; \
else echo "== Old error ==="; \
cat $*.err; \
echo "== New error ==="; \
cat $*.err.tmp; \
rm -f $*.err.tmp; rm -f $*.err.tmp.2; rm -f $*.err.tmp.3; \
false; \
fi
# Clean
clean :
-rm -f *.tmp *~
# EOF