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