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)
6 # (c) The AQUA Project, Glasgow University, 1994-2004
8 # Configure script template for the Glasgow functional programming tools
10 # Process with 'autoreconf' to get a working configure script.
12 # For the generated configure script, do "./configure --help" to
13 # see what flags are available. (Better yet, read the documentation!)
16 AC_INIT([fptools build system], [1.0], [cvs-fptools@haskell.org], [fptools])
18 # First off, a distrib sanity check..
19 AC_CONFIG_SRCDIR([mk/config.mk.in])
21 dnl * We require autoconf version 2.52
22 dnl We need 2.50 due to the use of AC_SYS_LARGEFILE and AC_MSG_NOTICE.
23 dnl We need 2.52 due to the use of AS_TR_CPP and AS_TR_SH.
26 dnl * Declare subdirectories that have a private configure script
28 dnl After the toplevel configuration is complete, the script will recurse into
29 dnl these subdirectories if they exist. The use of a cache file makes repeated
31 AC_CONFIG_SUBDIRS([ghc libraries])
33 # -------------------------------------------------------------------------
34 # Prepare to generate the following header files
37 AC_CONFIG_HEADER(mk/config.h)
39 # No, semi-sadly, we don't do `--srcdir'...
40 if test x"$srcdir" != 'x.' ; then
41 echo "This configuration does not support the \`--srcdir' option.."
45 dnl--------------------------------------------------------------------
46 dnl * Choose host(/target/build) platform
47 dnl--------------------------------------------------------------------
49 dnl Guess host/target/build platform(s) if necessary.
52 # "$host" defaults to "$target"
53 if test "x$host" = xNONE ; then
57 dnl ** canonicalize platform names
58 BuildPlatform=`/bin/sh $srcdir/config.sub $build` || exit 1
59 HostPlatform=`/bin/sh $srcdir/config.sub $host` || exit 1
60 TargetPlatform=`/bin/sh $srcdir/config.sub $target` || exit 1
62 if test x"$TargetPlatform" != x"$HostPlatform" ; then
63 echo "GHC configuration does not support differing host/target (i.e., cross-compiling)"
69 # The following will be more difficult when we *are* cross-compiling.
70 # Suitable names to slam in *_CPP are in platform.h.in.
71 # We also record the architecture, vendor, and operating system (OS)
74 alpha*-dec-osf[[12]]*)
75 HostPlatform=alpha-dec-osf1 # canonicalise for our purposes
76 TargetPlatform=alpha-dec-osf1 # this will work for now... (hack)
77 BuildPlatform=alpha-dec-osf1 # hack
78 HostPlatform_CPP='alpha_dec_osf1'
83 alpha*-dec-osf[[345]]*)
84 HostPlatform=alpha-dec-osf3 # canonicalise for our purposes
85 TargetPlatform=alpha-dec-osf3 # this will work for now... (hack)
86 BuildPlatform=alpha-dec-osf3 # hack
87 HostPlatform_CPP='alpha_dec_osf3'
92 alpha*-unknown-linux*)
93 HostPlatform=alpha-unknown-linux
94 TargetPlatform=alpha-unknown-linux
95 BuildPlatform=alpha-unknown-linux
96 HostPlatform_CPP='alpha_unknown_linux'
98 HostVendor_CPP='unknown'
101 alpha*-unknown-freebsd*)
102 HostPlatform=alpha-unknown-freebsd
103 TargetPlatform=alpha-unknown-freebsd
104 BuildPlatform=alpha-unknown-freebsd
105 HostPlatform_CPP='alpha_unknown_freebsd'
107 HostVendor_CPP='unknown'
110 alpha*-unknown-openbsd*)
111 HostPlatform=alpha-unknown-openbsd
112 TargetPlatform=alpha-unknown-openbsd
113 BuildPlatform=alpha-unknown-openbsd
114 HostPlatform_CPP='alpha_unknown_openbsd'
116 HostVendor_CPP='unknown'
119 amd64-*-openbsd*|x86_64-*-openbsd*)
120 HostPlatform=x86_64-unknown-openbsd
121 TargetPlatform=x86_64-unknown-openbsd
122 BuildPlatform=x86_64-unknown-openbsd
123 HostPlatform_CPP='x86_64_unknown_openbsd'
124 HostArch_CPP='x86_64'
125 HostVendor_CPP='unknown'
129 HostPlatform=arm-unknown-linux # hack again
130 TargetPlatform=arm-unknown-linux
131 BuildPlatform=arm-unknown-linux
132 HostPlatform_CPP='arm_unknown_linux'
134 HostVendor_CPP='unknown'
138 HostPlatform=arm-unknown-openbsd
139 TargetPlatform=arm-unknown-openbsd
140 BuildPlatform=arm-unknown-openbsd
141 HostPlatform_CPP='arm_unknown_openbsd'
143 HostVendor_CPP='unknown'
147 HostPlatform=hppa-unknown-linux # hack again
148 TargetPlatform=hppa-unknown-linux
149 BuildPlatform=hppa-unknown-linux
150 HostPlatform_CPP='hppa_unknown_linux'
152 HostVendor_CPP='unknown'
156 HostPlatform=hppa-unknown-openbsd # hack again
157 TargetPlatform=hppa-unknown-openbsd
158 BuildPlatform=hppa-unknown-openbsd
159 HostPlatform_CPP='hppa_unknown_openbsd'
161 HostVendor_CPP='unknown'
165 HostPlatform=hppa1.1-hp-hpux # canonicalise for our purposes (hack)
166 TargetPlatform=hppa1.1-hp-hpux
167 BuildPlatform=hppa1.1-hp-hpux
168 HostPlatform_CPP='hppa1_1_hp_hpux'
169 HostArch_CPP='hppa1_1'
173 i[[3456]]86-*-linuxaout*)
174 HostPlatform=i386-unknown-linuxaout # hack again
175 TargetPlatform=i386-unknown-linuxaout
176 BuildPlatform=i386-unknown-linuxaout
177 HostPlatform_CPP='i386_unknown_linuxaout'
179 HostVendor_CPP='unknown'
180 HostOS_CPP='linuxaout'
182 i[[3456]]86-*-linux*)
183 HostPlatform=i386-unknown-linux # hack again
184 TargetPlatform=i386-unknown-linux
185 BuildPlatform=i386-unknown-linux
186 HostPlatform_CPP='i386_unknown_linux'
188 HostVendor_CPP='unknown'
191 i[[3456]]86-*-freebsd[[3-9]]*) # FreeBSD 3.0+ uses ELF
192 HostPlatform=i386-unknown-freebsd # hack again
193 TargetPlatform=i386-unknown-freebsd
194 BuildPlatform=i386-unknown-freebsd
195 HostPlatform_CPP='i386_unknown_freebsd'
197 HostVendor_CPP='unknown'
200 i[[3456]]86-*-freebsd2*) # Older FreeBSDs are a.out
201 HostPlatform=i386-unknown-freebsd2 # hack again
202 TargetPlatform=i386-unknown-freebsd2
203 BuildPlatform=i386-unknown-freebsd2
204 HostPlatform_CPP='i386_unknown_freebsd2'
206 HostVendor_CPP='unknown'
207 HostOS_CPP='freebsd2'
209 i[[3456]]86-*-netbsd*)
210 HostPlatform=i386-unknown-netbsd # hack again
211 TargetPlatform=i386-unknown-netbsd
212 BuildPlatform=i386-unknown-netbsd
213 HostPlatform_CPP='i386_unknown_netbsd'
215 HostVendor_CPP='unknown'
218 i[[3456]]86-*-openbsd*)
219 HostPlatform=i386-unknown-openbsd # hack again
220 TargetPlatform=i386-unknown-openbsd
221 BuildPlatform=i386-unknown-openbsd
222 HostPlatform_CPP='i386_unknown_openbsd'
224 HostVendor_CPP='unknown'
227 i[[3456]]86-*-solaris2*)
228 HostPlatform=i386-unknown-solaris2 # hack again
229 TargetPlatform=i386-unknown-solaris2
230 BuildPlatform=i386-unknown-solaris2
231 HostPlatform_CPP='i386_unknown_solaris2'
233 HostVendor_CPP='unknown'
234 HostOS_CPP='solaris2'
236 i[[3456]]86-*-cygwin*)
237 HostPlatform=i386-unknown-cygwin32 # hack again
238 TargetPlatform=i386-unknown-cygwin32
239 BuildPlatform=i386-unknown-cygwin32
240 HostPlatform_CPP='i386_unknown_cygwin32'
242 HostVendor_CPP='unknown'
243 HostOS_CPP='cygwin32'
246 i[[3456]]86-*-mingw32*)
247 HostPlatform=i386-unknown-mingw32 # hack again
248 TargetPlatform=i386-unknown-mingw32
249 BuildPlatform=i386-unknown-mingw32
250 HostPlatform_CPP='i386_unknown_mingw32'
252 HostVendor_CPP='unknown'
257 HostPlatform=ia64-unknown-linux # hack again
258 TargetPlatform=ia64-unknown-linux
259 BuildPlatform=ia64-unknown-linux
260 HostPlatform_CPP='ia64_unknown_linux'
262 HostVendor_CPP='unknown'
266 HostPlatform=x86_64-unknown-linux
267 TargetPlatform=x86_64-unknown-linux
268 BuildPlatform=x86_64-unknown-linux
269 HostPlatform_CPP='x86_64_unknown_linux'
270 HostArch_CPP='x86_64'
271 HostVendor_CPP='unknown'
275 HostPlatform=m68k-unknown-linux # hack again
276 TargetPlatform=m68k-unknown-linux
277 BuildPlatform=m68k-unknown-linux
278 HostPlatform_CPP='m68k_unknown_linux'
280 HostVendor_CPP='unknown'
284 HostPlatform_CPP='m68k_next_nextstep2'
286 HostVendor_CPP='next'
287 HostOS_CPP='nextstep2'
290 HostPlatform_CPP='m68k_next_nextstep3'
292 HostVendor_CPP='next'
293 HostOS_CPP='nextstep3'
295 i[[3456]]86-next-nextstep3)
296 HostPlatform=i386-next-nextstep3 # hack again
297 TargetPlatform=i386-next-nextstep3
298 BuildPlatform=i386-next-nextstep3
299 HostPlatform_CPP='i386_next_nextstep3'
301 HostVendor_CPP='next'
302 HostOS_CPP='nextstep3'
305 HostPlatform=m68k-unknown-openbsd
306 TargetPlatform=m68k-unknown-openbsd
307 BuildPlatform=m68k-unknown-openbsd
308 HostPlatform_CPP='m68k_unknown_openbsd'
310 HostVendor_CPP='unknown'
314 HostPlatform=m68k-unknown-netbsd
315 TargetPlatform=m68k-unknown-netbsd
316 BuildPlatform=m68k-unknown-netbsd
317 HostPlatform_CPP='m68k_unknown_netbsd'
319 HostVendor_CPP='unknown'
323 HostPlatform=m68k-sun-sunos4
324 TargetPlatform=m68k-sun-sunos4 #hack
325 BuildPlatform=m68k-sun-sunos4 #hack
326 HostPlatform_CPP='m68k_sun_sunos4'
332 HostPlatform=m88k-unknown-openbsd
333 TargetPlatform=m88k-unknown-openbsd
334 BuildPlatform=m88k-unknown-openbsd
335 HostPlatform_CPP='m88k_unknown_openbsd'
337 HostVendor_CPP='unknown'
341 HostPlatform=mips-unknown-linux # hack again
342 TargetPlatform=mips-unknown-linux
343 BuildPlatform=mips-unknown-linux
344 HostPlatform_CPP='mips_unknown_linux'
346 HostVendor_CPP='unknown'
350 HostPlatform_CPP='mips_dec_ultrix'
351 HostArch_CPP='mipsel' # NB a little different
356 HostPlatform=mips-sgi-irix
357 TargetPlatform=mips-sgi-irix #hack
358 BuildPlatform=mips-sgi-irix #hack
359 HostPlatform_CPP='mips_sgi_irix'
360 HostArch_CPP='mipseb' # NB a little different
365 HostPlatform=rs6000-ibm-aix
366 TargetPlatform=rs6000-ibm-aix #hack
367 BuildPlatform=rs6000-ibm-aix #hack
368 HostPlatform_CPP='rs6000_ibm_aix'
369 HostArch_CPP='rs6000'
374 HostPlatform=powerpc-ibm-aix
375 TargetPlatform=powerpc-ibm-aix #hack
376 BuildPlatform=powerpc-ibm-aix #hack
377 HostPlatform_CPP='powerpc_ibm_aix'
378 HostArch_CPP='powerpc'
382 powerpc-apple-darwin*)
383 HostPlatform=powerpc-apple-darwin
384 TargetPlatform=powerpc-apple-darwin #hack
385 BuildPlatform=powerpc-apple-darwin #hack
386 HostPlatform_CPP='powerpc_apple_darwin'
387 HostArch_CPP='powerpc'
388 HostVendor_CPP='apple'
391 powerpc-unknown-linux*)
392 HostPlatform=powerpc-unknown-linux
393 TargetPlatform=powerpc-unknown-linux
394 BuildPlatform=powerpc-unknown-linux
395 HostPlatform_CPP='powerpc_unknown_linux'
396 HostArch_CPP='powerpc'
397 HostVendor_CPP='unknown'
400 powerpc-unknown-openbsd*)
401 HostPlatform=powerpc-unknown-openbsd
402 TargetPlatform=powerpc-unknown-openbsd
403 BuildPlatform=powerpc-unknown-openbsd
404 HostPlatform_CPP='powerpc_unknown_openbsd'
405 HostArch_CPP='powerpc'
406 HostVendor_CPP='unknown'
409 powerpc64-unknown-linux*)
410 HostPlatform=powerpc64-unknown-linux
411 TargetPlatform=powerpc64-unknown-linux
412 BuildPlatform=powerpc64-unknown-linux
413 HostPlatform_CPP='powerpc64_unknown_linux'
414 HostArch_CPP='powerpc64'
415 HostVendor_CPP='unknown'
420 HostPlatform=s390-ibm-linux
421 TargetPlatform=s390-ibm-linux #hack
422 BuildPlatform=s390-ibm-linux #hack
423 HostPlatform_CPP='s390_ibm_linux'
429 HostPlatform=sparc-sun-sunos4
430 TargetPlatform=sparc-sun-sunos4 #hack
431 BuildPlatform=sparc-sun-sunos4 #hack
432 HostPlatform_CPP='sparc_sun_sunos4'
438 HostPlatform=sparc-sun-solaris2
439 TargetPlatform=sparc-sun-solaris2 #hack
440 BuildPlatform=sparc-sun-solaris2 #hack
441 HostPlatform_CPP='sparc_sun_solaris2'
444 HostOS_CPP='solaris2'
447 HostPlatform=sparc-unknown-linux
448 TargetPlatform=sparc-unknown-linux
449 BuildPlatform=sparc-unknown-linux
450 HostPlatform_CPP='sparc_unknown_linux'
452 HostVendor_CPP='unknown'
456 HostPlatform=sparc-unknown-openbsd
457 TargetPlatform=sparc-unknown-openbsd
458 BuildPlatform=sparc-unknown-openbsd
459 HostPlatform_CPP='sparc_unknown_openbsd'
461 HostVendor_CPP='unknown'
465 HostPlatform=sparc64-unknown-openbsd
466 TargetPlatform=sparc64-unknown-openbsd
467 BuildPlatform=sparc64-unknown-openbsd
468 HostPlatform_CPP='sparc64_unknown_openbsd'
469 HostArch_CPP='sparc64'
470 HostVendor_CPP='unknown'
474 HostPlatform=vax-unknown-openbsd
475 TargetPlatform=vax-unknown-openbsd
476 BuildPlatform=vax-unknown-openbsd
477 HostPlatform_CPP='vax_unknown_openbsd'
479 HostVendor_CPP='unknown'
483 echo "Unrecognised platform: $HostPlatform"
487 echo "Canonicalised to: $HostPlatform"
488 test x"$HostPlatform" != x"$TargetPlatform" && echo "Target platform set to $TargetPlatform"
489 test x"$BuildPlatform" != x"$HostPlatform" && echo "Build platform set to $BuildPlatform"
491 BuildPlatform_CPP=$HostPlatform_CPP
492 TargetPlatform_CPP=$HostPlatform_CPP
493 BuildArch_CPP=$HostArch_CPP
494 TargetArch_CPP=$HostArch_CPP
495 BuildOS_CPP=$HostOS_CPP
497 TargetOS_CPP=$HostOS_CPP
498 BuildVendor_CPP=$HostVendor_CPP
499 TargetVendor_CPP=$HostVendor_CPP
501 AC_SUBST(BuildPlatform)
502 AC_SUBST(HostPlatform)
503 AC_SUBST(TargetPlatform)
504 AC_SUBST(HostPlatform_CPP)
505 AC_SUBST(BuildPlatform_CPP)
506 AC_SUBST(TargetPlatform_CPP)
508 AC_SUBST(HostArch_CPP)
509 AC_SUBST(BuildArch_CPP)
510 AC_SUBST(TargetArch_CPP)
513 AC_SUBST(HostOS_Full)
514 AC_SUBST(BuildOS_CPP)
515 AC_SUBST(TargetOS_CPP)
517 AC_SUBST(HostVendor_CPP)
518 AC_SUBST(BuildVendor_CPP)
519 AC_SUBST(TargetVendor_CPP)
523 dnl --------------------------------------------------------------
524 dnl * Calculate absolute path to build tree
525 dnl --------------------------------------------------------------
527 AC_MSG_CHECKING(for path to top of build tree)
531 dnl Remove common automounter nonsense
533 hardtop=`echo $hardtop | sed 's|^/tmp_mnt.*\(/local/.*\)$|\1|' | sed 's|^/tmp_mnt/|/|' | sed 's|^//\(.\)/|\1:/|' `
535 dnl Find 'hardtop_plat', the native format for 'hardtop'
536 dnl (i.e., right kind of \dnl slashes on a Win32 box, but with b-slashes being escaped).
538 dnl Note OSTYPE: On Cygwin we need to use 'cygpath' to convert /cygdrive/c/foo to c:/foo
539 dnl but we must not do that if we aren't building using Cygwin (notably msys),
540 dnl because cygpath doesn't exist. It seems that 'bash' sets OSTYPE to 'cygwin'
541 dnl or 'msys' respectively, but cygwin's 'sh' does not. So we hackily assume
542 dnl that if the shell hasn't set it to 'msys' then we must be in Cygwin. Sigh.
544 dnl The Right Thing is probably to test $BuildPlatform instead, but we are sloppy
545 dnl about setting that correctly at the moment, so we just work around for now.
547 dnl The quotes round "$(OSTYPE)" are essential, for the Cygwin-sh case where OSTYPE
549 case $HostPlatform in
550 i386-unknown-mingw32 | i386-unknown-cygwin32)
551 if test "${OSTYPE}" != "msys"
553 # convert $hardtop to a path that mingw will understand too
554 cyghardtop=${hardtop}
555 hardtop=`cygpath -w ${cyghardtop} | sed -e 's@\\\\@/@g'`
556 hardtop_plat=`cygpath -w ${cyghardtop} | sed -e 's@\\\\@\\\\\\\\@g'`
558 hardtop_plat=${hardtop}
562 hardtop_plat=${hardtop}
566 AC_SUBST(hardtop_plat)
568 AC_MSG_RESULT(${hardtop})
570 dnl --------------------------------------------------------------
571 dnl * Project specific configuration options
572 dnl --------------------------------------------------------------
573 dnl What follows is a bunch of options that can either be configured
574 dnl through command line options to the configure script or by
575 dnl supplying defns in the build tree's mk/build.mk. Having the option to
576 dnl use either is considered a Feature.
578 dnl ** What command to use to compile compiler sources ?
579 dnl --------------------------------------------------------------
582 [AC_HELP_STRING([--with-ghc=ARG],
583 [Use ARG as the path to GHC [default=autodetect]])],
584 [ WithGhc="$withval" ],
586 if test "$GHC" = ""; then
587 AC_PATH_PROG(GHC,ghc)
594 [AC_HELP_STRING([--with-hc=ARG],
595 [Use ARG as the path to the compiler for compiling ordinary
596 Haskell code (default= value of --with-ghc)])],
602 if test "$WithGhc" != ""; then
603 FPTOOLS_GHC_VERSION([GhcVersion], [GhcMajVersion], [GhcMinVersion], [GhcPatchLevel])dnl
604 AC_SUBST(GhcVersion)dnl
605 AC_SUBST(GhcMajVersion)dnl
606 AC_SUBST(GhcMinVersion)dnl
607 AC_SUBST(GhcPatchLevel)dnl
610 AC_PATH_PROGS(NHC,nhc nhc98)
611 AC_PATH_PROG(HBC,hbc)
613 dnl ** Which gcc to use?
614 dnl --------------------------------------------------------------
616 [AC_HELP_STRING([--with-gcc=ARG],
617 [Use ARG as the path to GCC [default=autodetect]])],
618 [WhatGccIsCalled="$withval"
619 if test "x$HostPlatform" = "xi386-unknown-mingw32"
621 if test "${OSTYPE}" != "msys"
623 # Canonicalise to <drive>:/path/to/gcc
624 withval=`cygpath -w ${withval} | sed -e 's@\\\\@/@g' `
628 [WhatGccIsCalled="gcc"]
630 AC_SUBST(WhatGccIsCalled)
632 dnl ** Booting from .hc files?
633 dnl --------------------------------------------------------------
634 AC_ARG_ENABLE(hc-boot,
635 [AC_HELP_STRING([--enable-hc-boot],
636 [Boot the Glasgow Haskell Compiler from intermediate .hc files.
637 (This option is mostly of interest to porters.) [default=no]])],
638 [ if test x"$enableval" = x"yes"; then
646 AC_SUBST(BootingFromHc)
648 dnl ** Booting from unregisterised .hc files?
649 dnl --------------------------------------------------------------
650 AC_ARG_ENABLE(hc-boot-unregisterised,
651 [AC_HELP_STRING([--enable-hc-boot-unregisterised],
652 [ With --enable-hc-boot, treat the intermediate .hc files as
653 unregisterised rather than registerised code.
654 (This option is mostly of interest to porters.) [default=no]])],
655 [ if test x"$enableval" = x"yes"; then
656 BootingFromUnregisterisedHc=YES
658 BootingFromUnregisterisedHc=NO
661 [BootingFromUnregisterisedHc=NO]
663 AC_SUBST(BootingFromUnregisterisedHc)
665 if test "$BootingFromHc" = "NO"; then
666 if test "$BootingFromUnregisterisedHc" = "YES"; then
667 AC_MSG_ERROR([--enable-hc-boot-unregisterised requires --enable-hc-boot.])
671 dnl ** Must have GHC to build GHC, unless --enable-hc-boot is on
672 if test "$BootingFromHc" = "NO" -a "$WithGhc" = "" -a -d "$srcdir/ghc"; then
673 AC_MSG_ERROR([GHC is required unless bootstrapping from .hc files.])
676 dnl ** --enable-threaded-rts (not used any more)
677 dnl --------------------------------------------------------------
678 AC_ARG_ENABLE(threaded-rts,
679 [AC_HELP_STRING([--enable-threaded-rts],
680 [DEPRECATED (backwards compatibility only). [default=no]])],
681 [ if test x"$enableval" = x"yes"; then
689 AC_SUBST(ThreadedRts)
691 dnl ** Enable the construction of Win32 DLLs?
692 dnl --------------------------------------------------------------
694 dnl [ The ability to build the RTS and libraries as separate DLLs used
695 dnl to be supported, but isn't currently (updates to the RTS, compiler
696 dnl and build system would be required to bring it back again.)
697 dnl Hence, exposing it as an option is false advertisement, so better
698 dnl disable it to avoid confusion (but leave it commented-out rather
699 dnl than removed in order to remind ourselves to bring back the
700 dnl feature at some stage.) ]
702 dnl AC_ARG_ENABLE(win32-dlls,
703 dnl [ --enable-win32-dlls
704 dnl If on a Win32 platform running mingw32/cygwin, enable the
705 dnl construction of DLLs containing ghc-compiled code.
708 dnl case $HostOS_CPP in
711 dnl *) echo "Unrecognised win32 platform: $HostPlatform"
715 dnl EnableWin32DLLs=YES
717 dnl [EnableWin32DLLs=NO]
719 dnl AC_SUBST(EnableWin32DLLs)
720 dnl if test x"$EnableWin32DLLs" = "xYES" ; then
721 dnl AC_DEFINE(HAVE_WIN32_DLL_SUPPORT)
724 dnl ** Enable the building of the ObjectIO?
725 dnl --------------------------------------------------------------
726 AC_ARG_ENABLE(objectio,
727 [AC_HELP_STRING([--enable-objectio],
728 [Build ObjectIO, a portable GUI library for Haskell. [default=no]])],
729 [ if test x"$enableval" = x"yes"; then
730 GhcLibsWithObjectIO=YES
732 GhcLibsWithObjectIO=NO
735 [GhcLibsWithObjectIO=NO]
737 AC_SUBST(GhcLibsWithObjectIO)
739 dnl ** Enable the building of the OpenAL binding?
740 dnl --------------------------------------------------------------
741 AC_ARG_ENABLE([openal],
742 AC_HELP_STRING([--enable-openal],
743 [Build OpenAL binding [[default=autodetect]]]),
744 [ if test x"$enableval" = x"yes"; then
745 GhcLibsWithOpenAL=YES
750 [GhcLibsWithOpenAL=YES])
752 AC_SUBST([GhcLibsWithOpenAL])
754 dnl ** .NET interop support?
755 dnl --------------------------------------------------------------
756 AC_ARG_ENABLE(dotnet,
757 [AC_HELP_STRING([--enable-dotnet],
758 [Build .NET interop layer. [default=no]])],
759 [ if test x"$enableval" = x"yes"; then
760 DotnetSupport=YES; AC_DEFINE([WANT_DOTNET_SUPPORT], [1], [Define to 1 if you want to include .NET interop support.])
766 AC_SUBST(DotnetSupport)
768 dnl --------------------------------------------------------------
769 dnl End of configure script option section
770 dnl --------------------------------------------------------------
773 dnl --------------------------------------------------------------
774 dnl * General configuration checks
775 dnl --------------------------------------------------------------
777 dnl ** Can the unix package be built?
778 dnl --------------------------------------------------------------
780 if test x"$TargetPlatform" = x"i386-unknown-mingw32"; then
785 AC_SUBST([GhcLibsWithUnix])
790 dnl ** look for `perl', but only in /bin on Windows
793 AC_CHECK_PROG(PerlCmd,perl,/bin/perl,,/bin)
794 if test -z "$PerlCmd"; then
795 echo "You must install the version of Perl shipped with GHC"
796 echo "(or a compatible one) in /bin."
801 AC_PATH_PROG(PerlCmd,perl)
802 if test -z "$PerlCmd"; then
803 echo "You must install perl before you can continue"
804 echo "Perhaps it is already installed, but not in your PATH?"
807 FPTOOLS_CHECK_PERL_VERSION
812 dnl ** does #! path/to/perl work? (sometimes it's too long...)
815 dnl ** check for Python
816 AC_PATH_PROG(PythonCmd,python)
818 dnl ** look for GCC and find out which version
819 dnl Figure out which C compiler to use. Gcc is preferred.
820 dnl If gcc, make sure it's at least 2.1
824 FPTOOLS_GCC_NEEDS_NO_OMIT_LFPTR
826 dnl ** figure out how to invoke cpp directly (gcc -E is no good)
829 dnl ** Without optimization some INLINE trickery fails for GHCi
832 dnl ** Try to add -mno-cygwin to the C compiler options
833 FP_CHECK_FLAG([-mno-cygwin], [
834 SRC_CC_OPTS="-mno-cygwin $SRC_CC_OPTS"
835 CPPFLAGS="-mno-cygwin $CPPFLAGS"])
836 AC_SUBST(SRC_CC_OPTS)
838 dnl ** figure out how to do context diffs
841 dnl ** Find find command (for Win32's benefit)
844 dnl ** figure out how to do a BSD-ish install
847 dnl If you can run configure, you certainly have /bin/sh
848 AC_DEFINE([HAVE_BIN_SH], [1], [Define to 1 if you have /bin/sh.])
850 dnl ** how to invoke `ar' and `ranlib'
851 FP_PROG_AR_NEEDS_RANLIB
852 FP_PROG_AR_SUPPORTS_INPUT
854 dnl ** Check to see whether ln -s works
858 dnl ** Find the path to sed
859 AC_PATH_PROG(SedCmd,sed)
862 dnl ** check for time command
863 AC_PATH_PROG(TimeCmd,time)
866 dnl if GNU tar is named gtar, look for it first.
867 AC_PATH_PROGS(TarCmd,gtar tar,tar)
869 dnl ** check for DocBook toolchain
871 FP_DIR_DOCBOOK_XSL([/usr/share/xml/docbook/stylesheet/nwalsh/current /usr/share/xml/docbook/stylesheet/nwalsh /usr/share/sgml/docbook/docbook-xsl-stylesheets* /usr/share/sgml/docbook/xsl-stylesheets* /opt/kde?/share/apps/ksgmltools2/docbook/xsl /usr/share/docbook-xsl /usr/share/sgml/docbkxsl])
874 dnl ** check for ghc-pkg command
877 dnl Check whether this GHC has readline installed
878 FPTOOLS_GHC_HAS_READLINE
880 AC_ARG_WITH(greencard,
881 [AC_HELP_STRING([--with-greencard=ARG],
882 [Use ARG as the path to greencard [default=autodetct]])],
884 GreenCardCmd=$withval;
885 FPTOOLS_GREENCARD(3.00)
889 AC_ARG_ENABLE(src-tree-happy,
890 [AC_HELP_STRING([--enable-src-tree-happy],
891 [Build and use source tree (fptools/happy) version of Happy.
892 [default=autodetect]])],
893 [ if test x"$enableval" = x"yes"; then
901 dnl ** check for installed happy binary + version
902 dnl (don't do it if we're booting from .hc files though.)
903 if test "$BootingFromHc" = "NO"; then
907 AC_ARG_ENABLE(src-tree-haddock,
908 [AC_HELP_STRING([--enable-src-tree-haddock],
909 [Build and use source tree (fptools/haddock) version of Haddock.
910 [default=autodetect]])],
911 [ if test x"$enableval" = x"yes"; then
912 UseSrcTreeHaddock=YES
917 [UseSrcTreeHaddock=NO]
919 dnl ** check for installed haddock
922 AC_ARG_ENABLE(src-tree-alex,
923 [AC_HELP_STRING([--enable-src-tree-alex],
924 [Build and use source tree (fptools/alex) version of Alex.
925 [default=autodetect]])],
926 [ if test x"$enableval" = x"yes"; then
934 dnl ** check for installed alex binary + version
935 dnl (don't do it if we're booting from .hc files though.)
936 if test "$BootingFromHc" = "NO"; then
940 dnl --------------------------------------------------
941 dnl ### program checking section ends here ###
942 dnl --------------------------------------------------
944 dnl --------------------------------------------------
945 dnl * Platform header file and syscall feature tests
946 dnl ### checking the state of the local header files and syscalls ###
948 dnl ** check for full ANSI header (.h) files
951 dnl ** Enable large file support. NB. do this before testing the type of
952 dnl off_t, because it will affect the result of that test.
955 dnl ** check for specific header (.h) files that we are interested in
956 AC_CHECK_HEADERS([bfd.h ctype.h dirent.h dlfcn.h errno.h fcntl.h grp.h limits.h locale.h nlist.h pthread.h pwd.h signal.h sys/mman.h sys/resource.h sys/time.h sys/timeb.h sys/timers.h sys/times.h sys/utsname.h sys/wait.h termios.h time.h utime.h windows.h winsock.h])
958 AC_CHECK_HEADER([unistd.h], [AC_CHECK_FUNCS(lchown)])
960 AC_CHECK_HEADER([readline/readline.h], [HaveReadlineReadlineH=YES], [HaveReadlineReadlineH=NO])
961 AC_CHECK_HEADER([readline/history.h], [HaveReadlineHistoryH=YES], [HaveReadlineHistoryH=NO])
963 if test $HaveReadlineReadlineH = YES && test $HaveReadlineHistoryH = YES ; then
964 GhcLibsWithReadline=YES
965 AC_DEFINE([HAVE_READLINE_HEADERS], [1], [Define to 1 if readline/readline.h and readline/history.h exist.])
967 GhcLibsWithReadline=NO
968 AC_DEFINE([HAVE_READLINE_HEADERS], [0], [Define to 1 if readline/readline.h and readline/history.h exist.])
970 AC_SUBST(GhcLibsWithReadline)
972 dnl ** check for OpenGL/GLUT include paths and libraries
975 if test x"$no_GLU" = xyes; then
978 GhcLibsWithOpenGL=YES
980 AC_SUBST([GhcLibsWithOpenGL])
982 if test x"$no_GLUT" = xyes; then
987 AC_SUBST([GhcLibsWithGLUT])
989 dnl ** check for OpenGL include files
990 fp_save_cppflags="$CPPFLAGS"
991 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
992 if test x"$use_quartz_opengl" = xyes; then
993 AC_CHECK_HEADERS([OpenGL/gl.h])
995 AC_CHECK_HEADERS([GL/gl.h])
997 CPPFLAGS="$fp_save_cppflags"
999 dnl ** check if it is safe to include both <time.h> and <sys/time.h>
1002 dnl ** check for POSIX regex
1004 AC_CHECK_HEADERS([regex.h], [AC_CHECK_FUNCS(regcomp, [HavePosixRegex=YES])])
1005 AC_SUBST(HavePosixRegex)
1007 dnl ** how do we get a timezone name, and UTC offset ?
1010 dnl ** do we have altzone?
1013 dnl ** do we have long longs?
1014 AC_CHECK_TYPES([long long])
1016 dnl ** what are the sizes of various types
1017 AC_CHECK_SIZEOF(char, 1)
1018 AC_CHECK_SIZEOF(double, 8)
1019 AC_CHECK_SIZEOF(float, 4)
1020 AC_CHECK_SIZEOF(int, 4)
1021 AC_CHECK_SIZEOF(long, 4)
1022 if test "$ac_cv_type_long_long" = yes; then
1023 AC_CHECK_SIZEOF(long long, 8)
1025 AC_CHECK_SIZEOF(short, 2)
1026 AC_CHECK_SIZEOF(unsigned char, 1)
1027 AC_CHECK_SIZEOF(unsigned int, 4)
1028 AC_CHECK_SIZEOF(unsigned long, 4)
1029 if test "$ac_cv_type_long_long" = yes; then
1030 AC_CHECK_SIZEOF(unsigned long long, 8)
1032 AC_CHECK_SIZEOF(unsigned short, 2)
1033 AC_CHECK_SIZEOF(void *, 4)
1035 dnl ** what are alignment constraints on various types
1036 FP_CHECK_ALIGNMENT(char)
1037 FP_CHECK_ALIGNMENT(double)
1038 FP_CHECK_ALIGNMENT(float)
1039 FP_CHECK_ALIGNMENT(int)
1040 FP_CHECK_ALIGNMENT(long)
1041 if test "$ac_cv_type_long_long" = yes; then
1042 FP_CHECK_ALIGNMENT(long long)
1044 FP_CHECK_ALIGNMENT(short)
1045 FP_CHECK_ALIGNMENT(unsigned char)
1046 FP_CHECK_ALIGNMENT(unsigned int)
1047 FP_CHECK_ALIGNMENT(unsigned long)
1048 if test "$ac_cv_type_long_long" = yes; then
1049 FP_CHECK_ALIGNMENT(unsigned long long)
1051 FP_CHECK_ALIGNMENT(unsigned short)
1052 FP_CHECK_ALIGNMENT(void *)
1054 dnl ** Map OpenGL data types to Haskell types
1055 if test $GhcLibsWithOpenGL = YES ; then
1056 FPTOOLS_CHECK_HTYPE(GLboolean)
1057 FPTOOLS_CHECK_HTYPE(GLbyte)
1058 FPTOOLS_CHECK_HTYPE(GLubyte)
1059 FPTOOLS_CHECK_HTYPE(GLshort)
1060 FPTOOLS_CHECK_HTYPE(GLushort)
1061 FPTOOLS_CHECK_HTYPE(GLint)
1062 FPTOOLS_CHECK_HTYPE(GLuint)
1063 FPTOOLS_CHECK_HTYPE(GLsizei)
1064 FPTOOLS_CHECK_HTYPE(GLenum)
1065 FPTOOLS_CHECK_HTYPE(GLbitfield)
1066 FPTOOLS_CHECK_HTYPE(GLfloat)
1067 FPTOOLS_CHECK_HTYPE(GLclampf)
1068 FPTOOLS_CHECK_HTYPE(GLdouble)
1069 FPTOOLS_CHECK_HTYPE(GLclampd)
1072 FP_CHECK_FUNC([WinExec],
1073 [@%:@include <windows.h>], [WinExec("",0)])
1075 FP_CHECK_FUNC([GetModuleFileName],
1076 [@%:@include <windows.h>], [GetModuleFileName((HMODULE)0,(LPTSTR)0,0)])
1078 dnl ** check return type of signal handlers
1079 dnl Foo: assumes we can use prototypes.
1080 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
1081 dnl AC_CACHE_CHECK([type of signal handlers], ac_cv_type_signal_handler,
1082 dnl [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
1083 dnl #include <signal.h>
1087 dnl void (*signal (int, void (*)(int)))(int);
1090 dnl [ac_cv_type_signal_handler=void_int],
1091 dnl [ac_cv_type_signal_handler=int_void])])
1092 dnl if test "$ac_cv_type_signal_handler" = void_int; then
1093 dnl AC_DEFINE(VOID_INT_SIGNALS)
1096 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
1098 if test "$ac_cv_type_signal" = void; then
1099 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).])
1102 dnl ** check for more functions
1103 AC_CHECK_FUNCS([ftime getclock getpagesize getrusage gettimeofday gmtime_r localtime_r lstat readdir_r readlink setenv setitimer siginterrupt symlink sysconf times unsetenv])
1105 dnl ** check whether this machine has gmp3 installed
1106 AC_CHECK_LIB(gmp, __gmpz_fdiv_qr, HaveLibGmp=YES; LibGmp=gmp,
1107 AC_CHECK_LIB(gmp3, __gmpz_fdiv_qr, HaveLibGmp=YES; LibGmp=gmp3,
1108 HaveLibGmp=NO; LibGmp=not-installed))
1109 AC_SUBST(HaveLibGmp)
1112 dnl ** (Mac OS X only: check for HaskellSupport.framework)
1113 HaveFrameworkHaskellSupport=NO
1114 if test $HostPlatform = "powerpc-apple-darwin"; then
1115 AC_MSG_CHECKING([for HaskellSupport.framework])
1117 LIBS="-framework HaskellSupport"
1118 AC_TRY_LINK_FUNC(__gmpz_fdiv_qr, HaveFrameworkHaskellSupport=YES,)
1119 if test $HaveFrameworkHaskellSupport = YES; then
1120 AC_DEFINE([HAVE_FRAMEWORK_HASKELLSUPPORT], [1], [Define to 1 if the HaskellSupport.framework is installed (Mac OS X only).])
1123 AC_MSG_RESULT([$HaveFrameworkHaskellSupport])
1125 AC_SUBST(HaveFrameworkHaskellSupport)
1127 dnl ** check for mingwex library
1128 AC_CHECK_LIB(mingwex, closedir, HaveLibMingwEx=YES, HaveLibMingwEx=NO)
1129 AC_SUBST(HaveLibMingwEx)
1131 if test $HaveLibMingwEx = YES ; then
1132 AC_DEFINE([HAVE_MINGWEX], [1], [Define to 1 if you have the mingwex library.])
1135 if test "$HaveLibGmp" = "NO"; then
1136 if test "$HostArch_CPP" = "ia64" -o "$HostArch_CPP" = "mipseb" ; then
1137 AC_MSG_ERROR([You need to install libgmp (the in-tree version does not work on IA64 or mips64).])
1141 dnl ** check whether this machine has BFD and liberty installed (used for debugging)
1142 dnl the order of these tests matters: bfd needs liberty
1143 AC_CHECK_LIB(iberty, xmalloc)
1144 AC_CHECK_LIB(bfd, bfd_init)
1146 dnl ** check for readline, for Hugs and hslibs' Readline
1147 dnl ncurses supersedes termcap and curses, but for compatibility,
1148 dnl we have to check for all...
1149 AC_CHECK_LIB(ncurses, tputs, HaveLibTermcap=YES; LibTermcap=ncurses,
1150 AC_CHECK_LIB(termcap, tputs, HaveLibTermcap=YES; LibTermcap=termcap,
1151 AC_CHECK_LIB(curses, tputs, HaveLibTermcap=YES; LibTermcap=curses,
1152 HaveLibTermcap=NO; LibTermcap=not-installed)))
1154 if test $HaveLibTermcap = YES ; then
1155 LIBS="-l$LibTermcap $LIBS"
1156 AC_CHECK_LIB(readline, readline, HaveLibReadline=YES, HaveLibReadline=NO)
1159 if test $HaveLibTermcap = YES && test x"$HaveLibReadline" = xYES ; then
1160 AC_DEFINE([HAVE_READLINE_LIBS], [1], [Define to 1 if readline plus any additional libs needed for it exist.])
1161 LibsReadline="readline $LibTermcap"
1163 AC_DEFINE([HAVE_READLINE_LIBS], [0], [Define to 1 if readline plus any additional libs needed for it exist.])
1166 AC_SUBST(LibsReadline)
1168 if test "$HaveLibReadline"; then
1169 AC_CHECK_LIB(readline, rl_erase_empty_line,
1170 [AC_DEFINE([HAVE_READLINE_4], [1], [Define to 1 if readline has version >= 4.0.])],
1171 [AC_DEFINE([HAVE_READLINE_4], [0], [Define to 1 if readline has version >= 4.0.])])
1172 AC_CHECK_LIB(readline, rl_free_undo_list,
1173 [AC_DEFINE([HAVE_READLINE_4_2], [1], [Define to 1 if readline has version >= 4.2.])],
1174 [AC_DEFINE([HAVE_READLINE_4_2], [0], [Define to 1 if readline has version >= 4.2.])])
1176 AC_DEFINE([HAVE_READLINE_4], [0], [Define to 1 if readline has version >= 4.0.])
1177 AC_DEFINE([HAVE_READLINE_4_2], [0], [Define to 1 if readline has version >= 4.2.])
1180 dnl ** check for math library
1181 AC_CHECK_LIB([m], [atan], [LIBS="-lm $LIBS"; LIBM="-lm"], [LIBM=])
1184 dnl ** check for X Window System
1187 if test "$no_x" = yes; then
1192 AC_SUBST([GhcLibsWithX11])
1194 dnl ################################################################
1195 dnl Check for libraries
1196 dnl ################################################################
1198 dnl ** check for libdl & RTLD_NEXT
1200 dnl (Mac OS X only) ... but don't check if we already have the
1201 dnl HaskellSupport.framework
1203 if test $HaveFrameworkHaskellSupport = YES; then
1207 AC_DEFINE([HAVE_RTLDLOCAL], [1], [Define to 1 if RTLD_LOCAL is available.])
1209 AC_DEFINE([HAVE_RTLDGLOBAL], [1], [Define to 1 if RTLD_GLOBAL is available.])
1211 AC_DEFINE([HAVE_RTLDNOW], [1], [Define to 1 if we can see RTLD_NOW in dlfcn.h.])
1213 AC_SUBST(HaveRtldNext)
1214 AC_SUBST(HaveRtldLocal)
1215 AC_SUBST(HaveRtldGlobal)
1216 AC_SUBST(HaveRtldNow)
1218 AC_CHECK_LIB(dl, dlopen,
1220 AC_DEFINE([HAVE_LIBDL], [1], [Define to 1 if you need -ldl to get dlopen().])
1225 dnl ** sometimes RTLD_NEXT is hidden in #ifdefs we really don't wan to set
1226 AC_MSG_CHECKING(for RTLD_NEXT from dlfcn.h)
1235 AC_DEFINE([HAVE_RTLDNEXT], [1], [Define to 1 if we can see RTLD_NEXT in dlfcn.h.])
1241 AC_SUBST(HaveRtldNext)
1243 dnl ** RTLD_LOCAL isn't available on cygwin or openbsd
1244 AC_MSG_CHECKING(for RTLD_LOCAL from dlfcn.h)
1253 AC_DEFINE(HAVE_RTLDLOCAL)
1259 AC_SUBST(HaveRtldLocal)
1261 dnl ** RTLD_GLOBAL isn't available on openbsd
1262 AC_MSG_CHECKING(for RTLD_GLOBAL from dlfcn.h)
1271 AC_DEFINE(HAVE_RTLDGLOBAL)
1277 AC_SUBST(HaveRtldGlobal)
1279 dnl ** RTLD_NOW isn't available on openbsd
1280 AC_MSG_CHECKING(for RTLD_NOW from dlfcn.h)
1289 AC_DEFINE(HAVE_RTLDNOW)
1295 AC_SUBST(HaveRtldNow)
1298 dnl --------------------------------------------------
1300 dnl --------------------------------------------------
1302 AC_PATH_PROGS([GTK_CONFIG], [gtk-config gtk12-config])
1303 if test -n "$GTK_CONFIG"; then
1304 AC_CACHE_CHECK([for version of GTK+], [fp_cv_gtk_version],
1305 [fp_cv_gtk_version=`$GTK_CONFIG --version`])
1306 FP_COMPARE_VERSIONS([$fp_cv_gtk_version], [-lt], [1.2],
1307 [AC_MSG_WARN([GTK+ not usable, need at least version 1.2])
1310 AC_SUBST([GTK_CONFIG])
1312 dnl --------------------------------------------------
1313 dnl * Miscellaneous feature tests
1314 dnl --------------------------------------------------
1316 dnl ** can we get alloca?
1319 dnl ** Working vfork?
1322 dnl ** determine whether or not const works
1325 dnl ** are we big endian?
1328 dnl ** check for leading underscores in symbol names
1329 FP_LEADING_UNDERSCORE
1331 dnl ** check for ld, and whether ld has -x option
1332 AC_PATH_PROG(LdCmdRaw, ld)
1335 if test "${OSTYPE}" == "msys"
1339 LdCmd=`cygpath -w ${LdCmdRaw} | sed -e 's@\\\\@/@g' `
1342 *) LdCmd=${LdCmdRaw}
1348 AC_CONFIG_FILES([mk/config.mk])
1349 AC_CONFIG_COMMANDS([mk/stamp-h],[echo timestamp > mk/stamp-h])