[project @ 2003-08-19 16:31:40 by simonmar]
[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 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)
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 AC_CHECK_HEADERS([sys/types.h sys/socket.h sys/uio.h])
854 AC_CHECK_MEMBERS([struct msghdr.msg_control, struct msghdr.msg_accrights], [], [], [#if HAVE_SYS_TYPES_H
855 # include <sys/types.h>
856 #endif
857 #if HAVE_SYS_SOCKET_H
858 # include <sys/socket.h>
859 #endif
860 #if HAVE_SYS_UIO_H
861 # include <sys/uio.h>
862 #endif])
863
864 dnl ** what are the sizes of various types
865 AC_CHECK_SIZEOF(char,               1)
866 AC_CHECK_SIZEOF(double,             8)
867 AC_CHECK_SIZEOF(float,              4)
868 AC_CHECK_SIZEOF(int,                4)
869 AC_CHECK_SIZEOF(long,               4)
870 if test "$ac_cv_type_long_long" = yes; then
871 AC_CHECK_SIZEOF(long long,          8)
872 fi
873 AC_CHECK_SIZEOF(short,              2)
874 AC_CHECK_SIZEOF(unsigned char,      1)
875 AC_CHECK_SIZEOF(unsigned int,       4)
876 AC_CHECK_SIZEOF(unsigned long,      4)
877 if test "$ac_cv_type_long_long" = yes; then
878 AC_CHECK_SIZEOF(unsigned long long, 8)
879 fi
880 AC_CHECK_SIZEOF(unsigned short,     2)
881 AC_CHECK_SIZEOF(void *,             4)
882
883 dnl ** what are alignment constraints on various types
884 FP_CHECK_ALIGNMENT(char)
885 FP_CHECK_ALIGNMENT(double)
886 FP_CHECK_ALIGNMENT(float)
887 FP_CHECK_ALIGNMENT(int)
888 FP_CHECK_ALIGNMENT(long)
889 if test "$ac_cv_type_long_long" = yes; then
890 FP_CHECK_ALIGNMENT(long long)
891 fi
892 FP_CHECK_ALIGNMENT(short)
893 FP_CHECK_ALIGNMENT(unsigned char)
894 FP_CHECK_ALIGNMENT(unsigned int)
895 FP_CHECK_ALIGNMENT(unsigned long)
896 if test "$ac_cv_type_long_long" = yes; then
897 FP_CHECK_ALIGNMENT(unsigned long long)
898 fi
899 FP_CHECK_ALIGNMENT(unsigned short)
900 FP_CHECK_ALIGNMENT(void *)
901
902 dnl ** map standard C types and ISO types to Haskell types
903 FPTOOLS_CHECK_HTYPE(char)
904 FPTOOLS_CHECK_HTYPE(signed char)
905 FPTOOLS_CHECK_HTYPE(unsigned char)
906 FPTOOLS_CHECK_HTYPE(short)
907 FPTOOLS_CHECK_HTYPE(unsigned short)
908 FPTOOLS_CHECK_HTYPE(int)
909 FPTOOLS_CHECK_HTYPE(unsigned int)
910 FPTOOLS_CHECK_HTYPE(long)
911 FPTOOLS_CHECK_HTYPE(unsigned long)
912 if test "$ac_cv_type_long_long" = yes; then
913 FPTOOLS_CHECK_HTYPE(long long)
914 FPTOOLS_CHECK_HTYPE(unsigned long long)
915 fi
916 FPTOOLS_CHECK_HTYPE(float)
917 FPTOOLS_CHECK_HTYPE(double)
918 FPTOOLS_CHECK_HTYPE(ptrdiff_t)
919 FPTOOLS_CHECK_HTYPE(size_t)
920 FPTOOLS_CHECK_HTYPE(wchar_t)
921 dnl Int32 is a HACK for non-ISO C compilers
922 FPTOOLS_CHECK_HTYPE(sig_atomic_t, Int32)
923 FPTOOLS_CHECK_HTYPE(clock_t)
924 FPTOOLS_CHECK_HTYPE(time_t)
925 FPTOOLS_CHECK_HTYPE(dev_t, Word32)
926 FPTOOLS_CHECK_HTYPE(ino_t)
927 FPTOOLS_CHECK_HTYPE(mode_t)
928 FPTOOLS_CHECK_HTYPE(off_t)
929 FPTOOLS_CHECK_HTYPE(pid_t)
930 FPTOOLS_CHECK_HTYPE(gid_t)
931 FPTOOLS_CHECK_HTYPE(uid_t)
932 FPTOOLS_CHECK_HTYPE(cc_t)
933 FPTOOLS_CHECK_HTYPE(speed_t)
934 FPTOOLS_CHECK_HTYPE(tcflag_t)
935 FPTOOLS_CHECK_HTYPE(blkcnt_t)
936 FPTOOLS_CHECK_HTYPE(nlink_t)
937 FPTOOLS_CHECK_HTYPE(ssize_t)
938 FPTOOLS_CHECK_HTYPE(rlim_t)
939
940 dnl ** Map OpenGL data types to Haskell types
941 if test $GhcLibsWithHOpenGL = YES ; then
942 FPTOOLS_CHECK_HTYPE(GLboolean)
943 FPTOOLS_CHECK_HTYPE(GLbyte)
944 FPTOOLS_CHECK_HTYPE(GLubyte)
945 FPTOOLS_CHECK_HTYPE(GLshort)
946 FPTOOLS_CHECK_HTYPE(GLushort)
947 FPTOOLS_CHECK_HTYPE(GLint)
948 FPTOOLS_CHECK_HTYPE(GLuint)
949 FPTOOLS_CHECK_HTYPE(GLsizei)
950 FPTOOLS_CHECK_HTYPE(GLenum)
951 FPTOOLS_CHECK_HTYPE(GLbitfield)
952 FPTOOLS_CHECK_HTYPE(GLfloat)
953 FPTOOLS_CHECK_HTYPE(GLclampf)
954 FPTOOLS_CHECK_HTYPE(GLdouble)
955 FPTOOLS_CHECK_HTYPE(GLclampd)
956 fi
957
958 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)
959
960 dnl ** can we open files in binary mode?
961 FPTOOLS_O_BINARY
962
963 dnl ** check for GetModuleFileName and WinExec (windows only)
964 dnl Old: AC_CHECK_FUNCS(WinExec GetModuleFileName)       dnl Windows
965 dnl Doesn't work because the linker can't see the functions if
966 dnl you omit the #include <windows.h>.  (I've no idea why not...)
967
968 FPTOOLS_TRY_LINK_NOWARN(,[
969 #if HAVE_WINDOWS_H
970 #include <windows.h>
971 #endif
972 main() { 
973   WinExec("",0);
974   exit(0);
975 }
976 ],
977 [have_winexec=1],
978 [have_winexec=0])
979 if test "$have_winexec" = "1"; then
980   AC_DEFINE([HAVE_WINEXEC], [1], [Define to 1 if you have the WinExec function.])
981 fi
982
983 FPTOOLS_TRY_LINK_NOWARN(,[
984 #if HAVE_WINDOWS_H
985 #include <windows.h>
986 #endif
987 main() { 
988   char* dir;
989   GetModuleFileName((HMODULE)0,dir,0);
990   exit(0);
991 }
992 ],
993 [have_getmodulefilename=1],
994 [have_getmodulefilename=0])
995 if test "$have_getmodulefilename" = "1"; then
996 AC_DEFINE([HAVE_GETMODULEFILENAME], [1], [Define to 1 if you have the GetModuleFileName function.])
997 fi
998
999 dnl ** check return type of signal handlers
1000 dnl Foo: assumes we can use prototypes.
1001 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
1002 dnl AC_CACHE_CHECK([type of signal handlers], ac_cv_type_signal_handler,
1003 dnl [AC_TRY_COMPILE([#include <sys/types.h>
1004 dnl #include <signal.h>
1005 dnl #ifdef signal
1006 dnl #undef signal
1007 dnl #endif
1008 dnl void (*signal (int, void (*)(int)))(int);
1009 dnl ],
1010 dnl [int i;], 
1011 dnl ac_cv_type_signal_handler=void_int,
1012 dnl ac_cv_type_signal_handler=int_void)])
1013 dnl if test "$ac_cv_type_signal_handler" = void_int; then
1014 dnl AC_DEFINE(VOID_INT_SIGNALS)
1015 dnl fi
1016
1017 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
1018 AC_TYPE_SIGNAL
1019 if test "$ac_cv_type_signal" = void; then
1020   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).])
1021 fi
1022
1023 dnl ** check for more functions
1024 AC_CHECK_FUNCS(strcasecmp _stricmp stricmp strcmpi)
1025 AC_CHECK_FUNCS(strcmp)
1026 AC_CHECK_FUNCS(realpath _fullpath)  
1027 AC_CHECK_FUNCS(PBHSetVolSync macsystem)  
1028 AC_CHECK_FUNCS(fgetpos fsetpos fseek ftell)
1029 AC_CHECK_FUNCS(vsnprintf _vsnprintf)
1030 AC_CHECK_FUNCS(snprintf  _snprintf )  
1031 AC_CHECK_FUNCS(popen     _popen )  
1032 AC_CHECK_FUNCS(pclose    _pclose )  
1033 AC_CHECK_FUNCS(setenv unsetenv)
1034
1035
1036 dnl ** check for specific library functions that we are interested in
1037 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)
1038
1039 dnl ** Solaris2 needs additionl flag for getpw*_r()
1040 case "$TargetPlatform" in
1041   *-solaris2*)
1042     unix_SRC_HSC2HS_OPTS="-D_POSIX_PTHREAD_SEMANTICS"
1043     AC_SUBST(unix_SRC_HSC2HS_OPTS)
1044   ;;
1045 esac
1046
1047 dnl ** check whether this machine has gmp3 installed
1048 AC_CHECK_LIB(gmp,  __gmpz_fdiv_qr, HaveLibGmp=YES; LibGmp=gmp,
1049   AC_CHECK_LIB(gmp3, __gmpz_fdiv_qr,  HaveLibGmp=YES; LibGmp=gmp3,
1050     HaveLibGmp=NO; LibGmp=not-installed))
1051 AC_SUBST(HaveLibGmp)
1052 AC_SUBST(LibGmp)
1053
1054 dnl ** (Mac OS X only: check for HaskellSupport.framework)
1055 HaveFrameworkHaskellSupport=NO
1056 if test $HostPlatform = "powerpc-apple-darwin"; then
1057  AC_MSG_CHECKING([for HaskellSupport.framework])
1058  save_libs="$LIBS"
1059  LIBS="-framework HaskellSupport"
1060  AC_TRY_LINK_FUNC(__gmpz_fdiv_qr, HaveFrameworkHaskellSupport=YES,)
1061  if test $HaveFrameworkHaskellSupport = YES; then
1062   AC_DEFINE([HAVE_FRAMEWORK_HASKELLSUPPORT], [1], [Define to 1 if the HaskellSupport.framework is installed (Mac OS X only).])
1063  fi;
1064  LIBS="$save_libs"
1065  AC_MSG_RESULT([$HaveFrameworkHaskellSupport])
1066 fi;
1067 AC_SUBST(HaveFrameworkHaskellSupport)
1068
1069 dnl ** check for mingwex library
1070 AC_CHECK_LIB(mingwex, closedir, HaveLibMingwEx=YES, HaveLibMingwEx=NO)
1071 AC_SUBST(HaveLibMingwEx)
1072
1073 if test $HaveLibMingwEx = YES ; then
1074   AC_DEFINE([HAVE_MINGWEX], [1], [Define to 1 if you have the mingwex library.])
1075 fi
1076
1077 if test "$HaveLibGmp" = "NO"; then
1078 if test "$HostArch_CPP" = "ia64"; then
1079 AC_MSG_ERROR([You need to install libgmp (the in-tree version does not work on IA64).])
1080 fi;
1081 fi;
1082
1083 dnl ** check whether this machine has BFD and liberty installed (used for debugging)
1084 dnl    the order of these tests matters: bfd needs liberty
1085 AC_CHECK_LIB(iberty, xmalloc)
1086 AC_CHECK_LIB(bfd,    bfd_init)
1087
1088 dnl ** check for wide-char classifications
1089 AC_CHECK_HEADERS(wctype.h)
1090
1091 dnl ** check for readline, for Hugs and hslibs' Readline
1092 dnl ncurses supersedes termcap and curses, but for compatibility,
1093 dnl we have to check for all...
1094 AC_CHECK_LIB(ncurses, tputs, HaveLibTermcap=YES; LibTermcap=ncurses,
1095   AC_CHECK_LIB(termcap, tputs, HaveLibTermcap=YES; LibTermcap=termcap,
1096     AC_CHECK_LIB(curses, tputs, HaveLibTermcap=YES; LibTermcap=curses,
1097       HaveLibTermcap=NO; LibTermcap=not-installed)))
1098
1099 if test $HaveLibTermcap = YES ; then
1100   LIBS="-l$LibTermcap $LIBS"
1101   AC_CHECK_LIB(readline, readline, HaveLibReadline=YES, HaveLibReadline=NO)
1102 fi
1103
1104 if test $HaveLibTermcap = YES && test x"$HaveLibReadline" = xYES ; then
1105   AC_DEFINE([HAVE_READLINE_LIBS], [1], [Define to 1 if readline plus any additional libs needed for it exist.])
1106   LibsReadline="readline $LibTermcap"
1107 else
1108   AC_DEFINE([HAVE_READLINE_LIBS], [0], [Define to 1 if readline plus any additional libs needed for it exist.])
1109   LibsReadline=
1110 fi
1111 AC_SUBST(LibsReadline)
1112
1113 if test "$HaveLibReadline"; then
1114   AC_CHECK_LIB(readline, rl_erase_empty_line,
1115     [AC_DEFINE([HAVE_READLINE_4], [1], [Define to 1 if readline has version >= 4.0.])],
1116     [AC_DEFINE([HAVE_READLINE_4], [0], [Define to 1 if readline has version >= 4.0.])])
1117   AC_CHECK_LIB(readline, rl_free_undo_list,
1118     [AC_DEFINE([HAVE_READLINE_4_2], [1], [Define to 1 if readline has version >= 4.2.])],
1119     [AC_DEFINE([HAVE_READLINE_4_2], [0], [Define to 1 if readline has version >= 4.2.])])
1120 else
1121   AC_DEFINE([HAVE_READLINE_4], [0], [Define to 1 if readline has version >= 4.0.])
1122   AC_DEFINE([HAVE_READLINE_4_2], [0], [Define to 1 if readline has version >= 4.2.])
1123 fi
1124
1125 dnl ** check for math library
1126 FPTOOLS_CHECK_LIBM()
1127 AC_SUBST(LIBM)
1128
1129 dnl ** check for X Window System
1130 AC_PATH_XTRA()
1131
1132 dnl ** check for OpenGL/GLUT/GLX include paths and libraries
1133 if test $GhcLibsWithHOpenGL = YES ; then
1134   if test $UseQuartzOpenGL = YES ; then
1135     dnl Take a shortcut for Mac OS X native OpenGL:
1136     dnl It's in a non-standard location, but it's always there
1137     GL_CFLAGS=
1138         GL_LIBS=
1139         GLUT_LIBS=
1140         AC_SUBST(GL_CFLAGS)
1141         AC_SUBST(GL_LIBS)
1142         AC_SUBST(GLUT_LIBS)
1143   else
1144     FPTOOLS_HAVE_OPENGL
1145   fi
1146 fi
1147
1148 dnl ################################################################
1149 dnl Check for libraries
1150 dnl ################################################################
1151
1152 dnl ** check for libdl & RTLD_NEXT
1153
1154 dnl (Mac OS X only) ... but don't check if we already have the
1155 dnl HaskellSupport.framework
1156
1157 if test $HaveFrameworkHaskellSupport = YES; then
1158     HaveLibDL=NO
1159     HaveRtldNext=NO
1160     HaveRtldLocal=YES
1161     AC_DEFINE([HAVE_RTLDLOCAL], [1], [Define to 1 if RTLD_LOCAL is available.])
1162     HaveRtldGlobal=YES
1163     AC_DEFINE([HAVE_RTLDGLOBAL], [1], [Define to 1 if RTLD_GLOBAL is available.])
1164     HaveRtldNow=YES
1165     AC_DEFINE([HAVE_RTLDNOW], [1], [Define to 1 if we can see RTLD_NOW in dlfcn.h.])
1166     AC_SUBST(HaveLibDL)
1167     AC_SUBST(HaveRtldNext)
1168     AC_SUBST(HaveRtldLocal)
1169     AC_SUBST(HaveRtldGlobal)
1170     AC_SUBST(HaveRtldNow)
1171 else
1172     AC_CHECK_LIB(dl, dlopen, 
1173         [HaveLibDL=YES
1174          AC_DEFINE([HAVE_LIBDL], [1], [Define to 1 if you need -ldl to get dlopen().])
1175          LIBS="$LIBS -ldl"], 
1176         [HaveLibDL=NO])
1177     AC_CHECK_FUNCS(dlopen)
1178     AC_SUBST(HaveLibDL)
1179
1180     dnl ** sometimes RTLD_NEXT is hidden in #ifdefs we really don't wan to set
1181     AC_MSG_CHECKING(for RTLD_NEXT from dlfcn.h)
1182     AC_EGREP_CPP(yes,
1183     [
1184      #include <dlfcn.h>
1185      #ifdef RTLD_NEXT
1186             yes
1187      #endif
1188     ], [
1189       AC_MSG_RESULT(yes)
1190       AC_DEFINE([HAVE_RTLDNEXT], [1], [Define to 1 if we can see RTLD_NEXT in dlfcn.h.])
1191       HaveRtldNext=YES
1192     ], [
1193       AC_MSG_RESULT(no)
1194       HaveRtldNext=NO
1195       ])    
1196     AC_SUBST(HaveRtldNext)
1197
1198     dnl ** RTLD_LOCAL isn't available on cygwin or openbsd
1199     AC_MSG_CHECKING(for RTLD_LOCAL from dlfcn.h)
1200     AC_EGREP_CPP(yes,
1201     [
1202      #include <dlfcn.h>
1203      #ifdef RTLD_LOCAL
1204             yes
1205      #endif
1206     ], [
1207       AC_MSG_RESULT(yes)
1208       AC_DEFINE(HAVE_RTLDLOCAL)
1209       HaveRtldLocal=YES
1210     ], [
1211       AC_MSG_RESULT(no)
1212       HaveRtldLocal=NO
1213       ])    
1214     AC_SUBST(HaveRtldLocal)
1215
1216     dnl ** RTLD_GLOBAL isn't available on openbsd
1217     AC_MSG_CHECKING(for RTLD_GLOBAL from dlfcn.h)
1218     AC_EGREP_CPP(yes,
1219     [
1220      #include <dlfcn.h>
1221      #ifdef RTLD_GLOBAL
1222             yes
1223      #endif
1224     ], [
1225       AC_MSG_RESULT(yes)
1226       AC_DEFINE(HAVE_RTLDGLOBAL)
1227       HaveRtldGlobal=YES
1228     ], [
1229       AC_MSG_RESULT(no)
1230       HaveRtldGlobal=NO
1231       ])    
1232     AC_SUBST(HaveRtldGlobal)
1233
1234     dnl ** RTLD_NOW isn't available on openbsd
1235     AC_MSG_CHECKING(for RTLD_NOW from dlfcn.h)
1236     AC_EGREP_CPP(yes,
1237     [
1238      #include <dlfcn.h>
1239      #ifdef RTLD_NOW
1240             yes
1241      #endif
1242     ], [
1243       AC_MSG_RESULT(yes)
1244       AC_DEFINE(HAVE_RTLDNOW)
1245       HaveRtldNow=YES
1246     ], [
1247       AC_MSG_RESULT(no)
1248       HaveRtldNow=NO
1249       ])    
1250     AC_SUBST(HaveRtldNow)
1251 fi
1252
1253 FPTOOLS_CHECK_LIB_NOWARN(m, atan)
1254
1255 dnl ---------- usleep ----------
1256 dnl --- stolen from guile configure ---
1257 dnl --- FIXME: /usr/include/unistd.h can't be right?
1258
1259 ### On some systems usleep has no return value.  If it does have one,
1260 ### we'd like to return it; otherwise, we'll fake it.
1261 AC_CACHE_CHECK([return type of usleep], cv_func_usleep_return_type,
1262   [AC_EGREP_HEADER(changequote(<, >)<void[      ]+usleep>changequote([, ]),
1263                    /usr/include/unistd.h,
1264                    [cv_func_usleep_return_type=void],
1265                    [cv_func_usleep_return_type=int])])
1266 case "$cv_func_usleep_return_type" in
1267   "void" )
1268     AC_DEFINE([USLEEP_RETURNS_VOID], [1], [Define if the system headers declare usleep to return void.])
1269   ;;
1270 esac
1271
1272 dnl --------------------------------------------------
1273 dnl * test for in_addr_t
1274 dnl --------------------------------------------------
1275 AC_MSG_CHECKING(for in_addr_t in netinet/in.h)
1276 AC_EGREP_HEADER(in_addr_t, netinet/in.h,
1277  [ AC_DEFINE([HAVE_IN_ADDR_T], [1], [Define to 1 if in_addr_t is available.]) AC_MSG_RESULT(yes) ],
1278  AC_MSG_RESULT(no))
1279
1280 dnl --------------------------------------------------
1281 dnl * test for Linux sendfile(2)
1282 dnl --------------------------------------------------
1283 AC_MSG_CHECKING(for sendfile in sys/sendfile.h)
1284 AC_EGREP_HEADER(sendfile, sys/sendfile.h,
1285  [ AC_DEFINE([HAVE_LINUX_SENDFILE], [1], [Define to 1 if you have a Linux sendfile(2) implementation.]) AC_MSG_RESULT(yes) ],
1286  AC_MSG_RESULT(no))
1287
1288 dnl --------------------------------------------------
1289 dnl * test for BSD sendfile(2)
1290 dnl --------------------------------------------------
1291 AC_MSG_CHECKING(for sendfile in sys/socket.h)
1292 AC_EGREP_HEADER(sendfile, sys/socket.h,
1293  [ AC_DEFINE([HAVE_BSD_SENDFILE], [1], [Define to 1 if you have a BSDish sendfile(2) implementation.]) AC_MSG_RESULT(yes) ],
1294  AC_MSG_RESULT(no))
1295
1296 dnl --------------------------------------------------
1297 dnl * test for GTK+
1298 dnl --------------------------------------------------
1299
1300 AC_PATH_PROGS(GTK_CONFIG, gtk-config gtk12-config)
1301 if test "$GTK_CONFIG" != ""; then
1302    AC_CACHE_CHECK([for version of GTK+], fptools_cv_gtk_version, [
1303         fptools_cv_gtk_version=`$GTK_CONFIG --version`
1304     ])
1305     GTK_VERSION=$fptools_cv_gtk_version
1306 else
1307     GTK_VERSION=
1308 fi
1309
1310 case $fptools_cv_gtk_version in
1311   1.[[23]].*) ;;
1312   *) AC_MSG_WARN([GTK+ not usable; need at least version 1.2])
1313      GTK_CONFIG=
1314      ;;
1315 esac
1316
1317 AC_SUBST(GTK_CONFIG)
1318 AC_SUBST(GTK_VERSION)
1319
1320 dnl --------------------------------------------------
1321 dnl * Miscellaneous feature tests
1322 dnl --------------------------------------------------
1323
1324 dnl ** can we get alloca?
1325 AC_FUNC_ALLOCA
1326
1327 dnl ** Working vfork?
1328 AC_FUNC_VFORK
1329
1330 dnl ** determine whether or not const works
1331 AC_C_CONST
1332
1333 dnl ** are we big endian?
1334 AC_C_BIGENDIAN
1335
1336 dnl ** check for leading underscores in symbol names
1337 FPTOOLS_UNDERSCORE
1338
1339 dnl ** check for ld, and whether ld has -x option
1340 AC_PATH_PROG(LdCmdRaw, ld)
1341 case $HostOS_CPP in
1342  mingw32) LdCmd=`cygpath -w ${LdCmdRaw} | sed -e 's@\\\\@/@g' `
1343            ;;
1344  *) LdCmd=${LdCmdRaw}
1345     ;;
1346 esac
1347 AC_SUBST(LdCmd)
1348 FPTOOLS_LD_X
1349
1350 AC_MSG_CHECKING([for SIGPOLL])
1351 AC_EGREP_CPP(we_have_sigpoll,
1352 [#include <signal.h>
1353 #ifdef SIGPOLL
1354 we_have_sigpoll
1355 #endif
1356 ], AC_DEFINE([HAVE_SIGPOLL], [1], [Define to 1 if you have the sigpoll() function.]) haveSIGPOLL=yes, haveSIGPOLL=no)
1357 AC_MSG_RESULT([$haveSIGPOLL])
1358
1359 AC_MSG_CHECKING([for _SC_GETGR_R_SIZE_MAX])
1360 AC_EGREP_CPP(we_have_that_sysconf_thing,
1361 [
1362 #include <unistd.h>
1363 #ifdef _SC_GETGR_R_SIZE_MAX
1364 we_have_that_sysconf_thing
1365 #endif
1366 ],
1367 [AC_MSG_RESULT([yes])
1368 AC_DEFINE([HAVE_SC_GETGR_R_SIZE_MAX], [1], [Define to 1 if <unistd.h> defines _SC_GETGR_R_SIZE_MAX.])],
1369 [AC_MSG_RESULT([no])])
1370
1371 AC_MSG_CHECKING([for _SC_GETPW_R_SIZE_MAX])
1372 AC_EGREP_CPP(we_have_that_sysconf_thing,
1373 [
1374 #include <unistd.h>
1375 #ifdef _SC_GETPW_R_SIZE_MAX
1376 we_have_that_sysconf_thing
1377 #endif
1378 ],
1379 [AC_MSG_RESULT([yes])
1380 AC_DEFINE([HAVE_SC_GETPW_R_SIZE_MAX], [1], [Define to 1 if <unistd.h> defines _SC_GETPW_R_SIZE_MAX.])],
1381 [AC_MSG_RESULT([no])])
1382
1383 AC_OUTPUT(mk/config.mk, echo timestamp > mk/stamp-h )