-
Notifications
You must be signed in to change notification settings - Fork 2
/
Makefile.decl
120 lines (108 loc) · 5.28 KB
/
Makefile.decl
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# Rapicorn -*-mode:makefile;-*-
# This Source Code Form is licensed MPL-2.0: http://mozilla.org/MPL/2.0
# declare variables that we might want to use += on.
EXTRA_HEADERS=
MAINTAINERCLEANFILES=$(GENERATED)
CLEANFILES=$(GENERATED_CLEANFILES)
MOSTLYCLEANFILES=
GENERATED_CLEANFILES=
GENERATED=$(strip $(GENERATED_CLEANFILES))
EXTRA_DIST=
# == Verbosity ==
Q = $(if $(findstring 1, $(V)) ,, @)
QGEN = $(Q:@=@echo ' GEN ' $@; )
QSTDERR = $(Q:@=2>/dev/null)
QSTDOUT = $(Q:@=1>/dev/null)
# == GITSTAMPS ==
# list of stamp files touched by commits
GITSTAMP = $(shell G=$$(git rev-parse --git-dir 2>/dev/null); test -z "$$G" -o ! -e "$$G/logs/HEAD" || echo "$$G/logs/HEAD")
# == Download ==
# recursive rule supported by all Makefiles to download files hosted online
.PHONY: download download-recursive download-local
download: download-local download-recursive
download-recursive:
$(Q) for subdir in $(SUBDIRS) ; do test "$$subdir" = '.' || $(MAKE) -C "$$subdir" $(AM_MAKEFLAGS) download || exit $$? ; done
# == Install Helpers ==
# $(call SYMLINK_LATEST, GLOB, LINKNAME) - create symbolic link to latest versioned file
SYMLINK_LATEST = ( L=`/bin/ls -d $(1) 2>/dev/null | sort -r | head -1` ; if test -n "$$L" ; \
then echo " RELINK" $(2) && rm -f $(2) && ln -s "$$L" $(2) ; \
else echo " UNLINK" $(2) && rm -f $(2) ; fi )
# == Doc Helpers ==
local-ETAGS:
ctags -e --c++-kinds=+p --fields=+iaS --extra=+q -a -f $(top_builddir)/ETAGS $(am__tagged_files)
.PHONY: local-ETAGS
# == X11 for Unit Tests ==
# Provide X11_ENV to execute commands within an X11 context. There are 3 possible cases here:
# - DISPLAY is unset, no X11 server is running yet, we need to proivde Xvfb;
# - DISPLAY is set because we're already running with an Xvfb instance, usually the display number is >= 99;
# - DISPLAY is set by a normal login session, we assume the display number is < 99 in this case,
# and in order to not disturb the existing session, we need to start Xvfb.
XVFB_MISSING = $(shell test `echo $${DISPLAY:-:0} | sed 's/^[^:]*:\([0-9]\+\).*/\1/'` -ge 99 || echo missingxvfb)
X11_ENV = $(if $(XVFB_MISSING), xvfb-run -a -s "-screen 0 800x600x24") /usr/bin/env
# == extra-gitdist ==
extra-gitdist:
@test -z "$(EXTRA_DIST)" || echo " TAR $(patsubst %, $(subdir)/%, $(EXTRA_DIST))"
$(Q) test -w "$(EXTRA_GITDIST_DIR)" || { echo '$@: missing EXTRA_GITDIST_DIR' >&2; false; }
@for subdir in $(SUBDIRS) ; do \
test "$$subdir" = '.' || \
$(MAKE) $(AM_MAKEFLAGS) -C "$$subdir" \
$(if $(findstring 1, $(V)),, --no-print-directory) $@ || \
exit 1 ; \
done
$(Q) for file in $(EXTRA_DIST) ; do \
cp -a --parent "$$file" "$(EXTRA_GITDIST_DIR)/$(subdir)/" || \
exit 1; \
done
.PHONY: extra-gitdist
# === Test-rule macros ===
FORCECHECKUPDATE = false
TSTRESULT = $(strip _e=$$?; \
tstresult() { \
local result="PASSFAIL" M="$$*"; \
printf ' %-9s %s\n' " $${result:$$(($$_e?4:0)):4}" "$${M:-$(@F)}"; \
test $$_e = 0 || exit $$_e; }; \
tstresult \
)
export MAKE_TARGET = $@
export MAKE_TARGET_FILE = $(@F)
export MAKE_TARGET_DIR = $(@D)
export FAILOK = FAIL OK
### eval $$TSTDIAGNOSE ['TESTNAME'] - show test title and result atomically
export TSTDIAGNOSE = _e=$$?; tstdiagnose() { printf ' CHECK %-64s%s\n' "$${1:-$$MAKE_TARGET_FILE}:" \
"$${FAILOK:$$(($$_e?0:6)):6}"; [ $$_e = 0 ] || exit $$_e; }; tstdiagnose
### eval $$TSTDIFF ['TESTREF'] ['TESTLOG'] ['TESTNAME']
export TSTDIFF = tstverify() { \
${FORCECHECKUPDATE} && { cp $(if $(Q),,-v) $${2:-$(TSTOUT)} $${1:-$(TSTREF)} ; FAILOK="FAIL "" FORCED" ; } ; \
cmp --quiet $${1:-$(TSTREF)} $${2:-$(TSTOUT)} ; _e=$$? ; \
printf ' DIFF %-64s%s\n' "$${3:-$$MAKE_TARGET_FILE}:" "$${FAILOK:$$(($$_e?0:6)):6}" ; \
test $$_e = 0 || { diff -up $${1:-$(TSTREF)} $${2:-$(TSTOUT)} ; exit $$_e ; } ; rm -f $${2:-$(TSTOUT)} ; \
} ; tstverify
### eval $$TSTOCR 'PNGFILE' [REGEXPATTERNS...] - OCR-grep a PNG file for regular expressions
export TSTOCR = tstocr() { IMG="$$1"; OUT=`basename "$$1".tocr`; shift; \
gocr "$$IMG" > "$$OUT" 2>/dev/null && while [ -n "$$1" ] ; do \
$(if $(findstring 1, $(V)), echo OCR: ; cat "$$OUT" ; ,) \
grep -qE -e "$$1" "$$OUT" ; _e=$$? ; \
printf ' CHECK %-64s%s\n' "$$MAKE_TARGET_FILE: $$1" "$${FAILOK:$$(($$_e?0:6)):6}" ; [ $$_e = 0 ] || exit $$_e ; \
shift ; done || \
printf ' CHECK %-64s%s\n' "$$MAKE_TARGET_FILE: OCR tests with gocr(1)..." "SKIP" ; \
rm -f "$$OUT" ; }; tstocr
# $(call TSTOUT, [prefix]) - test output filename
TSTOUT = $(strip $(@D)/xtst$(strip $(1))-$(@F).out)
# $(call TSTTMP, [prefix]) - temporary test filename
TSTTMP = $(strip $(@D)/xtst$(strip $(1))-$(@F).tmp)
# === force-check-update ===
force-check-update:
$(MAKE) FORCECHECKUPDATE=true check
# === report ===
.PHONY: report
report: all
@export REPORTFILE="$(REPORTFILE)" && [ -z "$$REPORTFILE" ] \
&& export REPORTFILE="$(shell pwd)/report.out" \
; ( echo -n "#TSTREPORT: install: " && date --iso-8601=seconds \
&& $(MAKE) $(AM_MAKEFLAGS) install \
&& echo -n "#TSTREPORT: check: " && date --iso-8601=seconds \
&& $(MAKE) $(AM_MAKEFLAGS) check \
&& echo -n "#TSTREPORT: installcheck: " && date --iso-8601=seconds \
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
&& echo -n "#TSTREPORT: done: " && date --iso-8601=seconds \
) 2>&1 | tee "$$REPORTFILE"