summaryrefslogtreecommitdiff
path: root/eclass/tests/Makefile
blob: 23027aed6b664e9b9d73f50710a7d8f98b2755bf (plain)
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
SH_FILES := $(wildcard *.sh)
TEST_FILES := $(filter-out tests-common.sh, $(SH_FILES))
TEST_OK_FILES := $(patsubst %.sh, .%.sh.ok,$ $(TEST_FILES))

# !!! _All_ recipe lines for each target will be provided to a single
# !!! invocation of the shell.
.ONESHELL:

# We cache a successful test result if the testfile itself did not
# change (%.sh) and the contents of the eclass/ directory did not
# change (.eclasssum).
.%.sh.ok: %.sh .eclasssum
	./$< && touch $@

.PHONY: test
test: $(TEST_OK_FILES)

.PHONY: force
.eclasssum: SHELL = /bin/bash
.eclasssum: force
	set -euo pipefail
	find .. -maxdepth 1 -type f -name "*.eclass" \
		-exec stat --format="%n %y" \{} \+ |\
		sort |\
		cksum -	> $@.cur
	trap "rm -f $@.cur" EXIT
	if ! cmp --silent $@.cur $@; then
		mv $@.cur $@
	fi