Modify configure.in and Remakefile.in to use menhir instead of ocamlyacc.
[tatoo.git] / configure.in
1 AC_INIT([TAToo],
2         [0.0.1],
3         [Kim Nguyễn <kn@lri.fr>],
4         [tatoo])
5
6 #detect ocamlfind
7 OCAMLFIND=ocamlfind
8 AC_ARG_WITH([ocamlfind],
9             AS_HELP_STRING([--with-ocamlfind=PATH], [location of the ocamlfind binary]),
10         [OCAMLFIND="$withval"])
11 AC_MSG_CHECKING([for ocamlfind ($OCAMLFIND)])
12 $OCAMLFIND list >/dev/null 2>&1
13 if test $? ; then
14    AC_MSG_RESULT([found])
15    OCAMLC="$OCAMLFIND ocamlc"
16    OCAMLOPT="$OCAMLFIND ocamlopt"
17    OCAMLDEP="$OCAMLFIND ocamldep"
18 else
19    AC_MSG_RESULT([not found])
20    AC_MSG_ERROR([Cannot find ocamlfind.])
21 fi
22
23 AC_SUBST([OCAMLFIND])
24
25 #check ocamlc
26 AC_MSG_CHECKING([for $OCAMLC])
27 $OCAMLC >/dev/null 2>&1
28 if test $? ; then
29         AC_MSG_RESULT([ok])
30 else
31         AC_MSG_RESULT([failed])
32         AC_MSG_ERROR(Cannot find ocamlc.)
33 fi
34 AC_SUBST([OCAMLC])
35
36 #check ocamlopt
37 AC_MSG_CHECKING([for $OCAMLOPT])
38 $OCAMLOPT >/dev/null 2>&1
39 if test $? ; then
40         AC_MSG_RESULT([ok])
41 else
42         AC_MSG_RESULT([failed])
43         AC_MSG_ERROR(Cannot find ocamlopt.)
44 fi
45 AC_SUBST([OCAMLOPT])
46
47 #check ocamldep
48 AC_MSG_CHECKING([for $OCAMLDEP])
49 $OCAMLDEP >/dev/null 2>&1
50 if test $? ; then
51         AC_MSG_RESULT([ok])
52 else
53         AC_MSG_RESULT([failed])
54         AC_MSG_ERROR(Cannot find ocamldep.)
55 fi
56 AC_SUBST([OCAMLDEP])
57
58 #ocaml version
59 OCAMLVERSION=$($OCAMLC -version)
60 AC_MSG_CHECKING([ocaml version])
61 AC_MSG_RESULT([$OCAMLVERSION])
62
63 case "$OCAMLVERSION" in
64      3.12.*) ;; 4.*) ;;
65      *) AC_MSG_ERROR([OCaml $OCAMLVERSION is too old])
66      ;;
67 esac
68
69 AC_SUBST(OCAMLVERSION)
70
71 dnl ocamlyacc and ocamllex are not needed
72 #detect ocamlyacc
73 dnl OCAMLYACC=ocamlyacc
74 dnl AC_ARG_WITH([ocamlyacc],
75 dnl             AS_HELP_STRING([--with-ocamlyacc=PATH], [location of the ocamlyacc binary]),
76 dnl         [OCAMLYACC="$withval"])
77 dnl AC_MSG_CHECKING([for ocamlyacc ($OCAMLYACC)])
78 dnl OCAMLYACC_VERSION=$($OCAMLYACC -version 2>/dev/null || echo foo)
79 dnl case "$OCAMLYACC_VERSION" in
80 dnl      *$OCAMLVERSION)
81 dnl      AC_MSG_RESULT([ok])
82 dnl      ;;
83 dnl      foo)
84 dnl      AC_MSG_RESULT([failed])
85 dnl      AC_MSG_ERROR([Cannot find ocamlyacc])
86 dnl      ;;
87 dnl      *)
88 dnl      AC_MSG_RESULT([failed])
89 dnl      AC_MSG_ERROR([Bad ocamlyacc version])
90 dnl      ;;
91 dnl esac
92 dnl AC_SUBST([OCAMLYACC])
93
94 dnl #detect ocamllex
95 dnl OCAMLLEX=ocamllex
96 dnl AC_ARG_WITH([ocamllex],
97 dnl             AS_HELP_STRING([--with-ocamllex=PATH], [location of the ocamllex binary]),
98 dnl         [OCAMLLEX="$withval"])
99 dnl AC_MSG_CHECKING([for ocamllex ($OCAMLLEX)])
100 dnl OCAMLLEX_VERSION=$($OCAMLLEX -version 2>/dev/null || echo foo)
101 dnl case "$OCAMLLEX_VERSION" in
102 dnl      *$OCAMLVERSION)
103 dnl      AC_MSG_RESULT([ok])
104 dnl      ;;
105 dnl      foo)
106 dnl      AC_MSG_RESULT([failed])
107 dnl      AC_MSG_ERROR([Cannot find ocamllex])
108 dnl      ;;
109 dnl      *)
110 dnl      AC_MSG_RESULT([failed])
111 dnl      AC_MSG_ERROR([Bad ocamllex version])
112 dnl      ;;
113 dnl esac
114 dnl AC_SUBST([OCAMLLEX])
115
116
117 #detect camlp4
118 CAMLP4=camlp4
119 AC_ARG_WITH([camlp4],
120             AS_HELP_STRING([--with-camlp4=PATH], [location of the camlp4 binary]),
121         [CAMLP4="$withval"])
122 AC_MSG_CHECKING([for camlp4 ($CAMLP4)])
123 CAMLP4_VERSION=$($CAMLP4 -version 2>/dev/null || echo foo)
124 case "$CAMLP4_VERSION" in
125      *$OCAMLVERSION)
126      AC_MSG_RESULT([ok])
127      ;;
128      foo)
129      AC_MSG_RESULT([failed])
130      AC_MSG_ERROR([Cannot find camlp4])
131      ;;
132      *)
133      AC_MSG_RESULT([failed])
134      AC_MSG_ERROR([Bad camlp4 version])
135      ;;
136 esac
137 AC_SUBST([CAMLP4])
138
139 # platform
140 AC_MSG_CHECKING([platform])
141 OCAML_PLATFORM=$(echo 'print_endline Sys.os_type;;' | ocaml -noprompt | grep '^@<:@A-Z@:>@')
142 AC_MSG_RESULT([$OCAML_PLATFORM])
143 if test "$OCAML_PLATFORM" = "Win32"; then
144          EXE=.exe
145 else
146          EXE=
147 fi
148 AC_SUBST(OCAML_PLATFORM)
149 AC_SUBST(EXE)
150
151 # required libraries
152 AC_MSG_CHECKING([for ulex])
153 ulex_path=`$OCAMLFIND query ulex 2>/dev/null`
154 if test "$ulex_path" ; then
155    AC_MSG_RESULT([found])
156 else
157    AC_MSG_RESULT([not found])
158    AC_MSG_ERROR([Cannot find ulex.])
159 fi
160
161
162 MENHIR=menhir
163 AC_ARG_WITH([menhir],
164             AS_HELP_STRING([--with-menhir=PATH], [location of the menhir binary]),
165             [MENHIR="$withval"])
166
167 AC_MSG_CHECKING([for menhir ($MENHIR)])
168
169 MENHIR_VERSION=$($MENHIR --version 2>/dev/null || echo not_found)
170 MENHIR_VERSION=$(echo "$MENHIR_VERSION" | cut -f 2- -d ',' | cut -f 2- -d ' ')
171 case "$MENHIR_VERSION" in
172       'version 201'[[0-9]]*)
173       AC_MSG_RESULT([ok (${MENHIR_VERSION})])
174      ;;
175       not_found)
176       AC_MSG_RESULT([failed])
177       AC_MSG_ERROR([Cannot find menhir])
178      ;;
179      *)
180      AC_MSG_RESULT([failed])
181      AC_MSG_ERROR([Your version of  menhir is too old (${MENHIR_VERSION})])
182      ;;
183 esac
184 AC_SUBST([MENHIR])
185
186
187 AC_MSG_CHECKING([for expat])
188 expat_path=`$OCAMLFIND query expat 2>/dev/null`
189 if test "$expat_path" ; then
190    AC_MSG_RESULT([found])
191 else
192    AC_MSG_RESULT([not found])
193    AC_MSG_ERROR([Cannot find expat.])
194 fi
195
196 #compilation options
197 #debugging mode
198 OCAMLFLAGS=$OCAMLFLAGS
199 CAMLP4FLAGS=$CAMLP4FLAGS
200 OCAMLCFLAGS=$OCAMLCFLAGS
201 OCAMLOPTFLAGS=$OCAMLOPTFLAGS
202
203 AC_ARG_ENABLE([debug],
204               [  --enable-debug          build in debug mode],
205               [DEBUG=$enableval],
206               [DEBUG=no])
207
208 if test "x$DEBUG" = "xyes"; then
209    OCAMLFLAGS="$OCAMLFLAGS -g"
210    CAMLP4FLAGS="$CAMLP4FLAGS -DDEBUG"
211 fi
212
213 #profiling
214 AC_ARG_ENABLE([profile],
215               [  --enable-profile       compile in profiling code],
216               [PROFILE=$enableval],
217               [PROFILE=no])
218
219 if test "x$PROFILE" = "xyes"; then
220    OCAMLOPTFLAGS="$OCAMLOPTFLAGS -p"
221    OCAMLC="$OCAMLFIND ocamlcp"
222 fi
223
224 #tracing code
225 AC_ARG_ENABLE([trace],
226               [  --enable-trace         add tracing code],
227               [TRACE=$enableval],
228               [TRACE=no])
229
230 if test "x$TRACE" = "xyes"; then
231    CAMLP4FLAGS="$CAMLP4FLAGS -DHTMLTRACE"
232 fi
233
234 #inlining
235
236 AC_ARG_ENABLE([inline],
237               [  --enable-inline         set OCaml inlining level (default=100)],
238               [INLINE=$enableval],
239               [INLINE=100])
240
241 #unsafe
242 AC_ARG_ENABLE([unsafe],
243               [  --enable-unsafe         use unsafe array and string accesses],
244               [UNSAFE=1],
245               [UNSAFE=0])
246
247 if test "x$UNSAFE" = "xyes"; then
248    CAMLP4FLAGS="$CAMLP4FLAGS -unsafe"
249 fi
250
251
252 AC_PROG_CXX()
253
254
255 AC_SUBST([REMAKE], [./remake$EXE])
256 if test ! -x  "$REMAKE" -o "$REMAKE" -ot remake.cpp; then
257 AC_MSG_NOTICE([creating $REMAKE])
258 REMAKE_LOG=build_remake.log
259 case $(uname -s) in
260 MINGW*)
261         $CXX -Wall -O2 -o remake.exe remake.cpp -lws2_32 > "$REMAKE_LOG" 2>&1
262         if test $? != 0; then
263            cat "$REMAKE_LOG"; rm -f "$REMAKE_LOG";
264            AC_MSG_FAILURE([failed]);
265         fi
266         ;;
267 *)
268         $CXX -Wall -O2 -o remake remake.cpp > "$REMAKE_LOG" 2>&1
269         if test $? != 0; then
270            cat "$REMAKE_LOG"; rm -f "$REMAKE_LOG";
271            AC_MSG_FAILURE([failed]);
272         fi
273         ;;
274 esac
275 rm -f "$REMAKE_LOG";
276 else
277 AC_MSG_NOTICE([$REMAKE exists, not rebuilding])
278 fi
279
280
281 AC_SUBST(INLINE)
282 AC_SUBST(OCAMLFLAGS)
283 AC_SUBST(OCAMLCFLAGS)
284 AC_SUBST(OCAMLOPTFLAGS)
285 AC_SUBST(CAMLP4FLAGS)
286 AC_CONFIG_FILES(Remakefile)
287 AC_CONFIG_FILES(Makefile)
288 AC_OUTPUT