[project @ 2004-03-07 17:56:35 by ross]
[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         if test ${OSTYPE} != "msys" 
456           then
457             # convert $hardtop to a path that mingw will understand too
458             cyghardtop=${hardtop}
459             hardtop=`cygpath -w ${cyghardtop} | sed -e 's@\\\\@/@g'`
460             hardtop_plat=`cygpath -w ${cyghardtop} | sed -e 's@\\\\@\\\\\\\\@g'`
461           else
462             hardtop_plat=${hardtop}
463         fi
464         ;;
465   *)
466         hardtop_plat=${hardtop}
467         ;;
468 esac
469 AC_SUBST(hardtop)
470 AC_SUBST(hardtop_plat)
471
472 AC_MSG_RESULT(${hardtop})
473
474 dnl --------------------------------------------------------------
475 dnl * Project specific configuration options
476 dnl --------------------------------------------------------------
477 dnl What follows is a bunch of options that can either be configured
478 dnl through command line options to the configure script or by
479 dnl supplying defns in the build tree's mk/build.mk. Having the option to
480 dnl use either is considered a Feature.
481
482 dnl ** What command to use to compile compiler sources ?
483 dnl --------------------------------------------------------------
484
485 AC_ARG_WITH(ghc,
486 [AC_HELP_STRING([--with-ghc=ARG],
487         [Use ARG as the path to GHC  [default=autodetect]])],
488 [ WithGhc="$withval" ],
489
490   if test "$GHC" = ""; then
491     AC_PATH_PROG(GHC,ghc)
492   fi
493   WithGhc=$GHC
494 ])
495 AC_SUBST(WithGhc)
496
497 AC_ARG_WITH(hc,
498 [AC_HELP_STRING([--with-hc=ARG],
499         [Use ARG as the path to the compiler for compiling ordinary
500          Haskell code  (default= value of --with-ghc)])],
501 [WithHc="$withval"],
502 [WithHc=$WithGhc]
503 )
504 AC_SUBST(WithHc)
505
506 if test "$WithGhc" != ""; then
507   FPTOOLS_GHC_VERSION([GhcVersion], [GhcMajVersion], [GhcMinVersion], [GhcPatchLevel])dnl
508   AC_SUBST(GhcVersion)dnl
509   AC_SUBST(GhcMajVersion)dnl
510   AC_SUBST(GhcMinVersion)dnl
511   AC_SUBST(GhcPatchLevel)dnl
512 fi
513
514 AC_PATH_PROGS(NHC,nhc nhc98)
515 AC_PATH_PROG(HBC,hbc)
516
517 dnl ** Which gcc to use?
518 dnl --------------------------------------------------------------
519 AC_ARG_WITH(gcc,
520 [AC_HELP_STRING([--with-gcc=ARG],
521         [Use ARG as the path to GCC  [default=autodetect]])],
522 [WhatGccIsCalled="$withval"
523  if test "x$HostPlatform" = "xi386-unknown-mingw32"
524     then
525        if test ${OSTYPE} != "msys"
526          then
527          # Canonicalise to <drive>:/path/to/gcc
528          withval=`cygpath -w ${withval} | sed -e 's@\\\\@/@g' `
529        fi
530  fi;
531  CC="$withval"],
532 [WhatGccIsCalled="gcc"]
533 )
534 AC_SUBST(WhatGccIsCalled)
535
536 dnl ** Booting from .hc files?
537 dnl --------------------------------------------------------------
538 AC_ARG_ENABLE(hc-boot,
539 [AC_HELP_STRING([--enable-hc-boot],
540 [Boot the Glasgow Haskell Compiler from intermediate .hc files.
541  (This option is mostly of interest to porters.) [default=no]])],
542 [ if test x"$enableval" = x"yes"; then
543         BootingFromHc=YES
544   else
545         BootingFromHc=NO
546   fi
547 ],
548 [BootingFromHc=NO]
549 )
550 AC_SUBST(BootingFromHc)
551
552 dnl ** Booting from unregisterised .hc files?
553 dnl --------------------------------------------------------------
554 AC_ARG_ENABLE(hc-boot-unregisterised,
555 [AC_HELP_STRING([--enable-hc-boot-unregisterised],
556 [ With --enable-hc-boot, treat the intermediate .hc files as
557  unregisterised rather than registerised code.
558  (This option is mostly of interest to porters.) [default=no]])],
559 [ if test x"$enableval" = x"yes"; then
560         BootingFromUnregisterisedHc=YES
561   else
562         BootingFromUnregisterisedHc=NO
563   fi
564 ],
565 [BootingFromUnregisterisedHc=NO]
566 )
567 AC_SUBST(BootingFromUnregisterisedHc)
568
569 if test "$BootingFromHc" = "NO"; then
570 if test "$BootingFromUnregisterisedHc" = "YES"; then
571 AC_MSG_ERROR([--enable-hc-boot-unregisterised requires --enable-hc-boot.])
572 fi;
573 fi;
574
575 dnl ** Must have GHC to build GHC, unless --enable-hc-boot is on
576 if test "$BootingFromHc" = "NO" -a "$WithGhc" = "" -a -d "$srcdir/ghc"; then
577 AC_MSG_ERROR([GHC is required unless bootstrapping from .hc files.])
578 fi;
579
580 dnl ** Enable multi-thread friendly RTS?
581 dnl --------------------------------------------------------------
582 AC_ARG_ENABLE(threaded-rts,
583 [AC_HELP_STRING([--enable-threaded-rts],
584 [Support better interop with OS threads. [default=no]])],
585 [ if test x"$enableval" = x"yes"; then
586         ThreadedRts=YES
587   else
588         ThreadedRts=NO
589   fi
590 ],
591 [ThreadedRts=NO]
592 )
593 AC_SUBST(ThreadedRts)
594
595 dnl ** Enable the construction of Win32 DLLs?
596 dnl --------------------------------------------------------------
597 dnl
598 dnl [ The ability to build the RTS and libraries as separate DLLs used
599 dnl   to be supported, but isn't currently (updates to the RTS, compiler 
600 dnl   and build system would be required to bring it back again.)
601 dnl   Hence, exposing it as an option is false advertisement, so better
602 dnl   disable it to avoid confusion (but leave it commented-out rather
603 dnl   than removed in order to remind ourselves to bring back the 
604 dnl   feature at some stage.) ]
605 dnl
606 dnl AC_ARG_ENABLE(win32-dlls,
607 dnl [  --enable-win32-dlls
608 dnl         If on a Win32 platform running mingw32/cygwin, enable the
609 dnl     construction of DLLs containing ghc-compiled code.
610 dnl ],
611 dnl [
612 dnl case $HostOS_CPP in
613 dnl cygwin32) ;;
614 dnl mingw32)  ;;
615 dnl *)    echo "Unrecognised win32 platform: $HostPlatform"
616 dnl       exit 1
617 dnl       ;;
618 dnl esac
619 dnl EnableWin32DLLs=YES
620 dnl ],
621 dnl [EnableWin32DLLs=NO]
622 dnl )
623 dnl AC_SUBST(EnableWin32DLLs)
624 dnl if test x"$EnableWin32DLLs" = "xYES" ; then
625 dnl  AC_DEFINE(HAVE_WIN32_DLL_SUPPORT)
626 dnl fi
627
628 dnl ** Enable the building of the ObjectIO?
629 dnl --------------------------------------------------------------
630 AC_ARG_ENABLE(objectio,
631 [AC_HELP_STRING([--enable-objectio],
632 [Build ObjectIO, a portable GUI library for Haskell. [default=no]])],
633 [ if test x"$enableval" = x"yes"; then
634         GhcLibsWithObjectIO=YES
635   else
636         GhcLibsWithObjectIO=NO
637   fi
638 ],
639 [GhcLibsWithObjectIO=NO]
640 )
641 AC_SUBST(GhcLibsWithObjectIO)
642
643 dnl ** Enable the building of the OpenAL binding?
644 dnl --------------------------------------------------------------
645 AC_ARG_ENABLE([openal],
646   AC_HELP_STRING([--enable-openal],
647                  [Build OpenAL binding [[default=autodetect]]]),
648   [ if test x"$enableval" = x"yes"; then
649         GhcLibsWithOpenAL=YES
650     else
651         GhcLibsWithOpenAL=NO
652     fi
653   ],
654   [GhcLibsWithOpenAL=yes])
655
656 AC_SUBST([GhcLibsWithOpenAL])
657
658 dnl ** .NET interop support?
659 dnl --------------------------------------------------------------
660 AC_ARG_ENABLE(dotnet,
661 [AC_HELP_STRING([--enable-dotnet],
662 [Build .NET interop layer. [default=no]])],
663 [ if test x"$enableval" = x"yes"; then
664         DotnetSupport=YES; AC_DEFINE([WANT_DOTNET_SUPPORT], [1], [Define to 1 if you want to include .NET interop support.])
665   else 
666         DotnetSupport=NO
667   fi],
668 [DotnetSupport=NO]
669 )
670 AC_SUBST(DotnetSupport)
671
672 dnl --------------------------------------------------------------
673 dnl End of configure script option section
674 dnl --------------------------------------------------------------
675
676
677 dnl --------------------------------------------------------------
678 dnl * General configuration checks
679 dnl --------------------------------------------------------------
680
681 dnl ** Can the unix package be built?
682 dnl --------------------------------------------------------------
683
684 if test x"$TargetPlatform" = x"i386-unknown-mingw32"; then
685    GhcLibsWithUnix=NO
686 else
687    GhcLibsWithUnix=YES
688 fi
689 AC_SUBST([GhcLibsWithUnix])
690
691 dnl ** does #! work?
692 AC_SYS_INTERPRETER()
693
694 dnl ** look for `perl', but only in /bin on Windows
695 case $HostOS_CPP in
696 cygwin32|mingw32)
697       AC_CHECK_PROG(PerlCmd,perl,/bin/perl,,/bin)
698       if test -z "$PerlCmd"; then
699          echo "You must install the version of Perl shipped with GHC"
700          echo "(or a compatible one) in /bin."
701          exit 1
702       fi
703    ;;
704 *)
705    AC_PATH_PROG(PerlCmd,perl)
706    if test -z "$PerlCmd"; then
707       echo "You must install perl before you can continue"
708       echo "Perhaps it is already installed, but not in your PATH?"
709       exit 1
710    else
711    FPTOOLS_CHECK_PERL_VERSION
712    fi
713    ;;
714 esac
715
716 dnl ** does #! path/to/perl work? (sometimes it's too long...)
717 FPTOOLS_SHEBANG_PERL
718
719 dnl ** check for Python
720 AC_PATH_PROG(PythonCmd,python)
721
722 dnl ** look for GCC and find out which version
723 dnl     Figure out which C compiler to use.  Gcc is preferred.
724 dnl     If gcc, make sure it's at least 2.1
725 dnl
726 AC_PROG_CC
727 FPTOOLS_HAVE_GCC
728 FPTOOLS_GCC_NEEDS_NO_OMIT_LFPTR
729
730 dnl ** figure out how to invoke cpp directly (gcc -E is no good)
731 AC_PROG_CPP
732
733 dnl ** Without optimization some INLINE trickery fails for GHCi
734 SRC_CC_OPTS="-O"
735
736 dnl ** Try to add -mno-cygwin to the C compiler options
737 FP_CHECK_FLAG([-mno-cygwin], [
738 SRC_CC_OPTS="-mno-cygwin $SRC_CC_OPTS"
739 CPPFLAGS="-mno-cygwin $CPPFLAGS"])
740 AC_SUBST(SRC_CC_OPTS)
741
742 dnl ** figure out how to do context diffs
743 FP_PROG_CONTEXT_DIFF
744
745 dnl ** Find find command (for Win32's benefit)
746 FP_PROG_FIND
747
748 dnl ** figure out how to do a BSD-ish install
749 AC_PROG_INSTALL
750
751 dnl If you can run configure, you certainly have /bin/sh
752 AC_DEFINE([HAVE_BIN_SH], [1], [Define to 1 if you have /bin/sh.])
753
754 dnl ** how to invoke `ar' and `ranlib'
755 FPTOOLS_PROG_AR_AND_RANLIB
756
757 dnl ** Check to see whether ln -s works
758 AC_PROG_LN_S
759
760
761 dnl ** Find the path to sed
762 AC_PATH_PROG(SedCmd,sed)
763
764
765 dnl ** check for time command
766 AC_PATH_PROG(TimeCmd,time)
767
768 dnl ** check for tar
769 dnl   if GNU tar is named gtar, look for it first.
770 AC_PATH_PROGS(TarCmd,gtar tar,tar)
771
772 dnl ** check for jade/openjade & determine a working catalog
773 AC_PATH_PROGS(JadeCmd,openjade jade,jade)
774 FPTOOLS_DOCBOOK_CATALOG(Catalog, $JadeCmd, docs/fptools-both.dsl, 
775                         /etc/sgml/catalog /etc/sgml.catalog /usr/share/sgml/CATALOG.docbkdsl /usr/local/share/sgml/catalog glafp-utils/docbook/CATALOG*)
776 if test -z "$Catalog"; then
777   AC_MSG_RESULT([Warning: You will not be able to build the documentation.])
778 fi
779 case $Catalog in
780    yes) # assume it is provided by other means (e.g., SGML_CATALOG_FILES env var).
781         Catalog=
782         ;;
783    glafp*) 
784         case $HostOS_CPP in
785            mingw32)
786                   if test ${OSTYPE} == "msys"
787                     then
788                       Catalog=$hardtop/$Catalog
789                     else
790                       Catalog=`cygpath -w $hardtop/$Catalog`
791                   fi
792               ;;
793            *) Catalog=$hardtop/$Catalog
794               ;;
795         esac
796    ;;
797 esac   
798 AC_SUBST(Catalog)
799
800
801 dnl ** check for ghc-pkg command
802 changequote(, )dnl
803 ghc_pkg_guess=`echo $WithGhc | sed 's@ghc\([^/\\]*\)$@ghc-pkg\1@'`
804 changequote([, ])dnl
805 if $ghc_pkg_guess -l >/dev/null 2>/dev/null; then
806    GhcPkgCmd=$ghc_pkg_guess
807    AC_MSG_NOTICE([using $ghc_pkg_guess for ghc-pkg])
808 else
809    AC_PATH_PROG(GhcPkgCmd,ghc-pkg)
810 fi
811
812 AC_ARG_WITH(greencard,
813 [AC_HELP_STRING([--with-greencard=ARG],
814         [Use ARG as the path to greencard  [default=autodetct]])],
815 [
816 GreenCardCmd=$withval;
817 FPTOOLS_GREENCARD(3.00)
818 ]
819 )
820
821 AC_ARG_ENABLE(src-tree-happy,
822 [AC_HELP_STRING([--enable-src-tree-happy],
823         [Build and use source tree (fptools/happy) version of Happy. 
824          [default=autodetect]])],
825 [ if test x"$enableval" = x"yes"; then
826         UseSrcTreeHappy=YES
827   else
828         UseSrcTreeHappy=NO
829   fi
830 ],
831 [UseSrcTreeHappy=NO]
832 )
833 dnl ** check for installed happy binary + version
834 dnl    (don't do it if we're booting from .hc files though.)
835 if test "$BootingFromHc" = "NO"; then
836 FPTOOLS_HAPPY
837 fi;
838
839 AC_ARG_ENABLE(src-tree-haddock,
840 [AC_HELP_STRING([--enable-src-tree-haddock],
841         [Build and use source tree (fptools/haddock) version of Haddock.
842          [default=autodetect]])],
843 [ if test x"$enableval" = x"yes"; then
844         UseSrcTreeHaddock=YES
845   else
846         UseSrcTreeHaddock=NO
847   fi
848 ],
849 [UseSrcTreeHaddock=NO]
850 )
851 dnl ** check for installed haddock
852 FPTOOLS_HADDOCK
853
854 AC_ARG_ENABLE(src-tree-alex,
855 [AC_HELP_STRING([--enable-src-tree-alex],
856         [Build and use source tree (fptools/alex) version of Alex.
857          [default=autodetect]])],
858 [ if test x"$enableval" = x"yes"; then
859         UseSrcTreeAlex=YES
860   else
861         UseSrcTreeAlex=NO
862   fi
863 ],
864 [UseSrcTreeAlex=NO]
865 )
866 dnl ** check for installed alex binary + version
867 dnl    (don't do it if we're booting from .hc files though.)
868 if test "$BootingFromHc" = "NO"; then
869 FPTOOLS_ALEX
870 fi;
871
872 dnl --------------------------------------------------
873 dnl ### program checking section ends here ###
874 dnl --------------------------------------------------
875
876 dnl --------------------------------------------------
877 dnl * Platform header file and syscall feature tests
878 dnl ### checking the state of the local header files and syscalls ###
879
880 dnl ** check for full ANSI header (.h) files
881 AC_HEADER_STDC
882
883 dnl ** Enable large file support.  NB. do this before testing the type of
884 dnl    off_t, because it will affect the result of that test.
885 AC_SYS_LARGEFILE
886
887 dnl ** check for specific header (.h) files that we are interested in
888 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)
889 AC_CHECK_HEADER(unistd.h,[AC_CHECK_FUNCS(lchown)])
890
891 AC_CHECK_HEADER(readline/readline.h, [HaveReadlineReadlineH=YES], [HaveReadlineReadlineH=NO])
892 AC_CHECK_HEADER(readline/history.h, [HaveReadlineHistoryH=YES], [HaveReadlineHistoryH=NO])
893
894 if test $HaveReadlineReadlineH = YES && test $HaveReadlineHistoryH = YES ; then
895   GhcLibsWithReadline=YES
896   AC_DEFINE([HAVE_READLINE_HEADERS], [1], [Define to 1 if readline/readline.h and readline/history.h exist.])
897 else
898   GhcLibsWithReadline=NO
899   AC_DEFINE([HAVE_READLINE_HEADERS], [0], [Define to 1 if readline/readline.h and readline/history.h exist.])
900 fi
901 AC_SUBST(GhcLibsWithReadline)
902
903 dnl ** check for DOS include files
904 AC_CHECK_HEADERS(dos.h conio.h io.h std.h) 
905
906 dnl ** check for Windows include files
907 AC_CHECK_HEADERS(windows.h)
908
909 dnl ** check for OpenGL/GLUT include paths and libraries
910 FP_CHECK_GLUT
911
912 if test x"$no_GLU" = xyes; then
913   GhcLibsWithOpenGL=NO
914 else
915   GhcLibsWithOpenGL=YES
916 fi
917 AC_SUBST([GhcLibsWithOpenGL])
918
919 if test x"$no_GLUT" = xyes; then
920   GhcLibsWithGLUT=NO
921 else
922   GhcLibsWithGLUT=YES
923 fi
924 AC_SUBST([GhcLibsWithGLUT])
925
926 dnl ** check for OpenGL include files
927 fp_save_cppflags="$CPPFLAGS"
928 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
929 if test x"$use_quartz_opengl" = xyes; then
930   AC_CHECK_HEADERS([OpenGL/gl.h])
931 else
932   AC_CHECK_HEADERS([GL/gl.h])
933 fi
934 CPPFLAGS="$fp_save_cppflags"
935
936 dnl ** check if it is safe to include both <time.h> and <sys/time.h>
937 AC_HEADER_TIME
938
939 dnl dynamic loading include files
940 AC_CHECK_HEADERS(dlfcn.h dl.h) 
941
942 dnl ** check for farcalloc (in bcc)
943 AC_CHECK_HEADER(alloc.h,[AC_CHECK_FUNCS(farcalloc)])
944
945 dnl ** check for valloc (in sunos, solaris, mips, amiga, next, minix, ultrix)
946 AC_CHECK_HEADER(malloc.h,[AC_CHECK_FUNCS(valloc)])
947
948 dnl ** check for POSIX regex
949 HavePosixRegex=NO
950 AC_CHECK_HEADERS(regex.h,[AC_CHECK_FUNC(regcomp, [HavePosixRegex=YES])])
951 AC_SUBST(HavePosixRegex)
952
953 dnl ** how do we get a timezone name, and UTC offset ?
954 AC_STRUCT_TIMEZONE
955
956 dnl ** do we have altzone?
957 FP_DECL_ALTZONE
958
959 dnl ** does struct stat contain st_blksize?
960 AC_STRUCT_ST_BLKSIZE
961
962 dnl ** do we have long longs?
963 AC_CHECK_TYPES([long long])
964
965 dnl ** check what fields struct msghdr contains
966 AC_CHECK_HEADERS([sys/types.h sys/socket.h sys/uio.h])
967 AC_CHECK_MEMBERS([struct msghdr.msg_control, struct msghdr.msg_accrights], [], [], [#if HAVE_SYS_TYPES_H
968 # include <sys/types.h>
969 #endif
970 #if HAVE_SYS_SOCKET_H
971 # include <sys/socket.h>
972 #endif
973 #if HAVE_SYS_UIO_H
974 # include <sys/uio.h>
975 #endif])
976
977 dnl ** what are the sizes of various types
978 AC_CHECK_SIZEOF(char,               1)
979 AC_CHECK_SIZEOF(double,             8)
980 AC_CHECK_SIZEOF(float,              4)
981 AC_CHECK_SIZEOF(int,                4)
982 AC_CHECK_SIZEOF(long,               4)
983 if test "$ac_cv_type_long_long" = yes; then
984 AC_CHECK_SIZEOF(long long,          8)
985 fi
986 AC_CHECK_SIZEOF(short,              2)
987 AC_CHECK_SIZEOF(unsigned char,      1)
988 AC_CHECK_SIZEOF(unsigned int,       4)
989 AC_CHECK_SIZEOF(unsigned long,      4)
990 if test "$ac_cv_type_long_long" = yes; then
991 AC_CHECK_SIZEOF(unsigned long long, 8)
992 fi
993 AC_CHECK_SIZEOF(unsigned short,     2)
994 AC_CHECK_SIZEOF(void *,             4)
995
996 dnl ** what are alignment constraints on various types
997 FP_CHECK_ALIGNMENT(char)
998 FP_CHECK_ALIGNMENT(double)
999 FP_CHECK_ALIGNMENT(float)
1000 FP_CHECK_ALIGNMENT(int)
1001 FP_CHECK_ALIGNMENT(long)
1002 if test "$ac_cv_type_long_long" = yes; then
1003 FP_CHECK_ALIGNMENT(long long)
1004 fi
1005 FP_CHECK_ALIGNMENT(short)
1006 FP_CHECK_ALIGNMENT(unsigned char)
1007 FP_CHECK_ALIGNMENT(unsigned int)
1008 FP_CHECK_ALIGNMENT(unsigned long)
1009 if test "$ac_cv_type_long_long" = yes; then
1010 FP_CHECK_ALIGNMENT(unsigned long long)
1011 fi
1012 FP_CHECK_ALIGNMENT(unsigned short)
1013 FP_CHECK_ALIGNMENT(void *)
1014
1015 dnl ** map standard C types and ISO types to Haskell types
1016 FPTOOLS_CHECK_HTYPE(char)
1017 FPTOOLS_CHECK_HTYPE(signed char)
1018 FPTOOLS_CHECK_HTYPE(unsigned char)
1019 FPTOOLS_CHECK_HTYPE(short)
1020 FPTOOLS_CHECK_HTYPE(unsigned short)
1021 FPTOOLS_CHECK_HTYPE(int)
1022 FPTOOLS_CHECK_HTYPE(unsigned int)
1023 FPTOOLS_CHECK_HTYPE(long)
1024 FPTOOLS_CHECK_HTYPE(unsigned long)
1025 if test "$ac_cv_type_long_long" = yes; then
1026 FPTOOLS_CHECK_HTYPE(long long)
1027 FPTOOLS_CHECK_HTYPE(unsigned long long)
1028 fi
1029 FPTOOLS_CHECK_HTYPE(float)
1030 FPTOOLS_CHECK_HTYPE(double)
1031 FPTOOLS_CHECK_HTYPE(ptrdiff_t)
1032 FPTOOLS_CHECK_HTYPE(size_t)
1033 FPTOOLS_CHECK_HTYPE(wchar_t)
1034 dnl Int32 is a HACK for non-ISO C compilers
1035 FPTOOLS_CHECK_HTYPE(sig_atomic_t, Int32)
1036 FPTOOLS_CHECK_HTYPE(clock_t)
1037 FPTOOLS_CHECK_HTYPE(time_t)
1038 FPTOOLS_CHECK_HTYPE(dev_t, Word32)
1039 FPTOOLS_CHECK_HTYPE(ino_t)
1040 FPTOOLS_CHECK_HTYPE(mode_t)
1041 FPTOOLS_CHECK_HTYPE(off_t)
1042 FPTOOLS_CHECK_HTYPE(pid_t)
1043 FPTOOLS_CHECK_HTYPE(gid_t)
1044 FPTOOLS_CHECK_HTYPE(uid_t)
1045 FPTOOLS_CHECK_HTYPE(cc_t)
1046 FPTOOLS_CHECK_HTYPE(speed_t)
1047 FPTOOLS_CHECK_HTYPE(tcflag_t)
1048 FPTOOLS_CHECK_HTYPE(blkcnt_t)
1049 FPTOOLS_CHECK_HTYPE(nlink_t)
1050 FPTOOLS_CHECK_HTYPE(ssize_t)
1051 FPTOOLS_CHECK_HTYPE(rlim_t)
1052 FPTOOLS_CHECK_HTYPE(wint_t)
1053
1054 dnl ** Map OpenGL data types to Haskell types
1055 if test $GhcLibsWithOpenGL = YES ; then
1056 FPTOOLS_CHECK_HTYPE(GLboolean)
1057 FPTOOLS_CHECK_HTYPE(GLbyte)
1058 FPTOOLS_CHECK_HTYPE(GLubyte)
1059 FPTOOLS_CHECK_HTYPE(GLshort)
1060 FPTOOLS_CHECK_HTYPE(GLushort)
1061 FPTOOLS_CHECK_HTYPE(GLint)
1062 FPTOOLS_CHECK_HTYPE(GLuint)
1063 FPTOOLS_CHECK_HTYPE(GLsizei)
1064 FPTOOLS_CHECK_HTYPE(GLenum)
1065 FPTOOLS_CHECK_HTYPE(GLbitfield)
1066 FPTOOLS_CHECK_HTYPE(GLfloat)
1067 FPTOOLS_CHECK_HTYPE(GLclampf)
1068 FPTOOLS_CHECK_HTYPE(GLdouble)
1069 FPTOOLS_CHECK_HTYPE(GLclampd)
1070 fi
1071
1072 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>
1073 #include <errno.h>])
1074
1075 dnl ** can we open files in binary mode?
1076 FP_CHECK_CONST([O_BINARY], [#include <fcntl.h>], [0])
1077
1078 FP_CHECK_FUNC([WinExec],
1079   [@%:@include <windows.h>], [WinExec("",0)])
1080
1081 FP_CHECK_FUNC([GetModuleFileName],
1082   [@%:@include <windows.h>], [GetModuleFileName((HMODULE)0,(LPTSTR)0,0)])
1083
1084 dnl ** check return type of signal handlers
1085 dnl Foo: assumes we can use prototypes.
1086 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
1087 dnl AC_CACHE_CHECK([type of signal handlers], ac_cv_type_signal_handler,
1088 dnl [AC_TRY_COMPILE([#include <sys/types.h>
1089 dnl #include <signal.h>
1090 dnl #ifdef signal
1091 dnl #undef signal
1092 dnl #endif
1093 dnl void (*signal (int, void (*)(int)))(int);
1094 dnl ],
1095 dnl [int i;], 
1096 dnl ac_cv_type_signal_handler=void_int,
1097 dnl ac_cv_type_signal_handler=int_void)])
1098 dnl if test "$ac_cv_type_signal_handler" = void_int; then
1099 dnl AC_DEFINE(VOID_INT_SIGNALS)
1100 dnl fi
1101
1102 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
1103 AC_TYPE_SIGNAL
1104 if test "$ac_cv_type_signal" = void; then
1105   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).])
1106 fi
1107
1108 dnl ** check for more functions
1109 AC_CHECK_FUNCS(strcasecmp _stricmp stricmp strcmpi)
1110 AC_CHECK_FUNCS(strcmp)
1111 AC_CHECK_FUNCS(realpath _fullpath)  
1112 AC_CHECK_FUNCS(PBHSetVolSync macsystem)  
1113 AC_CHECK_FUNCS(fgetpos fsetpos fseek ftell)
1114 AC_CHECK_FUNCS(vsnprintf _vsnprintf)
1115 AC_CHECK_FUNCS(snprintf  _snprintf )  
1116 AC_CHECK_FUNCS(popen     _popen )  
1117 AC_CHECK_FUNCS(pclose    _pclose )  
1118 AC_CHECK_FUNCS(setenv unsetenv)
1119
1120
1121 dnl ** check for specific library functions that we are interested in
1122 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)
1123
1124 dnl ** Solaris2 needs additionl flag for getpw*_r()
1125 case "$TargetPlatform" in
1126   *-solaris2*)
1127     unix_SRC_HSC2HS_OPTS="-D_POSIX_PTHREAD_SEMANTICS"
1128     AC_SUBST(unix_SRC_HSC2HS_OPTS)
1129   ;;
1130 esac
1131
1132 dnl ** check whether this machine has gmp3 installed
1133 AC_CHECK_LIB(gmp,  __gmpz_fdiv_qr, HaveLibGmp=YES; LibGmp=gmp,
1134   AC_CHECK_LIB(gmp3, __gmpz_fdiv_qr,  HaveLibGmp=YES; LibGmp=gmp3,
1135     HaveLibGmp=NO; LibGmp=not-installed))
1136 AC_SUBST(HaveLibGmp)
1137 AC_SUBST(LibGmp)
1138
1139 dnl ** (Mac OS X only: check for HaskellSupport.framework)
1140 HaveFrameworkHaskellSupport=NO
1141 if test $HostPlatform = "powerpc-apple-darwin"; then
1142  AC_MSG_CHECKING([for HaskellSupport.framework])
1143  save_libs="$LIBS"
1144  LIBS="-framework HaskellSupport"
1145  AC_TRY_LINK_FUNC(__gmpz_fdiv_qr, HaveFrameworkHaskellSupport=YES,)
1146  if test $HaveFrameworkHaskellSupport = YES; then
1147   AC_DEFINE([HAVE_FRAMEWORK_HASKELLSUPPORT], [1], [Define to 1 if the HaskellSupport.framework is installed (Mac OS X only).])
1148  fi;
1149  LIBS="$save_libs"
1150  AC_MSG_RESULT([$HaveFrameworkHaskellSupport])
1151 fi;
1152 AC_SUBST(HaveFrameworkHaskellSupport)
1153
1154 dnl ** check for mingwex library
1155 AC_CHECK_LIB(mingwex, closedir, HaveLibMingwEx=YES, HaveLibMingwEx=NO)
1156 AC_SUBST(HaveLibMingwEx)
1157
1158 if test $HaveLibMingwEx = YES ; then
1159   AC_DEFINE([HAVE_MINGWEX], [1], [Define to 1 if you have the mingwex library.])
1160 fi
1161
1162 if test "$HaveLibGmp" = "NO"; then
1163 if test "$HostArch_CPP" = "ia64" -o "$HostArch_CPP" = "mipseb" ; then
1164 AC_MSG_ERROR([You need to install libgmp (the in-tree version does not work on IA64 or mips64).])
1165 fi;
1166 fi;
1167
1168 dnl ** check whether this machine has BFD and liberty installed (used for debugging)
1169 dnl    the order of these tests matters: bfd needs liberty
1170 AC_CHECK_LIB(iberty, xmalloc)
1171 AC_CHECK_LIB(bfd,    bfd_init)
1172
1173 dnl ** check for wide-char classifications
1174 dnl FreeBSD has an emtpy wctype.h, so test one of the affected
1175 dnl functions if it's really there.
1176 AC_CHECK_HEADERS(wctype.h,
1177   [AC_CHECK_FUNCS(iswspace)]
1178 )
1179
1180 dnl ** check for readline, for Hugs and hslibs' Readline
1181 dnl ncurses supersedes termcap and curses, but for compatibility,
1182 dnl we have to check for all...
1183 AC_CHECK_LIB(ncurses, tputs, HaveLibTermcap=YES; LibTermcap=ncurses,
1184   AC_CHECK_LIB(termcap, tputs, HaveLibTermcap=YES; LibTermcap=termcap,
1185     AC_CHECK_LIB(curses, tputs, HaveLibTermcap=YES; LibTermcap=curses,
1186       HaveLibTermcap=NO; LibTermcap=not-installed)))
1187
1188 if test $HaveLibTermcap = YES ; then
1189   LIBS="-l$LibTermcap $LIBS"
1190   AC_CHECK_LIB(readline, readline, HaveLibReadline=YES, HaveLibReadline=NO)
1191 fi
1192
1193 if test $HaveLibTermcap = YES && test x"$HaveLibReadline" = xYES ; then
1194   AC_DEFINE([HAVE_READLINE_LIBS], [1], [Define to 1 if readline plus any additional libs needed for it exist.])
1195   LibsReadline="readline $LibTermcap"
1196 else
1197   AC_DEFINE([HAVE_READLINE_LIBS], [0], [Define to 1 if readline plus any additional libs needed for it exist.])
1198   LibsReadline=
1199 fi
1200 AC_SUBST(LibsReadline)
1201
1202 if test "$HaveLibReadline"; then
1203   AC_CHECK_LIB(readline, rl_erase_empty_line,
1204     [AC_DEFINE([HAVE_READLINE_4], [1], [Define to 1 if readline has version >= 4.0.])],
1205     [AC_DEFINE([HAVE_READLINE_4], [0], [Define to 1 if readline has version >= 4.0.])])
1206   AC_CHECK_LIB(readline, rl_free_undo_list,
1207     [AC_DEFINE([HAVE_READLINE_4_2], [1], [Define to 1 if readline has version >= 4.2.])],
1208     [AC_DEFINE([HAVE_READLINE_4_2], [0], [Define to 1 if readline has version >= 4.2.])])
1209 else
1210   AC_DEFINE([HAVE_READLINE_4], [0], [Define to 1 if readline has version >= 4.0.])
1211   AC_DEFINE([HAVE_READLINE_4_2], [0], [Define to 1 if readline has version >= 4.2.])
1212 fi
1213
1214 dnl ** check for math library
1215 AC_CHECK_LIB([m], [atan], [LIBS="-lm $LIBS"; LIBM="-lm"], [LIBM=])
1216 AC_SUBST([LIBM])
1217
1218 dnl ** check for X Window System
1219 AC_PATH_XTRA()
1220
1221 if test "$no_x" = yes; then
1222   GhcLibsWithX11=NO
1223 else
1224   GhcLibsWithX11=YES
1225 fi
1226 AC_SUBST([GhcLibsWithX11])
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 dnl ---------- usleep ----------
1334 dnl --- stolen from guile configure ---
1335 dnl --- FIXME: /usr/include/unistd.h can't be right?
1336
1337 ### On some systems usleep has no return value.  If it does have one,
1338 ### we'd like to return it; otherwise, we'll fake it.
1339 AC_CACHE_CHECK([return type of usleep], cv_func_usleep_return_type,
1340   [AC_EGREP_HEADER(changequote(<, >)<void[      ]+usleep>changequote([, ]),
1341                    /usr/include/unistd.h,
1342                    [cv_func_usleep_return_type=void],
1343                    [cv_func_usleep_return_type=int])])
1344 case "$cv_func_usleep_return_type" in
1345   "void" )
1346     AC_DEFINE([USLEEP_RETURNS_VOID], [1], [Define if the system headers declare usleep to return void.])
1347   ;;
1348 esac
1349
1350 dnl --------------------------------------------------
1351 dnl * test for in_addr_t
1352 dnl --------------------------------------------------
1353 AC_MSG_CHECKING(for in_addr_t in netinet/in.h)
1354 AC_EGREP_HEADER(in_addr_t, netinet/in.h,
1355  [ AC_DEFINE([HAVE_IN_ADDR_T], [1], [Define to 1 if in_addr_t is available.]) AC_MSG_RESULT(yes) ],
1356  AC_MSG_RESULT(no))
1357
1358 dnl --------------------------------------------------
1359 dnl * test for Linux sendfile(2)
1360 dnl --------------------------------------------------
1361 AC_MSG_CHECKING(for sendfile in sys/sendfile.h)
1362 AC_EGREP_HEADER(sendfile, sys/sendfile.h,
1363  [ AC_DEFINE([HAVE_LINUX_SENDFILE], [1], [Define to 1 if you have a Linux sendfile(2) implementation.]) AC_MSG_RESULT(yes) ],
1364  AC_MSG_RESULT(no))
1365
1366 dnl --------------------------------------------------
1367 dnl * test for BSD sendfile(2)
1368 dnl --------------------------------------------------
1369 AC_MSG_CHECKING(for sendfile in sys/socket.h)
1370 AC_EGREP_HEADER(sendfile, sys/socket.h,
1371  [ AC_DEFINE([HAVE_BSD_SENDFILE], [1], [Define to 1 if you have a BSDish sendfile(2) implementation.]) AC_MSG_RESULT(yes) ],
1372  AC_MSG_RESULT(no))
1373
1374 dnl --------------------------------------------------
1375 dnl * test for GTK+
1376 dnl --------------------------------------------------
1377
1378 AC_PATH_PROGS([GTK_CONFIG], [gtk-config gtk12-config])
1379 if test -n "$GTK_CONFIG"; then
1380   AC_CACHE_CHECK([for version of GTK+], [fp_cv_gtk_version],
1381     [fp_cv_gtk_version=`$GTK_CONFIG --version`])
1382   FP_COMPARE_VERSIONS([$fp_cv_gtk_version], [-lt], [1.2],
1383     [AC_MSG_WARN([GTK+ not usable, need at least version 1.2])
1384      GTK_CONFIG=])
1385 fi
1386 AC_SUBST([GTK_CONFIG])
1387
1388 dnl --------------------------------------------------
1389 dnl * Miscellaneous feature tests
1390 dnl --------------------------------------------------
1391
1392 dnl ** can we get alloca?
1393 AC_FUNC_ALLOCA
1394
1395 dnl ** Working vfork?
1396 AC_FUNC_VFORK
1397
1398 dnl ** determine whether or not const works
1399 AC_C_CONST
1400
1401 dnl ** are we big endian?
1402 AC_C_BIGENDIAN
1403
1404 dnl ** check for leading underscores in symbol names
1405 FPTOOLS_UNDERSCORE
1406
1407 dnl ** check for ld, and whether ld has -x option
1408 AC_PATH_PROG(LdCmdRaw, ld)
1409 case $HostOS_CPP in
1410  mingw32) 
1411         if test ${OSTYPE} == "msys"
1412            then
1413              LdCmd=${LdCmdRaw}
1414            else
1415              LdCmd=`cygpath -w ${LdCmdRaw} | sed -e 's@\\\\@/@g' `
1416         fi
1417            ;;
1418  *) LdCmd=${LdCmdRaw}
1419     ;;
1420 esac
1421 AC_SUBST(LdCmd)
1422 FPTOOLS_LD_X
1423
1424 FP_EMPTY_STRUCTS
1425
1426 AC_MSG_CHECKING([for SIGPOLL])
1427 AC_EGREP_CPP(we_have_sigpoll,
1428 [#include <signal.h>
1429 #ifdef SIGPOLL
1430 we_have_sigpoll
1431 #endif
1432 ], AC_DEFINE([HAVE_SIGPOLL], [1], [Define to 1 if you have the sigpoll() function.]) haveSIGPOLL=yes, haveSIGPOLL=no)
1433 AC_MSG_RESULT([$haveSIGPOLL])
1434
1435 AC_MSG_CHECKING([for _SC_GETGR_R_SIZE_MAX])
1436 AC_EGREP_CPP(we_have_that_sysconf_thing,
1437 [
1438 #include <unistd.h>
1439 #ifdef _SC_GETGR_R_SIZE_MAX
1440 we_have_that_sysconf_thing
1441 #endif
1442 ],
1443 [AC_MSG_RESULT([yes])
1444 AC_DEFINE([HAVE_SC_GETGR_R_SIZE_MAX], [1], [Define to 1 if <unistd.h> defines _SC_GETGR_R_SIZE_MAX.])],
1445 [AC_MSG_RESULT([no])])
1446
1447 AC_MSG_CHECKING([for _SC_GETPW_R_SIZE_MAX])
1448 AC_EGREP_CPP(we_have_that_sysconf_thing,
1449 [
1450 #include <unistd.h>
1451 #ifdef _SC_GETPW_R_SIZE_MAX
1452 we_have_that_sysconf_thing
1453 #endif
1454 ],
1455 [AC_MSG_RESULT([yes])
1456 AC_DEFINE([HAVE_SC_GETPW_R_SIZE_MAX], [1], [Define to 1 if <unistd.h> defines _SC_GETPW_R_SIZE_MAX.])],
1457 [AC_MSG_RESULT([no])])
1458
1459 AC_OUTPUT(mk/config.mk, echo timestamp > mk/stamp-h )