1#**************************************************************************
2#*                                                                        *
3#*                                OCaml                                   *
4#*                                                                        *
5#*                 Xavier Clerc, SED, INRIA Rocquencourt                  *
6#*                                                                        *
7#*   Copyright 2010 Institut National de Recherche en Informatique et     *
8#*     en Automatique.                                                    *
9#*                                                                        *
10#*   All rights reserved.  This file is distributed under the terms of    *
11#*   the GNU Lesser General Public License version 2.1, with the          *
12#*   special exception on linking described in the file LICENSE.          *
13#*                                                                        *
14#**************************************************************************
15
16BASEDIR=../..
17EXECNAME=program$(EXE)
18
19ABCDFILES=backtrace.ml
20OTHERFILES=backtrace2.ml backtrace3.ml raw_backtrace.ml \
21           backtrace_deprecated.ml backtrace_slots.ml
22INLININGFILES=inline_test.ml inline_traversal_test.ml
23OTHERFILESNOINLINING=pr6920_why_at.ml pr6920_why_swallow.ml
24OTHERFILESNOINLINING_NATIVE=backtraces_and_finalizers.ml
25
26# Keep only filenames, lines and character ranges
27LOCATIONFILTER=grep -oE \
28               '[a-zA-Z_]+\.ml(:[0-9]+)?|(line|characters) [0-9-]+'
29
30default:
31	@$(MAKE) byte
32	@if $(BYTECODE_ONLY); then $(MAKE) skip ; else $(MAKE) native; fi
33
34.PHONY: byte
35byte:
36	@for file in $(ABCDFILES); do \
37	  rm -f program program.exe; \
38	  $(OCAMLC) -g -o $(EXECNAME) $$file; \
39	  for arg in a b c d ''; do \
40	    printf " ... testing '$$file' with ocamlc and argument '$$arg':"; \
41	    F="`basename $$file .ml`"; \
42	    (OCAMLRUNPARAM=$$OCAMLRUNPARAM,b=1 \
43              $(OCAMLRUN) $(EXECNAME) $$arg || true) \
44	         >$$F.$$arg.byte.result 2>&1; \
45	    $(DIFF) $$F.$$arg.byte.reference $$F.$$arg.byte.result >/dev/null \
46	    && echo " => passed" || echo " => failed"; \
47	  done; \
48	done
49	@for file in $(OTHERFILES) $(OTHERFILESNOINLINING); do \
50	  rm -f program program.exe; \
51	  $(OCAMLC) -g -o $(EXECNAME) $$file; \
52	  printf " ... testing '$$file' with ocamlc:"; \
53	  F="`basename $$file .ml`"; \
54	  (OCAMLRUNPARAM=$$OCAMLRUNPARAM,b=1 \
55            $(OCAMLRUN) $(EXECNAME) $$arg || true) \
56	       >$$F.byte.result 2>&1; \
57	  $(DIFF) $$F.byte.reference $$F.byte.result >/dev/null \
58	  && echo " => passed" || echo " => failed"; \
59	done;
60	@for file in $(INLININGFILES); \
61	do \
62	  rm -f program program.exe; \
63	  $(OCAMLC) -g -o $(EXECNAME) $$file; \
64	  printf " ... testing '$$file' with ocamlc:"; \
65	  F="`basename $$file .ml`"; \
66	  (OCAMLRUNPARAM=$$OCAMLRUNPARAM,b=1 \
67	  $(OCAMLRUN) $(EXECNAME) $$arg 2>&1 || true) \
68			| $(LOCATIONFILTER) >$$F.byte.result 2>&1; \
69	  $(DIFF) $$F.byte.reference $$F.byte.result >/dev/null \
70	  && echo " => passed" || echo " => failed"; \
71	done
72
73.PHONY: skip
74skip:
75	@for file in $(ABCDFILES); do \
76	  for arg in a b c d ''; do \
77	    echo " ... testing '$$file' with ocamlopt and argument '$$arg': \
78	=> skipped"; \
79	  done; \
80	done
81	@for file in $(OTHERFILES) $(OTHERFILESNOINLINING) \
82	             $(OTHERFILESNOINLINING_NATIVE) $(INLININGFILES); do \
83	  echo " ... testing '$$file' with ocamlopt: => skipped"; \
84	done
85
86.PHONY: native
87native:
88	@for file in $(ABCDFILES); do \
89	  rm -f program program.exe; \
90	  $(OCAMLOPT) -g -o $(EXECNAME) $$file; \
91	  for arg in a b c d ''; do \
92	    printf " ... testing '$$file' with ocamlopt and argument '$$arg':";\
93	    F="`basename $$file .ml`"; \
94	    (OCAMLRUNPARAM=$$OCAMLRUNPARAM,b=1 \
95              ./$(EXECNAME) $$arg || true) \
96	         >$$F.$$arg.native.result 2>&1; \
97	    $(DIFF) $$F.$$arg.native.reference $$F.$$arg.native.result \
98	            >/dev/null \
99	    && echo " => passed" || echo " => failed"; \
100	  done; \
101	done
102	@for file in $(OTHERFILES); do \
103	  rm -f program program.exe; \
104	  $(OCAMLOPT) -g -o $(EXECNAME) $$file; \
105	  printf " ... testing '$$file' with ocamlopt:"; \
106	  F="`basename $$file .ml`"; \
107	  (OCAMLRUNPARAM=$$OCAMLRUNPARAM,b=1 \
108            ./$(EXECNAME) $$arg || true) \
109	       >$$F.native.result 2>&1; \
110	  $(DIFF) $$F.native.reference $$F.native.result >/dev/null \
111	  && echo " => passed" || echo " => failed"; \
112	done;
113	@for file in $(OTHERFILESNOINLINING) $(OTHERFILESNOINLINING_NATIVE); \
114	do \
115	  rm -f program program.exe; \
116	  $(OCAMLOPT) -inline 0 -g -o $(EXECNAME) $$file; \
117	  printf " ... testing '$$file' with ocamlopt:"; \
118	  F="`basename $$file .ml`"; \
119	  (OCAMLRUNPARAM=$$OCAMLRUNPARAM,b=1 \
120            ./$(EXECNAME) $$arg || true) \
121	       >$$F.native.result 2>&1; \
122	  $(DIFF) $$F.native.reference $$F.native.result >/dev/null \
123	  && echo " => passed" || echo " => failed"; \
124	done;
125	@for file in $(INLININGFILES); \
126	do \
127	  rm -f program program.exe; \
128	  $(OCAMLOPT) -g -o $(EXECNAME) $$file; \
129	  printf " ... testing '$$file' with ocamlopt:"; \
130	  F="`basename $$file .ml`"; \
131	  (OCAMLRUNPARAM=$$OCAMLRUNPARAM,b=1 \
132	  ./$(EXECNAME) $$arg 2>&1 || true) \
133		 	| $(LOCATIONFILTER) >$$F.native.result; \
134	  $(DIFF) $$F.native.reference $$F.native.result >/dev/null \
135	  && echo " => passed" || echo " => failed"; \
136	  rm -f program program.exe; \
137	  $(OCAMLOPT) -g -o $(EXECNAME) -O3 $$file; \
138	  printf " ... testing '$$file' with ocamlopt -O3:"; \
139	  F="`basename $$file .ml`"; \
140	  (OCAMLRUNPARAM=$$OCAMLRUNPARAM,b=1 \
141	  ./$(EXECNAME) $$arg 2>&1 || true) \
142		 	| $(LOCATIONFILTER) >$$F.O3.result; \
143	  $(DIFF) $$F.native.reference $$F.O3.result >/dev/null \
144	  && echo " => passed" || echo " => failed"; \
145	done
146
147
148.PHONY: promote
149promote: defaultpromote
150
151.PHONY: clean
152clean: defaultclean
153	@rm -f *.result program program.exe
154
155include $(BASEDIR)/makefiles/Makefile.common
156