-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMake.test
More file actions
88 lines (72 loc) · 2.48 KB
/
Make.test
File metadata and controls
88 lines (72 loc) · 2.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# Makefile for Gnucap tests
# (c) Felix Salfelder 2024
# Lukas Deutz 2026
# GPLv3+
srcdir = .
ref = ${srcdir}/ref
testdir = ${srcdir}/${TESTDIR}
TARGETDIR = check
GNUCAP = gnucap
DIFF = diff
DIFF_FLAGS = -rup
glob_ckt = $(shell cd ${testdir}; ls *.ckt)
glob_gc = $(shell cd ${testdir}; ls *.gc)
test_patterns = $(if $(strip $(TESTCASES)),$(TESTCASES:%=%%),%)
check_targets = $(if $(strip $(TESTCASES)),$(TESTCASES:%=$(TARGETDIR)/%.diff),$(TARGETDIR)/.diff)
filt_ckt = $(filter ${test_patterns}, ${glob_ckt})
filt_gc = $(filter ${test_patterns}, ${glob_gc})
_filt_ckt = $(filter-out ${TESTEXCLUDE:%=%%}, ${filt_ckt})
_filt_gc = $(filter-out ${TESTEXCLUDE:%=%%}, ${filt_gc})
out_ckt = ${_filt_ckt:%=${TARGETDIR}/%.out}
out_gc = ${_filt_gc:%=${TARGETDIR}/%.out}
diff_ckt = ${_filt_ckt:%=${TARGETDIR}/%.diff}
diff_gc = ${_filt_gc:%=${TARGETDIR}/%.diff}
diff = ${diff_ckt} ${diff_gc}
prep: ${SYMLINKS} ${TEST_PLUGINS}
# @[ ! -s "${TARGETDIR}" ]
-mkdir -p ${TARGETDIR}
SHELL=/bin/bash
${out_ckt}: ${TARGETDIR}/%.ckt.out: prep
-@${ENV} ${GNUCAP} --acs ${GNUCAP_ARGS} -b ${testdir}/$*.ckt |tail -n +12 | \
grep -v '^stashing\ as' | grep -v 'already\ installed' | grep -v ^make > $@; \
err=$${PIPESTATUS[0]}; [ $$err == 0 ] || echo "error $$err" >> $@;
${out_gc}: ${TARGETDIR}/%.gc.out: prep
-@${ENV} ${GNUCAP} ${GNUCAP_ARGS} ${testdir}/$*.gc |tail -n +12 | \
grep -v '^stashing\ as' | grep -v 'already\ installed' | grep -v ^make > $@; \
err=$${PIPESTATUS[0]}; [ $$err == 0 ] || echo "error $$err" >> $@;
# TODO: maybe cat the diff, so it can be logged?
check: $(check_targets)
@find ${TARGETDIR} -size 0 -delete;
@echo ==
@for f in $+; do \
if [ -s $$f ]; then \
echo "test failures in $${f##*/}:"; \
ls -larS $${f%.diff}*.diff; \
else \
echo "all $${f##*/} passed"; \
fi; \
done
${diff}: ${TARGETDIR}/%.diff: ${TARGETDIR}/%.out
@if [ ! -f ${ref}/$*.out ]; then \
echo MISS: $*; \
echo "missing: $*.out" > $@; \
elif ${DIFF} ${DIFF_FLAGS} ${ref}/$*.out ${TARGETDIR}/$*.out > $@; then \
echo pass: $*; \
else \
echo FAIL: $*; \
fi
define make_diff_rule
$(TARGETDIR)/$(1).diff: $$(filter $(TARGETDIR)/$(1)%, $(diff))
@rm -f $$@
@for i in $$^; do \
[ -s "$$$$i" ] && (echo "--- $$$$i"; cat $$$$i) >> "$$@" || true; \
done; \
[ -s "$$@" ] || rm -f "$$@"
endef
# TESTCASES empty (no prefixes)
ifeq ($(strip $(TESTCASES)),)
$(eval $(call make_diff_rule,))
# TESTCASES not empty (one or more prefixes)
else
$(foreach p,$(TESTCASES),$(eval $(call make_diff_rule,$(p))))
endif