posixtestsuite: More whitespace cleanup.
[dragonfly.git] / test / contrib / posixtestsuite-1.5.2 / Makefile
1 # Copyright (c) 2002, Intel Corporation. All rights reserved.
2 # Created by:  inaky.perez-gonzalez REMOVE-THIS AT intel DOT com
3 # This file is licensed under the GPL license.  For the full content
4 # of this license, see the COPYING file at the top level of this
5 # source tree.
6 #
7 # Kind of a little bit bastardized automakefile ... This is the
8 # temporary glue to hold it all together; once our needs change or we
9 # need something more advanced, we'll implement it.
10 #
11 # So far, I understand Make is not the best language, but I felt lazy
12 # today and wanted to use the default rules of automake [did I alredy
13 # mentioned I am bastardizing it?].
14 #
15 # Ok, I don't use Automake any more
16 #
17 # Added patch from dank REMOVE-THIS AT kegel DOT com
18 #
19
20 # Added tests timeout from Sebastien Decugis (http://nptl.bullopensource.org)
21 # Expiration delay is 240 seconds
22 TIMEOUT_VAL = 240
23 # The following value is the shell return value of a timedout application.
24 # with the bash shell, the ret val of a killed application is 128 + signum
25 # and under Linux, SIGALRM=14, so we have (Linux+bash) 142.
26 TIMEOUT_RET = $(shell cat $(top_builddir)/t0.val)
27
28 top_builddir = .
29
30 LOGFILE = $(top_builddir)/logfile
31
32 LDFLAGS := $(shell cat LDFLAGS | grep -v \^\#)
33
34 RUN_TESTS := $(shell $(top_builddir)/locate-test \
35              --execs $(top_builddir)/$(POSIX_TARGET))
36 BUILD_TESTS := $(shell $(top_builddir)/locate-test \
37                --buildable $(top_builddir)/$(POSIX_TARGET))
38 FUNCTIONAL_MAKE := $(shell $(top_builddir)/locate-test --fmake)
39 FUNCTIONAL_RUN := $(shell $(top_builddir)/locate-test --frun)
40 STRESS_MAKE := $(shell $(top_builddir)/locate-test --smake)
41 STRESS_RUN := $(shell $(top_builddir)/locate-test --srun)
42 PWD := $(shell pwd)
43 TIMEOUT = $(top_builddir)/t0 $(TIMEOUT_VAL)
44
45
46 all: build-tests run-tests
47
48 build-tests: $(BUILD_TESTS:.c=.test)
49 run-tests: $(RUN_TESTS:.test=.run-test)
50
51 functional-tests: functional-make functional-run
52 stress-tests: stress-make stress-run
53
54 tests-pretty:
55         $(MAKE) all | column -t -s:
56
57 CFLAGS = -g -O2 -Wall -Werror -D_POSIX_C_SOURCE=200112L
58
59 # add -std=c99, -std=gnu99 if compiler supports it (gcc-2.95.3 does not).
60 check_gcc = $(shell if $(CC) $(1) -S -o /dev/null -xc /dev/null > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi)
61 CFLAGS += $(call check_gcc,-std=c99,)
62 CFLAGS += $(call check_gcc,-std=gnu99,)
63
64 INCLUDE = -Iinclude
65
66 # FIXME: exaust cmd line length
67 clean:
68         @rm -f $(LOGFILE)
69 # Timeout helper files
70         @rm -f $(top_builddir)/t0{,.val}
71 # Built runnable tests
72         @find $(top_builddir) -iname \*.test | xargs -n 40 rm -f {}
73         @find $(top_builddir) -iname \*~ -o -iname \*.o | xargs -n 40 rm -f {}
74         @$(foreach DIR,$(FUNCTIONAL_MAKE),make -C $(DIR) clean >> /dev/null 2>&1;) >> /dev/null 2>&1
75
76 # Rule to run a build test
77 # If the .o doesn't export main, then we don't need to link
78 .PRECIOUS: %.test
79 %.test: %.o
80         @COMPLOG=$(LOGFILE).$$$$; \
81         [ -f $< ] || exit 0; \
82         { nm -g $< | grep -q " T main"; } || \
83         { echo "$(@:.test=): link: SKIP" | tee -a $(LOGFILE) && exit 0; }; \
84         if $(CC) $(CFLAGS) $< -o $@ $(LDFLAGS) > $$COMPLOG 2>&1; \
85         then \
86                 echo "$(@:.test=): link: PASS" | tee -a $(LOGFILE); \
87         else \
88                 ( \
89                         echo "$(@:.test=): link: FAILED. Linker output: "; \
90                         cat $$COMPLOG; \
91                 ) >> $(LOGFILE); \
92                 echo "$(@:.test=): link: FAILED "; \
93         fi; \
94         rm -f $$COMPLOG;
95
96 # Rule to run an executable test
97 # If it is only a build test, then the binary exist, so we don't need to run
98 .PHONY: %.run-test
99 %.run-test: %.test $(top_builddir)/t0 $(top_builddir)/t0.val
100         @COMPLOG=$(LOGFILE).$$$$; \
101         [ -f $< ] || exit 0; \
102         $(TIMEOUT) $< > $$COMPLOG 2>&1; \
103         RESULT=$$?; \
104         if [ $$RESULT -eq 1 ]; \
105         then \
106                 MSG="FAILED"; \
107         fi; \
108         if [ $$RESULT -eq 2 ]; \
109         then \
110                 MSG="UNRESOLVED"; \
111         fi; \
112         if [ $$RESULT -eq 4 ]; \
113         then \
114                 MSG="UNSUPPORTED"; \
115         fi; \
116         if [ $$RESULT -eq 5 ]; \
117         then \
118                 MSG="UNTESTED"; \
119         fi; \
120         if [ $$RESULT -eq $(TIMEOUT_RET) ]; \
121         then \
122                 MSG="HUNG"; \
123         fi; \
124         if [  $$RESULT -gt 5  -a  $$RESULT -ne $(TIMEOUT_RET)  ]; \
125         then \
126                 MSG="INTERRUPTED"; \
127         fi; \
128         if [ $$RESULT -eq 0 ]; \
129         then \
130                 echo "$(@:.run-test=): execution: PASS" | tee -a $(LOGFILE); \
131         else \
132                 ( \
133                         echo "$(@:.run-test=): execution: $$MSG: Output: "; \
134                         cat $$COMPLOG; \
135                 ) >> $(LOGFILE); \
136                 echo "$(@:.run-test=): execution: $$MSG "; \
137         fi; \
138         rm -f $$COMPLOG;
139
140 $(top_builddir)/t0: $(top_builddir)/t0.c
141         @echo Building timeout helper files; \
142         $(CC) -O2 -o $@ $<
143
144 $(top_builddir)/t0.val: $(top_builddir)/t0
145         echo `$(top_builddir)/t0 0; echo $$?` > $(top_builddir)/t0.val
146
147 %.run-test: %.sh $(top_builddir)/t0 $(top_builddir)/t0.val
148         @COMPLOG=$(LOGFILE).$$$$; \
149         chmod +x $<; \
150         $(TIMEOUT) $< > $$COMPLOG 2>&1; \
151         RESULT=$$?; \
152         if [ $$RESULT -eq 0 ]; \
153         then \
154                 echo "$(@:.run-test=): execution: PASS" | tee -a $(LOGFILE);\
155         else \
156                 ( \
157                         echo "$(@:.run-test=): execution: FAILED: Output: ";\
158                         cat $$COMPLOG; \
159                 ) >> $(LOGFILE); \
160                 echo "$(@:.run-test=): execution: FAILED "; \
161         fi; \
162         rm -f $$COMPLOG;
163
164
165 .PRECIOUS: %.o
166 %.o: %.c
167         @COMPLOG=$(LOGFILE).$$$$; \
168         if $(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@ $(LDFLAGS) > $$COMPLOG 2>&1; \
169         then \
170                 echo "$(@:.o=): build: PASS" | tee -a $(LOGFILE); \
171         else \
172                 ( \
173                         echo "$(@:.o=): build: FAILED: Compiler output: "; \
174                         cat $$COMPLOG; \
175                 ) >> $(LOGFILE); \
176                 echo "$(@:.o=): build: FAILED "; \
177         fi; \
178         rm -f $$COMPLOG;
179
180 # Functional/Stress test build and execution
181 functional-make:
182         $(foreach DIR,$(FUNCTIONAL_MAKE),make -C $(DIR);)
183
184 .PHONY: $(FUNCTIONAL_RUN)
185
186 functional-run: $(FUNCTIONAL_RUN)
187
188 $(FUNCTIONAL_RUN):
189         cd $@; ./run.sh
190         cd $(PWD)
191
192 stress-make:
193         $(foreach DIR,$(STRESS_MAKE),make -C $(DIR);)
194
195 .PHONY: $(STRESS_RUN)
196
197 stress-run: $(STRESS_RUN)
198
199 $(STRESS_RUN):
200         cd $@; ./run.sh
201         cd $(PWD)