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