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