Add an interface for the evaluation module.
[tatoo.git] / Remakefile.in
1 OCAMLFINDPACKAGES = "ulex,unix,expat,camlp4.macro"
2 OCAMLFINDSYNTAX = camlp4o
3 OCAMLFINDPPOPTS = $(addprefix "-ppopt ", @CAMLP4FLAGS@ -I include)
4 OCAMLFINDINCLUDES = $(addprefix "-I ", src)
5 OCAMLFINDFLAGS = -syntax $(OCAMLFINDSYNTAX) -package $(OCAMLFINDPACKAGES)  \
6         $(OCAMLFINDPPOPTS) $(OCAMLFINDINCLUDES)
7 OCAMLFINDLINKFLAGS = -linkpkg
8 PACKAGE = @PACKAGE_TARNAME@
9 BIN = src/@PACKAGE_TARNAME@.native@EXE@
10 EXE = @EXE@
11
12 REMAKE = @REMAKE@
13 OCAMLDEP = @OCAMLDEP@
14 ODEPS = tools/odeps.sh $(OCAMLDEP)
15 OCAMLC = @OCAMLC@
16 OCAMLOPT = @OCAMLOPT@
17 OCAMLFLAGS = @OCAMLFLAGS@
18 OCAMLOPTFLAGS = @OCAMLOPTFLAGS@
19 OCAMLCFLAGS = @OCAMLCFLAGS@
20 OCAMLYACC = @OCAMLYACC@
21
22 all: $(BIN)
23
24 tools: tools/xml_diff.native$(EXE) tools/XPathEval.class
25
26 Remakefile: Remakefile.in config.status
27         ./config.status Remakefile
28
29 configure config.status: configure.in
30         autoconf
31         ./config.status --recheck
32
33 clean:
34         for dir in src tools; do
35                 find $dir -name '*.cm*' -o -name '*.o' -o -name '*.byte' -o \
36                           -name '*.native' -o -name '*.mll' -o -name '*.mly' -o \
37                           -name '*.class' | while read file; do
38                 case "$file" in
39                         *.mll)
40                                 rm -f "${file%.mll}.ml"
41                         ;;
42                         *.mly)
43                                 rm -f "${file%.mly}.ml" "${file%.mly}.mli"
44                         ;;
45                         *)
46                         rm -f "$file"
47                         ;;
48                 esac
49                 done
50         done
51
52 distclean: clean test_clean
53         rm -rf config.status configure config.log autom4te.cache .remake Remakefile remake
54
55 %.class: %.java
56         javac $<
57
58 %.native$(EXE):
59         base=$*
60         src=${base}.ml
61         obj=${base}.cmx
62         dir=`dirname "$@"`
63         $(REMAKE) -v OCAMLDEPNATIVE=-native "$obj"
64         srcs=`ls "$dir"/*.cmx | sed 's/\.cmx/.ml/g'`
65         objs=`$(OCAMLDEP) $(OCAMLDEPNATIVE) $(OCAMLFINDFLAGS) -modules $srcs | tools/osort.sh cmx`
66         $(OCAMLOPT) -o "$@"  $(OCAMLFLAGS) $(OCAMLOPTFLAGS) $(OCAMLFINDLINKFLAGS) $(OCAMLFINDFLAGS) $objs
67
68 %.byte$(EXE):
69         base=$*
70         src=${base}.ml
71         obj=${base}.cmo
72         dir=`dirname "$@"`
73         $(REMAKE) "$obj"
74         objs=""
75         for i in "$dir"/*.cmi; do
76                 ibase=${i%.cmi}
77                 if test -f "${ibase}.ml" -o -d "${ibase}" -o -f "${ibase}.mly" -o -f "${ibase}.mll"; then
78                         objs="$objs ${ibase}.cmo"
79                 fi
80         done
81         $(REMAKE) $objs
82         srcs=`ls "$dir"/*.cmo | sed 's/\.cmo/.ml/g'`
83         sorted_objs=`$(OCAMLDEP) $OCAMLFINDFLAGS -modules $srcs | tools/osort.sh cmo`
84         $(OCAMLC) -o "$@"  $(OCAMLFLAGS) $(OCAMLCFLAGS) $(OCAMLFINDLINKFLAGS) $(OCAMLFINDFLAGS) $sorted_objs
85
86 %.cmx:
87         target="$@"
88         base="${target%.cmx}"
89         src="${base}.ml"
90         if [ -f "$src" ]; then
91                 $(REMAKE) "$src"
92                 deps=`$(ODEPS) -native $(OCAMLFINDFLAGS) $(PACKINCLUDE) "$src"`
93                 echo "$deps" | $(REMAKE) -v PACKINCLUDE="$(PACKINCLUDE)" -v OCAMLDEPNATIVE=-native -v OCAMLFORPACK="$(OCAMLFORPACK)" -r "$target"
94                 $(OCAMLOPT) -o "$target" -c $(OCAMLFLAGS) $(OCAMLOPTFLAGS) $(OCAMLFORPACK) $(OCAMLFINDFLAGS) $(PACKINCLUDE) "$src"
95         elif [ -d "$base" ];    then
96                 modname=`basename "$base"`
97                 packname=`echo "$modname" | sed 's/\(.*\)/\u\1/'`
98                 objs=`ls "$base"/*.ml | sed 's/\.ml/.cmx/g'`
99                 $(REMAKE) -v PACKINCLUDE="-I $base" -v OCAMLFORPACK="-for-pack $packname" $objs
100                 sorted_objs=`$(OCAMLDEP) -native $(OCAMLFINDFLAGS) -I $base -modules "$base"/*.ml | tools/osort.sh cmx`
101                 $(OCAMLOPT) -o "$target" -pack $sorted_objs
102         elif [ -f "$base".mly ]; then
103                 $(REMAKE) "$base".mly
104                 $(OCAMLYACC) "$base".mly
105                 $(ODEPS) $(OCAMLDEPNATIVE) $(OCAMLFINDFLAGS) "$src" | \
106                         $(REMAKE) -v PACKINCLUDE="$(PACKINCLUDE)" -v OCAMLDEPNATIVE=-native -v OCAMLFORPACK="$(OCAMLFORPACK)" -r "$target"
107                 $(OCAMLOPT) -o "$target" -c $(OCAMLFLAGS) $(OCAMLOPTFLAGS) $(OCAMLFORPACK) $(OCAMLFINDFLAGS) $(PACKINCLUDE) "$src"
108         fi
109
110
111 %.cmo:
112         target="$@"
113         base="${target%.cmo}"
114         src="${base}.ml"
115         if [ -f "$src" ]; then
116                 $(REMAKE) "$src"
117                 deps=`$(ODEPS) $OCAMLFINDFLAGS $PACKINCLUDE "$src"`
118                 echo "$deps" | $(REMAKE) -v PACKINCLUDE="$(PACKINCLUDE)" -r "$target"
119                 $(OCAMLC) -o "$target" -c $(OCAMLFLAGS) $(OCAMLCFLAGS) $(OCAMLFINDFLAGS) $(PACKINCLUDE) "$src"
120         elif [ -d "$base" ];    then
121                 modname=`basename "$base"`
122                 packname=`echo "$modname" | sed 's/\(.*\)/\u\1/'`
123                 objs=`ls "$base"/*.ml | sed 's/\.ml/.cmo/g'`
124                 $(REMAKE) -v PACKINCLUDE="-I $base" $objs
125                 sorted_objs=`$(OCAMLDEP) $(OCAMLFINDFLAGS) -I $base -modules "$base"/*.ml | tools/osort.sh cmo`
126                 $(OCAMLC) -o "$target" -pack $sorted_objs
127         elif [ -f "$base".mly ]; then
128                 $(REMAKE) "$base".mly
129                 $(OCAMLYACC) "$base".mly
130                 $(ODEPS) $(OCAMLFINDFLAGS) $(PACKINCLUDE) "$src" | $(REMAKE) -v PACKINCLUDE="$(PACKINCLUDE)" -r "$target"
131                 $(OCAMLC) -o "$target" -c $(OCAMLFLAGS) $(OCAMLCFLAGS) $(OCAMLFINDFLAGS) $(PACKINCLUDE) "$src"
132         fi
133
134
135
136 %.cmi:
137         target="$@"
138         base=${target%.cmi}
139         if test -f "$base".mli; then
140                 $(REMAKE) "$base".mli
141                 src=${base}.mli
142                 deps=`$(ODEPS) $(OCAMLDEPNATIVE) $(OCAMLFINDFLAGS) $(PACKINCLUDE) "$src"`
143                 echo "$deps" | $(REMAKE) -v PACKINCLUDE="$(PACKINCLUDE)" -v OCAMLDEPNATIVE="$(OCAMLDEPNATIVE)" -v OCAMLFORPACK="$(OCAMLFORPACK)" -r "$target"
144                 if test -z "$(OCAMLDEPNATIVE)"; then
145                         $(OCAMLC) -o "$target" -c $(OCAMLFLAGS) $(OCAMLCFLAGS) $(OCAMLFINDFLAGS) $(PACKINCLUDE) "$src"
146                 else
147                         $(OCAMLOPT) -o "$target" -c $(OCAMLFLAGS) $(OCAMLOPTFLAGS) $(OCAMLFINDFLAGS) $(PACKINCLUDE) "$src"
148                 fi
149         else
150                 if test -z "$(OCAMLDEPNATIVE)"; then
151                   obj=${base}.cmo
152                 else
153                   obj=${base}.cmx
154                 fi
155                 $(REMAKE) -v PACKINCLUDE="$(PACKINCLUDE)" -v OCAMLDEPNATIVE="$(OCAMLDEPNATIVE)" -v OCAMLFORPACK="$(OCAMLFORPACK)" "$obj"
156         fi
157
158 ## Tests
159
160 test:
161         for i in tests/*.xml
162         do
163                 $(REMAKE) "$i".summary
164         done
165
166 test_clean:
167         rm -rf tests/*.summary tests/*.results/*_"$(PACKAGE)".*
168
169 %.summary:
170                 base=`dirname "$@"`/`basename "$@" .xml.summary`
171                 $(REMAKE) "$base".xml "$base".xml.queries tools "$(BIN)"
172                 rm -f "$@"
173                 cat "$base".xml.queries | grep -v '^#' | while read q query; do
174                         echo -n "$base"".xml $q $query ... "
175                         REF="$base".xml.results/"$q"_jaxp.xml
176                         $(REMAKE) "$REF"
177                         OUTPUT="$base".xml.results/"$q"_"$(PACKAGE)".xml
178                         LOG="$base".xml.results/"$q"_"$(PACKAGE)".log
179                         src/@PACKAGE_TARNAME@.native@EXE@ -s "$base".xml \
180                                 "$query" "$OUTPUT" > "$LOG" 2>&1
181                         echo "Query: $q : $query" >> "$@"
182                         cat  "$LOG" | grep '^STATS' >> "$@"
183                         echo -n "Diff: " >> "$@"
184                         if tools/xml_diff.native "$REF" "$OUTPUT" >/dev/null 2>&1; then
185                                 echo ok
186                                 echo ok >> "$@"
187                         else
188                                 echo failed
189                                 echo failed >> "$@"
190                                 exit 1
191                         fi
192                         echo '-------------------------------------------' >> "$@"
193                 done