summaryrefslogtreecommitdiffstats
path: root/testsuite/makefiles/Makefile.several
blob: 3482e3af308fbe184f2feed3f6735817757c3141 (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
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
#########################################################################
#                                                                       #
#                                 OCaml                                 #
#                                                                       #
#                 Xavier Clerc, SED, INRIA Rocquencourt                 #
#                                                                       #
#   Copyright 2010 Institut National de Recherche en Informatique et    #
#   en Automatique.  All rights reserved.  This file is distributed     #
#   under the terms of the Q Public License version 1.0.                #
#                                                                       #
#########################################################################

CC=$(NATIVECC) $(NATIVECCCOMPOPTS)
FC=$(FORTAN_COMPILER)
CMO_FILES=$(MODULES:=.cmo)
CMX_FILES=$(MODULES:=.cmx)
CMA_FILES=$(LIBRARIES:=.cma)
CMXA_FILES=$(LIBRARIES:=.cmxa)
O_FILES=$(C_FILES:=.o)

CUSTOM_FLAG=`if [ -n "$(C_FILES)" ]; then echo '-custom'; fi`
ADD_CFLAGS+=$(CUSTOM_FLAG)
MYRUNTIME=`if [ -z "$(C_FILES)$(CUSTOM)" ]; then echo '$(OCAMLRUN)'; fi`
FORTRAN_LIB=`if [ -n "$(F_FILES)" ]; then echo '$(FORTRAN_LIBRARY)'; fi`
ADD_CFLAGS+=$(FORTRAN_LIB)
ADD_OPTFLAGS+=$(FORTRAN_LIB)

.PHONY: check
check:
	@if [ -n "$(FORTRAN_COMPILER)" -o -z "$(F_FILES)" ]; then \
	  $(SET_LD_PATH) $(MAKE) run-all; \
	fi

.PHONY: run-all
run-all:
	@for file in $(C_FILES); do \
	  $(CC) -c -I$(PREFIX)/lib/ocaml/caml $$file.c; \
	done;
	@for file in $(F_FILES); do \
	  $(FORTRAN_COMPILER) -c -I$(PREFIX)/lib/ocaml/caml $$file.f; \
	done;
	@for file in *.ml; do \
	  if [ -f `basename $$file ml`precheck ]; then \
	    CANKILL=$(CANKILL) sh `basename $$file ml`precheck || continue; \
	  fi; \
	  printf " ... testing '$$file':"; \
	  $(MAKE) run-file DESC=ocamlc COMP='$(OCAMLC)' \
	          RUNTIME='$(MYRUNTIME)' \
	          COMPFLAGS='-w a $(ADD_COMPFLAGS) $(ADD_CFLAGS) $(O_FILES) \
	                     $(CMA_FILES) -I $(OTOPDIR)/testsuite/lib \
	                     $(CMO_FILES)' \
	          FILE=$$file PROGRAM_ARGS=$(PROGRAM_ARGS) \
	  && \
	  if $(BYTECODE_ONLY); then : ; else \
	    $(MAKE) run-file DESC=ocamlopt COMP='$(OCAMLOPT)' \
	            RUNTIME= \
	            COMPFLAGS='-w a $(ADD_COMPFLAGS) $(ADD_OPTFLAGS) \
		               $(O_FILES) $(CMXA_FILES) \
			       -I $(OTOPDIR)/testsuite/lib $(CMX_FILES)' \
	            FILE=$$file PROGRAM_ARGS=$(PROGRAM_ARGS); \
	  fi \
	  && \
	  if [ -n "$(UNSAFE)" ]; then \
	    $(MAKE) run-file DESC=ocamlc-unsafe COMP='$(OCAMLC)' \
	            RUNTIME='$(MYRUNTIME)' \
	            COMPFLAGS='-w a -unsafe $(ADD_COMPFLAGS) $(ADD_CFLAGS) \
	                       $(O_FILES) $(CMA_FILES) \
	                       -I $(OTOPDIR)/testsuite/lib $(CMO_FILES)' \
	            FILE=$$file \
	    && \
	    if $(BYTECODE_ONLY); then : ; else \
	      $(MAKE) run-file DESC=ocamlopt-unsafe COMP='$(OCAMLOPT)' \
	              RUNTIME= \
	              COMPFLAGS='-w a -unsafe $(ADD_COMPFLAGS) $(ADD_OPTFLAGS)\
		                 $(O_FILES) $(CMXA_FILES) \
	                         -I $(OTOPDIR)/testsuite/lib $(CMX_FILES)' \
	              FILE=$$file; \
	       fi; \
	     fi \
	  && echo " => passed" || echo " => failed"; \
	done

.PHONY: run-file
run-file:
	@printf " $(DESC)"
	@rm -f program program.exe
	@$(COMP) $(COMPFLAGS) $(FILE) -o program$(EXE)
	@F="`basename $(FILE) .ml`"; \
	if [ -f $$F.runner ]; then \
	  RUNTIME="$(RUNTIME)" sh $$F.runner; \
	else \
	  $(RUNTIME) ./program$(EXE) $(PROGRAM_ARGS) >$$F.result; \
	fi \
	&& \
	if [ -f $$F.checker ]; then \
	  DIFF="$(DIFF)" SORT="$(SORT)" sh $$F.checker; \
	else \
	  $(DIFF) $$F.reference $$F.result >/dev/null; \
	fi

.PHONY: promote
promote: defaultpromote

.PHONY: clean
clean: defaultclean
	@rm -f *.result program program.exe