Agda-2.3.2.2: test/interaction/Makefile
TOP = ../..
include $(TOP)/mk/paths.mk
include $(TOP)/mk/config.mk
# Enable read -n and 2>&1 |.
SHELL=bash
uname:=$(shell uname)
ifeq (NT-5,$(findstring NT-5,$(uname)))
pwd=$(shell (cmd /c 'echo %CD%') | sed -e 's/\\/\\\\\\\\/g')\\\\
else
pwd=$(shell pwd)/
endif
# use gsed on Mac OS instead of sed
ifeq (Darwin,$(findstring Darwin,$(uname)))
sed=gsed
else
sed=sed
endif
AgdaFiles=$(shell ls *agda)
OutFiles=$(patsubst %.lagda,%.out,$(patsubst %.agda,%.out,$(AgdaFiles)))
Tests=$(patsubst %.lagda,%.cmp,$(patsubst %.agda,%.cmp,$(AgdaFiles)))
default : $(Tests)
export TMPDIR=highlighting-tmp
run_test=if test -f $*.in; \
then cat $*.in \
| $(sed) "s/ioTCM/IOTCM/g" \
| $(sed) "s/cmd_/Cmd_/g" \
| $(sed) "s/showImplicitArgs/ShowImplicitArgs/g" \
| $(sed) "s/toggleImplicitArgs/ToggleImplicitArgs/g" \
| $(sed) "s/top_command/IOTCM currentFile None Indirect/g" \
| $(sed) "s/goal_command \\([0-9]\+\\) (\\([^)]\+\\)) \\(\"[^\"]*\"\\)/IOTCM currentFile None Indirect (\\2 \\1 noRange \\3)/g" \
| $(sed) "s/goal_command \\([0-9]\+\\) \\([^ ]\+\\) \\(\"[^\"]*\"\\)/IOTCM currentFile None Indirect (\\2 \\1 noRange \\3)/g" \
| $(sed) "s/currentFile/\"$(wildcard $*.agda $*.lagda)\"/g" \
| agda --interaction $(RTS_$*) \
2>&1 | $(sed) -e 's"$(pwd)""g' -e 's"$(TMPDIR).*$$""'; \
else source ./$*.sh \
| $(sed) -e 's"$(pwd)""g' -e 's"$(TMPDIR).*$$""'; \
fi
# Note that RTS_... variables are ignored when .sh files are used.
setup_Issue591 = rm -f Issue591/M.agdai
setup_Highlighting = rm -f Highlighting/M.agdai
cleanup_Issue373 = rm -rf Issue373 MAlonzo
RTS_Issue637 = +RTS -K8 -RTS
RTS_Issue639 = --safe
# No recorded output
$(OutFiles) : %.out : $(wildcard %.agda %.lagda) $(wildcard %.in %.in_ghci)
@-mkdir $(TMPDIR)
@$(setup_$*)
@rm -f "$(@:.out=.agdai)"
@echo "=== Output for $* ==="
@$(run_test) > $@
@cat $@
@echo "=== End of output ==="
@rm -rf $(TMPDIR)
# Comparing output
$(Tests) : %.cmp : %.out
@-mkdir $(TMPDIR)
@$(setup_$*)
@rm -f "$(@:.cmp=.agdai)"
@echo $*
@$(run_test) > $*.tmp
@if diff -b $*.out $*.tmp; \
then rm -f $*.tmp; true; \
else \
echo "=== Old output ==="; \
cat $*.out; \
echo "=== New output ==="; \
cat $*.tmp; \
echo "=== Diff ==="; \
diff -b $*.out $*.tmp; \
/bin/echo -n "Accept new error [y/N/q]? "; \
read -n 1; \
echo ""; \
if [ "fckShPrg$$REPLY" != "fckShPrgy" ]; \
then echo "Keeping old output"; \
rm -f $*.tmp; \
rm -rf $(TMPDIR); \
if [ "$(cleanup_$*)" != "" ]; then $(cleanup_$*)"" ; fi ; \
[ "X$$REPLY" != "Xq" ]; \
else echo "Replacing output, continuing..."; \
mv $*.tmp $*.out; \
true; \
fi; \
fi
@$(cleanup_$*)
@rm -rf $(TMPDIR)