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([The Glorious Glasgow Haskell Compilation System], [6.5], [glasgow-haskell-bugs@haskell.org], [ghc])
18 FP_SETUP_PROJECT_VERSION
20 # Hmmm, we fix the RPM release number to 1 here... Is this convenient?
21 AC_SUBST([release], [1])
23 # First off, a distrib sanity check..
24 AC_CONFIG_SRCDIR([mk/config.mk.in])
26 dnl * We require autoconf version 2.52
27 dnl We need 2.50 due to the use of AC_SYS_LARGEFILE and AC_MSG_NOTICE.
28 dnl We need 2.52 due to the use of AS_TR_CPP and AS_TR_SH.
31 dnl * Declare subdirectories that have a private configure script
33 dnl After the toplevel configuration is complete, the script will recurse into
34 dnl these subdirectories if they exist. The use of a cache file makes repeated
36 AC_CONFIG_SUBDIRS([libraries])
38 # -------------------------------------------------------------------------
39 # Prepare to generate the following header files
42 AC_CONFIG_HEADER(mk/config.h)
44 # No, semi-sadly, we don't do `--srcdir'...
45 if test x"$srcdir" != 'x.' ; then
46 echo "This configuration does not support the \`--srcdir' option.."
50 dnl--------------------------------------------------------------------
51 dnl * Choose host(/target/build) platform
52 dnl--------------------------------------------------------------------
54 dnl Guess host/target/build platform(s) if necessary.
57 # "$host" defaults to "$target"
58 if test "x$host" = xNONE ; then
62 dnl ** canonicalize platform names
63 BuildPlatform=`/bin/sh $srcdir/config.sub $build` || exit 1
64 HostPlatform=`/bin/sh $srcdir/config.sub $host` || exit 1
65 TargetPlatform=`/bin/sh $srcdir/config.sub $target` || exit 1
67 if test x"$TargetPlatform" != x"$HostPlatform" ; then
68 echo "GHC configuration does not support differing host/target (i.e., cross-compiling)"
74 # The following will be more difficult when we *are* cross-compiling.
75 # Suitable names to slam in *_CPP are in platform.h.in.
76 # We also record the architecture, vendor, and operating system (OS)
79 alpha*-dec-osf[[12]]*)
80 HostPlatform=alpha-dec-osf1 # canonicalise for our purposes
81 TargetPlatform=alpha-dec-osf1 # this will work for now... (hack)
82 BuildPlatform=alpha-dec-osf1 # hack
83 HostPlatform_CPP='alpha_dec_osf1'
88 alpha*-dec-osf[[345]]*)
89 HostPlatform=alpha-dec-osf3 # canonicalise for our purposes
90 TargetPlatform=alpha-dec-osf3 # this will work for now... (hack)
91 BuildPlatform=alpha-dec-osf3 # hack
92 HostPlatform_CPP='alpha_dec_osf3'
97 alpha*-unknown-linux*)
98 HostPlatform=alpha-unknown-linux
99 TargetPlatform=alpha-unknown-linux
100 BuildPlatform=alpha-unknown-linux
101 HostPlatform_CPP='alpha_unknown_linux'
103 HostVendor_CPP='unknown'
106 alpha*-unknown-freebsd*)
107 HostPlatform=alpha-unknown-freebsd
108 TargetPlatform=alpha-unknown-freebsd
109 BuildPlatform=alpha-unknown-freebsd
110 HostPlatform_CPP='alpha_unknown_freebsd'
112 HostVendor_CPP='unknown'
115 alpha*-unknown-openbsd*)
116 HostPlatform=alpha-unknown-openbsd
117 TargetPlatform=alpha-unknown-openbsd
118 BuildPlatform=alpha-unknown-openbsd
119 HostPlatform_CPP='alpha_unknown_openbsd'
121 HostVendor_CPP='unknown'
124 amd64-*-openbsd*|x86_64-*-openbsd*)
125 HostPlatform=x86_64-unknown-openbsd
126 TargetPlatform=x86_64-unknown-openbsd
127 BuildPlatform=x86_64-unknown-openbsd
128 HostPlatform_CPP='x86_64_unknown_openbsd'
129 HostArch_CPP='x86_64'
130 HostVendor_CPP='unknown'
134 HostPlatform=x86_64-unknown-freebsd
135 TargetPlatform=x86_64-unknown-freebsd
136 BuildPlatform=x86_64-unknown-freebsd
137 HostPlatform_CPP='x86_64_unknown_freebsd'
138 HostArch_CPP='x86_64'
139 HostVendor_CPP='unknown'
143 HostPlatform=arm-unknown-linux # hack again
144 TargetPlatform=arm-unknown-linux
145 BuildPlatform=arm-unknown-linux
146 HostPlatform_CPP='arm_unknown_linux'
148 HostVendor_CPP='unknown'
152 HostPlatform=arm-unknown-openbsd
153 TargetPlatform=arm-unknown-openbsd
154 BuildPlatform=arm-unknown-openbsd
155 HostPlatform_CPP='arm_unknown_openbsd'
157 HostVendor_CPP='unknown'
161 HostPlatform=hppa-unknown-linux # hack again
162 TargetPlatform=hppa-unknown-linux
163 BuildPlatform=hppa-unknown-linux
164 HostPlatform_CPP='hppa_unknown_linux'
166 HostVendor_CPP='unknown'
170 HostPlatform=hppa-unknown-openbsd # hack again
171 TargetPlatform=hppa-unknown-openbsd
172 BuildPlatform=hppa-unknown-openbsd
173 HostPlatform_CPP='hppa_unknown_openbsd'
175 HostVendor_CPP='unknown'
179 HostPlatform=hppa1.1-hp-hpux # canonicalise for our purposes (hack)
180 TargetPlatform=hppa1.1-hp-hpux
181 BuildPlatform=hppa1.1-hp-hpux
182 HostPlatform_CPP='hppa1_1_hp_hpux'
183 HostArch_CPP='hppa1_1'
187 i[[3456]]86-*-linuxaout*)
188 HostPlatform=i386-unknown-linuxaout # hack again
189 TargetPlatform=i386-unknown-linuxaout
190 BuildPlatform=i386-unknown-linuxaout
191 HostPlatform_CPP='i386_unknown_linuxaout'
193 HostVendor_CPP='unknown'
194 HostOS_CPP='linuxaout'
196 i[[3456]]86-*-linux*)
197 HostPlatform=i386-unknown-linux # hack again
198 TargetPlatform=i386-unknown-linux
199 BuildPlatform=i386-unknown-linux
200 HostPlatform_CPP='i386_unknown_linux'
202 HostVendor_CPP='unknown'
205 i[[3456]]86-*-kfreebsd*-gnu)
206 HostPlatform=i386-unknown-kfreebsdgnu # hack again
207 TargetPlatform=i386-unknown-kfreebsdgnu
208 BuildPlatform=i386-unknown-kfreebsdgnu
209 HostPlatform_CPP='i386_unknown_kfreebsdgnu'
211 HostVendor_CPP='unknown'
212 HostOS_CPP='kfreebsdgnu'
214 i[[3456]]86-*-freebsd[[3-9]]*) # FreeBSD 3.0+ uses ELF
215 HostPlatform=i386-unknown-freebsd # hack again
216 TargetPlatform=i386-unknown-freebsd
217 BuildPlatform=i386-unknown-freebsd
218 HostPlatform_CPP='i386_unknown_freebsd'
220 HostVendor_CPP='unknown'
223 i[[3456]]86-*-freebsd2*) # Older FreeBSDs are a.out
224 HostPlatform=i386-unknown-freebsd2 # hack again
225 TargetPlatform=i386-unknown-freebsd2
226 BuildPlatform=i386-unknown-freebsd2
227 HostPlatform_CPP='i386_unknown_freebsd2'
229 HostVendor_CPP='unknown'
230 HostOS_CPP='freebsd2'
232 i[[3456]]86-*-netbsd*)
233 HostPlatform=i386-unknown-netbsd # hack again
234 TargetPlatform=i386-unknown-netbsd
235 BuildPlatform=i386-unknown-netbsd
236 HostPlatform_CPP='i386_unknown_netbsd'
238 HostVendor_CPP='unknown'
241 i[[3456]]86-*-openbsd*)
242 HostPlatform=i386-unknown-openbsd # hack again
243 TargetPlatform=i386-unknown-openbsd
244 BuildPlatform=i386-unknown-openbsd
245 HostPlatform_CPP='i386_unknown_openbsd'
247 HostVendor_CPP='unknown'
250 i[[3456]]86-*-solaris2*)
251 HostPlatform=i386-unknown-solaris2 # hack again
252 TargetPlatform=i386-unknown-solaris2
253 BuildPlatform=i386-unknown-solaris2
254 HostPlatform_CPP='i386_unknown_solaris2'
256 HostVendor_CPP='unknown'
257 HostOS_CPP='solaris2'
259 i[[3456]]86-*-cygwin*)
260 HostPlatform=i386-unknown-cygwin32 # hack again
261 TargetPlatform=i386-unknown-cygwin32
262 BuildPlatform=i386-unknown-cygwin32
263 HostPlatform_CPP='i386_unknown_cygwin32'
265 HostVendor_CPP='unknown'
266 HostOS_CPP='cygwin32'
269 i[[3456]]86-*-mingw32*)
270 HostPlatform=i386-unknown-mingw32 # hack again
271 TargetPlatform=i386-unknown-mingw32
272 BuildPlatform=i386-unknown-mingw32
273 HostPlatform_CPP='i386_unknown_mingw32'
275 HostVendor_CPP='unknown'
279 i[[3456]]86-apple-darwin*)
280 HostPlatform=i386-apple-darwin
281 TargetPlatform=i386-apple-darwin #hack
282 BuildPlatform=i386-apple-darwin #hack
283 HostPlatform_CPP='i386_apple_darwin'
285 HostVendor_CPP='apple'
289 HostPlatform=i386-unknown-gnu
290 TargetPlatform=i386-unknown-gnu
291 BuildPlatform=i386-unknown-gnu
292 HostPlatform_CPP=i386_unknown_gnu
294 HostVendor_CPP=unknown
298 HostPlatform=ia64-unknown-linux # hack again
299 TargetPlatform=ia64-unknown-linux
300 BuildPlatform=ia64-unknown-linux
301 HostPlatform_CPP='ia64_unknown_linux'
303 HostVendor_CPP='unknown'
307 HostPlatform=x86_64-unknown-linux
308 TargetPlatform=x86_64-unknown-linux
309 BuildPlatform=x86_64-unknown-linux
310 HostPlatform_CPP='x86_64_unknown_linux'
311 HostArch_CPP='x86_64'
312 HostVendor_CPP='unknown'
316 HostPlatform=m68k-unknown-linux # hack again
317 TargetPlatform=m68k-unknown-linux
318 BuildPlatform=m68k-unknown-linux
319 HostPlatform_CPP='m68k_unknown_linux'
321 HostVendor_CPP='unknown'
325 HostPlatform_CPP='m68k_next_nextstep2'
327 HostVendor_CPP='next'
328 HostOS_CPP='nextstep2'
331 HostPlatform_CPP='m68k_next_nextstep3'
333 HostVendor_CPP='next'
334 HostOS_CPP='nextstep3'
336 i[[3456]]86-next-nextstep3)
337 HostPlatform=i386-next-nextstep3 # hack again
338 TargetPlatform=i386-next-nextstep3
339 BuildPlatform=i386-next-nextstep3
340 HostPlatform_CPP='i386_next_nextstep3'
342 HostVendor_CPP='next'
343 HostOS_CPP='nextstep3'
346 HostPlatform=m68k-unknown-openbsd
347 TargetPlatform=m68k-unknown-openbsd
348 BuildPlatform=m68k-unknown-openbsd
349 HostPlatform_CPP='m68k_unknown_openbsd'
351 HostVendor_CPP='unknown'
355 HostPlatform=m68k-unknown-netbsd
356 TargetPlatform=m68k-unknown-netbsd
357 BuildPlatform=m68k-unknown-netbsd
358 HostPlatform_CPP='m68k_unknown_netbsd'
360 HostVendor_CPP='unknown'
364 HostPlatform=m68k-sun-sunos4
365 TargetPlatform=m68k-sun-sunos4 #hack
366 BuildPlatform=m68k-sun-sunos4 #hack
367 HostPlatform_CPP='m68k_sun_sunos4'
373 HostPlatform=m88k-unknown-openbsd
374 TargetPlatform=m88k-unknown-openbsd
375 BuildPlatform=m88k-unknown-openbsd
376 HostPlatform_CPP='m88k_unknown_openbsd'
378 HostVendor_CPP='unknown'
382 HostPlatform=mips-unknown-linux # hack again
383 TargetPlatform=mips-unknown-linux
384 BuildPlatform=mips-unknown-linux
385 HostPlatform_CPP='mips_unknown_linux'
387 HostVendor_CPP='unknown'
391 HostPlatform_CPP='mips_dec_ultrix'
392 HostArch_CPP='mipsel' # NB a little different
397 HostPlatform=mips-sgi-irix
398 TargetPlatform=mips-sgi-irix #hack
399 BuildPlatform=mips-sgi-irix #hack
400 HostPlatform_CPP='mips_sgi_irix'
401 HostArch_CPP='mipseb' # NB a little different
406 HostPlatform=rs6000-ibm-aix
407 TargetPlatform=rs6000-ibm-aix #hack
408 BuildPlatform=rs6000-ibm-aix #hack
409 HostPlatform_CPP='rs6000_ibm_aix'
410 HostArch_CPP='rs6000'
415 HostPlatform=powerpc-ibm-aix
416 TargetPlatform=powerpc-ibm-aix #hack
417 BuildPlatform=powerpc-ibm-aix #hack
418 HostPlatform_CPP='powerpc_ibm_aix'
419 HostArch_CPP='powerpc'
423 powerpc-apple-darwin*)
424 HostPlatform=powerpc-apple-darwin
425 TargetPlatform=powerpc-apple-darwin #hack
426 BuildPlatform=powerpc-apple-darwin #hack
427 HostPlatform_CPP='powerpc_apple_darwin'
428 HostArch_CPP='powerpc'
429 HostVendor_CPP='apple'
432 powerpc-unknown-linux*)
433 HostPlatform=powerpc-unknown-linux
434 TargetPlatform=powerpc-unknown-linux
435 BuildPlatform=powerpc-unknown-linux
436 HostPlatform_CPP='powerpc_unknown_linux'
437 HostArch_CPP='powerpc'
438 HostVendor_CPP='unknown'
441 powerpc-unknown-openbsd*)
442 HostPlatform=powerpc-unknown-openbsd
443 TargetPlatform=powerpc-unknown-openbsd
444 BuildPlatform=powerpc-unknown-openbsd
445 HostPlatform_CPP='powerpc_unknown_openbsd'
446 HostArch_CPP='powerpc'
447 HostVendor_CPP='unknown'
450 powerpc64-unknown-linux*)
451 HostPlatform=powerpc64-unknown-linux
452 TargetPlatform=powerpc64-unknown-linux
453 BuildPlatform=powerpc64-unknown-linux
454 HostPlatform_CPP='powerpc64_unknown_linux'
455 HostArch_CPP='powerpc64'
456 HostVendor_CPP='unknown'
461 HostPlatform=s390-ibm-linux
462 TargetPlatform=s390-ibm-linux #hack
463 BuildPlatform=s390-ibm-linux #hack
464 HostPlatform_CPP='s390_ibm_linux'
470 HostPlatform=sparc-sun-sunos4
471 TargetPlatform=sparc-sun-sunos4 #hack
472 BuildPlatform=sparc-sun-sunos4 #hack
473 HostPlatform_CPP='sparc_sun_sunos4'
479 HostPlatform=sparc-sun-solaris2
480 TargetPlatform=sparc-sun-solaris2 #hack
481 BuildPlatform=sparc-sun-solaris2 #hack
482 HostPlatform_CPP='sparc_sun_solaris2'
485 HostOS_CPP='solaris2'
488 HostPlatform=sparc-unknown-linux
489 TargetPlatform=sparc-unknown-linux
490 BuildPlatform=sparc-unknown-linux
491 HostPlatform_CPP='sparc_unknown_linux'
493 HostVendor_CPP='unknown'
497 HostPlatform=sparc-unknown-openbsd
498 TargetPlatform=sparc-unknown-openbsd
499 BuildPlatform=sparc-unknown-openbsd
500 HostPlatform_CPP='sparc_unknown_openbsd'
502 HostVendor_CPP='unknown'
506 HostPlatform=sparc64-unknown-openbsd
507 TargetPlatform=sparc64-unknown-openbsd
508 BuildPlatform=sparc64-unknown-openbsd
509 HostPlatform_CPP='sparc64_unknown_openbsd'
510 HostArch_CPP='sparc64'
511 HostVendor_CPP='unknown'
515 HostPlatform=vax-unknown-openbsd
516 TargetPlatform=vax-unknown-openbsd
517 BuildPlatform=vax-unknown-openbsd
518 HostPlatform_CPP='vax_unknown_openbsd'
520 HostVendor_CPP='unknown'
524 echo "Unrecognised platform: $HostPlatform"
528 echo "Canonicalised to: $HostPlatform"
529 test x"$HostPlatform" != x"$TargetPlatform" && echo "Target platform set to $TargetPlatform"
530 test x"$BuildPlatform" != x"$HostPlatform" && echo "Build platform set to $BuildPlatform"
532 BuildPlatform_CPP=$HostPlatform_CPP
533 TargetPlatform_CPP=$HostPlatform_CPP
534 BuildArch_CPP=$HostArch_CPP
535 TargetArch_CPP=$HostArch_CPP
536 BuildOS_CPP=$HostOS_CPP
538 TargetOS_CPP=$HostOS_CPP
539 BuildVendor_CPP=$HostVendor_CPP
540 TargetVendor_CPP=$HostVendor_CPP
542 AC_SUBST(BuildPlatform)
543 AC_SUBST(HostPlatform)
544 AC_SUBST(TargetPlatform)
545 AC_SUBST(HostPlatform_CPP)
546 AC_SUBST(BuildPlatform_CPP)
547 AC_SUBST(TargetPlatform_CPP)
549 AC_SUBST(HostArch_CPP)
550 AC_SUBST(BuildArch_CPP)
551 AC_SUBST(TargetArch_CPP)
554 AC_SUBST(HostOS_Full)
555 AC_SUBST(BuildOS_CPP)
556 AC_SUBST(TargetOS_CPP)
558 AC_SUBST(HostVendor_CPP)
559 AC_SUBST(BuildVendor_CPP)
560 AC_SUBST(TargetVendor_CPP)
564 dnl --------------------------------------------------------------
565 dnl * Calculate absolute path to build tree
566 dnl --------------------------------------------------------------
568 AC_MSG_CHECKING(for path to top of build tree)
572 dnl Remove common automounter nonsense
574 hardtop=`echo $hardtop | sed 's|^/tmp_mnt.*\(/local/.*\)$|\1|' | sed 's|^/tmp_mnt/|/|' | sed 's|^//\(.\)/|\1:/|' `
576 dnl Find 'hardtop_plat', the native format for 'hardtop'
577 dnl (i.e., right kind of \dnl slashes on a Win32 box, but with b-slashes being escaped).
579 dnl Note OSTYPE: On Cygwin we need to use 'cygpath' to convert /cygdrive/c/foo to c:/foo
580 dnl but we must not do that if we aren't building using Cygwin (notably msys),
581 dnl because cygpath doesn't exist. It seems that 'bash' sets OSTYPE to 'cygwin'
582 dnl or 'msys' respectively, but cygwin's 'sh' does not. So we hackily assume
583 dnl that if the shell hasn't set it to 'msys' then we must be in Cygwin. Sigh.
585 dnl The Right Thing is probably to test $BuildPlatform instead, but we are sloppy
586 dnl about setting that correctly at the moment, so we just work around for now.
588 dnl The quotes round "$(OSTYPE)" are essential, for the Cygwin-sh case where OSTYPE
590 case $HostPlatform in
591 i386-unknown-mingw32 | i386-unknown-cygwin32)
592 if test "${OSTYPE}" != "msys"
594 # convert $hardtop to a path that mingw will understand too
595 cyghardtop=${hardtop}
596 hardtop=`cygpath -w ${cyghardtop} | sed -e 's@\\\\@/@g'`
597 hardtop_plat=`cygpath -w ${cyghardtop} | sed -e 's@\\\\@\\\\\\\\@g'`
599 hardtop_plat=${hardtop}
603 hardtop_plat=${hardtop}
607 AC_SUBST(hardtop_plat)
609 AC_MSG_RESULT(${hardtop})
611 # We don't support building in directories with spaces.
613 *' '*) AC_MSG_ERROR([
614 The build system does not support building in a directory containing
615 space characters. Suggestion: move the build tree somewhere else.])
619 dnl --------------------------------------------------------------
620 dnl * Project specific configuration options
621 dnl --------------------------------------------------------------
622 dnl What follows is a bunch of options that can either be configured
623 dnl through command line options to the configure script or by
624 dnl supplying defns in the build tree's mk/build.mk. Having the option to
625 dnl use either is considered a Feature.
627 dnl ** What command to use to compile compiler sources ?
628 dnl --------------------------------------------------------------
631 [AC_HELP_STRING([--with-ghc=ARG],
632 [Use ARG as the path to GHC [default=autodetect]])],
633 [WithGhc="$withval"],
634 [if test "$GHC" = ""; then
635 AC_PATH_PROG([GHC], [ghc])
641 [AC_HELP_STRING([--with-hc=ARG],
642 [Use ARG as the path to the compiler for compiling ordinary
643 Haskell code (default= value of --with-ghc)])],
649 if test "$WithGhc" != ""; then
650 FPTOOLS_GHC_VERSION([GhcVersion], [GhcMajVersion], [GhcMinVersion], [GhcPatchLevel])dnl
651 AC_SUBST(GhcVersion)dnl
652 AC_SUBST(GhcMajVersion)dnl
653 AC_SUBST(GhcMinVersion)dnl
654 AC_SUBST(GhcPatchLevel)dnl
657 # Check whether this GHC has readline installed
660 AC_PATH_PROGS(NHC,nhc nhc98)
661 AC_PATH_PROG(HBC,hbc)
663 dnl ** Which gcc to use?
664 dnl --------------------------------------------------------------
666 [AC_HELP_STRING([--with-gcc=ARG],
667 [Use ARG as the path to GCC [default=autodetect]])],
668 [WhatGccIsCalled="$withval"
669 if test "x$HostPlatform" = "xi386-unknown-mingw32"
671 if test "${OSTYPE}" != "msys"
673 # Canonicalise to <drive>:/path/to/gcc
674 withval=`cygpath -w ${withval} | sed -e 's@\\\\@/@g' `
680 [WhatGccIsCalled="gcc"]
682 AC_SUBST(WhatGccIsCalled)
684 dnl ** Booting from .hc files?
685 dnl --------------------------------------------------------------
686 AC_ARG_ENABLE(hc-boot,
687 [AC_HELP_STRING([--enable-hc-boot],
688 [Boot the Glasgow Haskell Compiler from intermediate .hc files.
689 (This option is mostly of interest to porters.) [default=no]])],
690 [ if test x"$enableval" = x"yes"; then
698 AC_SUBST(BootingFromHc)
700 dnl ** Booting from unregisterised .hc files?
701 dnl --------------------------------------------------------------
702 AC_ARG_ENABLE(hc-boot-unregisterised,
703 [AC_HELP_STRING([--enable-hc-boot-unregisterised],
704 [ With --enable-hc-boot, treat the intermediate .hc files as
705 unregisterised rather than registerised code.
706 (This option is mostly of interest to porters.) [default=no]])],
707 [ if test x"$enableval" = x"yes"; then
708 BootingFromUnregisterisedHc=YES
710 BootingFromUnregisterisedHc=NO
713 [BootingFromUnregisterisedHc=NO]
715 AC_SUBST(BootingFromUnregisterisedHc)
717 if test "$BootingFromHc" = "NO"; then
718 if test "$BootingFromUnregisterisedHc" = "YES"; then
719 AC_MSG_ERROR([--enable-hc-boot-unregisterised requires --enable-hc-boot.])
723 dnl ** Must have GHC to build GHC, unless --enable-hc-boot is on
724 if test "$BootingFromHc" = "NO" -a "$WithGhc" = "" -a -d "$srcdir/ghc"; then
725 AC_MSG_ERROR([GHC is required unless bootstrapping from .hc files.])
728 dnl ** Enable the construction of Win32 DLLs?
729 dnl --------------------------------------------------------------
731 dnl [ The ability to build the RTS and libraries as separate DLLs used
732 dnl to be supported, but isn't currently (updates to the RTS, compiler
733 dnl and build system would be required to bring it back again.)
734 dnl Hence, exposing it as an option is false advertisement, so better
735 dnl disable it to avoid confusion (but leave it commented-out rather
736 dnl than removed in order to remind ourselves to bring back the
737 dnl feature at some stage.) ]
739 dnl AC_ARG_ENABLE(win32-dlls,
740 dnl [ --enable-win32-dlls
741 dnl If on a Win32 platform running mingw32/cygwin, enable the
742 dnl construction of DLLs containing ghc-compiled code.
745 dnl case $HostOS_CPP in
748 dnl *) echo "Unrecognised win32 platform: $HostPlatform"
752 dnl EnableWin32DLLs=YES
754 dnl [EnableWin32DLLs=NO]
756 dnl AC_SUBST(EnableWin32DLLs)
757 dnl if test x"$EnableWin32DLLs" = "xYES" ; then
758 dnl AC_DEFINE(HAVE_WIN32_DLL_SUPPORT)
761 dnl ** Enable the building of the ObjectIO?
762 dnl --------------------------------------------------------------
763 AC_ARG_ENABLE(objectio,
764 [AC_HELP_STRING([--enable-objectio],
765 [Build ObjectIO, a portable GUI library for Haskell. [default=no]])],
766 [ if test x"$enableval" = x"yes"; then
767 GhcLibsWithObjectIO=YES
769 GhcLibsWithObjectIO=NO
772 [GhcLibsWithObjectIO=NO]
774 AC_SUBST(GhcLibsWithObjectIO)
776 dnl ** .NET interop support?
777 dnl --------------------------------------------------------------
778 AC_ARG_ENABLE(dotnet,
779 [AC_HELP_STRING([--enable-dotnet],
780 [Build .NET interop layer. [default=no]])],
781 [ if test x"$enableval" = x"yes"; then
782 DotnetSupport=YES; AC_DEFINE([WANT_DOTNET_SUPPORT], [1], [Define to 1 if you want to include .NET interop support.])
788 AC_SUBST(DotnetSupport)
790 dnl --------------------------------------------------------------
791 dnl End of configure script option section
792 dnl --------------------------------------------------------------
795 dnl --------------------------------------------------------------
796 dnl * General configuration checks
797 dnl --------------------------------------------------------------
799 dnl ** Can the unix package be built?
800 dnl --------------------------------------------------------------
802 if test x"$TargetPlatform" = x"i386-unknown-mingw32"; then
807 AC_SUBST([GhcLibsWithUnix])
812 dnl ** look for `perl', but only in /bin on Windows
815 AC_CHECK_PROG(PerlCmd,perl,/bin/perl,,/bin)
816 if test -z "$PerlCmd"; then
817 echo "You must install the version of Perl shipped with GHC"
818 echo "(or a compatible one) in /bin."
823 AC_PATH_PROG(PerlCmd,perl)
824 if test -z "$PerlCmd"; then
825 echo "You must install perl before you can continue"
826 echo "Perhaps it is already installed, but not in your PATH?"
829 FPTOOLS_CHECK_PERL_VERSION
834 dnl ** does #! path/to/perl work? (sometimes it's too long...)
837 dnl ** check for Python
838 AC_PATH_PROG(PythonCmd,python)
840 dnl ** look for GCC and find out which version
841 dnl Figure out which C compiler to use. Gcc is preferred.
842 dnl If gcc, make sure it's at least 2.1
846 FP_GCC_NEEDS_NO_OMIT_LFPTR
848 dnl ** figure out how to invoke cpp directly (gcc -E is no good)
851 dnl ** Without optimization some INLINE trickery fails for GHCi
854 dnl ** Try to add -mno-cygwin to the C compiler options
855 FP_CHECK_FLAG([-mno-cygwin], [
856 SRC_CC_OPTS="-mno-cygwin $SRC_CC_OPTS"
857 CPPFLAGS="-mno-cygwin $CPPFLAGS"])
858 AC_SUBST(SRC_CC_OPTS)
860 dnl ** figure out how to do context diffs
863 dnl ** Find find command (for Win32's benefit)
866 dnl ** Find sort command (for the benefit of Win32 environs)
869 dnl ** figure out how to do a BSD-ish install
872 dnl If you can run configure, you certainly have /bin/sh
873 AC_DEFINE([HAVE_BIN_SH], [1], [Define to 1 if you have /bin/sh.])
875 dnl ** how to invoke `ar' and `ranlib'
876 FP_PROG_AR_NEEDS_RANLIB
877 FP_PROG_AR_SUPPORTS_INPUT
879 dnl ** Check to see whether ln -s works
883 dnl ** Find the path to sed
884 AC_PATH_PROG(SedCmd,sed)
887 dnl ** check for time command
888 AC_PATH_PROG(TimeCmd,time)
891 dnl if GNU tar is named gtar, look for it first.
892 AC_PATH_PROGS(TarCmd,gtar tar,tar)
894 dnl ** check for DocBook toolchain
896 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 /usr/local/share/xsl/docbook /sw/share/xml/xsl/docbook-xsl])
899 dnl ** check for ghc-pkg command
902 AC_ARG_WITH(greencard,
903 [AC_HELP_STRING([--with-greencard=ARG],
904 [Use ARG as the path to greencard [default=autodetct]])],
906 GreenCardCmd=$withval;
907 FPTOOLS_GREENCARD(3.00)
911 AC_ARG_ENABLE(src-tree-happy,
912 [AC_HELP_STRING([--enable-src-tree-happy],
913 [Build and use source tree (fptools/happy) version of Happy.
914 [default=autodetect]])],
915 [ if test x"$enableval" = x"yes"; then
923 dnl ** check for installed happy binary + version
924 dnl (don't do it if we're booting from .hc files though.)
925 if test "$BootingFromHc" = "NO"; then
929 AC_ARG_ENABLE(src-tree-haddock,
930 [AC_HELP_STRING([--enable-src-tree-haddock],
931 [Build and use source tree (fptools/haddock) version of Haddock.
932 [default=autodetect]])],
933 [ if test x"$enableval" = x"yes"; then
934 UseSrcTreeHaddock=YES
939 [UseSrcTreeHaddock=NO]
941 dnl ** check for installed haddock
944 AC_ARG_ENABLE(src-tree-alex,
945 [AC_HELP_STRING([--enable-src-tree-alex],
946 [Build and use source tree (fptools/alex) version of Alex.
947 [default=autodetect]])],
948 [ if test x"$enableval" = x"yes"; then
956 dnl ** check for installed alex binary + version
957 dnl (don't do it if we're booting from .hc files though.)
958 if test "$BootingFromHc" = "NO"; then
962 dnl --------------------------------------------------
963 dnl ### program checking section ends here ###
964 dnl --------------------------------------------------
966 dnl --------------------------------------------------
967 dnl * Platform header file and syscall feature tests
968 dnl ### checking the state of the local header files and syscalls ###
970 dnl ** check for full ANSI header (.h) files
973 dnl ** Enable large file support. NB. do this before testing the type of
974 dnl off_t, because it will affect the result of that test.
977 dnl ** check for specific header (.h) files that we are interested in
978 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])
980 AC_CHECK_HEADER([readline/readline.h], [HaveReadlineReadlineH=YES], [HaveReadlineReadlineH=NO])
981 AC_CHECK_HEADER([readline/history.h], [HaveReadlineHistoryH=YES], [HaveReadlineHistoryH=NO])
983 if test $HaveReadlineReadlineH = YES && test $HaveReadlineHistoryH = YES ; then
984 GhcLibsWithReadline=YES
985 AC_DEFINE([HAVE_READLINE_HEADERS], [1], [Define to 1 if readline/readline.h and readline/history.h exist.])
987 GhcLibsWithReadline=NO
988 AC_DEFINE([HAVE_READLINE_HEADERS], [0], [Define to 1 if readline/readline.h and readline/history.h exist.])
990 AC_SUBST(GhcLibsWithReadline)
992 dnl ** check if it is safe to include both <time.h> and <sys/time.h>
995 dnl ** how do we get a timezone name, and UTC offset ?
998 dnl ** do we have altzone?
1001 dnl ** do we have long longs?
1002 AC_CHECK_TYPES([long long])
1004 dnl ** what are the sizes of various types
1005 AC_CHECK_SIZEOF(char, 1)
1006 AC_CHECK_SIZEOF(double, 8)
1007 AC_CHECK_SIZEOF(float, 4)
1008 AC_CHECK_SIZEOF(int, 4)
1009 AC_CHECK_SIZEOF(long, 4)
1010 if test "$ac_cv_type_long_long" = yes; then
1011 AC_CHECK_SIZEOF(long long, 8)
1013 AC_CHECK_SIZEOF(short, 2)
1014 AC_CHECK_SIZEOF(unsigned char, 1)
1015 AC_CHECK_SIZEOF(unsigned int, 4)
1016 AC_CHECK_SIZEOF(unsigned long, 4)
1017 if test "$ac_cv_type_long_long" = yes; then
1018 AC_CHECK_SIZEOF(unsigned long long, 8)
1020 AC_CHECK_SIZEOF(unsigned short, 2)
1021 AC_CHECK_SIZEOF(void *, 4)
1023 dnl ** what are alignment constraints on various types
1024 FP_CHECK_ALIGNMENT(char)
1025 FP_CHECK_ALIGNMENT(double)
1026 FP_CHECK_ALIGNMENT(float)
1027 FP_CHECK_ALIGNMENT(int)
1028 FP_CHECK_ALIGNMENT(long)
1029 if test "$ac_cv_type_long_long" = yes; then
1030 FP_CHECK_ALIGNMENT(long long)
1032 FP_CHECK_ALIGNMENT(short)
1033 FP_CHECK_ALIGNMENT(unsigned char)
1034 FP_CHECK_ALIGNMENT(unsigned int)
1035 FP_CHECK_ALIGNMENT(unsigned long)
1036 if test "$ac_cv_type_long_long" = yes; then
1037 FP_CHECK_ALIGNMENT(unsigned long long)
1039 FP_CHECK_ALIGNMENT(unsigned short)
1040 FP_CHECK_ALIGNMENT(void *)
1042 FP_CHECK_FUNC([WinExec],
1043 [@%:@include <windows.h>], [WinExec("",0)])
1045 FP_CHECK_FUNC([GetModuleFileName],
1046 [@%:@include <windows.h>], [GetModuleFileName((HMODULE)0,(LPTSTR)0,0)])
1048 dnl ** check return type of signal handlers
1049 dnl Foo: assumes we can use prototypes.
1050 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
1051 dnl AC_CACHE_CHECK([type of signal handlers], ac_cv_type_signal_handler,
1052 dnl [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
1053 dnl #include <signal.h>
1057 dnl void (*signal (int, void (*)(int)))(int);
1060 dnl [ac_cv_type_signal_handler=void_int],
1061 dnl [ac_cv_type_signal_handler=int_void])])
1062 dnl if test "$ac_cv_type_signal_handler" = void_int; then
1063 dnl AC_DEFINE(VOID_INT_SIGNALS)
1066 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
1068 if test "$ac_cv_type_signal" = void; then
1069 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).])
1072 dnl ** check for more functions
1073 dnl ** The following have been verified to be used in ghc/, but might be used somewhere else, too.
1074 AC_CHECK_FUNCS([getclock getrusage gettimeofday setitimer siginterrupt sysconf times ctime_r])
1075 dnl ** For ghc/rts/gmp:
1076 AC_CHECK_FUNCS([getpagesize])
1078 dnl ** check whether this machine has gmp3 installed
1079 AC_CHECK_LIB(gmp, __gmpz_fdiv_qr, HaveLibGmp=YES; LibGmp=gmp,
1080 AC_CHECK_LIB(gmp3, __gmpz_fdiv_qr, HaveLibGmp=YES; LibGmp=gmp3,
1081 HaveLibGmp=NO; LibGmp=not-installed))
1082 AC_SUBST(HaveLibGmp)
1085 dnl ** (Mac OS X only: check for GMP.framework)
1087 case $HostPlatform in
1089 AC_MSG_CHECKING([for GMP.framework])
1091 LIBS="-framework GMP"
1092 AC_TRY_LINK_FUNC(__gmpz_fdiv_qr, HaveFrameworkGMP=YES,)
1093 if test $HaveFrameworkGMP = YES; then
1094 AC_DEFINE([HAVE_FRAMEWORK_GMP], [1], [Define to 1 if GMP.framework is installed (Mac OS X only).])
1097 AC_MSG_RESULT([$HaveFrameworkGMP])
1100 AC_SUBST(HaveFrameworkGMP)
1102 dnl ** check for mingwex library
1103 AC_CHECK_LIB(mingwex, closedir, HaveLibMingwEx=YES, HaveLibMingwEx=NO)
1104 AC_SUBST(HaveLibMingwEx)
1106 if test $HaveLibMingwEx = YES ; then
1107 AC_DEFINE([HAVE_MINGWEX], [1], [Define to 1 if you have the mingwex library.])
1110 if test "$HaveLibGmp" = "NO"; then
1111 if test "$HostArch_CPP" = "ia64" -o "$HostArch_CPP" = "mipseb" ; then
1112 AC_MSG_ERROR([You need to install libgmp (the in-tree version does not work on IA64 or mips64).])
1116 dnl ** check whether this machine has BFD and liberty installed (used for debugging)
1117 dnl the order of these tests matters: bfd needs liberty
1118 AC_CHECK_LIB(iberty, xmalloc)
1119 AC_CHECK_LIB(bfd, bfd_init)
1121 dnl ** check for readline, for Hugs and hslibs' Readline
1122 dnl ncurses supersedes termcap and curses, but for compatibility,
1123 dnl we have to check for all...
1124 AC_CHECK_LIB(ncurses, tputs, HaveLibTermcap=YES; LibTermcap=ncurses,
1125 AC_CHECK_LIB(termcap, tputs, HaveLibTermcap=YES; LibTermcap=termcap,
1126 AC_CHECK_LIB(curses, tputs, HaveLibTermcap=YES; LibTermcap=curses,
1127 HaveLibTermcap=NO; LibTermcap=not-installed)))
1129 if test $HaveLibTermcap = YES ; then
1130 LIBS="-l$LibTermcap $LIBS"
1131 AC_CHECK_LIB(readline, readline, HaveLibReadline=YES, HaveLibReadline=NO)
1134 if test $HaveLibTermcap = YES && test x"$HaveLibReadline" = xYES ; then
1135 AC_DEFINE([HAVE_READLINE_LIBS], [1], [Define to 1 if readline plus any additional libs needed for it exist.])
1136 LibsReadline="readline $LibTermcap"
1138 AC_DEFINE([HAVE_READLINE_LIBS], [0], [Define to 1 if readline plus any additional libs needed for it exist.])
1141 AC_SUBST(LibsReadline)
1143 if test "$HaveLibReadline"; then
1144 AC_CHECK_LIB(readline, rl_erase_empty_line,
1145 [AC_DEFINE([HAVE_READLINE_4], [1], [Define to 1 if readline has version >= 4.0.])],
1146 [AC_DEFINE([HAVE_READLINE_4], [0], [Define to 1 if readline has version >= 4.0.])])
1147 AC_CHECK_LIB(readline, rl_free_undo_list,
1148 [AC_DEFINE([HAVE_READLINE_4_2], [1], [Define to 1 if readline has version >= 4.2.])],
1149 [AC_DEFINE([HAVE_READLINE_4_2], [0], [Define to 1 if readline has version >= 4.2.])])
1151 AC_DEFINE([HAVE_READLINE_4], [0], [Define to 1 if readline has version >= 4.0.])
1152 AC_DEFINE([HAVE_READLINE_4_2], [0], [Define to 1 if readline has version >= 4.2.])
1155 dnl ** check for math library
1156 AC_CHECK_FUNC(atan,[fp_libm_not_needed=yes;LIBM=],[fp_libm_not_needed=dunno])
1157 if test x"$fp_libm_not_needed" = xdunno; then
1158 AC_CHECK_LIB([m], [atan], [LIBS="-lm $LIBS"; LIBM="-lm"],[LIBM=])
1162 dnl ################################################################
1163 dnl Check for libraries
1164 dnl ################################################################
1166 dnl ** check whether we need -ldl to get dlopen()
1168 AC_CHECK_LIB(dl, dlopen,
1170 AC_DEFINE([HAVE_LIBDL], [1], [Define to 1 if you need -ldl to get dlopen().])
1175 dnl --------------------------------------------------
1176 dnl * Miscellaneous feature tests
1177 dnl --------------------------------------------------
1179 dnl ** can we get alloca?
1182 dnl ** Working vfork?
1185 dnl ** determine whether or not const works
1188 dnl ** are we big endian?
1191 dnl ** check for leading underscores in symbol names
1192 FP_LEADING_UNDERSCORE
1194 dnl ** check for ld, whether it has an -x option, and if it is GNU ld
1198 dnl ** check for Apple-style dead-stripping support
1199 dnl (.subsections-via-symbols assembler directive)
1202 AC_MSG_CHECKING(for .subsections_via_symbols)
1203 AC_TRY_COMPILE(,[__asm__ (".subsections_via_symbols");],
1206 AC_DEFINE([HAVE_SUBSECTIONS_VIA_SYMBOLS],[1],
1207 [Define to 1 if Apple-style dead-stripping is supported.])
1211 AC_DEFINE([HAVE_SUBSECTIONS_VIA_SYMBOLS],[0],
1212 [Define to 1 if Apple-style dead-stripping is supported.])
1215 dnl ** check for librt
1216 AC_CHECK_LIB(rt, clock_gettime)
1217 AC_CHECK_FUNCS(clock_gettime)
1219 dnl ** check for Apple's "interesting" long double compatibility scheme
1220 AC_MSG_CHECKING(for printf$LDBLStub)
1221 AC_TRY_LINK_FUNC(printf$LSBLStub,
1224 AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[1],
1225 [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
1229 AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[0],
1230 [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
1234 AC_PATH_PROGS([GTK_CONFIG], [pkg-config])
1235 if test -n "$GTK_CONFIG"; then
1236 if $GTK_CONFIG gtk+-2.0 --atleast-version=2.0; then
1237 GTK_CONFIG="$GTK_CONFIG gtk+-2.0"
1239 AC_MSG_WARN([GTK+ not usable, need at least version 2.0])
1243 AC_SUBST([GTK_CONFIG])
1245 AC_CONFIG_FILES([mk/config.mk ghc.spec docs/users_guide/ug-book.xml])
1246 AC_CONFIG_COMMANDS([mk/stamp-h],[echo timestamp > mk/stamp-h])