[project @ 2003-08-19 14:22:14 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 for mingw32 targets
649 if test x"$TargetOS_CPP" = x"mingw32"; then
650   FPTOOLS_CC_FLAG(-mno-cygwin,CC_SUPPORTS_MNO_CYGWIN)
651   SRC_CC_OPTS="$CC_SUPPORTS_MNO_CYGWIN $SRC_CC_OPTS"
652   CPPFLAGS="$CC_SUPPORTS_MNO_CYGWIN $CPPFLAGS"
653 fi
654 AC_SUBST(SRC_CC_OPTS)
655
656 dnl ** figure out how to do context diffs
657 FP_PROG_CONTEXT_DIFF
658
659 dnl ** Find find command (for Win32's benefit)
660 FPTOOLS_FIND_FIND
661
662 dnl ** figure out how to do a BSD-ish install
663 AC_PROG_INSTALL
664
665 dnl If you can run configure, you certainly have /bin/sh
666 AC_DEFINE([HAVE_BIN_SH], [1], [Define to 1 if you have /bin/sh.])
667
668 dnl ** how to invoke `ar' and `ranlib'
669 FPTOOLS_PROG_AR_AND_RANLIB
670
671 dnl ** Check to see whether ln -s works
672 AC_PROG_LN_S
673
674
675 dnl ** Find the path to sed
676 AC_PATH_PROG(SedCmd,sed)
677
678
679 dnl ** check for time command
680 AC_PATH_PROG(TimeCmd,time)
681
682 dnl ** check for tar
683 dnl   if GNU tar is named gtar, look for it first.
684 AC_PATH_PROGS(TarCmd,gtar tar,tar)
685
686 dnl ** check for gzip/compress
687 AC_PATH_PROGS(CompressCmd,gzip compress,gzip)
688
689 dnl ** check for jade/openjade & determine a working catalog
690 AC_PATH_PROGS(JadeCmd,openjade jade,jade)
691 FPTOOLS_DOCBOOK_CATALOG(Catalog, $JadeCmd, docs/fptools-both.dsl, 
692                         /etc/sgml/catalog /etc/sgml.catalog /usr/share/sgml/CATALOG.docbkdsl /usr/local/share/sgml/catalog glafp-utils/docbook/CATALOG*)
693 if test -z "$Catalog"; then
694   AC_MSG_RESULT([Warning: You will not be able to build the documentation.])
695 fi
696 case $Catalog in
697    yes) # assume it is provided by other means (e.g., SGML_CATALOG_FILES env var).
698         Catalog=
699         ;;
700    glafp*) 
701         case $HostOS_CPP in
702            mingw32)
703               Catalog=`cygpath -w $hardtop/$Catalog`
704               ;;
705            *) Catalog=$hardtop/$Catalog
706               ;;
707         esac
708    ;;
709 esac   
710 AC_SUBST(Catalog)
711
712 compress_nm=`basename $CompressCmd`
713 if test x"$compress_nm" = xgzip; then
714   CompressCmd="$CompressCmd -d"
715   CompressSuffix="gz"
716 else
717   CompressSuffix="Z"
718 fi
719 AC_SUBST(CompressCmd)
720 AC_SUBST(CompressSuffix)
721
722 dnl ** check for ghc-pkg command
723 changequote(, )dnl
724 ghc_pkg_guess=`echo $WithGhc | sed 's@ghc\([^/\\]*\)$@ghc-pkg\1@'`
725 changequote([, ])dnl
726 if $ghc_pkg_guess -l >/dev/null 2>/dev/null; then
727    GhcPkgCmd=$ghc_pkg_guess
728    AC_MSG_NOTICE([using $ghc_pkg_guess for ghc-pkg])
729 else
730    AC_PATH_PROG(GhcPkgCmd,ghc-pkg)
731 fi
732
733 AC_ARG_WITH(greencard,
734 [  --with-greencard=<greencard compiler>
735         Use a command different from 'green-card' to compile GreenCard files
736 ],
737 [
738 GreencardCmd=$withval;
739 FPTOOLS_GREENCARD(3.00)
740 ]
741 )
742
743 AC_ARG_ENABLE(src-tree-happy,
744 [  --enable-src-tree-happy
745         Build and use source tree (fptools/happy) version of Happy.
746 ],
747 [UseSrcTreeHappy=YES],
748 [UseSrcTreeHappy=NO]
749 )
750 dnl ** check for installed happy binary + version
751 dnl    (don't do it if we're booting from .hc files though.)
752 if test "$BootingFromHc" = "NO"; then
753 FPTOOLS_HAPPY
754 fi;
755
756 AC_ARG_ENABLE(src-tree-haddock,
757 [  --enable-src-tree-haddock
758         Build and use source tree (fptools/haddock) version of Haddock.
759 ],
760 [UseSrcTreeHaddock=YES],
761 [UseSrcTreeHaddock=NO]
762 )
763 dnl ** check for installed haddock
764 FPTOOLS_HADDOCK
765
766 AC_ARG_ENABLE(src-tree-alex,
767 [  --enable-src-tree-alex
768         Build and use source tree (fptools/alex) version of Alex.
769 ],
770 [UseSrcTreeAlex=YES],
771 [UseSrcTreeAlex=NO]
772 )
773 dnl ** check for installed alex binary + version
774 dnl    (don't do it if we're booting from .hc files though.)
775 if test "$BootingFromHc" = "NO"; then
776 FPTOOLS_ALEX
777 fi;
778
779 dnl --------------------------------------------------
780 dnl ### program checking section ends here ###
781 dnl --------------------------------------------------
782
783 dnl --------------------------------------------------
784 dnl * Platform header file and syscall feature tests
785 dnl ### checking the state of the local header files and syscalls ###
786
787 dnl ** check for full ANSI header (.h) files
788 AC_HEADER_STDC
789
790 dnl ** Enable large file support.  NB. do this before testing the type of
791 dnl    off_t, because it will affect the result of that test.
792 AC_SYS_LARGEFILE
793
794 dnl ** check for specific header (.h) files that we are interested in
795 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 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)
796 AC_CHECK_HEADER(unistd.h,[AC_CHECK_FUNCS(lchown)])
797
798 AC_CHECK_HEADER(readline/readline.h, [HaveReadlineReadlineH=YES], [HaveReadlineReadlineH=NO])
799 AC_CHECK_HEADER(readline/history.h, [HaveReadlineHistoryH=YES], [HaveReadlineHistoryH=NO])
800
801 if test $HaveReadlineReadlineH = YES && test $HaveReadlineHistoryH = YES ; then
802   HaveReadlineHeaders=YES
803   AC_DEFINE([HAVE_READLINE_HEADERS], [1], [Define to 1 if readline/readline.h and readline/history.h exist.])
804 else
805   HaveReadlineHeaders=NO
806   AC_DEFINE([HAVE_READLINE_HEADERS], [0], [Define to 1 if readline/readline.h and readline/history.h exist.])
807 fi
808 AC_SUBST(HaveReadlineHeaders)
809
810 dnl ** check for DOS include files
811 AC_CHECK_HEADERS(dos.h conio.h io.h std.h) 
812
813 dnl ** check for Windows include files
814 AC_CHECK_HEADERS(windows.h)
815
816 dnl ** check for OpenGL include files
817 if test $UseQuartzOpenGL = YES ; then
818   AC_CHECK_HEADERS(OpenGL/gl.h)
819 else
820   AC_CHECK_HEADERS(GL/gl.h)
821 fi
822
823 dnl ** check if it is safe to include both <time.h> and <sys/time.h>
824 AC_HEADER_TIME
825
826 dnl dynamic loading include files
827 AC_CHECK_HEADERS(dlfcn.h dl.h) 
828
829 dnl ** check for farcalloc (in bcc)
830 AC_CHECK_HEADER(alloc.h,[AC_CHECK_FUNCS(farcalloc)])
831
832 dnl ** check for valloc (in sunos, solaris, mips, amiga, next, minix, ultrix)
833 AC_CHECK_HEADER(malloc.h,[AC_CHECK_FUNCS(valloc)])
834
835 dnl ** check for POSIX regex
836 HavePosixRegex=NO
837 AC_CHECK_HEADER(regex.h,[AC_CHECK_FUNC(regcomp, [HavePosixRegex=YES])])
838 AC_SUBST(HavePosixRegex)
839
840 dnl ** how do we get a timezone name, and UTC offset ?
841 AC_STRUCT_TIMEZONE
842
843 dnl ** do we have altzone?
844 FP_DECL_ALTZONE
845
846 dnl ** does struct stat contain st_blksize?
847 AC_STRUCT_ST_BLKSIZE
848
849 dnl ** do we have long longs?
850 AC_CHECK_TYPES([long long])
851
852 dnl ** check what fields struct msghdr contains
853 FPTOOLS_MSGHDR_MSG_ACCRIGHTS
854 FPTOOLS_MSGHDR_MSG_CONTROL
855
856 dnl ** what are the sizes of various types
857 AC_CHECK_SIZEOF(char,               1)
858 AC_CHECK_SIZEOF(double,             8)
859 AC_CHECK_SIZEOF(float,              4)
860 AC_CHECK_SIZEOF(int,                4)
861 AC_CHECK_SIZEOF(long,               4)
862 if test "$ac_cv_type_long_long" = yes; then
863 AC_CHECK_SIZEOF(long long,          8)
864 fi
865 AC_CHECK_SIZEOF(short,              2)
866 AC_CHECK_SIZEOF(unsigned char,      1)
867 AC_CHECK_SIZEOF(unsigned int,       4)
868 AC_CHECK_SIZEOF(unsigned long,      4)
869 if test "$ac_cv_type_long_long" = yes; then
870 AC_CHECK_SIZEOF(unsigned long long, 8)
871 fi
872 AC_CHECK_SIZEOF(unsigned short,     2)
873 AC_CHECK_SIZEOF(void *,             4)
874
875 dnl ** what are alignment constraints on various types
876 FP_CHECK_ALIGNMENT(char)
877 FP_CHECK_ALIGNMENT(double)
878 FP_CHECK_ALIGNMENT(float)
879 FP_CHECK_ALIGNMENT(int)
880 FP_CHECK_ALIGNMENT(long)
881 if test "$ac_cv_type_long_long" = yes; then
882 FP_CHECK_ALIGNMENT(long long)
883 fi
884 FP_CHECK_ALIGNMENT(short)
885 FP_CHECK_ALIGNMENT(unsigned char)
886 FP_CHECK_ALIGNMENT(unsigned int)
887 FP_CHECK_ALIGNMENT(unsigned long)
888 if test "$ac_cv_type_long_long" = yes; then
889 FP_CHECK_ALIGNMENT(unsigned long long)
890 fi
891 FP_CHECK_ALIGNMENT(unsigned short)
892 FP_CHECK_ALIGNMENT(void *)
893
894 dnl ** map standard C types and ISO types to Haskell types
895 FPTOOLS_CHECK_HTYPE(char)
896 FPTOOLS_CHECK_HTYPE(signed char)
897 FPTOOLS_CHECK_HTYPE(unsigned char)
898 FPTOOLS_CHECK_HTYPE(short)
899 FPTOOLS_CHECK_HTYPE(unsigned short)
900 FPTOOLS_CHECK_HTYPE(int)
901 FPTOOLS_CHECK_HTYPE(unsigned int)
902 FPTOOLS_CHECK_HTYPE(long)
903 FPTOOLS_CHECK_HTYPE(unsigned long)
904 if test "$ac_cv_type_long_long" = yes; then
905 FPTOOLS_CHECK_HTYPE(long long)
906 FPTOOLS_CHECK_HTYPE(unsigned long long)
907 fi
908 FPTOOLS_CHECK_HTYPE(float)
909 FPTOOLS_CHECK_HTYPE(double)
910 FPTOOLS_CHECK_HTYPE(ptrdiff_t)
911 FPTOOLS_CHECK_HTYPE(size_t)
912 FPTOOLS_CHECK_HTYPE(wchar_t)
913 dnl Int32 is a HACK for non-ISO C compilers
914 FPTOOLS_CHECK_HTYPE(sig_atomic_t, Int32)
915 FPTOOLS_CHECK_HTYPE(clock_t)
916 FPTOOLS_CHECK_HTYPE(time_t)
917 FPTOOLS_CHECK_HTYPE(dev_t, Word32)
918 FPTOOLS_CHECK_HTYPE(ino_t)
919 FPTOOLS_CHECK_HTYPE(mode_t)
920 FPTOOLS_CHECK_HTYPE(off_t)
921 FPTOOLS_CHECK_HTYPE(pid_t)
922 FPTOOLS_CHECK_HTYPE(gid_t)
923 FPTOOLS_CHECK_HTYPE(uid_t)
924 FPTOOLS_CHECK_HTYPE(cc_t)
925 FPTOOLS_CHECK_HTYPE(speed_t)
926 FPTOOLS_CHECK_HTYPE(tcflag_t)
927 FPTOOLS_CHECK_HTYPE(blkcnt_t)
928 FPTOOLS_CHECK_HTYPE(nlink_t)
929 FPTOOLS_CHECK_HTYPE(ssize_t)
930 FPTOOLS_CHECK_HTYPE(rlim_t)
931
932 dnl ** Map OpenGL data types to Haskell types
933 if test $GhcLibsWithHOpenGL = YES ; then
934 FPTOOLS_CHECK_HTYPE(GLboolean)
935 FPTOOLS_CHECK_HTYPE(GLbyte)
936 FPTOOLS_CHECK_HTYPE(GLubyte)
937 FPTOOLS_CHECK_HTYPE(GLshort)
938 FPTOOLS_CHECK_HTYPE(GLushort)
939 FPTOOLS_CHECK_HTYPE(GLint)
940 FPTOOLS_CHECK_HTYPE(GLuint)
941 FPTOOLS_CHECK_HTYPE(GLsizei)
942 FPTOOLS_CHECK_HTYPE(GLenum)
943 FPTOOLS_CHECK_HTYPE(GLbitfield)
944 FPTOOLS_CHECK_HTYPE(GLfloat)
945 FPTOOLS_CHECK_HTYPE(GLclampf)
946 FPTOOLS_CHECK_HTYPE(GLdouble)
947 FPTOOLS_CHECK_HTYPE(GLclampd)
948 fi
949
950 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)
951
952 dnl ** can we open files in binary mode?
953 FPTOOLS_O_BINARY
954
955 dnl ** check for GetModuleFileName and WinExec (windows only)
956 dnl Old: AC_CHECK_FUNCS(WinExec GetModuleFileName)       dnl Windows
957 dnl Doesn't work because the linker can't see the functions if
958 dnl you omit the #include <windows.h>.  (I've no idea why not...)
959
960 FPTOOLS_TRY_LINK_NOWARN(,[
961 #if HAVE_WINDOWS_H
962 #include <windows.h>
963 #endif
964 main() { 
965   WinExec("",0);
966   exit(0);
967 }
968 ],
969 [have_winexec=1],
970 [have_winexec=0])
971 if test "$have_winexec" = "1"; then
972   AC_DEFINE([HAVE_WINEXEC], [1], [Define to 1 if you have the WinExec function.])
973 fi
974
975 FPTOOLS_TRY_LINK_NOWARN(,[
976 #if HAVE_WINDOWS_H
977 #include <windows.h>
978 #endif
979 main() { 
980   char* dir;
981   GetModuleFileName((HMODULE)0,dir,0);
982   exit(0);
983 }
984 ],
985 [have_getmodulefilename=1],
986 [have_getmodulefilename=0])
987 if test "$have_getmodulefilename" = "1"; then
988 AC_DEFINE([HAVE_GETMODULEFILENAME], [1], [Define to 1 if you have the GetModuleFileName function.])
989 fi
990
991 dnl ** check return type of signal handlers
992 dnl Foo: assumes we can use prototypes.
993 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
994 dnl AC_CACHE_CHECK([type of signal handlers], ac_cv_type_signal_handler,
995 dnl [AC_TRY_COMPILE([#include <sys/types.h>
996 dnl #include <signal.h>
997 dnl #ifdef signal
998 dnl #undef signal
999 dnl #endif
1000 dnl void (*signal (int, void (*)(int)))(int);
1001 dnl ],
1002 dnl [int i;], 
1003 dnl ac_cv_type_signal_handler=void_int,
1004 dnl ac_cv_type_signal_handler=int_void)])
1005 dnl if test "$ac_cv_type_signal_handler" = void_int; then
1006 dnl AC_DEFINE(VOID_INT_SIGNALS)
1007 dnl fi
1008
1009 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
1010 AC_TYPE_SIGNAL
1011 if test "$ac_cv_type_signal" = void; then
1012   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).])
1013 fi
1014
1015 dnl ** check for more functions
1016 AC_CHECK_FUNCS(strcasecmp _stricmp stricmp strcmpi)
1017 AC_CHECK_FUNCS(strcmp)
1018 AC_CHECK_FUNCS(realpath _fullpath)  
1019 AC_CHECK_FUNCS(PBHSetVolSync macsystem)  
1020 AC_CHECK_FUNCS(fgetpos fsetpos fseek ftell)
1021 AC_CHECK_FUNCS(vsnprintf _vsnprintf)
1022 AC_CHECK_FUNCS(snprintf  _snprintf )  
1023 AC_CHECK_FUNCS(popen     _popen )  
1024 AC_CHECK_FUNCS(pclose    _pclose )  
1025 AC_CHECK_FUNCS(setenv unsetenv)
1026
1027
1028 dnl ** check for specific library functions that we are interested in
1029 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)
1030
1031 dnl ** Solaris2 needs additionl flag for getpw*_r()
1032 case "$TargetPlatform" in
1033   *-solaris2*)
1034     unix_SRC_HSC2HS_OPTS="-D_POSIX_PTHREAD_SEMANTICS"
1035     AC_SUBST(unix_SRC_HSC2HS_OPTS)
1036   ;;
1037 esac
1038
1039 dnl ** check whether this machine has gmp3 installed
1040 AC_CHECK_LIB(gmp,  __gmpz_fdiv_qr, HaveLibGmp=YES; LibGmp=gmp,
1041   AC_CHECK_LIB(gmp3, __gmpz_fdiv_qr,  HaveLibGmp=YES; LibGmp=gmp3,
1042     HaveLibGmp=NO; LibGmp=not-installed))
1043 AC_SUBST(HaveLibGmp)
1044 AC_SUBST(LibGmp)
1045
1046 dnl ** (Mac OS X only: check for HaskellSupport.framework)
1047 HaveFrameworkHaskellSupport=NO
1048 if test $HostPlatform = "powerpc-apple-darwin"; then
1049  AC_MSG_CHECKING([for HaskellSupport.framework])
1050  save_libs="$LIBS"
1051  LIBS="-framework HaskellSupport"
1052  AC_TRY_LINK_FUNC(__gmpz_fdiv_qr, HaveFrameworkHaskellSupport=YES,)
1053  if test $HaveFrameworkHaskellSupport = YES; then
1054   AC_DEFINE([HAVE_FRAMEWORK_HASKELLSUPPORT], [1], [Define to 1 if the HaskellSupport.framework is installed (Mac OS X only).])
1055  fi;
1056  LIBS="$save_libs"
1057  AC_MSG_RESULT([$HaveFrameworkHaskellSupport])
1058 fi;
1059 AC_SUBST(HaveFrameworkHaskellSupport)
1060
1061 dnl ** check for mingwex library
1062 AC_CHECK_LIB(mingwex, closedir, HaveLibMingwEx=YES, HaveLibMingwEx=NO)
1063 AC_SUBST(HaveLibMingwEx)
1064
1065 if test $HaveLibMingwEx = YES ; then
1066   AC_DEFINE([HAVE_MINGWEX], [1], [Define to 1 if you have the mingwex library.])
1067 fi
1068
1069 if test "$HaveLibGmp" = "NO"; then
1070 if test "$HostArch_CPP" = "ia64"; then
1071 AC_MSG_ERROR([You need to install libgmp (the in-tree version does not work on IA64).])
1072 fi;
1073 fi;
1074
1075 dnl ** check whether this machine has BFD and liberty installed (used for debugging)
1076 dnl    the order of these tests matters: bfd needs liberty
1077 AC_CHECK_LIB(iberty, xmalloc)
1078 AC_CHECK_LIB(bfd,    bfd_init)
1079
1080 dnl ** check for readline, for Hugs and hslibs' Readline
1081 dnl ncurses supersedes termcap and curses, but for compatibility,
1082 dnl we have to check for all...
1083 AC_CHECK_LIB(ncurses, tputs, HaveLibTermcap=YES; LibTermcap=ncurses,
1084   AC_CHECK_LIB(termcap, tputs, HaveLibTermcap=YES; LibTermcap=termcap,
1085     AC_CHECK_LIB(curses, tputs, HaveLibTermcap=YES; LibTermcap=curses,
1086       HaveLibTermcap=NO; LibTermcap=not-installed)))
1087
1088 if test $HaveLibTermcap = YES ; then
1089   LIBS="-l$LibTermcap $LIBS"
1090   AC_CHECK_LIB(readline, readline, HaveLibReadline=YES, HaveLibReadline=NO)
1091 fi
1092
1093 if test $HaveLibTermcap = YES && test x"$HaveLibReadline" = xYES ; then
1094   AC_DEFINE([HAVE_READLINE_LIBS], [1], [Define to 1 if readline plus any additional libs needed for it exist.])
1095   LibsReadline="readline $LibTermcap"
1096 else
1097   AC_DEFINE([HAVE_READLINE_LIBS], [0], [Define to 1 if readline plus any additional libs needed for it exist.])
1098   LibsReadline=
1099 fi
1100 AC_SUBST(LibsReadline)
1101
1102 if test "$HaveLibReadline"; then
1103   AC_CHECK_LIB(readline, rl_erase_empty_line,
1104     [AC_DEFINE([HAVE_READLINE_4], [1], [Define to 1 if readline has version >= 4.0.])],
1105     [AC_DEFINE([HAVE_READLINE_4], [0], [Define to 1 if readline has version >= 4.0.])])
1106   AC_CHECK_LIB(readline, rl_free_undo_list,
1107     [AC_DEFINE([HAVE_READLINE_4_2], [1], [Define to 1 if readline has version >= 4.2.])],
1108     [AC_DEFINE([HAVE_READLINE_4_2], [0], [Define to 1 if readline has version >= 4.2.])])
1109 else
1110   AC_DEFINE([HAVE_READLINE_4], [0], [Define to 1 if readline has version >= 4.0.])
1111   AC_DEFINE([HAVE_READLINE_4_2], [0], [Define to 1 if readline has version >= 4.2.])
1112 fi
1113
1114 dnl ** check for math library
1115 FPTOOLS_CHECK_LIBM()
1116 AC_SUBST(LIBM)
1117
1118 dnl ** check for X Window System
1119 AC_PATH_XTRA()
1120
1121 dnl ** check for OpenGL/GLUT/GLX include paths and libraries
1122 if test $GhcLibsWithHOpenGL = YES ; then
1123   if test $UseQuartzOpenGL = YES ; then
1124     dnl Take a shortcut for Mac OS X native OpenGL:
1125     dnl It's in a non-standard location, but it's always there
1126     GL_CFLAGS=
1127         GL_LIBS=
1128         GLUT_LIBS=
1129         AC_SUBST(GL_CFLAGS)
1130         AC_SUBST(GL_LIBS)
1131         AC_SUBST(GLUT_LIBS)
1132   else
1133     FPTOOLS_HAVE_OPENGL
1134   fi
1135 fi
1136
1137 dnl ################################################################
1138 dnl Check for libraries
1139 dnl ################################################################
1140
1141 dnl ** check for libdl & RTLD_NEXT
1142
1143 dnl (Mac OS X only) ... but don't check if we already have the
1144 dnl HaskellSupport.framework
1145
1146 if test $HaveFrameworkHaskellSupport = YES; then
1147     HaveLibDL=NO
1148     HaveRtldNext=NO
1149     HaveRtldLocal=YES
1150     AC_DEFINE([HAVE_RTLDLOCAL], [1], [Define to 1 if RTLD_LOCAL is available.])
1151     HaveRtldGlobal=YES
1152     AC_DEFINE([HAVE_RTLDGLOBAL], [1], [Define to 1 if RTLD_GLOBAL is available.])
1153     HaveRtldNow=YES
1154     AC_DEFINE([HAVE_RTLDNOW], [1], [Define to 1 if we can see RTLD_NOW in dlfcn.h.])
1155     AC_SUBST(HaveLibDL)
1156     AC_SUBST(HaveRtldNext)
1157     AC_SUBST(HaveRtldLocal)
1158     AC_SUBST(HaveRtldGlobal)
1159     AC_SUBST(HaveRtldNow)
1160 else
1161     AC_CHECK_LIB(dl, dlopen, 
1162         [HaveLibDL=YES
1163          AC_DEFINE([HAVE_LIBDL], [1], [Define to 1 if you need -ldl to get dlopen().])
1164          LIBS="$LIBS -ldl"], 
1165         [HaveLibDL=NO])
1166     AC_CHECK_FUNCS(dlopen)
1167     AC_SUBST(HaveLibDL)
1168
1169     dnl ** sometimes RTLD_NEXT is hidden in #ifdefs we really don't wan to set
1170     AC_MSG_CHECKING(for RTLD_NEXT from dlfcn.h)
1171     AC_EGREP_CPP(yes,
1172     [
1173      #include <dlfcn.h>
1174      #ifdef RTLD_NEXT
1175             yes
1176      #endif
1177     ], [
1178       AC_MSG_RESULT(yes)
1179       AC_DEFINE([HAVE_RTLDNEXT], [1], [Define to 1 if we can see RTLD_NEXT in dlfcn.h.])
1180       HaveRtldNext=YES
1181     ], [
1182       AC_MSG_RESULT(no)
1183       HaveRtldNext=NO
1184       ])    
1185     AC_SUBST(HaveRtldNext)
1186
1187     dnl ** RTLD_LOCAL isn't available on cygwin or openbsd
1188     AC_MSG_CHECKING(for RTLD_LOCAL from dlfcn.h)
1189     AC_EGREP_CPP(yes,
1190     [
1191      #include <dlfcn.h>
1192      #ifdef RTLD_LOCAL
1193             yes
1194      #endif
1195     ], [
1196       AC_MSG_RESULT(yes)
1197       AC_DEFINE(HAVE_RTLDLOCAL)
1198       HaveRtldLocal=YES
1199     ], [
1200       AC_MSG_RESULT(no)
1201       HaveRtldLocal=NO
1202       ])    
1203     AC_SUBST(HaveRtldLocal)
1204
1205     dnl ** RTLD_GLOBAL isn't available on openbsd
1206     AC_MSG_CHECKING(for RTLD_GLOBAL from dlfcn.h)
1207     AC_EGREP_CPP(yes,
1208     [
1209      #include <dlfcn.h>
1210      #ifdef RTLD_GLOBAL
1211             yes
1212      #endif
1213     ], [
1214       AC_MSG_RESULT(yes)
1215       AC_DEFINE(HAVE_RTLDGLOBAL)
1216       HaveRtldGlobal=YES
1217     ], [
1218       AC_MSG_RESULT(no)
1219       HaveRtldGlobal=NO
1220       ])    
1221     AC_SUBST(HaveRtldGlobal)
1222
1223     dnl ** RTLD_NOW isn't available on openbsd
1224     AC_MSG_CHECKING(for RTLD_NOW from dlfcn.h)
1225     AC_EGREP_CPP(yes,
1226     [
1227      #include <dlfcn.h>
1228      #ifdef RTLD_NOW
1229             yes
1230      #endif
1231     ], [
1232       AC_MSG_RESULT(yes)
1233       AC_DEFINE(HAVE_RTLDNOW)
1234       HaveRtldNow=YES
1235     ], [
1236       AC_MSG_RESULT(no)
1237       HaveRtldNow=NO
1238       ])    
1239     AC_SUBST(HaveRtldNow)
1240 fi
1241
1242 FPTOOLS_CHECK_LIB_NOWARN(m, atan)
1243
1244 dnl ---------- usleep ----------
1245 dnl --- stolen from guile configure ---
1246 dnl --- FIXME: /usr/include/unistd.h can't be right?
1247
1248 ### On some systems usleep has no return value.  If it does have one,
1249 ### we'd like to return it; otherwise, we'll fake it.
1250 AC_CACHE_CHECK([return type of usleep], cv_func_usleep_return_type,
1251   [AC_EGREP_HEADER(changequote(<, >)<void[      ]+usleep>changequote([, ]),
1252                    /usr/include/unistd.h,
1253                    [cv_func_usleep_return_type=void],
1254                    [cv_func_usleep_return_type=int])])
1255 case "$cv_func_usleep_return_type" in
1256   "void" )
1257     AC_DEFINE([USLEEP_RETURNS_VOID], [1], [Define if the system headers declare usleep to return void.])
1258   ;;
1259 esac
1260
1261 dnl --------------------------------------------------
1262 dnl * test for in_addr_t
1263 dnl --------------------------------------------------
1264 AC_MSG_CHECKING(for in_addr_t in netinet/in.h)
1265 AC_EGREP_HEADER(in_addr_t, netinet/in.h,
1266  [ AC_DEFINE([HAVE_IN_ADDR_T], [1], [Define to 1 if in_addr_t is available.]) AC_MSG_RESULT(yes) ],
1267  AC_MSG_RESULT(no))
1268
1269 dnl --------------------------------------------------
1270 dnl * test for Linux sendfile(2)
1271 dnl --------------------------------------------------
1272 AC_MSG_CHECKING(for sendfile in sys/sendfile.h)
1273 AC_EGREP_HEADER(sendfile, sys/sendfile.h,
1274  [ AC_DEFINE([HAVE_LINUX_SENDFILE], [1], [Define to 1 if you have a Linux sendfile(2) implementation.]) AC_MSG_RESULT(yes) ],
1275  AC_MSG_RESULT(no))
1276
1277 dnl --------------------------------------------------
1278 dnl * test for BSD sendfile(2)
1279 dnl --------------------------------------------------
1280 AC_MSG_CHECKING(for sendfile in sys/socket.h)
1281 AC_EGREP_HEADER(sendfile, sys/socket.h,
1282  [ AC_DEFINE([HAVE_BSD_SENDFILE], [1], [Define to 1 if you have a BSDish sendfile(2) implementation.]) AC_MSG_RESULT(yes) ],
1283  AC_MSG_RESULT(no))
1284
1285 dnl --------------------------------------------------
1286 dnl * test for GTK+
1287 dnl --------------------------------------------------
1288
1289 AC_PATH_PROGS(GTK_CONFIG, gtk-config gtk12-config)
1290 if test "$GTK_CONFIG" != ""; then
1291    AC_CACHE_CHECK([for version of GTK+], fptools_cv_gtk_version, [
1292         fptools_cv_gtk_version=`$GTK_CONFIG --version`
1293     ])
1294     GTK_VERSION=$fptools_cv_gtk_version
1295 else
1296     GTK_VERSION=
1297 fi
1298
1299 case $fptools_cv_gtk_version in
1300   1.[[23]].*) ;;
1301   *) AC_MSG_WARN([GTK+ not usable; need at least version 1.2])
1302      GTK_CONFIG=
1303      ;;
1304 esac
1305
1306 AC_SUBST(GTK_CONFIG)
1307 AC_SUBST(GTK_VERSION)
1308
1309 dnl --------------------------------------------------
1310 dnl * Miscellaneous feature tests
1311 dnl --------------------------------------------------
1312
1313 dnl ** can we get alloca?
1314 AC_FUNC_ALLOCA
1315
1316 dnl ** Working vfork?
1317 AC_FUNC_VFORK
1318
1319 dnl ** determine whether or not const works
1320 AC_C_CONST
1321
1322 dnl ** are we big endian?
1323 AC_C_BIGENDIAN
1324
1325 dnl ** check for leading underscores in symbol names
1326 FPTOOLS_UNDERSCORE
1327
1328 dnl ** check for ld, and whether ld has -x option
1329 AC_PATH_PROG(LdCmdRaw, ld)
1330 case $HostOS_CPP in
1331  mingw32) LdCmd=`cygpath -w ${LdCmdRaw} | sed -e 's@\\\\@/@g' `
1332            ;;
1333  *) LdCmd=${LdCmdRaw}
1334     ;;
1335 esac
1336 AC_SUBST(LdCmd)
1337 FPTOOLS_LD_X
1338
1339 AC_MSG_CHECKING([for SIGPOLL])
1340 AC_EGREP_CPP(we_have_sigpoll,
1341 [#include <signal.h>
1342 #ifdef SIGPOLL
1343 we_have_sigpoll
1344 #endif
1345 ], AC_DEFINE([HAVE_SIGPOLL], [1], [Define to 1 if you have the sigpoll() function.]) haveSIGPOLL=yes, haveSIGPOLL=no)
1346 AC_MSG_RESULT([$haveSIGPOLL])
1347
1348 AC_MSG_CHECKING([for _SC_GETGR_R_SIZE_MAX])
1349 AC_EGREP_CPP(we_have_that_sysconf_thing,
1350 [
1351 #include <unistd.h>
1352 #ifdef _SC_GETGR_R_SIZE_MAX
1353 we_have_that_sysconf_thing
1354 #endif
1355 ],
1356 [AC_MSG_RESULT([yes])
1357 AC_DEFINE([HAVE_SC_GETGR_R_SIZE_MAX], [1], [Define to 1 if <unistd.h> defines _SC_GETGR_R_SIZE_MAX.])],
1358 [AC_MSG_RESULT([no])])
1359
1360 AC_MSG_CHECKING([for _SC_GETPW_R_SIZE_MAX])
1361 AC_EGREP_CPP(we_have_that_sysconf_thing,
1362 [
1363 #include <unistd.h>
1364 #ifdef _SC_GETPW_R_SIZE_MAX
1365 we_have_that_sysconf_thing
1366 #endif
1367 ],
1368 [AC_MSG_RESULT([yes])
1369 AC_DEFINE([HAVE_SC_GETPW_R_SIZE_MAX], [1], [Define to 1 if <unistd.h> defines _SC_GETPW_R_SIZE_MAX.])],
1370 [AC_MSG_RESULT([no])])
1371
1372 AC_OUTPUT(mk/config.mk, echo timestamp > mk/stamp-h )