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