[project @ 2004-04-07 12:17:09 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         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-threaded-rts (not used any more)
581 dnl --------------------------------------------------------------
582 AC_ARG_ENABLE(threaded-rts,
583 [AC_HELP_STRING([--enable-threaded-rts],
584 [DEPRECATED (backwards compatibility only). [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 FP_PROG_AR_NEEDS_RANLIB
756 FP_PROG_AR_SUPPORTS_INPUT
757
758 dnl ** Check to see whether ln -s works
759 AC_PROG_LN_S
760
761
762 dnl ** Find the path to sed
763 AC_PATH_PROG(SedCmd,sed)
764
765
766 dnl ** check for time command
767 AC_PATH_PROG(TimeCmd,time)
768
769 dnl ** check for tar
770 dnl   if GNU tar is named gtar, look for it first.
771 AC_PATH_PROGS(TarCmd,gtar tar,tar)
772
773 dnl ** check for jade/openjade & determine a working catalog
774 AC_PATH_PROGS(JadeCmd,openjade jade,jade)
775 FPTOOLS_DOCBOOK_CATALOG(Catalog, $JadeCmd, docs/fptools-both.dsl, 
776                         /etc/sgml/catalog /etc/sgml.catalog /usr/share/sgml/CATALOG.docbkdsl /usr/local/share/sgml/catalog glafp-utils/docbook/CATALOG*)
777 if test -z "$Catalog"; then
778   AC_MSG_RESULT([Warning: You will not be able to build the documentation.])
779 fi
780 case $Catalog in
781    yes) # assume it is provided by other means (e.g., SGML_CATALOG_FILES env var).
782         Catalog=
783         ;;
784    glafp*) 
785         case $HostOS_CPP in
786            mingw32)
787                   if test ${OSTYPE} == "msys"
788                     then
789                       Catalog=$hardtop/$Catalog
790                     else
791                       Catalog=`cygpath -w $hardtop/$Catalog`
792                   fi
793               ;;
794            *) Catalog=$hardtop/$Catalog
795               ;;
796         esac
797    ;;
798 esac   
799 AC_SUBST(Catalog)
800
801
802 dnl ** check for ghc-pkg command
803 changequote(, )dnl
804 ghc_pkg_guess=`echo $WithGhc | sed 's@ghc\([^/\\]*\)$@ghc-pkg\1@'`
805 changequote([, ])dnl
806 if $ghc_pkg_guess -l >/dev/null 2>/dev/null; then
807    GhcPkgCmd=$ghc_pkg_guess
808    AC_MSG_NOTICE([using $ghc_pkg_guess for ghc-pkg])
809 else
810    AC_PATH_PROG(GhcPkgCmd,ghc-pkg)
811 fi
812
813 AC_ARG_WITH(greencard,
814 [AC_HELP_STRING([--with-greencard=ARG],
815         [Use ARG as the path to greencard  [default=autodetct]])],
816 [
817 GreenCardCmd=$withval;
818 FPTOOLS_GREENCARD(3.00)
819 ]
820 )
821
822 AC_ARG_ENABLE(src-tree-happy,
823 [AC_HELP_STRING([--enable-src-tree-happy],
824         [Build and use source tree (fptools/happy) version of Happy. 
825          [default=autodetect]])],
826 [ if test x"$enableval" = x"yes"; then
827         UseSrcTreeHappy=YES
828   else
829         UseSrcTreeHappy=NO
830   fi
831 ],
832 [UseSrcTreeHappy=NO]
833 )
834 dnl ** check for installed happy binary + version
835 dnl    (don't do it if we're booting from .hc files though.)
836 if test "$BootingFromHc" = "NO"; then
837 FPTOOLS_HAPPY
838 fi;
839
840 AC_ARG_ENABLE(src-tree-haddock,
841 [AC_HELP_STRING([--enable-src-tree-haddock],
842         [Build and use source tree (fptools/haddock) version of Haddock.
843          [default=autodetect]])],
844 [ if test x"$enableval" = x"yes"; then
845         UseSrcTreeHaddock=YES
846   else
847         UseSrcTreeHaddock=NO
848   fi
849 ],
850 [UseSrcTreeHaddock=NO]
851 )
852 dnl ** check for installed haddock
853 FPTOOLS_HADDOCK
854
855 AC_ARG_ENABLE(src-tree-alex,
856 [AC_HELP_STRING([--enable-src-tree-alex],
857         [Build and use source tree (fptools/alex) version of Alex.
858          [default=autodetect]])],
859 [ if test x"$enableval" = x"yes"; then
860         UseSrcTreeAlex=YES
861   else
862         UseSrcTreeAlex=NO
863   fi
864 ],
865 [UseSrcTreeAlex=NO]
866 )
867 dnl ** check for installed alex binary + version
868 dnl    (don't do it if we're booting from .hc files though.)
869 if test "$BootingFromHc" = "NO"; then
870 FPTOOLS_ALEX
871 fi;
872
873 dnl --------------------------------------------------
874 dnl ### program checking section ends here ###
875 dnl --------------------------------------------------
876
877 dnl --------------------------------------------------
878 dnl * Platform header file and syscall feature tests
879 dnl ### checking the state of the local header files and syscalls ###
880
881 dnl ** check for full ANSI header (.h) files
882 AC_HEADER_STDC
883
884 dnl ** Enable large file support.  NB. do this before testing the type of
885 dnl    off_t, because it will affect the result of that test.
886 AC_SYS_LARGEFILE
887
888 dnl ** check for specific header (.h) files that we are interested in
889 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)
890 AC_CHECK_HEADER(unistd.h,[AC_CHECK_FUNCS(lchown)])
891
892 AC_CHECK_HEADER(readline/readline.h, [HaveReadlineReadlineH=YES], [HaveReadlineReadlineH=NO])
893 AC_CHECK_HEADER(readline/history.h, [HaveReadlineHistoryH=YES], [HaveReadlineHistoryH=NO])
894
895 if test $HaveReadlineReadlineH = YES && test $HaveReadlineHistoryH = YES ; then
896   GhcLibsWithReadline=YES
897   AC_DEFINE([HAVE_READLINE_HEADERS], [1], [Define to 1 if readline/readline.h and readline/history.h exist.])
898 else
899   GhcLibsWithReadline=NO
900   AC_DEFINE([HAVE_READLINE_HEADERS], [0], [Define to 1 if readline/readline.h and readline/history.h exist.])
901 fi
902 AC_SUBST(GhcLibsWithReadline)
903
904 dnl ** check for DOS include files
905 AC_CHECK_HEADERS(dos.h conio.h io.h std.h) 
906
907 dnl ** check for Windows include files
908 AC_CHECK_HEADERS(windows.h)
909
910 dnl ** check for OpenGL/GLUT include paths and libraries
911 FP_CHECK_GLUT
912
913 if test x"$no_GLU" = xyes; then
914   GhcLibsWithOpenGL=NO
915 else
916   GhcLibsWithOpenGL=YES
917 fi
918 AC_SUBST([GhcLibsWithOpenGL])
919
920 if test x"$no_GLUT" = xyes; then
921   GhcLibsWithGLUT=NO
922 else
923   GhcLibsWithGLUT=YES
924 fi
925 AC_SUBST([GhcLibsWithGLUT])
926
927 dnl ** check for OpenGL include files
928 fp_save_cppflags="$CPPFLAGS"
929 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
930 if test x"$use_quartz_opengl" = xyes; then
931   AC_CHECK_HEADERS([OpenGL/gl.h])
932 else
933   AC_CHECK_HEADERS([GL/gl.h])
934 fi
935 CPPFLAGS="$fp_save_cppflags"
936
937 dnl ** check if it is safe to include both <time.h> and <sys/time.h>
938 AC_HEADER_TIME
939
940 dnl dynamic loading include files
941 AC_CHECK_HEADERS(dlfcn.h dl.h) 
942
943 dnl ** check for farcalloc (in bcc)
944 AC_CHECK_HEADER(alloc.h,[AC_CHECK_FUNCS(farcalloc)])
945
946 dnl ** check for valloc (in sunos, solaris, mips, amiga, next, minix, ultrix)
947 AC_CHECK_HEADER(malloc.h,[AC_CHECK_FUNCS(valloc)])
948
949 dnl ** check for POSIX regex
950 HavePosixRegex=NO
951 AC_CHECK_HEADERS(regex.h,[AC_CHECK_FUNC(regcomp, [HavePosixRegex=YES])])
952 AC_SUBST(HavePosixRegex)
953
954 dnl ** how do we get a timezone name, and UTC offset ?
955 AC_STRUCT_TIMEZONE
956
957 dnl ** do we have altzone?
958 FP_DECL_ALTZONE
959
960 dnl ** does struct stat contain st_blksize?
961 AC_STRUCT_ST_BLKSIZE
962
963 dnl ** do we have long longs?
964 AC_CHECK_TYPES([long long])
965
966 dnl ** check what fields struct msghdr contains
967 AC_CHECK_HEADERS([sys/types.h sys/socket.h sys/uio.h])
968 AC_CHECK_MEMBERS([struct msghdr.msg_control, struct msghdr.msg_accrights], [], [], [#if HAVE_SYS_TYPES_H
969 # include <sys/types.h>
970 #endif
971 #if HAVE_SYS_SOCKET_H
972 # include <sys/socket.h>
973 #endif
974 #if HAVE_SYS_UIO_H
975 # include <sys/uio.h>
976 #endif])
977
978 dnl ** what are the sizes of various types
979 AC_CHECK_SIZEOF(char,               1)
980 AC_CHECK_SIZEOF(double,             8)
981 AC_CHECK_SIZEOF(float,              4)
982 AC_CHECK_SIZEOF(int,                4)
983 AC_CHECK_SIZEOF(long,               4)
984 if test "$ac_cv_type_long_long" = yes; then
985 AC_CHECK_SIZEOF(long long,          8)
986 fi
987 AC_CHECK_SIZEOF(short,              2)
988 AC_CHECK_SIZEOF(unsigned char,      1)
989 AC_CHECK_SIZEOF(unsigned int,       4)
990 AC_CHECK_SIZEOF(unsigned long,      4)
991 if test "$ac_cv_type_long_long" = yes; then
992 AC_CHECK_SIZEOF(unsigned long long, 8)
993 fi
994 AC_CHECK_SIZEOF(unsigned short,     2)
995 AC_CHECK_SIZEOF(void *,             4)
996
997 dnl ** what are alignment constraints on various types
998 FP_CHECK_ALIGNMENT(char)
999 FP_CHECK_ALIGNMENT(double)
1000 FP_CHECK_ALIGNMENT(float)
1001 FP_CHECK_ALIGNMENT(int)
1002 FP_CHECK_ALIGNMENT(long)
1003 if test "$ac_cv_type_long_long" = yes; then
1004 FP_CHECK_ALIGNMENT(long long)
1005 fi
1006 FP_CHECK_ALIGNMENT(short)
1007 FP_CHECK_ALIGNMENT(unsigned char)
1008 FP_CHECK_ALIGNMENT(unsigned int)
1009 FP_CHECK_ALIGNMENT(unsigned long)
1010 if test "$ac_cv_type_long_long" = yes; then
1011 FP_CHECK_ALIGNMENT(unsigned long long)
1012 fi
1013 FP_CHECK_ALIGNMENT(unsigned short)
1014 FP_CHECK_ALIGNMENT(void *)
1015
1016 dnl ** map standard C types and ISO types to Haskell types
1017 FPTOOLS_CHECK_HTYPE(char)
1018 FPTOOLS_CHECK_HTYPE(signed char)
1019 FPTOOLS_CHECK_HTYPE(unsigned char)
1020 FPTOOLS_CHECK_HTYPE(short)
1021 FPTOOLS_CHECK_HTYPE(unsigned short)
1022 FPTOOLS_CHECK_HTYPE(int)
1023 FPTOOLS_CHECK_HTYPE(unsigned int)
1024 FPTOOLS_CHECK_HTYPE(long)
1025 FPTOOLS_CHECK_HTYPE(unsigned long)
1026 if test "$ac_cv_type_long_long" = yes; then
1027 FPTOOLS_CHECK_HTYPE(long long)
1028 FPTOOLS_CHECK_HTYPE(unsigned long long)
1029 fi
1030 FPTOOLS_CHECK_HTYPE(float)
1031 FPTOOLS_CHECK_HTYPE(double)
1032 FPTOOLS_CHECK_HTYPE(ptrdiff_t)
1033 FPTOOLS_CHECK_HTYPE(size_t)
1034 FPTOOLS_CHECK_HTYPE(wchar_t)
1035 dnl Int32 is a HACK for non-ISO C compilers
1036 FPTOOLS_CHECK_HTYPE(sig_atomic_t, Int32)
1037 FPTOOLS_CHECK_HTYPE(clock_t)
1038 FPTOOLS_CHECK_HTYPE(time_t)
1039 FPTOOLS_CHECK_HTYPE(dev_t, Word32)
1040 FPTOOLS_CHECK_HTYPE(ino_t)
1041 FPTOOLS_CHECK_HTYPE(mode_t)
1042 FPTOOLS_CHECK_HTYPE(off_t)
1043 FPTOOLS_CHECK_HTYPE(pid_t)
1044 FPTOOLS_CHECK_HTYPE(gid_t)
1045 FPTOOLS_CHECK_HTYPE(uid_t)
1046 FPTOOLS_CHECK_HTYPE(cc_t)
1047 FPTOOLS_CHECK_HTYPE(speed_t)
1048 FPTOOLS_CHECK_HTYPE(tcflag_t)
1049 FPTOOLS_CHECK_HTYPE(blkcnt_t)
1050 FPTOOLS_CHECK_HTYPE(nlink_t)
1051 FPTOOLS_CHECK_HTYPE(ssize_t)
1052 FPTOOLS_CHECK_HTYPE(rlim_t)
1053 FPTOOLS_CHECK_HTYPE(wint_t)
1054
1055 dnl ** Map OpenGL data types to Haskell types
1056 if test $GhcLibsWithOpenGL = YES ; then
1057 FPTOOLS_CHECK_HTYPE(GLboolean)
1058 FPTOOLS_CHECK_HTYPE(GLbyte)
1059 FPTOOLS_CHECK_HTYPE(GLubyte)
1060 FPTOOLS_CHECK_HTYPE(GLshort)
1061 FPTOOLS_CHECK_HTYPE(GLushort)
1062 FPTOOLS_CHECK_HTYPE(GLint)
1063 FPTOOLS_CHECK_HTYPE(GLuint)
1064 FPTOOLS_CHECK_HTYPE(GLsizei)
1065 FPTOOLS_CHECK_HTYPE(GLenum)
1066 FPTOOLS_CHECK_HTYPE(GLbitfield)
1067 FPTOOLS_CHECK_HTYPE(GLfloat)
1068 FPTOOLS_CHECK_HTYPE(GLclampf)
1069 FPTOOLS_CHECK_HTYPE(GLdouble)
1070 FPTOOLS_CHECK_HTYPE(GLclampd)
1071 fi
1072
1073 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>
1074 #include <errno.h>])
1075
1076 dnl ** can we open files in binary mode?
1077 FP_CHECK_CONST([O_BINARY], [#include <fcntl.h>], [0])
1078
1079 FP_CHECK_FUNC([WinExec],
1080   [@%:@include <windows.h>], [WinExec("",0)])
1081
1082 FP_CHECK_FUNC([GetModuleFileName],
1083   [@%:@include <windows.h>], [GetModuleFileName((HMODULE)0,(LPTSTR)0,0)])
1084
1085 dnl ** check return type of signal handlers
1086 dnl Foo: assumes we can use prototypes.
1087 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
1088 dnl AC_CACHE_CHECK([type of signal handlers], ac_cv_type_signal_handler,
1089 dnl [AC_TRY_COMPILE([#include <sys/types.h>
1090 dnl #include <signal.h>
1091 dnl #ifdef signal
1092 dnl #undef signal
1093 dnl #endif
1094 dnl void (*signal (int, void (*)(int)))(int);
1095 dnl ],
1096 dnl [int i;], 
1097 dnl ac_cv_type_signal_handler=void_int,
1098 dnl ac_cv_type_signal_handler=int_void)])
1099 dnl if test "$ac_cv_type_signal_handler" = void_int; then
1100 dnl AC_DEFINE(VOID_INT_SIGNALS)
1101 dnl fi
1102
1103 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
1104 AC_TYPE_SIGNAL
1105 if test "$ac_cv_type_signal" = void; then
1106   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).])
1107 fi
1108
1109 dnl ** check for more functions
1110 AC_CHECK_FUNCS(strcasecmp _stricmp stricmp strcmpi)
1111 AC_CHECK_FUNCS(strcmp)
1112 AC_CHECK_FUNCS(realpath _fullpath)  
1113 AC_CHECK_FUNCS(PBHSetVolSync macsystem)  
1114 AC_CHECK_FUNCS(fgetpos fsetpos fseek ftell)
1115 AC_CHECK_FUNCS(vsnprintf _vsnprintf)
1116 AC_CHECK_FUNCS(snprintf  _snprintf )  
1117 AC_CHECK_FUNCS(popen     _popen )  
1118 AC_CHECK_FUNCS(pclose    _pclose )  
1119 AC_CHECK_FUNCS(setenv unsetenv)
1120
1121
1122 dnl ** check for specific library functions that we are interested in
1123 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)
1124
1125 dnl ** Solaris2 needs additionl flag for getpw*_r()
1126 case "$TargetPlatform" in
1127   *-solaris2*)
1128     unix_SRC_HSC2HS_OPTS="-D_POSIX_PTHREAD_SEMANTICS"
1129     AC_SUBST(unix_SRC_HSC2HS_OPTS)
1130   ;;
1131 esac
1132
1133 dnl ** check whether this machine has gmp3 installed
1134 AC_CHECK_LIB(gmp,  __gmpz_fdiv_qr, HaveLibGmp=YES; LibGmp=gmp,
1135   AC_CHECK_LIB(gmp3, __gmpz_fdiv_qr,  HaveLibGmp=YES; LibGmp=gmp3,
1136     HaveLibGmp=NO; LibGmp=not-installed))
1137 AC_SUBST(HaveLibGmp)
1138 AC_SUBST(LibGmp)
1139
1140 dnl ** (Mac OS X only: check for HaskellSupport.framework)
1141 HaveFrameworkHaskellSupport=NO
1142 if test $HostPlatform = "powerpc-apple-darwin"; then
1143  AC_MSG_CHECKING([for HaskellSupport.framework])
1144  save_libs="$LIBS"
1145  LIBS="-framework HaskellSupport"
1146  AC_TRY_LINK_FUNC(__gmpz_fdiv_qr, HaveFrameworkHaskellSupport=YES,)
1147  if test $HaveFrameworkHaskellSupport = YES; then
1148   AC_DEFINE([HAVE_FRAMEWORK_HASKELLSUPPORT], [1], [Define to 1 if the HaskellSupport.framework is installed (Mac OS X only).])
1149  fi;
1150  LIBS="$save_libs"
1151  AC_MSG_RESULT([$HaveFrameworkHaskellSupport])
1152 fi;
1153 AC_SUBST(HaveFrameworkHaskellSupport)
1154
1155 dnl ** check for mingwex library
1156 AC_CHECK_LIB(mingwex, closedir, HaveLibMingwEx=YES, HaveLibMingwEx=NO)
1157 AC_SUBST(HaveLibMingwEx)
1158
1159 if test $HaveLibMingwEx = YES ; then
1160   AC_DEFINE([HAVE_MINGWEX], [1], [Define to 1 if you have the mingwex library.])
1161 fi
1162
1163 if test "$HaveLibGmp" = "NO"; then
1164 if test "$HostArch_CPP" = "ia64" -o "$HostArch_CPP" = "mipseb" ; then
1165 AC_MSG_ERROR([You need to install libgmp (the in-tree version does not work on IA64 or mips64).])
1166 fi;
1167 fi;
1168
1169 dnl ** check whether this machine has BFD and liberty installed (used for debugging)
1170 dnl    the order of these tests matters: bfd needs liberty
1171 AC_CHECK_LIB(iberty, xmalloc)
1172 AC_CHECK_LIB(bfd,    bfd_init)
1173
1174 dnl ** check for wide-char classifications
1175 dnl FreeBSD has an emtpy wctype.h, so test one of the affected
1176 dnl functions if it's really there.
1177 AC_CHECK_HEADERS(wctype.h,
1178   [AC_CHECK_FUNCS(iswspace)]
1179 )
1180
1181 dnl ** check for readline, for Hugs and hslibs' Readline
1182 dnl ncurses supersedes termcap and curses, but for compatibility,
1183 dnl we have to check for all...
1184 AC_CHECK_LIB(ncurses, tputs, HaveLibTermcap=YES; LibTermcap=ncurses,
1185   AC_CHECK_LIB(termcap, tputs, HaveLibTermcap=YES; LibTermcap=termcap,
1186     AC_CHECK_LIB(curses, tputs, HaveLibTermcap=YES; LibTermcap=curses,
1187       HaveLibTermcap=NO; LibTermcap=not-installed)))
1188
1189 if test $HaveLibTermcap = YES ; then
1190   LIBS="-l$LibTermcap $LIBS"
1191   AC_CHECK_LIB(readline, readline, HaveLibReadline=YES, HaveLibReadline=NO)
1192 fi
1193
1194 if test $HaveLibTermcap = YES && test x"$HaveLibReadline" = xYES ; then
1195   AC_DEFINE([HAVE_READLINE_LIBS], [1], [Define to 1 if readline plus any additional libs needed for it exist.])
1196   LibsReadline="readline $LibTermcap"
1197 else
1198   AC_DEFINE([HAVE_READLINE_LIBS], [0], [Define to 1 if readline plus any additional libs needed for it exist.])
1199   LibsReadline=
1200 fi
1201 AC_SUBST(LibsReadline)
1202
1203 if test "$HaveLibReadline"; then
1204   AC_CHECK_LIB(readline, rl_erase_empty_line,
1205     [AC_DEFINE([HAVE_READLINE_4], [1], [Define to 1 if readline has version >= 4.0.])],
1206     [AC_DEFINE([HAVE_READLINE_4], [0], [Define to 1 if readline has version >= 4.0.])])
1207   AC_CHECK_LIB(readline, rl_free_undo_list,
1208     [AC_DEFINE([HAVE_READLINE_4_2], [1], [Define to 1 if readline has version >= 4.2.])],
1209     [AC_DEFINE([HAVE_READLINE_4_2], [0], [Define to 1 if readline has version >= 4.2.])])
1210 else
1211   AC_DEFINE([HAVE_READLINE_4], [0], [Define to 1 if readline has version >= 4.0.])
1212   AC_DEFINE([HAVE_READLINE_4_2], [0], [Define to 1 if readline has version >= 4.2.])
1213 fi
1214
1215 dnl ** check for math library
1216 AC_CHECK_LIB([m], [atan], [LIBS="-lm $LIBS"; LIBM="-lm"], [LIBM=])
1217 AC_SUBST([LIBM])
1218
1219 dnl ** check for X Window System
1220 AC_PATH_XTRA()
1221
1222 if test "$no_x" = yes; then
1223   GhcLibsWithX11=NO
1224 else
1225   GhcLibsWithX11=YES
1226 fi
1227 AC_SUBST([GhcLibsWithX11])
1228
1229 dnl ################################################################
1230 dnl Check for libraries
1231 dnl ################################################################
1232
1233 dnl ** check for libdl & RTLD_NEXT
1234
1235 dnl (Mac OS X only) ... but don't check if we already have the
1236 dnl HaskellSupport.framework
1237
1238 if test $HaveFrameworkHaskellSupport = YES; then
1239     HaveLibDL=NO
1240     HaveRtldNext=NO
1241     HaveRtldLocal=YES
1242     AC_DEFINE([HAVE_RTLDLOCAL], [1], [Define to 1 if RTLD_LOCAL is available.])
1243     HaveRtldGlobal=YES
1244     AC_DEFINE([HAVE_RTLDGLOBAL], [1], [Define to 1 if RTLD_GLOBAL is available.])
1245     HaveRtldNow=YES
1246     AC_DEFINE([HAVE_RTLDNOW], [1], [Define to 1 if we can see RTLD_NOW in dlfcn.h.])
1247     AC_SUBST(HaveLibDL)
1248     AC_SUBST(HaveRtldNext)
1249     AC_SUBST(HaveRtldLocal)
1250     AC_SUBST(HaveRtldGlobal)
1251     AC_SUBST(HaveRtldNow)
1252 else
1253     AC_CHECK_LIB(dl, dlopen, 
1254         [HaveLibDL=YES
1255          AC_DEFINE([HAVE_LIBDL], [1], [Define to 1 if you need -ldl to get dlopen().])
1256          LIBS="$LIBS -ldl"], 
1257         [HaveLibDL=NO])
1258     AC_CHECK_FUNCS(dlopen)
1259     AC_SUBST(HaveLibDL)
1260
1261     dnl ** sometimes RTLD_NEXT is hidden in #ifdefs we really don't wan to set
1262     AC_MSG_CHECKING(for RTLD_NEXT from dlfcn.h)
1263     AC_EGREP_CPP(yes,
1264     [
1265      #include <dlfcn.h>
1266      #ifdef RTLD_NEXT
1267             yes
1268      #endif
1269     ], [
1270       AC_MSG_RESULT(yes)
1271       AC_DEFINE([HAVE_RTLDNEXT], [1], [Define to 1 if we can see RTLD_NEXT in dlfcn.h.])
1272       HaveRtldNext=YES
1273     ], [
1274       AC_MSG_RESULT(no)
1275       HaveRtldNext=NO
1276       ])    
1277     AC_SUBST(HaveRtldNext)
1278
1279     dnl ** RTLD_LOCAL isn't available on cygwin or openbsd
1280     AC_MSG_CHECKING(for RTLD_LOCAL from dlfcn.h)
1281     AC_EGREP_CPP(yes,
1282     [
1283      #include <dlfcn.h>
1284      #ifdef RTLD_LOCAL
1285             yes
1286      #endif
1287     ], [
1288       AC_MSG_RESULT(yes)
1289       AC_DEFINE(HAVE_RTLDLOCAL)
1290       HaveRtldLocal=YES
1291     ], [
1292       AC_MSG_RESULT(no)
1293       HaveRtldLocal=NO
1294       ])    
1295     AC_SUBST(HaveRtldLocal)
1296
1297     dnl ** RTLD_GLOBAL isn't available on openbsd
1298     AC_MSG_CHECKING(for RTLD_GLOBAL from dlfcn.h)
1299     AC_EGREP_CPP(yes,
1300     [
1301      #include <dlfcn.h>
1302      #ifdef RTLD_GLOBAL
1303             yes
1304      #endif
1305     ], [
1306       AC_MSG_RESULT(yes)
1307       AC_DEFINE(HAVE_RTLDGLOBAL)
1308       HaveRtldGlobal=YES
1309     ], [
1310       AC_MSG_RESULT(no)
1311       HaveRtldGlobal=NO
1312       ])    
1313     AC_SUBST(HaveRtldGlobal)
1314
1315     dnl ** RTLD_NOW isn't available on openbsd
1316     AC_MSG_CHECKING(for RTLD_NOW from dlfcn.h)
1317     AC_EGREP_CPP(yes,
1318     [
1319      #include <dlfcn.h>
1320      #ifdef RTLD_NOW
1321             yes
1322      #endif
1323     ], [
1324       AC_MSG_RESULT(yes)
1325       AC_DEFINE(HAVE_RTLDNOW)
1326       HaveRtldNow=YES
1327     ], [
1328       AC_MSG_RESULT(no)
1329       HaveRtldNow=NO
1330       ])    
1331     AC_SUBST(HaveRtldNow)
1332 fi
1333
1334 dnl ---------- usleep ----------
1335 dnl --- stolen from guile configure ---
1336 dnl --- FIXME: /usr/include/unistd.h can't be right?
1337
1338 ### On some systems usleep has no return value.  If it does have one,
1339 ### we'd like to return it; otherwise, we'll fake it.
1340 AC_CACHE_CHECK([return type of usleep], cv_func_usleep_return_type,
1341   [AC_EGREP_HEADER(changequote(<, >)<void[      ]+usleep>changequote([, ]),
1342                    /usr/include/unistd.h,
1343                    [cv_func_usleep_return_type=void],
1344                    [cv_func_usleep_return_type=int])])
1345 case "$cv_func_usleep_return_type" in
1346   "void" )
1347     AC_DEFINE([USLEEP_RETURNS_VOID], [1], [Define if the system headers declare usleep to return void.])
1348   ;;
1349 esac
1350
1351 dnl --------------------------------------------------
1352 dnl * test for in_addr_t
1353 dnl --------------------------------------------------
1354 AC_MSG_CHECKING(for in_addr_t in netinet/in.h)
1355 AC_EGREP_HEADER(in_addr_t, netinet/in.h,
1356  [ AC_DEFINE([HAVE_IN_ADDR_T], [1], [Define to 1 if in_addr_t is available.]) AC_MSG_RESULT(yes) ],
1357  AC_MSG_RESULT(no))
1358
1359 dnl --------------------------------------------------
1360 dnl * test for Linux sendfile(2)
1361 dnl --------------------------------------------------
1362 AC_MSG_CHECKING(for sendfile in sys/sendfile.h)
1363 AC_EGREP_HEADER(sendfile, sys/sendfile.h,
1364  [ AC_DEFINE([HAVE_LINUX_SENDFILE], [1], [Define to 1 if you have a Linux sendfile(2) implementation.]) AC_MSG_RESULT(yes) ],
1365  AC_MSG_RESULT(no))
1366
1367 dnl --------------------------------------------------
1368 dnl * test for BSD sendfile(2)
1369 dnl --------------------------------------------------
1370 AC_MSG_CHECKING(for sendfile in sys/socket.h)
1371 AC_EGREP_HEADER(sendfile, sys/socket.h,
1372  [ AC_DEFINE([HAVE_BSD_SENDFILE], [1], [Define to 1 if you have a BSDish sendfile(2) implementation.]) AC_MSG_RESULT(yes) ],
1373  AC_MSG_RESULT(no))
1374
1375 dnl --------------------------------------------------
1376 dnl * test for GTK+
1377 dnl --------------------------------------------------
1378
1379 AC_PATH_PROGS([GTK_CONFIG], [gtk-config gtk12-config])
1380 if test -n "$GTK_CONFIG"; then
1381   AC_CACHE_CHECK([for version of GTK+], [fp_cv_gtk_version],
1382     [fp_cv_gtk_version=`$GTK_CONFIG --version`])
1383   FP_COMPARE_VERSIONS([$fp_cv_gtk_version], [-lt], [1.2],
1384     [AC_MSG_WARN([GTK+ not usable, need at least version 1.2])
1385      GTK_CONFIG=])
1386 fi
1387 AC_SUBST([GTK_CONFIG])
1388
1389 dnl --------------------------------------------------
1390 dnl * Miscellaneous feature tests
1391 dnl --------------------------------------------------
1392
1393 dnl ** can we get alloca?
1394 AC_FUNC_ALLOCA
1395
1396 dnl ** Working vfork?
1397 AC_FUNC_VFORK
1398
1399 dnl ** determine whether or not const works
1400 AC_C_CONST
1401
1402 dnl ** are we big endian?
1403 AC_C_BIGENDIAN
1404
1405 dnl ** check for leading underscores in symbol names
1406 FPTOOLS_UNDERSCORE
1407
1408 dnl ** check for ld, and whether ld has -x option
1409 AC_PATH_PROG(LdCmdRaw, ld)
1410 case $HostOS_CPP in
1411  mingw32) 
1412         if test ${OSTYPE} == "msys"
1413            then
1414              LdCmd=${LdCmdRaw}
1415            else
1416              LdCmd=`cygpath -w ${LdCmdRaw} | sed -e 's@\\\\@/@g' `
1417         fi
1418            ;;
1419  *) LdCmd=${LdCmdRaw}
1420     ;;
1421 esac
1422 AC_SUBST(LdCmd)
1423 FPTOOLS_LD_X
1424
1425 FP_EMPTY_STRUCTS
1426
1427 AC_MSG_CHECKING([for SIGPOLL])
1428 AC_EGREP_CPP(we_have_sigpoll,
1429 [#include <signal.h>
1430 #ifdef SIGPOLL
1431 we_have_sigpoll
1432 #endif
1433 ], AC_DEFINE([HAVE_SIGPOLL], [1], [Define to 1 if you have the sigpoll() function.]) haveSIGPOLL=yes, haveSIGPOLL=no)
1434 AC_MSG_RESULT([$haveSIGPOLL])
1435
1436 AC_MSG_CHECKING([for _SC_GETGR_R_SIZE_MAX])
1437 AC_EGREP_CPP(we_have_that_sysconf_thing,
1438 [
1439 #include <unistd.h>
1440 #ifdef _SC_GETGR_R_SIZE_MAX
1441 we_have_that_sysconf_thing
1442 #endif
1443 ],
1444 [AC_MSG_RESULT([yes])
1445 AC_DEFINE([HAVE_SC_GETGR_R_SIZE_MAX], [1], [Define to 1 if <unistd.h> defines _SC_GETGR_R_SIZE_MAX.])],
1446 [AC_MSG_RESULT([no])])
1447
1448 AC_MSG_CHECKING([for _SC_GETPW_R_SIZE_MAX])
1449 AC_EGREP_CPP(we_have_that_sysconf_thing,
1450 [
1451 #include <unistd.h>
1452 #ifdef _SC_GETPW_R_SIZE_MAX
1453 we_have_that_sysconf_thing
1454 #endif
1455 ],
1456 [AC_MSG_RESULT([yes])
1457 AC_DEFINE([HAVE_SC_GETPW_R_SIZE_MAX], [1], [Define to 1 if <unistd.h> defines _SC_GETPW_R_SIZE_MAX.])],
1458 [AC_MSG_RESULT([no])])
1459
1460 AC_OUTPUT(mk/config.mk, echo timestamp > mk/stamp-h )