Add more tests (broken, needs a refactoring of the build script)
[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 tools/split_path.native$(EXE)
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=src
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=src
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: tools $(BIN)
161         for i in tests/*.xml
162         do
163           for j in 1 2 3
164           do
165                 $(REMAKE) "$i".test"$j".summary
166           done
167         done
168
169 test_clean:
170         rm -rf tests/*.summary tests/*.results/*_"$(PACKAGE)"_*.*
171
172 %.test1.summary:
173                 base="$@"
174                 base=${base%.xml.test1.summary}
175                 $(REMAKE) "$base".xml "$base".xml.queries
176                 rm -f "$@"
177                 MSG="Test 1 (single query: tatoo vs java implementation)" 
178                 echo "$MSG" >> "$@"
179                 echo "$MSG"
180                 cat "$base".xml.queries | grep -v '^#' | while read q query; do
181                         echo -n "$base"".xml $q $query ... "
182                         REF="$base".xml.results/"$q"_jaxp.xml
183                         $(REMAKE) "$REF"
184                         OUTPUT="$base".xml.results/"$q"_"$(PACKAGE)"_test1.xml
185                         LOG="$base".xml.results/"$q"_"$(PACKAGE)"_test1.log
186                         cp "$@" /tmp
187                         src/@PACKAGE_TARNAME@.native@EXE@ -s -d "$base".xml \
188                                 "$query" -o "$OUTPUT" > "$LOG" 2>&1
189                         cp "$@" /tmp
190                         echo "Query: $q : $query" >> "$@"
191                         cat  "$LOG" | grep '^STATS' >> "$@"
192                         echo -n "Diff: " >> "$@"
193                         if tools/xml_diff.native "$REF" "$OUTPUT" >/dev/null 2>&1; then
194                                 echo ok
195                                 echo ok >> "$@"
196                         else
197                                 echo failed
198                                 echo failed >> "$@"
199                                 exit 1
200                         fi
201                         echo '-------------------------------------------' >> "$@"
202                 done
203
204 %.test2.summary:
205                 base="$@"
206                 base=${base%.xml.test2.summary}
207                 $(REMAKE) "$base".xml "$base".xml.queries
208                 rm -f "$@"
209                 MSG="Test 2 (all queries sequentially vs all queries in parallel)"
210                 echo "$MSG" >> "$@"
211                 echo "$MSG"
212                 allqueries=`cat "$base".xml.queries | grep -v '^#' | while read q query; do echo "'$query'"; done`
213                 echo -n "Running all queries ... "
214                 OUTPUTA="$base".xml.results/test2a_"$(PACKAGE)".xml
215                 LOG="$base".xml.results/test2a_"$(PACKAGE)".log
216                 echo -n "sequential ... "
217                 echo "$allqueries" | xargs src/@PACKAGE_TARNAME@.native@EXE@ -s -d "$base".xml \
218                  -o "$OUTPUTA" > "$LOG" 2>&1
219                 cat  "$LOG" | grep '^STATS' >> "$@"
220
221                 OUTPUTB="$base".xml.results/test2b_"$(PACKAGE)".xml
222                 LOG="$base".xml.results/test2b_"$(PACKAGE)".log
223                 echo -n "parallel ... "
224                 echo "$allqueries" | xargs src/@PACKAGE_TARNAME@.native@EXE@ -p -s -d "$base".xml \
225                  -o "$OUTPUTB" > "$LOG" 2>&1
226                 cat  "$LOG" | grep '^STATS' >> "$@"
227                         echo -n "Diff: " >> "$@"
228                 if diff "$OUTPUTA" "$OUTPUTB" >/dev/null 2>&1; then
229                         echo ok
230                         echo ok >> "$@"
231                 else
232                         echo failed
233                         echo failed >> "$@"
234                         exit 1
235                 fi
236                 echo '-------------------------------------------' >> "$@"
237
238 %.test3.summary:
239                 base="$@"
240                 base=${base%.xml.test3.summary}
241                 $(REMAKE) "$base".xml "$base".xml.queries
242                 rm -f "$@"
243                 MSG="Test 3 (multiple queries composition: sequential vs parallel)" 
244                 echo "$MSG" >> "$@"
245                 echo "$MSG"
246                 cat "$base".xml.queries | grep -v '^#' | while read q query; do
247                         echo -n "$base"".xml $q $query ... sequential ... "
248                         OUTPUTA="$base".xml.results/"$q"_"$(PACKAGE)"_test3a.xml
249                         LOG="$base".xml.results/"$q"_"$(PACKAGE)"_test3a.log
250                         src/@PACKAGE_TARNAME@.native@EXE@ -s -d -C "$base".xml \
251                                  -o "$OUTPUTA" $(src/split_path.native$(EXE) "$query") > "$LOG" 2>&1
252                         echo "Query: $q : $query" >> "$@"
253                         cat  "$LOG" | grep '^STATS' >> "$@"
254
255                         echo -n "parallel ... "
256                         OUTPUTB="$base".xml.results/"$q"_"$(PACKAGE)"_test3a.xml
257                         LOG="$base".xml.results/"$q"_"$(PACKAGE)"_test3a.log
258                         src/@PACKAGE_TARNAME@.native@EXE@ -s -d -p -C "$base".xml \
259                                  -o "$OUTPUTB" $(src/split_path.native$(EXE) "$query") > "$LOG" 2>&1
260                         echo "Query: $q : $query" >> "$@"
261                         cat  "$LOG" | grep '^STATS' >> "$@"
262
263
264                         echo -n "Diff: " >> "$@"
265                         if diff  "$OUTPUTA" "$OUTPUTB" >/dev/null 2>&1; then
266                                 echo ok
267                                 echo ok >> "$@"
268                         else
269                                 echo failed
270                                 echo failed >> "$@"
271                                 exit 1
272                         fi
273                         echo '-------------------------------------------' >> "$@"
274                 done