[project @ 2003-08-20 07:07:59 by panne]
[ghc-hetmet.git] / configure.ac
1 dnl == autoconf source for the Glasgow FP tools ==
2 dnl (run "grep '^dnl \*' configure.ac | sed -e 's/dnl / /g; s/\*\*/   +/g;'"
3 dnl  (or some such) to see the outline of this file)
4 dnl
5 #
6 # (c) The AQUA Project, Glasgow University, 1994-1998
7 #
8 # Configure script template for the Glasgow functional programming tools
9 #
10 # Process with 'autoconf' to get a working configure script.
11 #
12 # For the generated configure script, do "./configure --help" to
13 # see what flags are available. (Better yet, read the documentation!)
14 #
15
16 # First off, a distrib sanity check..
17 AC_INIT(mk/config.mk.in)
18
19 dnl * We require autoconf version 2.52
20 dnl We need 2.50 due to the use of AC_SYS_LARGEFILE and AC_MSG_NOTICE.
21 dnl We need 2.52 due to the use of AS_TR_CPP and AS_TR_SH.
22 AC_PREREQ(2.52)
23
24 dnl * Declare subdirectories that have a private configure script
25 dnl
26 dnl After the toplevel configuration is complete, the script will recurse into
27 dnl these subdirectories (the use of cache values makes repeated checks cheap)
28 dnl (We probably have to add hslibs/{OpenGL,GLUT} here later...)
29 AC_CONFIG_SUBDIRS(ghc)
30
31 # -------------------------------------------------------------------------
32 # Prepare to generate the following header files
33 #
34 #
35 AC_CONFIG_HEADER(mk/config.h)
36
37 # No, semi-sadly, we don't do `--srcdir'...
38 if test x"$srcdir" != 'x.' ; then
39     echo "This configuration does not support the \`--srcdir' option.."
40     exit 1
41 fi
42
43 dnl--------------------------------------------------------------------
44 dnl * Choose host(/target/build) platform
45 dnl--------------------------------------------------------------------
46
47 dnl Guess host/target/build platform(s) if necessary.
48 AC_CANONICAL_SYSTEM
49
50 # "$host" defaults to "$target"
51 if test "x$host" = xNONE ; then
52     host=$target
53 fi
54
55 dnl ** canonicalize platform names
56 BuildPlatform=`/bin/sh $srcdir/config.sub $build` || exit 1
57 HostPlatform=`/bin/sh $srcdir/config.sub $host` || exit 1
58 TargetPlatform=`/bin/sh $srcdir/config.sub $target` || exit 1
59
60 if test x"$TargetPlatform" != x"$HostPlatform" ; then
61     echo "GHC configuration does not support differing host/target (i.e., cross-compiling)"
62     exit 1
63 fi
64
65 exeext=''
66 #
67 # The following will be more difficult when we *are* cross-compiling.
68 # Suitable names to slam in *_CPP are in platform.h.in.
69 # We also record the architecture, vendor, and operating system (OS)
70 # separately.
71 case $HostPlatform in
72 alpha*-dec-osf[[12]]*)
73         HostPlatform=alpha-dec-osf1   # canonicalise for our purposes
74         TargetPlatform=alpha-dec-osf1 # this will work for now... (hack)
75         BuildPlatform=alpha-dec-osf1  # hack
76         HostPlatform_CPP='alpha_dec_osf1'
77         HostArch_CPP='alpha'
78         HostVendor_CPP='dec'
79         HostOS_CPP='osf1'
80         ;;
81 alpha*-dec-osf[[345]]*)
82         HostPlatform=alpha-dec-osf3   # canonicalise for our purposes
83         TargetPlatform=alpha-dec-osf3 # this will work for now... (hack)
84         BuildPlatform=alpha-dec-osf3  # hack
85         HostPlatform_CPP='alpha_dec_osf3'
86         HostArch_CPP='alpha'
87         HostVendor_CPP='dec'
88         HostOS_CPP='osf3'
89         ;;
90 alpha*-unknown-linux*)
91         HostPlatform=alpha-unknown-linux
92         TargetPlatform=alpha-unknown-linux
93         BuildPlatform=alpha-unknown-linux
94         HostPlatform_CPP='alpha_unknown_linux'
95         HostArch_CPP='alpha'
96         HostVendor_CPP='unknown'
97         HostOS_CPP='linux'
98         ;;
99 alpha*-unknown-freebsd*)
100         HostPlatform=alpha-unknown-freebsd
101         TargetPlatform=alpha-unknown-freebsd
102         BuildPlatform=alpha-unknown-freebsd
103         HostPlatform_CPP='alpha_unknown_freebsd'
104         HostArch_CPP='alpha'
105         HostVendor_CPP='unknown'
106         HostOS_CPP='freebsd'
107         ;;
108 hppa1.1-hp-hpux*)
109         HostPlatform=hppa1.1-hp-hpux  # canonicalise for our purposes (hack)
110         TargetPlatform=hppa1.1-hp-hpux
111         BuildPlatform=hppa1.1-hp-hpux
112         HostPlatform_CPP='hppa1_1_hp_hpux'
113         HostArch_CPP='hppa1_1'
114         HostVendor_CPP='hp'
115         HostOS_CPP='hpux'
116         ;;
117 i[[3456]]86-*-linuxaout*)
118         HostPlatform=i386-unknown-linuxaout   # hack again
119         TargetPlatform=i386-unknown-linuxaout
120         BuildPlatform=i386-unknown-linuxaout
121         HostPlatform_CPP='i386_unknown_linuxaout'
122         HostArch_CPP='i386'
123         HostVendor_CPP='unknown'
124         HostOS_CPP='linuxaout'
125         ;;
126 i[[3456]]86-*-linux*)
127         HostPlatform=i386-unknown-linux # hack again
128         TargetPlatform=i386-unknown-linux
129         BuildPlatform=i386-unknown-linux
130         HostPlatform_CPP='i386_unknown_linux'
131         HostArch_CPP='i386'
132         HostVendor_CPP='unknown'
133         HostOS_CPP='linux'
134         ;;
135 i[[3456]]86-*-freebsd[[3-9]]*) # FreeBSD 3.0+ uses ELF
136         HostPlatform=i386-unknown-freebsd # hack again
137         TargetPlatform=i386-unknown-freebsd
138         BuildPlatform=i386-unknown-freebsd
139         HostPlatform_CPP='i386_unknown_freebsd'
140         HostArch_CPP='i386'
141         HostVendor_CPP='unknown'
142         HostOS_CPP='freebsd'
143         ;;
144 i[[3456]]86-*-freebsd2*) # Older FreeBSDs are a.out
145         HostPlatform=i386-unknown-freebsd2 # hack again
146         TargetPlatform=i386-unknown-freebsd2
147         BuildPlatform=i386-unknown-freebsd2
148         HostPlatform_CPP='i386_unknown_freebsd2'
149         HostArch_CPP='i386'
150         HostVendor_CPP='unknown'
151         HostOS_CPP='freebsd2'
152         ;;
153 i[[3456]]86-*-netbsd*)
154         HostPlatform=i386-unknown-netbsd # hack again
155         TargetPlatform=i386-unknown-netbsd
156         BuildPlatform=i386-unknown-netbsd
157         HostPlatform_CPP='i386_unknown_netbsd'
158         HostArch_CPP='i386'
159         HostVendor_CPP='unknown'
160         HostOS_CPP='netbsd'
161         ;;
162 i[[3456]]86-*-openbsd*)
163         HostPlatform=i386-unknown-openbsd # hack again
164         TargetPlatform=i386-unknown-openbsd
165         BuildPlatform=i386-unknown-openbsd
166         HostPlatform_CPP='i386_unknown_openbsd'
167         HostArch_CPP='i386'
168         HostVendor_CPP='unknown'
169         HostOS_CPP='openbsd'
170         ;;
171 i[[3456]]86-*-solaris2*)
172         HostPlatform=i386-unknown-solaris2 # hack again
173         TargetPlatform=i386-unknown-solaris2
174         BuildPlatform=i386-unknown-solaris2
175         HostPlatform_CPP='i386_unknown_solaris2'
176         HostArch_CPP='i386'
177         HostVendor_CPP='unknown'
178         HostOS_CPP='solaris2'
179         ;;
180 i[[3456]]86-*-cygwin*)
181         HostPlatform=i386-unknown-cygwin32 # hack again
182         TargetPlatform=i386-unknown-cygwin32
183         BuildPlatform=i386-unknown-cygwin32
184         HostPlatform_CPP='i386_unknown_cygwin32'
185         HostArch_CPP='i386'
186         HostVendor_CPP='unknown'
187         HostOS_CPP='cygwin32'
188         exeext='.exe'
189         ;;
190 i[[3456]]86-*-mingw32*)
191         HostPlatform=i386-unknown-mingw32 # hack again
192         TargetPlatform=i386-unknown-mingw32
193         BuildPlatform=i386-unknown-mingw32
194         HostPlatform_CPP='i386_unknown_mingw32'
195         HostArch_CPP='i386'
196         HostVendor_CPP='unknown'
197         HostOS_CPP='mingw32'
198         exeext='.exe'
199         ;;
200 ia64-*-linux*)
201         HostPlatform=ia64-unknown-linux # hack again
202         TargetPlatform=ia64-unknown-linux
203         BuildPlatform=ia64-unknown-linux
204         HostPlatform_CPP='ia64_unknown_linux'
205         HostArch_CPP='ia64'
206         HostVendor_CPP='unknown'
207         HostOS_CPP='linux'
208         ;;
209 m68k-next-nextstep2)
210         HostPlatform_CPP='m68k_next_nextstep2'
211         HostArch_CPP='m68k'
212         HostVendor_CPP='next'
213         HostOS_CPP='nextstep2'
214         ;;
215 m68k-next-nextstep3)
216         HostPlatform_CPP='m68k_next_nextstep3'
217         HostArch_CPP='m68k'
218         HostVendor_CPP='next'
219         HostOS_CPP='nextstep3'
220         ;;
221 i[[3456]]86-next-nextstep3)
222         HostPlatform=i386-next-nextstep3 # hack again
223         TargetPlatform=i386-next-nextstep3
224         BuildPlatform=i386-next-nextstep3
225         HostPlatform_CPP='i386_next_nextstep3'
226         HostArch_CPP='i386'
227         HostVendor_CPP='next'
228         HostOS_CPP='nextstep3'
229         ;;
230 m68k-*-openbsd*)
231         HostPlatform=m68k-unknown-openbsd
232         TargetPlatform=m68k-unknown-openbsd
233         BuildPlatform=m68k-unknown-openbsd
234         HostPlatform_CPP='m68k_unknown_openbsd'
235         HostArch_CPP='m68k'
236         HostVendor_CPP='unknown'
237         HostOS_CPP='openbsd'
238         ;;
239 m68k-apple-netbsd*)
240         HostPlatform=m68k-apple-netbsd
241         TargetPlatform=m68k-apple-netbsd
242         BuildPlatform=m68k-apple-netbsd
243         HostPlatform_CPP='m68k_apple_netbsd'
244         HostArch_CPP='m68k'
245         HostVendor_CPP='apple'
246         HostOS_CPP='netbsd'
247         ;;
248 m68k-sun-sunos4*)
249         HostPlatform=m68k-sun-sunos4
250         TargetPlatform=m68k-sun-sunos4 #hack
251         BuildPlatform=m68k-sun-sunos4 #hack
252         HostPlatform_CPP='m68k_sun_sunos4'
253         HostArch_CPP='m68k'
254         HostVendor_CPP='sun'
255         HostOS_CPP='sunos4'
256         ;;
257 mips-dec-ultrix*)
258         HostPlatform_CPP='mips_dec_ultrix'
259         HostArch_CPP='mipsel'   # NB a little different
260         HostVendor_CPP='dec'
261         HostOS_CPP='ultrix'
262         ;;
263 mips-sgi-irix*)
264         HostPlatform=mips-sgi-irix
265         TargetPlatform=mips-sgi-irix #hack
266         BuildPlatform=mips-sgi-irix #hack
267         HostPlatform_CPP='mips_sgi_irix'
268         HostArch_CPP='mipseb'   # NB a little different
269         HostVendor_CPP='sgi'
270         HostOS_CPP='irix'
271         ;;
272 rs6000-ibm-aix*)
273         HostPlatform=rs6000-ibm-aix
274         TargetPlatform=rs6000-ibm-aix #hack
275         BuildPlatform=rs6000-ibm-aix #hack
276         HostPlatform_CPP='rs6000_ibm_aix'
277         HostArch_CPP='rs6000'
278         HostVendor_CPP='ibm'
279         HostOS_CPP='aix'
280         ;;
281 powerpc-ibm-aix*)
282         HostPlatform=powerpc-ibm-aix
283         TargetPlatform=powerpc-ibm-aix #hack
284         BuildPlatform=powerpc-ibm-aix #hack
285         HostPlatform_CPP='powerpc_ibm_aix'
286         HostArch_CPP='powerpc'
287         HostVendor_CPP='ibm'
288         HostOS_CPP='aix'
289         ;;
290 powerpc-apple-darwin*)
291         HostPlatform=powerpc-apple-darwin
292         TargetPlatform=powerpc-apple-darwin #hack
293         BuildPlatform=powerpc-apple-darwin #hack
294         HostPlatform_CPP='powerpc_apple_darwin'
295         HostArch_CPP='powerpc'
296         HostVendor_CPP='apple'
297         HostOS_CPP='darwin'
298         ;;
299 sparc-sun-sunos4*)
300         HostPlatform=sparc-sun-sunos4
301         TargetPlatform=sparc-sun-sunos4 #hack
302         BuildPlatform=sparc-sun-sunos4 #hack
303         HostPlatform_CPP='sparc_sun_sunos4'
304         HostArch_CPP='sparc'
305         HostVendor_CPP='sun'
306         HostOS_CPP='sunos4'
307         ;;
308 sparc-sun-solaris2*)
309         HostPlatform=sparc-sun-solaris2
310         TargetPlatform=sparc-sun-solaris2 #hack
311         BuildPlatform=sparc-sun-solaris2 #hack
312         HostPlatform_CPP='sparc_sun_solaris2'
313         HostArch_CPP='sparc'
314         HostVendor_CPP='sun'
315         HostOS_CPP='solaris2'
316         ;;
317 sparc*-linux*)
318         HostPlatform=sparc-unknown-linux
319         TargetPlatform=sparc-unknown-linux
320         BuildPlatform=sparc-unknown-linux
321         HostPlatform_CPP='sparc_unknown_linux'
322         HostArch_CPP='sparc'
323         HostVendor_CPP='unknown'
324         HostOS_CPP='linux'
325         ;;
326 sparc-*-openbsd*)
327         HostPlatform=sparc-unknown-openbsd
328         TargetPlatform=sparc-unknown-openbsd
329         BuildPlatform=sparc-unknown-openbsd
330         HostPlatform_CPP='sparc_unknown_openbsd'
331         HostArch_CPP='sparc'
332         HostVendor_CPP='unknown'
333         HostOS_CPP='openbsd'
334         ;;
335 *)
336         echo "Unrecognised platform: $HostPlatform"
337         exit 1
338         ;;
339 esac
340 echo "Canonicalised to: $HostPlatform"
341 test  x"$HostPlatform" != x"$TargetPlatform" && echo "Target platform set to $TargetPlatform"
342 test  x"$BuildPlatform" != x"$HostPlatform"  && echo "Build platform set to $BuildPlatform"
343
344 BuildPlatform_CPP=$HostPlatform_CPP
345 TargetPlatform_CPP=$HostPlatform_CPP
346 BuildArch_CPP=$HostArch_CPP
347 TargetArch_CPP=$HostArch_CPP
348 BuildOS_CPP=$HostOS_CPP
349 HostOS_Full=$host_os
350 TargetOS_CPP=$HostOS_CPP
351 BuildVendor_CPP=$HostVendor_CPP
352 TargetVendor_CPP=$HostVendor_CPP
353
354 dnl Cannot afford all these SUBSTs (because of braindead seds w/ 99 cmd limits)
355 dnl AC_SUBST(BuildPlatform)
356
357 AC_SUBST(HostPlatform)
358 AC_SUBST(TargetPlatform)
359 AC_SUBST(HostPlatform_CPP)
360 dnl AC_SUBST(BuildPlatform_CPP)
361 dnl AC_SUBST(TargetPlatform_CPP)
362
363 AC_SUBST(HostArch_CPP)
364 dnl AC_SUBST(BuildArch_CPP)
365 dnl AC_SUBST(TargetArch_CPP)
366
367 AC_SUBST(HostOS_CPP)
368 AC_SUBST(HostOS_Full)
369 dnl AC_SUBST(BuildOS_CPP)
370 dnl AC_SUBST(TargetOS_CPP)
371
372 AC_SUBST(HostVendor_CPP)
373 dnl AC_SUBST(BuildVendor_CPP)
374 dnl AC_SUBST(TargetVendor_CPP)
375
376 AC_SUBST(exeext)
377
378 dnl --------------------------------------------------------------
379 dnl * Calculate absolute path to build tree
380 dnl --------------------------------------------------------------
381
382 AC_MSG_CHECKING(for path to top of build tree)
383
384 hardtop=`pwd`
385
386 dnl Remove common automounter nonsense
387 dnl
388 hardtop=`echo $hardtop | sed 's|^/tmp_mnt.*\(/local/.*\)$|\1|' | sed 's|^/tmp_mnt/|/|' | sed 's|^//\(.\)/|\1:/|' `
389
390 dnl Find 'hardtop_plat', the native format for 'hardtop' (i.e., right kind of \dnl slashes on a Win32 box, but with b-slashes being escaped).
391 dnl
392 case $HostPlatform in
393   i386-unknown-mingw32 | i386-unknown-cygwin32)
394         # convert $hardtop to a path that mingw will understand too
395         cyghardtop=${hardtop}
396         hardtop=`cygpath -w ${cyghardtop} | sed -e 's@\\\\@/@g'`
397         hardtop_plat=`cygpath -w ${cyghardtop} | sed -e 's@\\\\@\\\\\\\\@g'`
398         ;;
399   *)
400         hardtop_plat=${hardtop}
401         ;;
402 esac
403 AC_SUBST(hardtop)
404 AC_SUBST(hardtop_plat)
405
406 AC_MSG_RESULT(${hardtop})
407
408 dnl --------------------------------------------------------------
409 dnl * Project specific configuration options
410 dnl --------------------------------------------------------------
411 dnl What follows is a bunch of options that can either be configured
412 dnl through command line options to the configure script or by
413 dnl supplying defns in the build tree's mk/build.mk. Having the option to
414 dnl use either is considered a Feature.
415
416 dnl ** What command to use to compile compiler sources ?
417 dnl --------------------------------------------------------------
418
419 AC_ARG_WITH(ghc,
420 [  --with-ghc=<haskell compiler>
421         Use a command different from 'ghc' to compile GHC-specific Haskell code
422             (including GHC itself).
423 ],
424 [ WithGhc="$withval" ],
425
426   if test "$GHC" = ""; then
427     AC_PATH_PROG(GHC,ghc)
428   fi
429   WithGhc=$GHC
430 ]
431 )
432 AC_SUBST(WithGhc)
433
434 AC_ARG_WITH(hc,
435 [  --with-hc=<haskell compiler>
436         Use a command different from 'ghc' to compile generic Haskell code.
437 ],
438 [WithHc="$withval"],
439 [WithHc=$WithGhc]
440 )
441 AC_SUBST(WithHc)
442
443 if test "$WithGhc" != ""; then
444   FPTOOLS_GHC_VERSION([GhcVersion], [GhcMajVersion], [GhcMinVersion], [GhcPatchLevel])dnl
445   AC_SUBST(GhcVersion)dnl
446   AC_SUBST(GhcMajVersion)dnl
447   AC_SUBST(GhcMinVersion)dnl
448   AC_SUBST(GhcPatchLevel)dnl
449 fi
450
451 AC_PATH_PROGS(NHC,nhc nhc98)
452 AC_PATH_PROG(HBC,hbc)
453
454 dnl ** Which gcc to use?
455 dnl --------------------------------------------------------------
456 AC_ARG_WITH(gcc,
457 [  --with-gcc=<gcc command>
458         Use a different command instead of 'gcc' for the GNU C compiler.
459 ],
460 [WhatGccIsCalled="$withval"
461  if test "x$HostPlatform" = "xi386-unknown-mingw32"; then
462     # Canonicalise to <drive>:/path/to/gcc
463     withval=`cygpath -w ${withval} | sed -e 's@\\\\@/@g' `
464  fi;
465  CC="$withval"],
466 [WhatGccIsCalled="gcc"]
467 )
468 AC_SUBST(WhatGccIsCalled)
469
470 dnl ** Booting from .hc files?
471 dnl --------------------------------------------------------------
472 AC_ARG_ENABLE(hc-boot,
473 [  --enable-hc-boot
474         Boot the Glasgow Haskell Compiler from intermediate .hc files.
475         (This option is mostly of interest to porters.)
476 ],
477 [BootingFromHc=YES],
478 [BootingFromHc=NO]
479 )
480 AC_SUBST(BootingFromHc)
481
482 dnl ** Booting from unregisterised .hc files?
483 dnl --------------------------------------------------------------
484 AC_ARG_ENABLE(hc-boot-unregisterised,
485 [  --enable-hc-boot-unregisterised
486         With --enable-hc-boot, treat the intermediate .hc files as
487         unregisterised rather than registerised code.
488         (This option is mostly of interest to porters.)
489 ],
490 [BootingFromUnregisterisedHc=YES],
491 [BootingFromUnregisterisedHc=NO]
492 )
493 AC_SUBST(BootingFromUnregisterisedHc)
494
495 if test "$BootingFromHc" = "NO"; then
496 if test "$BootingFromUnregisterisedHc" = "YES"; then
497 AC_MSG_ERROR([--enable-hc-boot-unregisterised requires --enable-hc-boot.])
498 fi;
499 fi;
500
501 dnl ** Must have GHC to build GHC, unless --enable-hc-boot is on
502 if test "$BootingFromHc" = "NO" -a "$WithGhc" = "" -a -d "$srcdir/ghc"; then
503 AC_MSG_ERROR([GHC is required unless bootstrapping from .hc files.])
504 fi;
505
506 dnl ** Enable multi-thread friendly RTS?
507 dnl --------------------------------------------------------------
508 AC_ARG_ENABLE(threaded-rts,
509 [  --enable-threaded-rts
510         Support better interop with OS threads.
511 ],
512 [ThreadedRts=YES],
513 [ThreadedRts=NO]
514 )
515 AC_SUBST(ThreadedRts)
516
517 dnl ** Enable the construction of Win32 DLLs?
518 dnl --------------------------------------------------------------
519 dnl
520 dnl [ The ability to build the RTS and libraries as separate DLLs used
521 dnl   to be supported, but isn't currently (updates to the RTS, compiler 
522 dnl   and build system would be required to bring it back again.)
523 dnl   Hence, exposing it as an option is false advertisement, so better
524 dnl   disable it to avoid confusion (but leave it commented-out rather
525 dnl   than removed in order to remind ourselves to bring back the 
526 dnl   feature at some stage.) ]
527 dnl
528 dnl AC_ARG_ENABLE(win32-dlls,
529 dnl [  --enable-win32-dlls
530 dnl         If on a Win32 platform running mingw32/cygwin, enable the
531 dnl     construction of DLLs containing ghc-compiled code.
532 dnl ],
533 dnl [
534 dnl case $HostOS_CPP in
535 dnl cygwin32) ;;
536 dnl mingw32)  ;;
537 dnl *)    echo "Unrecognised win32 platform: $HostPlatform"
538 dnl       exit 1
539 dnl       ;;
540 dnl esac
541 dnl EnableWin32DLLs=YES
542 dnl ],
543 dnl [EnableWin32DLLs=NO]
544 dnl )
545 dnl AC_SUBST(EnableWin32DLLs)
546 dnl if test x"$EnableWin32DLLs" = "xYES" ; then
547 dnl  AC_DEFINE(HAVE_WIN32_DLL_SUPPORT)
548 dnl fi
549
550 dnl ** Enable the building of the ObjectIO?
551 dnl --------------------------------------------------------------
552 AC_ARG_ENABLE(objectio,
553 [  --enable-objectio
554         Build ObjectIO, a portable GUI library for Haskell.
555 ],
556 [GhcLibsWithObjectIO=YES],
557 [GhcLibsWithObjectIO=NO]
558 )
559 AC_SUBST(GhcLibsWithObjectIO)
560
561 dnl ** Enable the building of the OpenGL/GLUT binding in hslibs?
562 dnl --------------------------------------------------------------
563 AC_ARG_ENABLE(hopengl,
564 [  --enable-hopengl
565         Build HOpenGL, a Haskell binding for OpenGL/GLUT.
566         On Mac OS X, use --enable-hopengl=x11 to use X11 instead
567         of the "native" libraries.
568 ],
569 [GhcLibsWithHOpenGL=YES],
570 [GhcLibsWithHOpenGL=NO]
571 )
572 UseQuartzOpenGL=NO
573 if test x"$TargetOS_CPP" = x"darwin"; then
574   if test x"$enable_hopengl" != x"x11"; then
575     AC_DEFINE([USE_QUARTZ_OPENGL], [1],
576               [Define to 1 if native OpenGL should be used on Mac OS X])
577     UseQuartzOpenGL=YES
578   fi
579 fi
580
581 AC_SUBST(GhcLibsWithHOpenGL)
582
583 dnl ** .NET interop support?
584 dnl --------------------------------------------------------------
585 AC_ARG_ENABLE(dotnet,
586 [  --enable-dotnet
587         Build .NET interop layer.
588 ],
589 [DotnetSupport=YES; AC_DEFINE([WANT_DOTNET_SUPPORT], [1], [Define to 1 if you want to include .NET interop support.])],
590 [DotnetSupport=NO]
591 )
592 AC_SUBST(DotnetSupport)
593
594 dnl --------------------------------------------------------------
595 dnl End of configure script option section
596 dnl --------------------------------------------------------------
597
598
599 dnl --------------------------------------------------------------
600 dnl * General configuration checks
601 dnl --------------------------------------------------------------
602
603 dnl ** does #! work?
604 AC_SYS_INTERPRETER()
605
606 dnl ** look for `perl', but only in /bin on Windows
607 case $HostOS_CPP in
608 cygwin32|mingw32)
609       AC_CHECK_PROG(PerlCmd,perl,/bin/perl,,/bin)
610       if test -z "$PerlCmd"; then
611          echo "You must install the version of Perl shipped with GHC"
612          echo "(or a compatible one) in /bin."
613          exit 1
614       fi
615    ;;
616 *)
617    AC_PATH_PROG(PerlCmd,perl)
618    if test -z "$PerlCmd"; then
619       echo "You must install perl before you can continue"
620       echo "Perhaps it is already installed, but not in your PATH?"
621       exit 1
622    else
623    FPTOOLS_CHECK_PERL_VERSION
624    fi
625    ;;
626 esac
627
628 dnl ** does #! path/to/perl work? (sometimes it's too long...)
629 FPTOOLS_SHEBANG_PERL
630
631 dnl ** check for Python
632 AC_PATH_PROG(PythonCmd,python)
633
634 dnl ** look for GCC and find out which version
635 dnl     Figure out which C compiler to use.  Gcc is preferred.
636 dnl     If gcc, make sure it's at least 2.1
637 dnl
638 AC_PROG_CC
639 FPTOOLS_HAVE_GCC
640 FPTOOLS_GCC_NEEDS_NO_OMIT_LFPTR
641
642 dnl ** figure out how to invoke cpp directly (gcc -E is no good)
643 AC_PROG_CPP
644
645 dnl ** Without optimization some INLINE trickery fails for GHCi
646 SRC_CC_OPTS="-O"
647
648 dnl ** Try to add -mno-cygwin to the C compiler options
649 FP_CHECK_FLAG([-mno-cygwin], [
650 SRC_CC_OPTS="-mno-cygwin $SRC_CC_OPTS"
651 CPPFLAGS="-mno-cygwin $CPPFLAGS"])
652 AC_SUBST(SRC_CC_OPTS)
653
654 dnl ** figure out how to do context diffs
655 FP_PROG_CONTEXT_DIFF
656
657 dnl ** Find find command (for Win32's benefit)
658 FPTOOLS_FIND_FIND
659
660 dnl ** figure out how to do a BSD-ish install
661 AC_PROG_INSTALL
662
663 dnl If you can run configure, you certainly have /bin/sh
664 AC_DEFINE([HAVE_BIN_SH], [1], [Define to 1 if you have /bin/sh.])
665
666 dnl ** how to invoke `ar' and `ranlib'
667 FPTOOLS_PROG_AR_AND_RANLIB
668
669 dnl ** Check to see whether ln -s works
670 AC_PROG_LN_S
671
672
673 dnl ** Find the path to sed
674 AC_PATH_PROG(SedCmd,sed)
675
676
677 dnl ** check for time command
678 AC_PATH_PROG(TimeCmd,time)
679
680 dnl ** check for tar
681 dnl   if GNU tar is named gtar, look for it first.
682 AC_PATH_PROGS(TarCmd,gtar tar,tar)
683
684 dnl ** check for gzip/compress
685 AC_PATH_PROGS(CompressCmd,gzip compress,gzip)
686
687 dnl ** check for jade/openjade & determine a working catalog
688 AC_PATH_PROGS(JadeCmd,openjade jade,jade)
689 FPTOOLS_DOCBOOK_CATALOG(Catalog, $JadeCmd, docs/fptools-both.dsl, 
690                         /etc/sgml/catalog /etc/sgml.catalog /usr/share/sgml/CATALOG.docbkdsl /usr/local/share/sgml/catalog glafp-utils/docbook/CATALOG*)
691 if test -z "$Catalog"; then
692   AC_MSG_RESULT([Warning: You will not be able to build the documentation.])
693 fi
694 case $Catalog in
695    yes) # assume it is provided by other means (e.g., SGML_CATALOG_FILES env var).
696         Catalog=
697         ;;
698    glafp*) 
699         case $HostOS_CPP in
700            mingw32)
701               Catalog=`cygpath -w $hardtop/$Catalog`
702               ;;
703            *) Catalog=$hardtop/$Catalog
704               ;;
705         esac
706    ;;
707 esac   
708 AC_SUBST(Catalog)
709
710 compress_nm=`basename $CompressCmd`
711 if test x"$compress_nm" = xgzip; then
712   CompressCmd="$CompressCmd -d"
713   CompressSuffix="gz"
714 else
715   CompressSuffix="Z"
716 fi
717 AC_SUBST(CompressCmd)
718 AC_SUBST(CompressSuffix)
719
720 dnl ** check for ghc-pkg command
721 changequote(, )dnl
722 ghc_pkg_guess=`echo $WithGhc | sed 's@ghc\([^/\\]*\)$@ghc-pkg\1@'`
723 changequote([, ])dnl
724 if $ghc_pkg_guess -l >/dev/null 2>/dev/null; then
725    GhcPkgCmd=$ghc_pkg_guess
726    AC_MSG_NOTICE([using $ghc_pkg_guess for ghc-pkg])
727 else
728    AC_PATH_PROG(GhcPkgCmd,ghc-pkg)
729 fi
730
731 AC_ARG_WITH(greencard,
732 [  --with-greencard=<greencard compiler>
733         Use a command different from 'green-card' to compile GreenCard files
734 ],
735 [
736 GreencardCmd=$withval;
737 FPTOOLS_GREENCARD(3.00)
738 ]
739 )
740
741 AC_ARG_ENABLE(src-tree-happy,
742 [  --enable-src-tree-happy
743         Build and use source tree (fptools/happy) version of Happy.
744 ],
745 [UseSrcTreeHappy=YES],
746 [UseSrcTreeHappy=NO]
747 )
748 dnl ** check for installed happy binary + version
749 dnl    (don't do it if we're booting from .hc files though.)
750 if test "$BootingFromHc" = "NO"; then
751 FPTOOLS_HAPPY
752 fi;
753
754 AC_ARG_ENABLE(src-tree-haddock,
755 [  --enable-src-tree-haddock
756         Build and use source tree (fptools/haddock) version of Haddock.
757 ],
758 [UseSrcTreeHaddock=YES],
759 [UseSrcTreeHaddock=NO]
760 )
761 dnl ** check for installed haddock
762 FPTOOLS_HADDOCK
763
764 AC_ARG_ENABLE(src-tree-alex,
765 [  --enable-src-tree-alex
766         Build and use source tree (fptools/alex) version of Alex.
767 ],
768 [UseSrcTreeAlex=YES],
769 [UseSrcTreeAlex=NO]
770 )
771 dnl ** check for installed alex binary + version
772 dnl    (don't do it if we're booting from .hc files though.)
773 if test "$BootingFromHc" = "NO"; then
774 FPTOOLS_ALEX
775 fi;
776
777 dnl --------------------------------------------------
778 dnl ### program checking section ends here ###
779 dnl --------------------------------------------------
780
781 dnl --------------------------------------------------
782 dnl * Platform header file and syscall feature tests
783 dnl ### checking the state of the local header files and syscalls ###
784
785 dnl ** check for full ANSI header (.h) files
786 AC_HEADER_STDC
787
788 dnl ** Enable large file support.  NB. do this before testing the type of
789 dnl    off_t, because it will affect the result of that test.
790 AC_SYS_LARGEFILE
791
792 dnl ** check for specific header (.h) files that we are interested in
793 AC_CHECK_HEADERS(Files.h arpa/inet.h assert.h console.h ctype.h dirent.h errno.h fcntl.h float.h ftw.h grp.h ieee754.h inttypes.h limits.h locale.h malloc.h memory.h nlist.h pascal.h pwd.h sgtty.h siginfo.h signal.h stat.h stdint.h stdlib.h stddef.h stdarg.h string.h sys/fault.h sys/file.h sys/ioctl.h sys/limits.h sys/mman.h sys/param.h sys/procfs.h sys/resource.h sys/signal.h sys/socket.h netdb.h netinet/in.h netinet/tcp.h sys/stat.h sys/syscall.h sys/time.h sys/timeb.h sys/timers.h sys/times.h sys/types.h sys/un.h sys/utsname.h sys/vadvise.h sys/wait.h termio.h termios.h time.h types.h unistd.h utime.h values.h bfd.h winsock.h pthread.h sys/uio.h)
794 AC_CHECK_HEADER(unistd.h,[AC_CHECK_FUNCS(lchown)])
795
796 AC_CHECK_HEADER(readline/readline.h, [HaveReadlineReadlineH=YES], [HaveReadlineReadlineH=NO])
797 AC_CHECK_HEADER(readline/history.h, [HaveReadlineHistoryH=YES], [HaveReadlineHistoryH=NO])
798
799 if test $HaveReadlineReadlineH = YES && test $HaveReadlineHistoryH = YES ; then
800   HaveReadlineHeaders=YES
801   AC_DEFINE([HAVE_READLINE_HEADERS], [1], [Define to 1 if readline/readline.h and readline/history.h exist.])
802 else
803   HaveReadlineHeaders=NO
804   AC_DEFINE([HAVE_READLINE_HEADERS], [0], [Define to 1 if readline/readline.h and readline/history.h exist.])
805 fi
806 AC_SUBST(HaveReadlineHeaders)
807
808 dnl ** check for DOS include files
809 AC_CHECK_HEADERS(dos.h conio.h io.h std.h) 
810
811 dnl ** check for Windows include files
812 AC_CHECK_HEADERS(windows.h)
813
814 dnl ** check for OpenGL include files
815 if test $UseQuartzOpenGL = YES ; then
816   AC_CHECK_HEADERS(OpenGL/gl.h)
817 else
818   AC_CHECK_HEADERS(GL/gl.h)
819 fi
820
821 dnl ** check if it is safe to include both <time.h> and <sys/time.h>
822 AC_HEADER_TIME
823
824 dnl dynamic loading include files
825 AC_CHECK_HEADERS(dlfcn.h dl.h) 
826
827 dnl ** check for farcalloc (in bcc)
828 AC_CHECK_HEADER(alloc.h,[AC_CHECK_FUNCS(farcalloc)])
829
830 dnl ** check for valloc (in sunos, solaris, mips, amiga, next, minix, ultrix)
831 AC_CHECK_HEADER(malloc.h,[AC_CHECK_FUNCS(valloc)])
832
833 dnl ** check for POSIX regex
834 HavePosixRegex=NO
835 AC_CHECK_HEADER(regex.h,[AC_CHECK_FUNC(regcomp, [HavePosixRegex=YES])])
836 AC_SUBST(HavePosixRegex)
837
838 dnl ** how do we get a timezone name, and UTC offset ?
839 AC_STRUCT_TIMEZONE
840
841 dnl ** do we have altzone?
842 FP_DECL_ALTZONE
843
844 dnl ** does struct stat contain st_blksize?
845 AC_STRUCT_ST_BLKSIZE
846
847 dnl ** do we have long longs?
848 AC_CHECK_TYPES([long long])
849
850 dnl ** check what fields struct msghdr contains
851 AC_CHECK_HEADERS([sys/types.h sys/socket.h sys/uio.h])
852 AC_CHECK_MEMBERS([struct msghdr.msg_control, struct msghdr.msg_accrights], [], [], [#if HAVE_SYS_TYPES_H
853 # include <sys/types.h>
854 #endif
855 #if HAVE_SYS_SOCKET_H
856 # include <sys/socket.h>
857 #endif
858 #if HAVE_SYS_UIO_H
859 # include <sys/uio.h>
860 #endif])
861
862 dnl ** what are the sizes of various types
863 AC_CHECK_SIZEOF(char,               1)
864 AC_CHECK_SIZEOF(double,             8)
865 AC_CHECK_SIZEOF(float,              4)
866 AC_CHECK_SIZEOF(int,                4)
867 AC_CHECK_SIZEOF(long,               4)
868 if test "$ac_cv_type_long_long" = yes; then
869 AC_CHECK_SIZEOF(long long,          8)
870 fi
871 AC_CHECK_SIZEOF(short,              2)
872 AC_CHECK_SIZEOF(unsigned char,      1)
873 AC_CHECK_SIZEOF(unsigned int,       4)
874 AC_CHECK_SIZEOF(unsigned long,      4)
875 if test "$ac_cv_type_long_long" = yes; then
876 AC_CHECK_SIZEOF(unsigned long long, 8)
877 fi
878 AC_CHECK_SIZEOF(unsigned short,     2)
879 AC_CHECK_SIZEOF(void *,             4)
880
881 dnl ** what are alignment constraints on various types
882 FP_CHECK_ALIGNMENT(char)
883 FP_CHECK_ALIGNMENT(double)
884 FP_CHECK_ALIGNMENT(float)
885 FP_CHECK_ALIGNMENT(int)
886 FP_CHECK_ALIGNMENT(long)
887 if test "$ac_cv_type_long_long" = yes; then
888 FP_CHECK_ALIGNMENT(long long)
889 fi
890 FP_CHECK_ALIGNMENT(short)
891 FP_CHECK_ALIGNMENT(unsigned char)
892 FP_CHECK_ALIGNMENT(unsigned int)
893 FP_CHECK_ALIGNMENT(unsigned long)
894 if test "$ac_cv_type_long_long" = yes; then
895 FP_CHECK_ALIGNMENT(unsigned long long)
896 fi
897 FP_CHECK_ALIGNMENT(unsigned short)
898 FP_CHECK_ALIGNMENT(void *)
899
900 dnl ** map standard C types and ISO types to Haskell types
901 FPTOOLS_CHECK_HTYPE(char)
902 FPTOOLS_CHECK_HTYPE(signed char)
903 FPTOOLS_CHECK_HTYPE(unsigned char)
904 FPTOOLS_CHECK_HTYPE(short)
905 FPTOOLS_CHECK_HTYPE(unsigned short)
906 FPTOOLS_CHECK_HTYPE(int)
907 FPTOOLS_CHECK_HTYPE(unsigned int)
908 FPTOOLS_CHECK_HTYPE(long)
909 FPTOOLS_CHECK_HTYPE(unsigned long)
910 if test "$ac_cv_type_long_long" = yes; then
911 FPTOOLS_CHECK_HTYPE(long long)
912 FPTOOLS_CHECK_HTYPE(unsigned long long)
913 fi
914 FPTOOLS_CHECK_HTYPE(float)
915 FPTOOLS_CHECK_HTYPE(double)
916 FPTOOLS_CHECK_HTYPE(ptrdiff_t)
917 FPTOOLS_CHECK_HTYPE(size_t)
918 FPTOOLS_CHECK_HTYPE(wchar_t)
919 dnl Int32 is a HACK for non-ISO C compilers
920 FPTOOLS_CHECK_HTYPE(sig_atomic_t, Int32)
921 FPTOOLS_CHECK_HTYPE(clock_t)
922 FPTOOLS_CHECK_HTYPE(time_t)
923 FPTOOLS_CHECK_HTYPE(dev_t, Word32)
924 FPTOOLS_CHECK_HTYPE(ino_t)
925 FPTOOLS_CHECK_HTYPE(mode_t)
926 FPTOOLS_CHECK_HTYPE(off_t)
927 FPTOOLS_CHECK_HTYPE(pid_t)
928 FPTOOLS_CHECK_HTYPE(gid_t)
929 FPTOOLS_CHECK_HTYPE(uid_t)
930 FPTOOLS_CHECK_HTYPE(cc_t)
931 FPTOOLS_CHECK_HTYPE(speed_t)
932 FPTOOLS_CHECK_HTYPE(tcflag_t)
933 FPTOOLS_CHECK_HTYPE(blkcnt_t)
934 FPTOOLS_CHECK_HTYPE(nlink_t)
935 FPTOOLS_CHECK_HTYPE(ssize_t)
936 FPTOOLS_CHECK_HTYPE(rlim_t)
937
938 dnl ** Map OpenGL data types to Haskell types
939 if test $GhcLibsWithHOpenGL = YES ; then
940 FPTOOLS_CHECK_HTYPE(GLboolean)
941 FPTOOLS_CHECK_HTYPE(GLbyte)
942 FPTOOLS_CHECK_HTYPE(GLubyte)
943 FPTOOLS_CHECK_HTYPE(GLshort)
944 FPTOOLS_CHECK_HTYPE(GLushort)
945 FPTOOLS_CHECK_HTYPE(GLint)
946 FPTOOLS_CHECK_HTYPE(GLuint)
947 FPTOOLS_CHECK_HTYPE(GLsizei)
948 FPTOOLS_CHECK_HTYPE(GLenum)
949 FPTOOLS_CHECK_HTYPE(GLbitfield)
950 FPTOOLS_CHECK_HTYPE(GLfloat)
951 FPTOOLS_CHECK_HTYPE(GLclampf)
952 FPTOOLS_CHECK_HTYPE(GLdouble)
953 FPTOOLS_CHECK_HTYPE(GLclampd)
954 fi
955
956 FPTOOLS_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)
957
958 dnl ** can we open files in binary mode?
959 FPTOOLS_O_BINARY
960
961 dnl ** check for GetModuleFileName and WinExec (windows only)
962 dnl Old: AC_CHECK_FUNCS(WinExec GetModuleFileName)       dnl Windows
963 dnl Doesn't work because the linker can't see the functions if
964 dnl you omit the #include <windows.h>.  (I've no idea why not...)
965
966 FPTOOLS_TRY_LINK_NOWARN(,[
967 #if HAVE_WINDOWS_H
968 #include <windows.h>
969 #endif
970 main() { 
971   WinExec("",0);
972   exit(0);
973 }
974 ],
975 [have_winexec=1],
976 [have_winexec=0])
977 if test "$have_winexec" = "1"; then
978   AC_DEFINE([HAVE_WINEXEC], [1], [Define to 1 if you have the WinExec function.])
979 fi
980
981 FPTOOLS_TRY_LINK_NOWARN(,[
982 #if HAVE_WINDOWS_H
983 #include <windows.h>
984 #endif
985 main() { 
986   char* dir;
987   GetModuleFileName((HMODULE)0,dir,0);
988   exit(0);
989 }
990 ],
991 [have_getmodulefilename=1],
992 [have_getmodulefilename=0])
993 if test "$have_getmodulefilename" = "1"; then
994 AC_DEFINE([HAVE_GETMODULEFILENAME], [1], [Define to 1 if you have the GetModuleFileName function.])
995 fi
996
997 dnl ** check return type of signal handlers
998 dnl Foo: assumes we can use prototypes.
999 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
1000 dnl AC_CACHE_CHECK([type of signal handlers], ac_cv_type_signal_handler,
1001 dnl [AC_TRY_COMPILE([#include <sys/types.h>
1002 dnl #include <signal.h>
1003 dnl #ifdef signal
1004 dnl #undef signal
1005 dnl #endif
1006 dnl void (*signal (int, void (*)(int)))(int);
1007 dnl ],
1008 dnl [int i;], 
1009 dnl ac_cv_type_signal_handler=void_int,
1010 dnl ac_cv_type_signal_handler=int_void)])
1011 dnl if test "$ac_cv_type_signal_handler" = void_int; then
1012 dnl AC_DEFINE(VOID_INT_SIGNALS)
1013 dnl fi
1014
1015 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
1016 AC_TYPE_SIGNAL
1017 if test "$ac_cv_type_signal" = void; then
1018   AC_DEFINE([VOID_INT_SIGNALS], [1], [Define to 1 if signal handlers have type void (*)(int). Otherwise, they're assumed to have type int (*)(void).])
1019 fi
1020
1021 dnl ** check for more functions
1022 AC_CHECK_FUNCS(strcasecmp _stricmp stricmp strcmpi)
1023 AC_CHECK_FUNCS(strcmp)
1024 AC_CHECK_FUNCS(realpath _fullpath)  
1025 AC_CHECK_FUNCS(PBHSetVolSync macsystem)  
1026 AC_CHECK_FUNCS(fgetpos fsetpos fseek ftell)
1027 AC_CHECK_FUNCS(vsnprintf _vsnprintf)
1028 AC_CHECK_FUNCS(snprintf  _snprintf )  
1029 AC_CHECK_FUNCS(popen     _popen )  
1030 AC_CHECK_FUNCS(pclose    _pclose )  
1031 AC_CHECK_FUNCS(setenv unsetenv)
1032
1033
1034 dnl ** check for specific library functions that we are interested in
1035 AC_CHECK_FUNCS(access ftime getclock getpagesize getrusage gettimeofday mktime mprotect readlink setitimer stat lstat symlink sysconf timelocal times vadvise localtime_r gmtime_r readdir_r getgrgid_r getgrnam_r getpwuid_r getpwnam_r)
1036
1037 dnl ** Solaris2 needs additionl flag for getpw*_r()
1038 case "$TargetPlatform" in
1039   *-solaris2*)
1040     unix_SRC_HSC2HS_OPTS="-D_POSIX_PTHREAD_SEMANTICS"
1041     AC_SUBST(unix_SRC_HSC2HS_OPTS)
1042   ;;
1043 esac
1044
1045 dnl ** check whether this machine has gmp3 installed
1046 AC_CHECK_LIB(gmp,  __gmpz_fdiv_qr, HaveLibGmp=YES; LibGmp=gmp,
1047   AC_CHECK_LIB(gmp3, __gmpz_fdiv_qr,  HaveLibGmp=YES; LibGmp=gmp3,
1048     HaveLibGmp=NO; LibGmp=not-installed))
1049 AC_SUBST(HaveLibGmp)
1050 AC_SUBST(LibGmp)
1051
1052 dnl ** (Mac OS X only: check for HaskellSupport.framework)
1053 HaveFrameworkHaskellSupport=NO
1054 if test $HostPlatform = "powerpc-apple-darwin"; then
1055  AC_MSG_CHECKING([for HaskellSupport.framework])
1056  save_libs="$LIBS"
1057  LIBS="-framework HaskellSupport"
1058  AC_TRY_LINK_FUNC(__gmpz_fdiv_qr, HaveFrameworkHaskellSupport=YES,)
1059  if test $HaveFrameworkHaskellSupport = YES; then
1060   AC_DEFINE([HAVE_FRAMEWORK_HASKELLSUPPORT], [1], [Define to 1 if the HaskellSupport.framework is installed (Mac OS X only).])
1061  fi;
1062  LIBS="$save_libs"
1063  AC_MSG_RESULT([$HaveFrameworkHaskellSupport])
1064 fi;
1065 AC_SUBST(HaveFrameworkHaskellSupport)
1066
1067 dnl ** check for mingwex library
1068 AC_CHECK_LIB(mingwex, closedir, HaveLibMingwEx=YES, HaveLibMingwEx=NO)
1069 AC_SUBST(HaveLibMingwEx)
1070
1071 if test $HaveLibMingwEx = YES ; then
1072   AC_DEFINE([HAVE_MINGWEX], [1], [Define to 1 if you have the mingwex library.])
1073 fi
1074
1075 if test "$HaveLibGmp" = "NO"; then
1076 if test "$HostArch_CPP" = "ia64"; then
1077 AC_MSG_ERROR([You need to install libgmp (the in-tree version does not work on IA64).])
1078 fi;
1079 fi;
1080
1081 dnl ** check whether this machine has BFD and liberty installed (used for debugging)
1082 dnl    the order of these tests matters: bfd needs liberty
1083 AC_CHECK_LIB(iberty, xmalloc)
1084 AC_CHECK_LIB(bfd,    bfd_init)
1085
1086 dnl ** check for wide-char classifications
1087 AC_CHECK_HEADERS(wctype.h)
1088
1089 dnl ** check for readline, for Hugs and hslibs' Readline
1090 dnl ncurses supersedes termcap and curses, but for compatibility,
1091 dnl we have to check for all...
1092 AC_CHECK_LIB(ncurses, tputs, HaveLibTermcap=YES; LibTermcap=ncurses,
1093   AC_CHECK_LIB(termcap, tputs, HaveLibTermcap=YES; LibTermcap=termcap,
1094     AC_CHECK_LIB(curses, tputs, HaveLibTermcap=YES; LibTermcap=curses,
1095       HaveLibTermcap=NO; LibTermcap=not-installed)))
1096
1097 if test $HaveLibTermcap = YES ; then
1098   LIBS="-l$LibTermcap $LIBS"
1099   AC_CHECK_LIB(readline, readline, HaveLibReadline=YES, HaveLibReadline=NO)
1100 fi
1101
1102 if test $HaveLibTermcap = YES && test x"$HaveLibReadline" = xYES ; then
1103   AC_DEFINE([HAVE_READLINE_LIBS], [1], [Define to 1 if readline plus any additional libs needed for it exist.])
1104   LibsReadline="readline $LibTermcap"
1105 else
1106   AC_DEFINE([HAVE_READLINE_LIBS], [0], [Define to 1 if readline plus any additional libs needed for it exist.])
1107   LibsReadline=
1108 fi
1109 AC_SUBST(LibsReadline)
1110
1111 if test "$HaveLibReadline"; then
1112   AC_CHECK_LIB(readline, rl_erase_empty_line,
1113     [AC_DEFINE([HAVE_READLINE_4], [1], [Define to 1 if readline has version >= 4.0.])],
1114     [AC_DEFINE([HAVE_READLINE_4], [0], [Define to 1 if readline has version >= 4.0.])])
1115   AC_CHECK_LIB(readline, rl_free_undo_list,
1116     [AC_DEFINE([HAVE_READLINE_4_2], [1], [Define to 1 if readline has version >= 4.2.])],
1117     [AC_DEFINE([HAVE_READLINE_4_2], [0], [Define to 1 if readline has version >= 4.2.])])
1118 else
1119   AC_DEFINE([HAVE_READLINE_4], [0], [Define to 1 if readline has version >= 4.0.])
1120   AC_DEFINE([HAVE_READLINE_4_2], [0], [Define to 1 if readline has version >= 4.2.])
1121 fi
1122
1123 dnl ** check for math library
1124 FPTOOLS_CHECK_LIBM()
1125 AC_SUBST(LIBM)
1126
1127 dnl ** check for X Window System
1128 AC_PATH_XTRA()
1129
1130 dnl ** check for OpenGL/GLUT/GLX include paths and libraries
1131 if test $GhcLibsWithHOpenGL = YES ; then
1132   if test $UseQuartzOpenGL = YES ; then
1133     dnl Take a shortcut for Mac OS X native OpenGL:
1134     dnl It's in a non-standard location, but it's always there
1135     GL_CFLAGS=
1136         GL_LIBS=
1137         GLUT_LIBS=
1138         AC_SUBST(GL_CFLAGS)
1139         AC_SUBST(GL_LIBS)
1140         AC_SUBST(GLUT_LIBS)
1141   else
1142     FPTOOLS_HAVE_OPENGL
1143   fi
1144 fi
1145
1146 dnl ################################################################
1147 dnl Check for libraries
1148 dnl ################################################################
1149
1150 dnl ** check for libdl & RTLD_NEXT
1151
1152 dnl (Mac OS X only) ... but don't check if we already have the
1153 dnl HaskellSupport.framework
1154
1155 if test $HaveFrameworkHaskellSupport = YES; then
1156     HaveLibDL=NO
1157     HaveRtldNext=NO
1158     HaveRtldLocal=YES
1159     AC_DEFINE([HAVE_RTLDLOCAL], [1], [Define to 1 if RTLD_LOCAL is available.])
1160     HaveRtldGlobal=YES
1161     AC_DEFINE([HAVE_RTLDGLOBAL], [1], [Define to 1 if RTLD_GLOBAL is available.])
1162     HaveRtldNow=YES
1163     AC_DEFINE([HAVE_RTLDNOW], [1], [Define to 1 if we can see RTLD_NOW in dlfcn.h.])
1164     AC_SUBST(HaveLibDL)
1165     AC_SUBST(HaveRtldNext)
1166     AC_SUBST(HaveRtldLocal)
1167     AC_SUBST(HaveRtldGlobal)
1168     AC_SUBST(HaveRtldNow)
1169 else
1170     AC_CHECK_LIB(dl, dlopen, 
1171         [HaveLibDL=YES
1172          AC_DEFINE([HAVE_LIBDL], [1], [Define to 1 if you need -ldl to get dlopen().])
1173          LIBS="$LIBS -ldl"], 
1174         [HaveLibDL=NO])
1175     AC_CHECK_FUNCS(dlopen)
1176     AC_SUBST(HaveLibDL)
1177
1178     dnl ** sometimes RTLD_NEXT is hidden in #ifdefs we really don't wan to set
1179     AC_MSG_CHECKING(for RTLD_NEXT from dlfcn.h)
1180     AC_EGREP_CPP(yes,
1181     [
1182      #include <dlfcn.h>
1183      #ifdef RTLD_NEXT
1184             yes
1185      #endif
1186     ], [
1187       AC_MSG_RESULT(yes)
1188       AC_DEFINE([HAVE_RTLDNEXT], [1], [Define to 1 if we can see RTLD_NEXT in dlfcn.h.])
1189       HaveRtldNext=YES
1190     ], [
1191       AC_MSG_RESULT(no)
1192       HaveRtldNext=NO
1193       ])    
1194     AC_SUBST(HaveRtldNext)
1195
1196     dnl ** RTLD_LOCAL isn't available on cygwin or openbsd
1197     AC_MSG_CHECKING(for RTLD_LOCAL from dlfcn.h)
1198     AC_EGREP_CPP(yes,
1199     [
1200      #include <dlfcn.h>
1201      #ifdef RTLD_LOCAL
1202             yes
1203      #endif
1204     ], [
1205       AC_MSG_RESULT(yes)
1206       AC_DEFINE(HAVE_RTLDLOCAL)
1207       HaveRtldLocal=YES
1208     ], [
1209       AC_MSG_RESULT(no)
1210       HaveRtldLocal=NO
1211       ])    
1212     AC_SUBST(HaveRtldLocal)
1213
1214     dnl ** RTLD_GLOBAL isn't available on openbsd
1215     AC_MSG_CHECKING(for RTLD_GLOBAL from dlfcn.h)
1216     AC_EGREP_CPP(yes,
1217     [
1218      #include <dlfcn.h>
1219      #ifdef RTLD_GLOBAL
1220             yes
1221      #endif
1222     ], [
1223       AC_MSG_RESULT(yes)
1224       AC_DEFINE(HAVE_RTLDGLOBAL)
1225       HaveRtldGlobal=YES
1226     ], [
1227       AC_MSG_RESULT(no)
1228       HaveRtldGlobal=NO
1229       ])    
1230     AC_SUBST(HaveRtldGlobal)
1231
1232     dnl ** RTLD_NOW isn't available on openbsd
1233     AC_MSG_CHECKING(for RTLD_NOW from dlfcn.h)
1234     AC_EGREP_CPP(yes,
1235     [
1236      #include <dlfcn.h>
1237      #ifdef RTLD_NOW
1238             yes
1239      #endif
1240     ], [
1241       AC_MSG_RESULT(yes)
1242       AC_DEFINE(HAVE_RTLDNOW)
1243       HaveRtldNow=YES
1244     ], [
1245       AC_MSG_RESULT(no)
1246       HaveRtldNow=NO
1247       ])    
1248     AC_SUBST(HaveRtldNow)
1249 fi
1250
1251 FPTOOLS_CHECK_LIB_NOWARN(m, atan)
1252
1253 dnl ---------- usleep ----------
1254 dnl --- stolen from guile configure ---
1255 dnl --- FIXME: /usr/include/unistd.h can't be right?
1256
1257 ### On some systems usleep has no return value.  If it does have one,
1258 ### we'd like to return it; otherwise, we'll fake it.
1259 AC_CACHE_CHECK([return type of usleep], cv_func_usleep_return_type,
1260   [AC_EGREP_HEADER(changequote(<, >)<void[      ]+usleep>changequote([, ]),
1261                    /usr/include/unistd.h,
1262                    [cv_func_usleep_return_type=void],
1263                    [cv_func_usleep_return_type=int])])
1264 case "$cv_func_usleep_return_type" in
1265   "void" )
1266     AC_DEFINE([USLEEP_RETURNS_VOID], [1], [Define if the system headers declare usleep to return void.])
1267   ;;
1268 esac
1269
1270 dnl --------------------------------------------------
1271 dnl * test for in_addr_t
1272 dnl --------------------------------------------------
1273 AC_MSG_CHECKING(for in_addr_t in netinet/in.h)
1274 AC_EGREP_HEADER(in_addr_t, netinet/in.h,
1275  [ AC_DEFINE([HAVE_IN_ADDR_T], [1], [Define to 1 if in_addr_t is available.]) AC_MSG_RESULT(yes) ],
1276  AC_MSG_RESULT(no))
1277
1278 dnl --------------------------------------------------
1279 dnl * test for Linux sendfile(2)
1280 dnl --------------------------------------------------
1281 AC_MSG_CHECKING(for sendfile in sys/sendfile.h)
1282 AC_EGREP_HEADER(sendfile, sys/sendfile.h,
1283  [ AC_DEFINE([HAVE_LINUX_SENDFILE], [1], [Define to 1 if you have a Linux sendfile(2) implementation.]) AC_MSG_RESULT(yes) ],
1284  AC_MSG_RESULT(no))
1285
1286 dnl --------------------------------------------------
1287 dnl * test for BSD sendfile(2)
1288 dnl --------------------------------------------------
1289 AC_MSG_CHECKING(for sendfile in sys/socket.h)
1290 AC_EGREP_HEADER(sendfile, sys/socket.h,
1291  [ AC_DEFINE([HAVE_BSD_SENDFILE], [1], [Define to 1 if you have a BSDish sendfile(2) implementation.]) AC_MSG_RESULT(yes) ],
1292  AC_MSG_RESULT(no))
1293
1294 dnl --------------------------------------------------
1295 dnl * test for GTK+
1296 dnl --------------------------------------------------
1297
1298 AC_PATH_PROGS(GTK_CONFIG, gtk-config gtk12-config)
1299 if test "$GTK_CONFIG" != ""; then
1300    AC_CACHE_CHECK([for version of GTK+], fptools_cv_gtk_version, [
1301         fptools_cv_gtk_version=`$GTK_CONFIG --version`
1302     ])
1303     GTK_VERSION=$fptools_cv_gtk_version
1304 else
1305     GTK_VERSION=
1306 fi
1307
1308 case $fptools_cv_gtk_version in
1309   1.[[23]].*) ;;
1310   *) AC_MSG_WARN([GTK+ not usable; need at least version 1.2])
1311      GTK_CONFIG=
1312      ;;
1313 esac
1314
1315 AC_SUBST(GTK_CONFIG)
1316 AC_SUBST(GTK_VERSION)
1317
1318 dnl --------------------------------------------------
1319 dnl * Miscellaneous feature tests
1320 dnl --------------------------------------------------
1321
1322 dnl ** can we get alloca?
1323 AC_FUNC_ALLOCA
1324
1325 dnl ** Working vfork?
1326 AC_FUNC_VFORK
1327
1328 dnl ** determine whether or not const works
1329 AC_C_CONST
1330
1331 dnl ** are we big endian?
1332 AC_C_BIGENDIAN
1333
1334 dnl ** check for leading underscores in symbol names
1335 FPTOOLS_UNDERSCORE
1336
1337 dnl ** check for ld, and whether ld has -x option
1338 AC_PATH_PROG(LdCmdRaw, ld)
1339 case $HostOS_CPP in
1340  mingw32) LdCmd=`cygpath -w ${LdCmdRaw} | sed -e 's@\\\\@/@g' `
1341            ;;
1342  *) LdCmd=${LdCmdRaw}
1343     ;;
1344 esac
1345 AC_SUBST(LdCmd)
1346 FPTOOLS_LD_X
1347
1348 AC_MSG_CHECKING([for SIGPOLL])
1349 AC_EGREP_CPP(we_have_sigpoll,
1350 [#include <signal.h>
1351 #ifdef SIGPOLL
1352 we_have_sigpoll
1353 #endif
1354 ], AC_DEFINE([HAVE_SIGPOLL], [1], [Define to 1 if you have the sigpoll() function.]) haveSIGPOLL=yes, haveSIGPOLL=no)
1355 AC_MSG_RESULT([$haveSIGPOLL])
1356
1357 AC_MSG_CHECKING([for _SC_GETGR_R_SIZE_MAX])
1358 AC_EGREP_CPP(we_have_that_sysconf_thing,
1359 [
1360 #include <unistd.h>
1361 #ifdef _SC_GETGR_R_SIZE_MAX
1362 we_have_that_sysconf_thing
1363 #endif
1364 ],
1365 [AC_MSG_RESULT([yes])
1366 AC_DEFINE([HAVE_SC_GETGR_R_SIZE_MAX], [1], [Define to 1 if <unistd.h> defines _SC_GETGR_R_SIZE_MAX.])],
1367 [AC_MSG_RESULT([no])])
1368
1369 AC_MSG_CHECKING([for _SC_GETPW_R_SIZE_MAX])
1370 AC_EGREP_CPP(we_have_that_sysconf_thing,
1371 [
1372 #include <unistd.h>
1373 #ifdef _SC_GETPW_R_SIZE_MAX
1374 we_have_that_sysconf_thing
1375 #endif
1376 ],
1377 [AC_MSG_RESULT([yes])
1378 AC_DEFINE([HAVE_SC_GETPW_R_SIZE_MAX], [1], [Define to 1 if <unistd.h> defines _SC_GETPW_R_SIZE_MAX.])],
1379 [AC_MSG_RESULT([no])])
1380
1381 AC_OUTPUT(mk/config.mk, echo timestamp > mk/stamp-h )