157437f39995a91e0233802945d68503bcea01f7
[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 SRC = src
10 BIN = src/@PACKAGE_TARNAME@.native@EXE@
11 EXE = @EXE@
12
13 REMAKE = @REMAKE@
14 OCAMLDEP = @OCAMLDEP@
15 ODEPS = tools/odeps.sh $(OCAMLDEP)
16 OCAMLC = @OCAMLC@
17 OCAMLOPT = @OCAMLOPT@
18 OCAMLFLAGS = @OCAMLFLAGS@
19 OCAMLOPTFLAGS = @OCAMLOPTFLAGS@
20 OCAMLCFLAGS = @OCAMLCFLAGS@
21 OCAMLYACC = @OCAMLYACC@
22
23 all: $(BIN)
24
25 tools: tools/xml_diff.native$(EXE) tools/XPathEval.class tools/split_path.native$(EXE)
26
27 Remakefile: Remakefile.in config.status
28         ./config.status Remakefile
29
30 configure config.status: configure.in
31         autoconf
32         ./config.status --recheck
33
34 clean:
35         for dir in src tools; do
36                 find $dir -name '*.cm*' -o -name '*.o' -o -name '*.byte' -o \
37                           -name '*.native' -o -name '*.mll' -o -name '*.mly' -o \
38                           -name '*.class' -o -name '*.dep' | while read file; do
39                 case "$file" in
40                         *.mll)
41                                 rm -f "${file%.mll}.ml"
42                         ;;
43                         *.mly)
44                                 rm -f "${file%.mly}.ml" "${file%.mly}.mli"
45                         ;;
46                         *)
47                         rm -f "$file"
48                         ;;
49                 esac
50                 done
51         done
52
53 distclean: clean test_clean
54         rm -rf config.status configure config.log autom4te.cache .remake Remakefile remake Makefile
55
56 %.class: %.java
57         javac $<
58
59 %.native$(EXE): %.cmx %.dep
60         objects=`cat $*.dep | xargs | sed 's/[.]dep/.cmx/g'`
61         $(OCAMLOPT) -o $@  $(OCAMLFLAGS) $(OCAMLOPTFLAGS) $(OCAMLFINDLINKFLAGS) $(OCAMLFINDFLAGS) $objects $<
62
63 %.byte$(EXE): %.cmo %.dep
64         objects=`cat $*.dep | xargs | sed 's/[.]dep/.cmo/g'`
65         $(OCAMLC) -o $@  $(OCAMLFLAGS) $(OCAMLCFLAGS) $(OCAMLFINDLINKFLAGS) $(OCAMLFINDFLAGS) $objects $<
66
67 %.ml:
68         if test -f $*.mly; then
69                 $(OCAMLYACC) $*.mly
70         elif test -f $*.mll; then
71                 $(OCAMLLEX) $*.mll
72         fi
73
74 %.cmx %.dep:
75         base=$*
76         target=$@
77         NATIVE=-native
78         REMAKE="$(REMAKE) -v OCAMLNATIVE=$NATIVE"
79         OCAMLDEP="$(OCAMLDEP) $(OCAMLFINDFLAGS)"
80         SRC=$(SRC)
81         COMPILE="$(OCAMLOPT) $(OCAMLFLAGS) $(OCAMLOPTFLAGS) $(OCAMLFINDFLAGS)"
82         . tools/ocamldriver.sh
83
84 %.cmo %.dep:
85         base=$*
86         target=$@
87         NATIVE=
88         REMAKE="$(REMAKE) -v OCAMLNATIVE=$NATIVE"
89         OCAMLDEP="$(OCAMLDEP) $(OCAMLFINDFLAGS)"
90         SRC=$(SRC)
91         COMPILE="$(OCAMLC) $(OCAMLFLAGS) $(OCAMLCFLAGS) $(OCAMLFINDFLAGS)"
92         . tools/ocamldriver.sh
93
94 %.cmi:
95         $(REMAKE) $*.mli
96         if test -z "$(OCAMLNATIVE)"; then
97                 $(OCAMLC) -c $(OCAMLFLAGS) $(OCAMLCFLAGS) $(OCAMLFINDFLAGS) $(PACKINCLUDE) $*.mli
98         else
99                 $(OCAMLOPT) -c $(OCAMLFLAGS) $(OCAMLOPTFLAGS) $(OCAMLFINDFLAGS) $(PACKINCLUDE) $*.mli
100
101         fi
102
103 ## Tests
104
105 test: tools $(BIN)
106         for i in tests/*.xml
107         do
108           for j in 1 2 3
109           do
110                 $(REMAKE) "$i".test"$j".summary
111           done
112         done
113
114 test_clean:
115         rm -rf tests/*.summary tests/*.results/*_"$(PACKAGE)"_*.*
116
117 %.test1.summary:
118                 base="$@"
119                 base=${base%.xml.test1.summary}
120                 $(REMAKE) "$base".xml "$base".xml.queries
121                 rm -f "$@"
122                 MSG="Test 1 (single query: tatoo vs java implementation)"
123                 echo "$MSG" >> "$@"
124                 echo "$MSG"
125                 cat "$base".xml.queries | grep -v '^#' | while read q query; do
126                         echo -n "$base"".xml $q $query ... "
127                         REF="$base".xml.results/"$q"_jaxp.xml
128                         $(REMAKE) "$REF"
129                         OUTPUT="$base".xml.results/"$q"_"$(PACKAGE)"_test1.xml
130                         LOG="$base".xml.results/"$q"_"$(PACKAGE)"_test1.log
131                         cp "$@" /tmp
132                         src/@PACKAGE_TARNAME@.native@EXE@ -s -d "$base".xml \
133                                 "$query" -o "$OUTPUT" > "$LOG" 2>&1
134                         cp "$@" /tmp
135                         echo "Query: $q : $query" >> "$@"
136                         cat  "$LOG" | grep '^STATS' >> "$@"
137                         echo -n "Diff: " >> "$@"
138                         if tools/xml_diff.native "$REF" "$OUTPUT" >/dev/null 2>&1; then
139                                 echo ok
140                                 echo ok >> "$@"
141                         else
142                                 echo failed
143                                 echo failed >> "$@"
144                                 exit 1
145                         fi
146                         echo '-------------------------------------------' >> "$@"
147                 done
148
149 %.test2.summary:
150                 base="$@"
151                 base=${base%.xml.test2.summary}
152                 $(REMAKE) "$base".xml "$base".xml.queries
153                 rm -f "$@"
154                 MSG="Test 2 (all queries sequentially vs all queries in parallel)"
155                 echo "$MSG" >> "$@"
156                 echo "$MSG"
157                 allqueries=`cat "$base".xml.queries | grep -v '^#' | while read q query; do echo "'$query'"; done`
158                 echo -n "Running all queries ... "
159                 OUTPUTA="$base".xml.results/test2a_"$(PACKAGE)".xml
160                 LOG="$base".xml.results/test2a_"$(PACKAGE)".log
161                 echo -n "sequential ... "
162                 echo "$allqueries" | xargs src/@PACKAGE_TARNAME@.native@EXE@ -s -d "$base".xml \
163                  -o "$OUTPUTA" > "$LOG" 2>&1
164                 cat  "$LOG" | grep '^STATS' >> "$@"
165
166                 OUTPUTB="$base".xml.results/test2b_"$(PACKAGE)".xml
167                 LOG="$base".xml.results/test2b_"$(PACKAGE)".log
168                 echo -n "parallel ... "
169                 echo "$allqueries" | xargs src/@PACKAGE_TARNAME@.native@EXE@ -p -s -d "$base".xml \
170                  -o "$OUTPUTB" > "$LOG" 2>&1
171                 cat  "$LOG" | grep '^STATS' >> "$@"
172                         echo -n "Diff: " >> "$@"
173                 if diff "$OUTPUTA" "$OUTPUTB" >/dev/null 2>&1; then
174                         echo ok
175                         echo ok >> "$@"
176                 else
177                         echo failed
178                         echo failed >> "$@"
179                         exit 1
180                 fi
181                 echo '-------------------------------------------' >> "$@"
182
183 %.test3.summary:
184                 base="$@"
185                 base=${base%.xml.test3.summary}
186                 $(REMAKE) "$base".xml "$base".xml.queries
187                 rm -f "$@"
188                 MSG="Test 3 (multiple queries composition: sequential vs parallel)"
189                 echo "$MSG" >> "$@"
190                 echo "$MSG"
191                 cat "$base".xml.queries | grep -v '^#' | while read q query; do
192                         echo -n "$base"".xml $q $query ... sequential ... "
193                         OUTPUTA="$base".xml.results/"$q"_"$(PACKAGE)"_test3a.xml
194                         LOG="$base".xml.results/"$q"_"$(PACKAGE)"_test3a.log
195                         src/@PACKAGE_TARNAME@.native@EXE@ -s -d -C "$base".xml \
196                                  -o "$OUTPUTA" $(tools/split_path.native$(EXE) "$query") > "$LOG" 2>&1
197                         echo "Query: $q : $query" >> "$@"
198                         cat  "$LOG" | grep '^STATS' >> "$@"
199
200                         echo -n "parallel ... "
201                         OUTPUTB="$base".xml.results/"$q"_"$(PACKAGE)"_test3a.xml
202                         LOG="$base".xml.results/"$q"_"$(PACKAGE)"_test3a.log
203                         src/@PACKAGE_TARNAME@.native@EXE@ -s -d -p -C "$base".xml \
204                                  -o "$OUTPUTB" $(tools/split_path.native$(EXE) "$query") > "$LOG" 2>&1
205                         echo "Query: $q : $query" >> "$@"
206                         cat  "$LOG" | grep '^STATS' >> "$@"
207
208
209                         echo -n "Diff: " >> "$@"
210                         if diff  "$OUTPUTA" "$OUTPUTB" >/dev/null 2>&1; then
211                                 echo ok
212                                 echo ok >> "$@"
213                         else
214                                 echo failed
215                                 echo failed >> "$@"
216                                 exit 1
217                         fi
218                         echo '-------------------------------------------' >> "$@"
219                 done