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