Update to ocaml-autoconf macros 1.1
[virt-top.git] / m4 / ocaml.m4
1 dnl autoconf macros for OCaml
2 dnl
3 dnl Copyright © 2009      Richard W.M. Jones
4 dnl Copyright © 2009      Stefano Zacchiroli
5 dnl Copyright © 2000-2005 Olivier Andrieu
6 dnl Copyright © 2000-2005 Jean-Christophe Filliâtre
7 dnl Copyright © 2000-2005 Georges Mariano
8 dnl
9 dnl For documentation, please read the ocaml.m4 man page.
10
11 AC_DEFUN([AC_PROG_OCAML],
12 [dnl
13   # checking for ocamlc
14   AC_CHECK_TOOL([OCAMLC],[ocamlc],[no])
15
16   if test "$OCAMLC" != "no"; then
17      OCAMLVERSION=`$OCAMLC -v | sed -n -e 's|.*version* *\(.*\)$|\1|p'`
18      AC_MSG_RESULT([OCaml version is $OCAMLVERSION])
19      # If OCAMLLIB is set, use it
20      if test "$OCAMLLIB" = ""; then
21         OCAMLLIB=`$OCAMLC -where 2>/dev/null || $OCAMLC -v|tail -1|cut -d ' ' -f 4`
22      else
23         AC_MSG_RESULT([OCAMLLIB previously set; preserving it.])
24      fi
25      AC_MSG_RESULT([OCaml library path is $OCAMLLIB])
26
27      AC_SUBST([OCAMLVERSION])
28      AC_SUBST([OCAMLLIB])
29
30      # checking for ocamlopt
31      AC_CHECK_TOOL([OCAMLOPT],[ocamlopt],[no])
32      OCAMLBEST=byte
33      if test "$OCAMLOPT" = "no"; then
34         AC_MSG_WARN([Cannot find ocamlopt; bytecode compilation only.])
35      else
36         TMPVERSION=`$OCAMLOPT -v | sed -n -e 's|.*version* *\(.*\)$|\1|p' `
37         if test "$TMPVERSION" != "$OCAMLVERSION" ; then
38             AC_MSG_RESULT([versions differs from ocamlc; ocamlopt discarded.])
39             OCAMLOPT=no
40         else
41             OCAMLBEST=opt
42         fi
43      fi
44
45      AC_SUBST([OCAMLBEST])
46
47      # checking for ocamlc.opt
48      AC_CHECK_TOOL([OCAMLCDOTOPT],[ocamlc.opt],[no])
49      if test "$OCAMLCDOTOPT" != "no"; then
50         TMPVERSION=`$OCAMLCDOTOPT -v | sed -n -e 's|.*version* *\(.*\)$|\1|p' `
51         if test "$TMPVERSION" != "$OCAMLVERSION" ; then
52             AC_MSG_RESULT([versions differs from ocamlc; ocamlc.opt discarded.])
53         else
54             OCAMLC=$OCAMLCDOTOPT
55         fi
56      fi
57
58      # checking for ocamlopt.opt
59      if test "$OCAMLOPT" != "no" ; then
60         AC_CHECK_TOOL([OCAMLOPTDOTOPT],[ocamlopt.opt],[no])
61         if test "$OCAMLOPTDOTOPT" != "no"; then
62            TMPVERSION=`$OCAMLOPTDOTOPT -v | sed -n -e 's|.*version* *\(.*\)$|\1|p' `
63            if test "$TMPVERSION" != "$OCAMLVERSION" ; then
64               AC_MSG_RESULT([version differs from ocamlc; ocamlopt.opt discarded.])
65            else
66               OCAMLOPT=$OCAMLOPTDOTOPT
67            fi
68         fi
69      fi
70
71      AC_SUBST([OCAMLOPT])
72   fi
73
74   AC_SUBST([OCAMLC])
75
76   # checking for ocaml toplevel
77   AC_CHECK_TOOL([OCAML],[ocaml],[no])
78
79   # checking for ocamldep
80   AC_CHECK_TOOL([OCAMLDEP],[ocamldep],[no])
81
82   # checking for ocamlmktop
83   AC_CHECK_TOOL([OCAMLMKTOP],[ocamlmktop],[no])
84
85   # checking for ocamlmklib
86   AC_CHECK_TOOL([OCAMLMKLIB],[ocamlmklib],[no])
87
88   # checking for ocamldoc
89   AC_CHECK_TOOL([OCAMLDOC],[ocamldoc],[no])
90
91   # checking for ocamlbuild
92   AC_CHECK_TOOL([OCAMLBUILD],[ocamlbuild],[no])
93 ])
94
95
96 AC_DEFUN([AC_PROG_OCAMLLEX],
97 [dnl
98   # checking for ocamllex
99   AC_CHECK_TOOL([OCAMLLEX],[ocamllex],[no])
100   if test "$OCAMLLEX" != "no"; then
101     AC_CHECK_TOOL([OCAMLLEXDOTOPT],[ocamllex.opt],[no])
102     if test "$OCAMLLEXDOTOPT" != "no"; then
103         OCAMLLEX=$OCAMLLEXDOTOPT
104     fi
105   fi
106   AC_SUBST([OCAMLLEX])
107 ])
108
109 AC_DEFUN([AC_PROG_OCAMLYACC],
110 [dnl
111   AC_CHECK_TOOL([OCAMLYACC],[ocamlyacc],[no])
112   AC_SUBST([OCAMLYACC])
113 ])
114
115
116 AC_DEFUN([AC_PROG_CAMLP4],
117 [dnl
118   AC_REQUIRE([AC_PROG_OCAML])dnl
119
120   # checking for camlp4
121   AC_CHECK_TOOL([CAMLP4],[camlp4],[no])
122   if test "$CAMLP4" != "no"; then
123      TMPVERSION=`$CAMLP4 -v 2>&1| sed -n -e 's|.*version *\(.*\)$|\1|p'`
124      if test "$TMPVERSION" != "$OCAMLVERSION" ; then
125         AC_MSG_RESULT([versions differs from ocamlc])
126         CAMLP4=no
127      fi
128   fi
129   AC_SUBST([CAMLP4])
130
131   # checking for companion tools
132   AC_CHECK_TOOL([CAMLP4BOOT],[camlp4boot],[no])
133   AC_CHECK_TOOL([CAMLP4O],[camlp4o],[no])
134   AC_CHECK_TOOL([CAMLP4OF],[camlp4of],[no])
135   AC_CHECK_TOOL([CAMLP4OOF],[camlp4oof],[no])
136   AC_CHECK_TOOL([CAMLP4ORF],[camlp4orf],[no])
137   AC_CHECK_TOOL([CAMLP4PROF],[camlp4prof],[no])
138   AC_CHECK_TOOL([CAMLP4R],[camlp4r],[no])
139   AC_CHECK_TOOL([CAMLP4RF],[camlp4rf],[no])
140   AC_SUBST([CAMLP4BOOT])
141   AC_SUBST([CAMLP4O])
142   AC_SUBST([CAMLP4OF])
143   AC_SUBST([CAMLP4OOF])
144   AC_SUBST([CAMLP4ORF])
145   AC_SUBST([CAMLP4PROF])
146   AC_SUBST([CAMLP4R])
147   AC_SUBST([CAMLP4RF])
148 ])
149
150
151 AC_DEFUN([AC_PROG_FINDLIB],
152 [dnl
153   AC_REQUIRE([AC_PROG_OCAML])dnl
154
155   # checking for ocamlfind
156   AC_CHECK_TOOL([OCAMLFIND],[ocamlfind],[no])
157   AC_SUBST([OCAMLFIND])
158 ])
159
160
161 dnl Thanks to Jim Meyering for working this next bit out for us.
162 dnl XXX We should define AS_TR_SH if it's not defined already
163 dnl (eg. for old autoconf).
164 AC_DEFUN([AC_CHECK_OCAML_PKG],
165 [dnl
166   AC_REQUIRE([AC_PROG_FINDLIB])dnl
167
168   AC_MSG_CHECKING([for OCaml findlib package $1])
169
170   unset found
171   unset pkg
172   found=no
173   for pkg in $1 $2 ; do
174     if $OCAMLFIND query $pkg >/dev/null 2>/dev/null; then
175       AC_MSG_RESULT([found])
176       AS_TR_SH([OCAML_PKG_$1])=$pkg
177       found=yes
178       break
179     fi
180   done
181   if test "$found" = "no" ; then
182     AC_MSG_RESULT([not found])
183     AS_TR_SH([OCAML_PKG_$1])=no
184   fi
185
186   AC_SUBST(AS_TR_SH([OCAML_PKG_$1]))
187 ])
188
189
190 AC_DEFUN([AC_CHECK_OCAML_MODULE],
191 [dnl
192   AC_MSG_CHECKING([for OCaml module $2])
193
194   cat > conftest.ml <<EOF
195 open $3
196 EOF
197   unset found
198   for $1 in $$1 $4 ; do
199     if $OCAMLC -c -I "$$1" conftest.ml >&5 2>&5 ; then
200       found=yes
201       break
202     fi
203   done
204
205   if test "$found" ; then
206     AC_MSG_RESULT([$$1])
207   else
208     AC_MSG_RESULT([not found])
209     $1=no
210   fi
211   AC_SUBST([$1])
212 ])
213
214
215 dnl XXX Cross-compiling
216 AC_DEFUN([AC_CHECK_OCAML_WORD_SIZE],
217 [dnl
218   AC_REQUIRE([AC_PROG_OCAML])dnl
219   AC_MSG_CHECKING([for OCaml compiler word size])
220   cat > conftest.ml <<EOF
221   print_endline (string_of_int Sys.word_size)
222   EOF
223   OCAML_WORD_SIZE=`$OCAML conftest.ml`
224   AC_MSG_RESULT([$OCAML_WORD_SIZE])
225   AC_SUBST([OCAML_WORD_SIZE])
226 ])
227
228 AC_DEFUN([AC_CHECK_OCAML_OS_TYPE],
229 [dnl
230   AC_REQUIRE([AC_PROG_OCAML])dnl
231   AC_MSG_CHECKING([OCaml Sys.os_type])
232
233   cat > conftest.ml <<EOF
234   print_string(Sys.os_type);;
235 EOF
236
237   OCAML_OS_TYPE=`$OCAML conftest.ml`
238   AC_MSG_RESULT([$OCAML_OS_TYPE])
239   AC_SUBST([OCAML_OS_TYPE])
240 ])