123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- /*
- * regression test support
- *
- * @(#)TEST.mk (AT&T Research) 2010-05-19
- *
- * test management is still in the design phase
- */
- /*
- * three forms for :TEST:
- *
- * :TEST: xxx yyy ...
- *
- * $(REGRESS) $(REGRESSFLAGS) xxx.tst
- * $(REGRESS) $(REGRESSFLAGS) yyy.tst
- *
- * :TEST: xxx.tst yyy ...
- *
- * $(REGRESS) $(REGRESSFLAGS) xxx.tst yyy ...
- *
- * :TEST: xxx.c [ :: test-prereq ... :: ] [ args [ : args ... ] ]
- *
- * :TEST: xxx.sh [ :: test-prereq ... :: ] [ args [ : args ... ] ]
- *
- * xxx :TEST: prereq ...
- * [ action ]
- *
- * $(*) if no action
- */
- ":TEST:" : .MAKE .OPERATOR
- local B G P S T
- test : .INSERT .TESTINIT
- if "$("tests":T=FD)"
- .SOURCE : tests
- end
- P := $(>:O=1)
- if "$(P:N=*.tst)" && ! "$(@:V)"
- B := $(P:B)
- if ! ( T = "$(<:V)" )
- T := $(B)
- end
- test : - test.$(T)
- eval
- test.$$(T) : $$(B).tst
- $$(REGRESS) $$(REGRESSFLAGS) $$(*) $(>:V:O>1)
- :SAVE: $$(B).tst
- end
- elif "$(P:N=*@(.sh|$(.SUFFIX.c:/ /|/G)|$(.SUFFIX.C:/ /|/G)))"
- B := $(P:B)
- if ! ( T = "$(<:V)" )
- T := $(B)
- end
- :INSTALLDIR: $(B)
- $(B) :: $(P) $(*:-l*|*$(CC.SUFFIX.ARCHIVE))
- if "$(P:N=*.sh)"
- TESTCC == $(CC)
- $(B) : (TESTCC)
- end
- test : - test.$(T)
- if "$(@:V)"
- eval
- test.$$(T) : $$(B) $(>:V:O>1)
- set +x; (ulimit -c 0) >/dev/null 2>&1 && ulimit -c 0; set -x
- $(@:V)
- end
- elif "$(>:V:O>1)"
- local I A V X S R=0
- for A $(>:V:O>1)
- if A == "::"
- let R = !R
- elif A == ":"
- let I = I + 1
- test.$(T).$(I) := $(V:V)
- V =
- X := $(X:V)$(S)$$(*) $$(test.$(T).$(I):T=*)
- S = $("\n")
- elif A != "-l*|*$(CC.SUFFIX.ARCHIVE)"
- if R
- test.$(A) : .VIRTUAL .FORCE
- test.$(T) : test.$(A)
- else
- V += $(A:V)
- end
- end
- end
- if V
- let I = I + 1
- test.$(T).$(I) := $(V:V)
- X := $(X:V)$(S)$$(*) $$(test.$(T).$(I):T=*)
- end
- eval
- test.$$(T) : $$(B)
- set +x; (ulimit -c 0) >/dev/null 2>&1 && ulimit -c 0; set -x
- $(X:V)
- end
- else
- eval
- test.$$(T) : $$(B)
- set +x; (ulimit -c 0) >/dev/null 2>&1 && ulimit -c 0; set -x
- $$(*)
- end
- end
- elif ! "$(<:V)"
- G = 1
- for B $(>)
- if B == "-|--"
- let G = !G
- else
- if ! G
- T =
- elif ! ( T = "$(B:A=.COMMAND)" ) && ! "$(B:A=.TARGET)"
- for S .c .sh
- if "$(B:B:S=$(S):T=F)"
- :INSTALLDIR: $(B)
- $(B) :: $(B:B:S=$(S))
- T := $(B)
- break
- end
- end
- end
- test : - test.$(B)
- test.$(B) : $(T) - $(B).tst
- $(REGRESS) $(REGRESSFLAGS) $(*:N=*.tst) $(*:N!=*.tst)
- :SAVE: $(B).tst
- end
- end
- else
- if "$(>:V)" || "$(@:V)"
- P := $(>)
- T := $(P:O=1)
- B := $(T:B)
- if "$(T)" != "$(B)" && "$(T:G=$(B))"
- :INSTALLDIR: $(B)
- $(B) :: $(T) $(P:O>1:N=-*)
- T := $(B)
- P := $(B) $(P:O>1:N!=-*)
- end
- if "$(<:V)"
- T := $(<:V)
- end
- test : - test.$(T)
- if "$(@:V)"
- eval
- test.$$(T) : $$(P) $(>:V:O>1)
- set +x; (ulimit -c 0) >/dev/null 2>&1 && ulimit -c 0; set -x
- $(@:V)
- end
- else
- test.$(T) : $(P)
- set +x; (ulimit -c 0) >/dev/null 2>&1 && ulimit -c 0; set -x
- $(*)
- end
- else
- test : - test.$(<)
- test.$(<) : $(<).tst $(<:A=.COMMAND)
- $(REGRESS) $(REGRESSFLAGS) $(*)
- end
- end
- .TESTINIT : .MAKE .VIRTUAL .FORCE .REPEAT
- if VARIANT == "DLL"
- error 1 :DLL: tests skipped
- exit 0
- end
- set keepgoing
- REGRESSFLAGS &= $(TESTS:@/ /|/G:/.*/--test=&/:@Q)
- .SCAN.tst : .SCAN
- $(@.SCAN.sh)
- I| INCLUDE@ % |
- .ATTRIBUTE.%.tst : .SCAN.tst
- MKTEST = mktest
- MKTESTFLAGS = --style=regress
- /*
- * test scripts are only regenerated from *.rt when --force
- * is specified or the .rt file is newer than the script
- * otherwise the script is accepted if it exists
- *
- * this avoids the case where a fresh build with no state
- * would regenerate the test script and capture current
- * behavior instead of expected behavior
- */
- %.tst : %.rt
- if [[ "$(-force)" || "$(>)" -nt "$(^|<)" ]]
- then $(MKTEST) $(MKTESTFLAGS) $(>) > $(<)
- fi
- test%.sh test%.out : %.rt
- if [[ "$(-force)" || "$(>)" -nt "$(^|<:O=1)" ]]
- then $(MKTEST) --style=shell $(>) > $(<:N=*.sh)
- $(SHELL) $(<:N=*.sh) --accept > $(<:N=*.out)
- fi
|