1
dnl C->Haskell Binding Compiler
2
dnl Copyright (c) [1999..2001] Manuel M. T. Chakravarty <chak@cse.unsw.edu.au>
4
dnl This library is free software; you can redistribute it and/or
5
dnl modify it under the terms of the GNU Library General Public
6
dnl License as published by the Free Software Foundation; either
7
dnl version 2 of the License, or (at your option) any later version.
9
dnl This library is distributed in the hope that it will be useful,
10
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
11
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
dnl Library General Public License for more details.
14
dnl You should have received a copy of the GNU Library General Public
15
dnl License along with this library (COPYING.LIB); if not, write to the Free
16
dnl Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
19
dnl ######################################################################
20
dnl Process this file with autoconf to produce a configure script.
21
dnl ######################################################################
25
AC_INIT(toplevel/Version.hs)
27
dnl Select a specific Haskell compiler and/or flags.
29
[ --with-hc=HC use Haskell compiler HC],
32
[ --with-hcflags=HCFLAGS specify flags for Haskell compiler],
35
dnl Select whether to use --add-package during installation.
36
AC_ARG_ENABLE(add_package,
37
[ --enable-add-package register package during installation],
38
[ENABLE_ADD_PACKAGE=$enableval])
40
dnl Link with electric fence?
42
[ --with-efence link with efence malloc debugger],
45
dnl Check for OS and set dynamic library suffix and temporary directory.
49
if test "$CYGWIN" = "yes"; then
54
dnl Checks for programs.
57
AC_PATH_PROG(BASENAME,basename)
58
AC_PATH_PROG(EXPR,expr)
59
AC_PATH_PROG(GREP,grep)
60
AC_PATH_PROG(HEAD,head)
62
AC_PATH_PROG(MKDIR,mkdir)
65
dnl This is far from elegant, but works for extracting the plain version number
66
C2HS_VERSION=`$GREP '^versnum' toplevel/Version.hs\
67
| $SED '-e s/versnum.* "//' '-e s/"//'`
69
dnl Haskell compiler; currently only GHC 4.08 upwards and nhc98 1.14 have the
70
dnl required FFI and existentially quantified variables correctly working.
71
AC_PATH_PROGS(HC, $HC ghc nhc98)
72
if test -z "$HC"; then
73
AC_MSG_ERROR([Could not find a Haskell compiler!
74
Currently supported are ghc 4.08 upwards & nhc98 1.14.
75
** Check \"http://haskell.org\". **])
77
dnl The following can happen if a wrong --with-hc=HC option is given.
78
if test ! -x "$HC"; then
79
AC_MSG_ERROR([File not found: $HC])
82
dnl Determine basic compiler name.
83
case `$BASENAME $HC` in
85
nhc98*) hc_base=nhc98;;
88
dnl Check ghc's details.
89
if test $hc_base = ghc; then
90
dnl set GHC, as this is what the following command inspects
92
CTK_GHC_VERSION(hc_vers,hc_maj_vers,hc_min_vers,hc_pl)
93
CTK_PROG_CHECK_VERSION($hc_vers, -lt, 4.08, [
94
AC_MSG_ERROR([We need to have version 4.08 upwards of ghc!
95
** Check \"http://haskell.org\". **])])
96
dnl Determine compilation system identifier.
100
REQUIRES_HASKELL="ghc = $hc_vers"
103
dnl Check nhc98's details.
104
if test $hc_base = nhc98; then
105
AC_CACHE_CHECK([nhc98 version], ctk_cv_prog_nhc98_version, [
106
ctk_cv_prog_nhc98_version=`$HC --version 2>&1 | $HEAD -n 1 | $SED -e 's/.*v\([[0-9]]\)\.\([[0-9]]*\).*/\1.\2/'`
108
hc_maj_vers=`echo $ctk_cv_prog_nhc98_version | $SED -e 's/\([[0-9]]\)\.[[0-9]]*/\1/'`
109
hc_min_vers=`echo $ctk_cv_prog_nhc98_version | $SED -e 's/[[0-9]]\.\([[0-9]]*\)/\1/'`
110
if test $hc_maj_vers -lt 1 -o $hc_min_vers -lt 14; then
111
AC_MSG_ERROR([You need version 1.14 upwards of nhc98!
112
** Check \"http://haskell.org/\". **])
114
dnl Determine compilation system identifier.
116
HCID="nhc98 $hc_maj_vers.$hc_min_vers"
118
dnl FIXME: In the case of nhc98, do we have to require a specific version,
123
dnl Determine whether the Haskell system supports packages.
125
if test $hc_base = ghc; then
128
if test $hc_base = nhc1; then
132
dnl Determine whether we need Legacy FFI support.
134
dnl In case of Legacy FFI support, we need to determine the errno constants for
135
dnl the OS (needed by `CError').
138
if test $hc_base = ghc; then
139
if test $hc_maj_vers -eq 4 -a $hc_min_vers -eq 8; then
142
elif test $hc_base = nhc98; then
146
if test $LEGACY_FFI = yes; then
149
BEGIN_NEW_FFI="{- for systems supporting the New FFI"
152
BEGIN_LEGACY_FFI="{- for systems including the Legacy FFI"
157
dnl And nhc does it yet differently...
158
BEGIN_NHC="{- NHC does some things differently..."
162
if test $hc_base = nhc98; then
165
BEGIN_NOT_NHC="{- That's the right way, but nhc doesn't unnderstand it."
169
if test $LEGACY_FFI = yes; then
170
C2HS_CHECK_CCONSTS(E2BIG EACCES EADDRINUSE EADDRNOTAVAIL EADV EAFNOSUPPORT EAGAIN EALREADY EBADF EBADMSG EBADRPC EBUSY ECHILD ECOMM ECONNABORTED ECONNREFUSED ECONNRESET EDEADLK EDESTADDRREQ EDIRTY EDOM EDQUOT EEXIST EFAULT EFBIG EFTYPE EHOSTDOWN EHOSTUNREACH EIDRM EILSEQ EINPROGRESS EINTR EINVAL EIO EISCONN EISDIR ELOOP EMFILE EMLINK EMSGSIZE EMULTIHOP ENAMETOOLONG ENETDOWN ENETRESET ENETUNREACH ENFILE ENOBUFS ENODATA ENODEV ENOENT ENOEXEC ENOLCK ENOLINK ENOMEM ENOMSG ENONET ENOPROTOOPT ENOSPC ENOSR ENOSTR ENOSYS ENOTBLK ENOTCONN ENOTDIR ENOTEMPTY ENOTSOCK ENOTTY ENXIO EOPNOTSUPP EPERM EPFNOSUPPORT EPIPE EPROCLIM EPROCUNAVAIL EPROGMISMATCH EPROGUNAVAIL EPROTO EPROTONOSUPPORT EPROTOTYPE ERANGE EREMCHG EREMOTE EROFS ERPCMISMATCH ERREMOTE ESHUTDOWN ESOCKTNOSUPPORT ESPIPE ESRCH ESRMNT ESTALE ETIME ETIMEDOUT ETOOMANYREFS ETXTBSY EUSERS EWOULDBLOCK EXDEV)
172
dnl AC_SUBSTs can't be used in a loop as they are intepreted by autoconf.
174
AC_SUBST(CCONST_E2BIG)
175
AC_SUBST(CCONST_EACCES)
176
AC_SUBST(CCONST_EADDRINUSE)
177
AC_SUBST(CCONST_EADDRNOTAVAIL)
178
AC_SUBST(CCONST_EADV)
179
AC_SUBST(CCONST_EAFNOSUPPORT)
180
AC_SUBST(CCONST_EAGAIN)
181
AC_SUBST(CCONST_EALREADY)
182
AC_SUBST(CCONST_EBADF)
183
AC_SUBST(CCONST_EBADMSG)
184
AC_SUBST(CCONST_EBADRPC)
185
AC_SUBST(CCONST_EBUSY)
186
AC_SUBST(CCONST_ECHILD)
187
AC_SUBST(CCONST_ECOMM)
188
AC_SUBST(CCONST_ECONNABORTED)
189
AC_SUBST(CCONST_ECONNREFUSED)
190
AC_SUBST(CCONST_ECONNRESET)
191
AC_SUBST(CCONST_EDEADLK)
192
AC_SUBST(CCONST_EDESTADDRREQ)
193
AC_SUBST(CCONST_EDIRTY)
194
AC_SUBST(CCONST_EDOM)
195
AC_SUBST(CCONST_EDQUOT)
196
AC_SUBST(CCONST_EEXIST)
197
AC_SUBST(CCONST_EFAULT)
198
AC_SUBST(CCONST_EFBIG)
199
AC_SUBST(CCONST_EFTYPE)
200
AC_SUBST(CCONST_EHOSTDOWN)
201
AC_SUBST(CCONST_EHOSTUNREACH)
202
AC_SUBST(CCONST_EIDRM)
203
AC_SUBST(CCONST_EILSEQ)
204
AC_SUBST(CCONST_EINPROGRESS)
205
AC_SUBST(CCONST_EINTR)
206
AC_SUBST(CCONST_EINVAL)
208
AC_SUBST(CCONST_EISCONN)
209
AC_SUBST(CCONST_EISDIR)
210
AC_SUBST(CCONST_ELOOP)
211
AC_SUBST(CCONST_EMFILE)
212
AC_SUBST(CCONST_EMLINK)
213
AC_SUBST(CCONST_EMSGSIZE)
214
AC_SUBST(CCONST_EMULTIHOP)
215
AC_SUBST(CCONST_ENAMETOOLONG)
216
AC_SUBST(CCONST_ENETDOWN)
217
AC_SUBST(CCONST_ENETRESET)
218
AC_SUBST(CCONST_ENETUNREACH)
219
AC_SUBST(CCONST_ENFILE)
220
AC_SUBST(CCONST_ENOBUFS)
221
AC_SUBST(CCONST_ENODATA)
222
AC_SUBST(CCONST_ENODEV)
223
AC_SUBST(CCONST_ENOENT)
224
AC_SUBST(CCONST_ENOEXEC)
225
AC_SUBST(CCONST_ENOLCK)
226
AC_SUBST(CCONST_ENOLINK)
227
AC_SUBST(CCONST_ENOMEM)
228
AC_SUBST(CCONST_ENOMSG)
229
AC_SUBST(CCONST_ENONET)
230
AC_SUBST(CCONST_ENOPROTOOPT)
231
AC_SUBST(CCONST_ENOSPC)
232
AC_SUBST(CCONST_ENOSR)
233
AC_SUBST(CCONST_ENOSTR)
234
AC_SUBST(CCONST_ENOSYS)
235
AC_SUBST(CCONST_ENOTBLK)
236
AC_SUBST(CCONST_ENOTCONN)
237
AC_SUBST(CCONST_ENOTDIR)
238
AC_SUBST(CCONST_ENOTEMPTY)
239
AC_SUBST(CCONST_ENOTSOCK)
240
AC_SUBST(CCONST_ENOTTY)
241
AC_SUBST(CCONST_ENXIO)
242
AC_SUBST(CCONST_EOPNOTSUPP)
243
AC_SUBST(CCONST_EPERM)
244
AC_SUBST(CCONST_EPFNOSUPPORT)
245
AC_SUBST(CCONST_EPIPE)
246
AC_SUBST(CCONST_EPROCLIM)
247
AC_SUBST(CCONST_EPROCUNAVAIL)
248
AC_SUBST(CCONST_EPROGMISMATCH)
249
AC_SUBST(CCONST_EPROGUNAVAIL)
250
AC_SUBST(CCONST_EPROTO)
251
AC_SUBST(CCONST_EPROTONOSUPPORT)
252
AC_SUBST(CCONST_EPROTOTYPE)
253
AC_SUBST(CCONST_ERANGE)
254
AC_SUBST(CCONST_EREMCHG)
255
AC_SUBST(CCONST_EREMOTE)
256
AC_SUBST(CCONST_EROFS)
257
AC_SUBST(CCONST_ERPCMISMATCH)
258
AC_SUBST(CCONST_ERREMOTE)
259
AC_SUBST(CCONST_ESHUTDOWN)
260
AC_SUBST(CCONST_ESOCKTNOSUPPORT)
261
AC_SUBST(CCONST_ESPIPE)
262
AC_SUBST(CCONST_ESRCH)
263
AC_SUBST(CCONST_ESRMNT)
264
AC_SUBST(CCONST_ESTALE)
265
AC_SUBST(CCONST_ETIME)
266
AC_SUBST(CCONST_ETIMEDOUT)
267
AC_SUBST(CCONST_ETOOMANYREFS)
268
AC_SUBST(CCONST_ETXTBSY)
269
AC_SUBST(CCONST_EUSERS)
270
AC_SUBST(CCONST_EWOULDBLOCK)
271
AC_SUBST(CCONST_EXDEV)
274
dnl Checks for libraries.
276
dnl Info needed for the package configuration.
278
dnl The `exec_prefix=$prefix' line shouldn't be necessary, but for some reason
279
dnl `exec_prefix' is otherwise defined to be `NONE' here.
280
test "x$prefix" = xNONE && prefix=$ac_default_prefix
281
# Let make expand exec_prefix.
282
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
283
LIBDIR=`eval echo \`eval echo $libdir\``
285
dnl Needed substitutions.
288
AC_SUBST(C2HS_VERSION)
290
AC_SUBST(LIB_HCFLAGS)
294
AC_SUBST(BEGIN_LEGACY_FFI)
295
AC_SUBST(END_LEGACY_FFI)
296
AC_SUBST(BEGIN_NEW_FFI)
297
AC_SUBST(END_NEW_FFI)
300
AC_SUBST(BEGIN_NOT_NHC)
301
AC_SUBST(END_NOT_NHC)
302
AC_SUBST(ENABLE_ADD_PACKAGE)
305
AC_SUBST(REQUIRES_HASKELL)
307
dnl Write the results...
309
toplevel/C2HSConfig.hs
317
], [chmod +x c2hs-config])