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 University of Glasgow 1994-2004
8 # Configure script template for GHC
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.11], [glasgow-haskell-bugs@haskell.org], [ghc])
18 # Set this to YES for a released version, otherwise NO
21 # The primary version (e.g. 6.7, 6.6.1) is set in the AC_INIT line
22 # above. If this is not a released version, then we will append the
23 # date to the version number (e.g. 6.7.20070204). The date is
24 # constructed by finding the date of the most recent patch in the
25 # darcs repository. If this is a source distribution (not a darcs
26 # checkout), then we ship a file 'VERSION' containing the full version
27 # when the source distribution was created.
29 if test ! -f mk/config.h.in; then
30 echo "mk/config.h.in doesn't exist: perhaps you haven't run 'sh boot'?"
34 AC_SUBST([CONFIGURE_ARGS], [$ac_configure_args])
36 FP_SETUP_PROJECT_VERSION
38 # Hmmm, we fix the RPM release number to 1 here... Is this convenient?
39 AC_SUBST([release], [1])
41 # First off, a distrib sanity check..
42 AC_CONFIG_SRCDIR([mk/config.mk.in])
44 dnl * We require autoconf version 2.52
45 dnl We need 2.50 due to the use of AC_SYS_LARGEFILE and AC_MSG_NOTICE.
46 dnl We need 2.52 due to the use of AS_TR_CPP and AS_TR_SH.
49 # -------------------------------------------------------------------------
50 # Prepare to generate the following header files
53 AC_CONFIG_HEADER(mk/config.h)
55 # No, semi-sadly, we don't do `--srcdir'...
56 if test x"$srcdir" != 'x.' ; then
57 echo "This configuration does not support the \`--srcdir' option.."
61 dnl--------------------------------------------------------------------
62 dnl * Deal with arguments telling us gmp is somewhere odd
63 dnl--------------------------------------------------------------------
69 if test "x$gmp_libraries" != "xNONE"; then
70 LDFLAGS="-L$gmp_libraries $LDFLAGS"
71 GMP_LIB_DIRS=$gmp_libraries
73 if test "x$gmp_includes" != "xNONE"; then
74 CPPFLAGS="-I$gmp_includes $CPPFLAGS"
75 GMP_INCLUDE_DIRS=$gmp_includes
77 AC_SUBST(GMP_INCLUDE_DIRS)
78 AC_SUBST(GMP_LIB_DIRS)
80 dnl--------------------------------------------------------------------
81 dnl * Choose host(/target/build) platform
82 dnl--------------------------------------------------------------------
84 dnl Guess host/target/build platform(s) if necessary.
87 # "$host" defaults to "$target"
88 if test "x$host" = xNONE ; then
92 dnl ** canonicalize platform names
93 BuildPlatform=`/bin/sh $srcdir/config.sub $build` || exit 1
94 HostPlatform=`/bin/sh $srcdir/config.sub $host` || exit 1
95 TargetPlatform=`/bin/sh $srcdir/config.sub $target` || exit 1
97 if test x"$TargetPlatform" != x"$HostPlatform" ; then
98 echo "GHC configuration does not support differing host/target (i.e., cross-compiling)"
105 # The following will be more difficult when we *are* cross-compiling.
106 # Suitable names to slam in *_CPP are in platform.h.in.
107 # We also record the architecture, vendor, and operating system (OS)
109 case $HostPlatform in
110 alpha*-dec-osf[[12]]*)
111 HostPlatform=alpha-dec-osf1 # canonicalise for our purposes
112 TargetPlatform=alpha-dec-osf1 # this will work for now... (hack)
113 BuildPlatform=alpha-dec-osf1 # hack
114 HostPlatform_CPP='alpha_dec_osf1'
119 alpha*-dec-osf[[345]]*)
120 HostPlatform=alpha-dec-osf3 # canonicalise for our purposes
121 TargetPlatform=alpha-dec-osf3 # this will work for now... (hack)
122 BuildPlatform=alpha-dec-osf3 # hack
123 HostPlatform_CPP='alpha_dec_osf3'
128 alpha*-unknown-linux*)
129 HostPlatform=alpha-unknown-linux
130 TargetPlatform=alpha-unknown-linux
131 BuildPlatform=alpha-unknown-linux
132 HostPlatform_CPP='alpha_unknown_linux'
134 HostVendor_CPP='unknown'
137 alpha*-unknown-freebsd*)
138 HostPlatform=alpha-unknown-freebsd
139 TargetPlatform=alpha-unknown-freebsd
140 BuildPlatform=alpha-unknown-freebsd
141 HostPlatform_CPP='alpha_unknown_freebsd'
143 HostVendor_CPP='unknown'
146 alpha*-unknown-openbsd*)
147 HostPlatform=alpha-unknown-openbsd
148 TargetPlatform=alpha-unknown-openbsd
149 BuildPlatform=alpha-unknown-openbsd
150 HostPlatform_CPP='alpha_unknown_openbsd'
152 HostVendor_CPP='unknown'
155 amd64-*-openbsd*|x86_64-*-openbsd*)
156 HostPlatform=x86_64-unknown-openbsd
157 TargetPlatform=x86_64-unknown-openbsd
158 BuildPlatform=x86_64-unknown-openbsd
159 HostPlatform_CPP='x86_64_unknown_openbsd'
160 HostArch_CPP='x86_64'
161 HostVendor_CPP='unknown'
164 amd64-*-freebsd*|x86_64-*-freebsd*)
165 HostPlatform=x86_64-unknown-freebsd
166 TargetPlatform=x86_64-unknown-freebsd
167 BuildPlatform=x86_64-unknown-freebsd
168 HostPlatform_CPP='x86_64_unknown_freebsd'
169 HostArch_CPP='x86_64'
170 HostVendor_CPP='unknown'
173 amd64-*-netbsd*|x86_64-*-netbsd*)
174 HostPlatform=x86_64-unknown-netbsd
175 TargetPlatform=x86_64-unknown-netbsd
176 BuildPlatform=x86_64-unknown-netbsd
177 HostPlatform_CPP='x86_64_unknown_netbsd'
178 HostArch_CPP='x86_64'
179 HostVendor_CPP='unknown'
183 HostPlatform=arm-unknown-linux # hack again
184 TargetPlatform=arm-unknown-linux
185 BuildPlatform=arm-unknown-linux
186 HostPlatform_CPP='arm_unknown_linux'
188 HostVendor_CPP='unknown'
192 HostPlatform=arm-unknown-openbsd
193 TargetPlatform=arm-unknown-openbsd
194 BuildPlatform=arm-unknown-openbsd
195 HostPlatform_CPP='arm_unknown_openbsd'
197 HostVendor_CPP='unknown'
201 HostPlatform=hppa-unknown-linux # hack again
202 TargetPlatform=hppa-unknown-linux
203 BuildPlatform=hppa-unknown-linux
204 HostPlatform_CPP='hppa_unknown_linux'
206 HostVendor_CPP='unknown'
210 HostPlatform=hppa-unknown-openbsd # hack again
211 TargetPlatform=hppa-unknown-openbsd
212 BuildPlatform=hppa-unknown-openbsd
213 HostPlatform_CPP='hppa_unknown_openbsd'
215 HostVendor_CPP='unknown'
219 HostPlatform=hppa1.1-hp-hpux # canonicalise for our purposes (hack)
220 TargetPlatform=hppa1.1-hp-hpux
221 BuildPlatform=hppa1.1-hp-hpux
222 HostPlatform_CPP='hppa1_1_hp_hpux'
223 HostArch_CPP='hppa1_1'
227 i[[3456]]86-*-linuxaout*)
228 HostPlatform=i386-unknown-linuxaout # hack again
229 TargetPlatform=i386-unknown-linuxaout
230 BuildPlatform=i386-unknown-linuxaout
231 HostPlatform_CPP='i386_unknown_linuxaout'
233 HostVendor_CPP='unknown'
234 HostOS_CPP='linuxaout'
236 i[[3456]]86-*-linux*)
237 HostPlatform=i386-unknown-linux # hack again
238 TargetPlatform=i386-unknown-linux
239 BuildPlatform=i386-unknown-linux
240 HostPlatform_CPP='i386_unknown_linux'
242 HostVendor_CPP='unknown'
245 i[[3456]]86-*-kfreebsd*-gnu)
246 HostPlatform=i386-unknown-kfreebsdgnu # hack again
247 TargetPlatform=i386-unknown-kfreebsdgnu
248 BuildPlatform=i386-unknown-kfreebsdgnu
249 HostPlatform_CPP='i386_unknown_kfreebsdgnu'
251 HostVendor_CPP='unknown'
252 HostOS_CPP='kfreebsdgnu'
254 i[[3456]]86-*-freebsd[[3-9]]*) # FreeBSD 3.0+ uses ELF
255 HostPlatform=i386-unknown-freebsd # hack again
256 TargetPlatform=i386-unknown-freebsd
257 BuildPlatform=i386-unknown-freebsd
258 HostPlatform_CPP='i386_unknown_freebsd'
260 HostVendor_CPP='unknown'
263 i[[3456]]86-*-freebsd2*) # Older FreeBSDs are a.out
264 HostPlatform=i386-unknown-freebsd2 # hack again
265 TargetPlatform=i386-unknown-freebsd2
266 BuildPlatform=i386-unknown-freebsd2
267 HostPlatform_CPP='i386_unknown_freebsd2'
269 HostVendor_CPP='unknown'
270 HostOS_CPP='freebsd2'
272 i[[3456]]86-*-netbsd*)
273 HostPlatform=i386-unknown-netbsd # hack again
274 TargetPlatform=i386-unknown-netbsd
275 BuildPlatform=i386-unknown-netbsd
276 HostPlatform_CPP='i386_unknown_netbsd'
278 HostVendor_CPP='unknown'
281 i[[3456]]86-*-openbsd*)
282 HostPlatform=i386-unknown-openbsd # hack again
283 TargetPlatform=i386-unknown-openbsd
284 BuildPlatform=i386-unknown-openbsd
285 HostPlatform_CPP='i386_unknown_openbsd'
287 HostVendor_CPP='unknown'
290 i[[3456]]86-*-solaris2*)
291 HostPlatform=i386-unknown-solaris2 # hack again
292 TargetPlatform=i386-unknown-solaris2
293 BuildPlatform=i386-unknown-solaris2
294 HostPlatform_CPP='i386_unknown_solaris2'
296 HostVendor_CPP='unknown'
297 HostOS_CPP='solaris2'
299 i[[3456]]86-*-cygwin*)
300 HostPlatform=i386-unknown-cygwin32 # hack again
301 TargetPlatform=i386-unknown-cygwin32
302 BuildPlatform=i386-unknown-cygwin32
303 HostPlatform_CPP='i386_unknown_cygwin32'
305 HostVendor_CPP='unknown'
306 HostOS_CPP='cygwin32'
310 i[[3456]]86-*-mingw32*)
311 HostPlatform=i386-unknown-mingw32 # hack again
312 TargetPlatform=i386-unknown-mingw32
313 BuildPlatform=i386-unknown-mingw32
314 HostPlatform_CPP='i386_unknown_mingw32'
316 HostVendor_CPP='unknown'
321 i[[3456]]86-apple-darwin*)
322 HostPlatform=i386-apple-darwin
323 TargetPlatform=i386-apple-darwin #hack
324 BuildPlatform=i386-apple-darwin #hack
325 HostPlatform_CPP='i386_apple_darwin'
327 HostVendor_CPP='apple'
332 HostPlatform=i386-unknown-gnu
333 TargetPlatform=i386-unknown-gnu
334 BuildPlatform=i386-unknown-gnu
335 HostPlatform_CPP=i386_unknown_gnu
337 HostVendor_CPP=unknown
341 HostPlatform=ia64-unknown-linux # hack again
342 TargetPlatform=ia64-unknown-linux
343 BuildPlatform=ia64-unknown-linux
344 HostPlatform_CPP='ia64_unknown_linux'
346 HostVendor_CPP='unknown'
350 HostPlatform=x86_64-unknown-linux
351 TargetPlatform=x86_64-unknown-linux
352 BuildPlatform=x86_64-unknown-linux
353 HostPlatform_CPP='x86_64_unknown_linux'
354 HostArch_CPP='x86_64'
355 HostVendor_CPP='unknown'
358 x86_64-apple-darwin*)
359 HostPlatform=x86_64-apple-darwin
360 TargetPlatform=x86_64-apple-darwin
361 BuildPlatform=x86_64-apple-darwin
362 HostPlatform_CPP='x86_64_apple_darwin'
363 HostArch_CPP='x86_64'
364 HostVendor_CPP='apple'
369 HostPlatform=m68k-unknown-linux # hack again
370 TargetPlatform=m68k-unknown-linux
371 BuildPlatform=m68k-unknown-linux
372 HostPlatform_CPP='m68k_unknown_linux'
374 HostVendor_CPP='unknown'
378 HostPlatform_CPP='m68k_next_nextstep2'
380 HostVendor_CPP='next'
381 HostOS_CPP='nextstep2'
384 HostPlatform_CPP='m68k_next_nextstep3'
386 HostVendor_CPP='next'
387 HostOS_CPP='nextstep3'
389 i[[3456]]86-next-nextstep3)
390 HostPlatform=i386-next-nextstep3 # hack again
391 TargetPlatform=i386-next-nextstep3
392 BuildPlatform=i386-next-nextstep3
393 HostPlatform_CPP='i386_next_nextstep3'
395 HostVendor_CPP='next'
396 HostOS_CPP='nextstep3'
399 HostPlatform=m68k-unknown-openbsd
400 TargetPlatform=m68k-unknown-openbsd
401 BuildPlatform=m68k-unknown-openbsd
402 HostPlatform_CPP='m68k_unknown_openbsd'
404 HostVendor_CPP='unknown'
408 HostPlatform=m68k-unknown-netbsd
409 TargetPlatform=m68k-unknown-netbsd
410 BuildPlatform=m68k-unknown-netbsd
411 HostPlatform_CPP='m68k_unknown_netbsd'
413 HostVendor_CPP='unknown'
417 HostPlatform=m68k-sun-sunos4
418 TargetPlatform=m68k-sun-sunos4 #hack
419 BuildPlatform=m68k-sun-sunos4 #hack
420 HostPlatform_CPP='m68k_sun_sunos4'
426 HostPlatform=m88k-unknown-openbsd
427 TargetPlatform=m88k-unknown-openbsd
428 BuildPlatform=m88k-unknown-openbsd
429 HostPlatform_CPP='m88k_unknown_openbsd'
431 HostVendor_CPP='unknown'
435 HostPlatform=mips-unknown-linux # hack again
436 TargetPlatform=mips-unknown-linux
437 BuildPlatform=mips-unknown-linux
438 HostPlatform_CPP='mips_unknown_linux'
440 HostVendor_CPP='unknown'
444 HostPlatform=mipsel-unknown-linux # hack again
445 TargetPlatform=mipsel-unknown-linux
446 BuildPlatform=mipsel-unknown-linux
447 HostPlatform_CPP='mipsel_unknown_linux'
448 HostArch_CPP='mipsel'
449 HostVendor_CPP='unknown'
453 HostPlatform_CPP='mips_dec_ultrix'
454 HostArch_CPP='mipsel' # NB a little different
459 HostPlatform=mips-sgi-irix
460 TargetPlatform=mips-sgi-irix #hack
461 BuildPlatform=mips-sgi-irix #hack
462 HostPlatform_CPP='mips_sgi_irix'
463 HostArch_CPP='mipseb' # NB a little different
468 HostPlatform=rs6000-ibm-aix
469 TargetPlatform=rs6000-ibm-aix #hack
470 BuildPlatform=rs6000-ibm-aix #hack
471 HostPlatform_CPP='rs6000_ibm_aix'
472 HostArch_CPP='rs6000'
477 HostPlatform=powerpc-ibm-aix
478 TargetPlatform=powerpc-ibm-aix #hack
479 BuildPlatform=powerpc-ibm-aix #hack
480 HostPlatform_CPP='powerpc_ibm_aix'
481 HostArch_CPP='powerpc'
485 powerpc-apple-darwin*)
486 HostPlatform=powerpc-apple-darwin
487 TargetPlatform=powerpc-apple-darwin #hack
488 BuildPlatform=powerpc-apple-darwin #hack
489 HostPlatform_CPP='powerpc_apple_darwin'
490 HostArch_CPP='powerpc'
491 HostVendor_CPP='apple'
495 powerpc-unknown-linux*)
496 HostPlatform=powerpc-unknown-linux
497 TargetPlatform=powerpc-unknown-linux
498 BuildPlatform=powerpc-unknown-linux
499 HostPlatform_CPP='powerpc_unknown_linux'
500 HostArch_CPP='powerpc'
501 HostVendor_CPP='unknown'
504 powerpc-unknown-openbsd*)
505 HostPlatform=powerpc-unknown-openbsd
506 TargetPlatform=powerpc-unknown-openbsd
507 BuildPlatform=powerpc-unknown-openbsd
508 HostPlatform_CPP='powerpc_unknown_openbsd'
509 HostArch_CPP='powerpc'
510 HostVendor_CPP='unknown'
513 powerpc64-unknown-linux*)
514 HostPlatform=powerpc64-unknown-linux
515 TargetPlatform=powerpc64-unknown-linux
516 BuildPlatform=powerpc64-unknown-linux
517 HostPlatform_CPP='powerpc64_unknown_linux'
518 HostArch_CPP='powerpc64'
519 HostVendor_CPP='unknown'
524 HostPlatform=s390-ibm-linux
525 TargetPlatform=s390-ibm-linux #hack
526 BuildPlatform=s390-ibm-linux #hack
527 HostPlatform_CPP='s390_ibm_linux'
533 HostPlatform=sparc-sun-sunos4
534 TargetPlatform=sparc-sun-sunos4 #hack
535 BuildPlatform=sparc-sun-sunos4 #hack
536 HostPlatform_CPP='sparc_sun_sunos4'
542 HostPlatform=sparc-sun-solaris2
543 TargetPlatform=sparc-sun-solaris2 #hack
544 BuildPlatform=sparc-sun-solaris2 #hack
545 HostPlatform_CPP='sparc_sun_solaris2'
548 HostOS_CPP='solaris2'
551 HostPlatform=sparc-unknown-linux
552 TargetPlatform=sparc-unknown-linux
553 BuildPlatform=sparc-unknown-linux
554 HostPlatform_CPP='sparc_unknown_linux'
556 HostVendor_CPP='unknown'
560 HostPlatform=sparc-unknown-openbsd
561 TargetPlatform=sparc-unknown-openbsd
562 BuildPlatform=sparc-unknown-openbsd
563 HostPlatform_CPP='sparc_unknown_openbsd'
565 HostVendor_CPP='unknown'
569 HostPlatform=sparc64-unknown-openbsd
570 TargetPlatform=sparc64-unknown-openbsd
571 BuildPlatform=sparc64-unknown-openbsd
572 HostPlatform_CPP='sparc64_unknown_openbsd'
573 HostArch_CPP='sparc64'
574 HostVendor_CPP='unknown'
578 HostPlatform=vax-unknown-openbsd
579 TargetPlatform=vax-unknown-openbsd
580 BuildPlatform=vax-unknown-openbsd
581 HostPlatform_CPP='vax_unknown_openbsd'
583 HostVendor_CPP='unknown'
587 echo "Unrecognised platform: $HostPlatform"
591 echo "Canonicalised to: $HostPlatform"
592 test x"$HostPlatform" != x"$TargetPlatform" && echo "Target platform set to $TargetPlatform"
593 test x"$BuildPlatform" != x"$HostPlatform" && echo "Build platform set to $BuildPlatform"
595 BuildPlatform_CPP=$HostPlatform_CPP
596 TargetPlatform_CPP=$HostPlatform_CPP
597 BuildArch_CPP=$HostArch_CPP
598 TargetArch_CPP=$HostArch_CPP
599 BuildOS_CPP=$HostOS_CPP
601 TargetOS_CPP=$HostOS_CPP
602 BuildVendor_CPP=$HostVendor_CPP
603 TargetVendor_CPP=$HostVendor_CPP
605 AC_SUBST(BuildPlatform)
606 AC_SUBST(HostPlatform)
607 AC_SUBST(TargetPlatform)
608 AC_SUBST(HostPlatform_CPP)
609 AC_SUBST(BuildPlatform_CPP)
610 AC_SUBST(TargetPlatform_CPP)
612 AC_SUBST(HostArch_CPP)
613 AC_SUBST(BuildArch_CPP)
614 AC_SUBST(TargetArch_CPP)
617 AC_SUBST(HostOS_Full)
618 AC_SUBST(BuildOS_CPP)
619 AC_SUBST(TargetOS_CPP)
621 AC_SUBST(HostVendor_CPP)
622 AC_SUBST(BuildVendor_CPP)
623 AC_SUBST(TargetVendor_CPP)
628 dnl --------------------------------------------------------------
629 dnl * Project specific configuration options
630 dnl --------------------------------------------------------------
631 dnl What follows is a bunch of options that can either be configured
632 dnl through command line options to the configure script or by
633 dnl supplying defns in the build tree's mk/build.mk. Having the option to
634 dnl use either is considered a Feature.
636 dnl ** What command to use to compile compiler sources ?
637 dnl --------------------------------------------------------------
640 [AC_HELP_STRING([--with-ghc=ARG],
641 [Use ARG as the path to GHC [default=autodetect]])],
642 [WithGhc="$withval"],
643 [if test "$GHC" = ""; then
644 AC_PATH_PROG([GHC], [ghc])
647 # GHC is passed to Cabal, so we need a native path
648 if test "x$HostPlatform" = "xi386-unknown-mingw32" && \
649 test "${OSTYPE}" != "msys" && \
650 test "${WithGhc}" != ""
652 # Canonicalise to <drive>:/path/to/ghc
653 WithGhc=`cygpath -m ${WithGhc}`
658 [AC_HELP_STRING([--with-hc=ARG],
659 [Use ARG as the path to the compiler for compiling ordinary
660 Haskell code (default= value of --with-ghc)])],
666 if test "$WithGhc" != ""; then
667 FPTOOLS_GHC_VERSION([GhcVersion], [GhcMajVersion], [GhcMinVersion], [GhcPatchLevel])dnl
668 AC_SUBST(GhcVersion)dnl
669 AC_SUBST(GhcMajVersion)dnl
670 AC_SUBST(GhcMinVersion)dnl
671 AC_SUBST(GhcPatchLevel)dnl
672 GhcMinVersion2=`echo "$GhcMinVersion" | sed 's/^\\(.\\)$/0\\1/'`
673 GhcCanonVersion="$GhcMajVersion$GhcMinVersion2"
674 if test $GhcCanonVersion -ge 607; then ghc_ge_607=YES; else ghc_ge_607=NO; fi
675 if test $GhcCanonVersion -ge 609; then ghc_ge_609=YES; else ghc_ge_609=NO; fi
676 AC_SUBST(ghc_ge_607)dnl
677 AC_SUBST(ghc_ge_609)dnl
680 # Check whether this GHC has editline installed
683 # Dummy arguments to print help for --with-editline-* arguments.
684 # Those are actually passed to the editline package's configure script
685 # via the CONFIGURE_ARGS variable in mk/config.mk
686 AC_ARG_WITH(dummy-editline-includes,
687 [AC_HELP_STRING([--with-editline-includes],
688 [directory containing editline/editline.h or editline/readline.h])],
692 AC_ARG_WITH(dummy-editline-libraries,
693 [AC_HELP_STRING([--with-editline-libraries],
694 [directory containing the editline library])],
699 AC_PATH_PROGS(NHC,nhc nhc98)
700 AC_PATH_PROG(HBC,hbc)
702 dnl ** Which gcc to use?
703 dnl --------------------------------------------------------------
705 [AC_HELP_STRING([--with-gcc=ARG],
706 [Use ARG as the path to GCC [default=autodetect]])],
707 [WhatGccIsCalled="$withval"
708 if test "x$HostPlatform" = "xi386-unknown-mingw32" && \
709 test "${OSTYPE}" != "msys" && \
710 test "${withval}" != ""
712 # Canonicalise to <drive>:/path/to/gcc
713 withval=`cygpath -m ${withval}`
718 [WhatGccIsCalled="gcc"]
720 AC_SUBST(WhatGccIsCalled)
722 dnl ** Which ld to use?
723 dnl --------------------------------------------------------------
725 [AC_HELP_STRING([--with-ld=ARG],
726 [Use ARG as the path to LD [default=autodetect]])],
727 [if test "x$HostPlatform" = "xi386-unknown-mingw32" && \
728 test "${OSTYPE}" != "msys" && \
729 test "${withval}" != ""
731 # Canonicalise to <drive>:/path/to/ld
732 withval=`cygpath -m ${withval}`
740 dnl ** Build shared and/or static libs?
741 dnl --------------------------------------------------------------
742 AC_ARG_ENABLE(shared,
743 [AC_HELP_STRING([--enable-shared],
744 [Build shared libraries, if available (EXPERIMENTAL, non-working). [default=no]])],
745 [ if test x"$enableval" = x"yes"; then
746 AC_MSG_WARN([--enable-shared is experimental and not fully supported at this time])
754 AC_SUBST(BuildSharedLibs)
757 # AC_ARG_ENABLE(static,
758 # [AC_HELP_STRING([--enable-static],
759 # [Build static libraries. [default=yes]])],
760 # [ if test x"$enableval" = x"yes"; then
761 # BuildStaticLibs=YES
766 # [BuildStaticLibs=YES]
768 # AC_SUBST(BuildStaticLibs)
770 dnl ** Booting from .hc files?
771 dnl --------------------------------------------------------------
772 AC_ARG_ENABLE(hc-boot,
773 [AC_HELP_STRING([--enable-hc-boot],
774 [Boot the Glasgow Haskell Compiler from intermediate .hc files.
775 (This option is mostly of interest to porters.) [default=no]])],
776 [ if test x"$enableval" = x"yes"; then
784 AC_SUBST(BootingFromHc)
786 dnl ** Booting from unregisterised .hc files?
787 dnl --------------------------------------------------------------
788 AC_ARG_ENABLE(hc-boot-unregisterised,
789 [AC_HELP_STRING([--enable-hc-boot-unregisterised],
790 [ With --enable-hc-boot, treat the intermediate .hc files as
791 unregisterised rather than registerised code.
792 (This option is mostly of interest to porters.) [default=no]])],
793 [ if test x"$enableval" = x"yes"; then
794 BootingFromUnregisterisedHc=YES
796 BootingFromUnregisterisedHc=NO
799 [BootingFromUnregisterisedHc=NO]
801 AC_SUBST(BootingFromUnregisterisedHc)
803 if test "$BootingFromHc" = "NO"; then
804 if test "$BootingFromUnregisterisedHc" = "YES"; then
805 AC_MSG_ERROR([--enable-hc-boot-unregisterised requires --enable-hc-boot.])
809 dnl ** Must have GHC to build GHC, unless --enable-hc-boot is on
810 if test "$BootingFromHc" = "NO" -a -d "$srcdir/compiler"; then
811 if test "$WithGhc" = ""; then
812 AC_MSG_ERROR([GHC is required unless bootstrapping from .hc files.])
814 FP_COMPARE_VERSIONS([$GhcVersion],[-lt],[6.6],
815 [AC_MSG_ERROR([GHC version 6.6 or later is required to compile GHC.])])dnl
818 # This uses GHC, so put it after the "GHC is required" check above:
821 dnl ** Enable the construction of Win32 DLLs?
822 dnl --------------------------------------------------------------
824 dnl [ The ability to build the RTS and libraries as separate DLLs used
825 dnl to be supported, but isn't currently (updates to the RTS, compiler
826 dnl and build system would be required to bring it back again.)
827 dnl Hence, exposing it as an option is false advertisement, so better
828 dnl disable it to avoid confusion (but leave it commented-out rather
829 dnl than removed in order to remind ourselves to bring back the
830 dnl feature at some stage.) ]
832 dnl AC_ARG_ENABLE(win32-dlls,
833 dnl [ --enable-win32-dlls
834 dnl If on a Win32 platform running mingw32/cygwin, enable the
835 dnl construction of DLLs containing ghc-compiled code.
838 dnl case $HostOS_CPP in
841 dnl *) echo "Unrecognised win32 platform: $HostPlatform"
845 dnl EnableWin32DLLs=YES
847 dnl [EnableWin32DLLs=NO]
849 dnl AC_SUBST(EnableWin32DLLs)
850 dnl if test x"$EnableWin32DLLs" = "xYES" ; then
851 dnl AC_DEFINE(HAVE_WIN32_DLL_SUPPORT)
854 dnl ** Mac OS X: explicit deployment target
855 dnl --------------------------------------------------------------
856 AC_ARG_WITH([macosx-deployment-target],
857 [AC_HELP_STRING([--with-macosx-deployment-target=VERSION],
858 [Build for Mac OS VERSION and higher (default= version of build host)])],
859 [FP_MACOSX_DEPLOYMENT_TARGET="$withval"
860 if test "x$TargetOS_CPP-$TargetVendor_CPP" != "xdarwin-apple"; then
861 # ignore everywhere, but on Mac OS
862 AC_MSG_WARN([--macosx-deployment-target is only available on Mac OS X])
863 FP_MACOSX_DEPLOYMENT_TARGET=none
865 [FP_MACOSX_DEPLOYMENT_TARGET=none]
867 FP_CHECK_MACOSX_DEPLOYMENT_TARGET
868 AC_SUBST(MACOSX_DEPLOYMENT_VERSION)
869 AC_SUBST(MACOSX_DEPLOYMENT_SDK)
871 dnl --------------------------------------------------------------
872 dnl End of configure script option section
873 dnl --------------------------------------------------------------
876 dnl --------------------------------------------------------------
877 dnl * General configuration checks
878 dnl --------------------------------------------------------------
880 dnl ** Can the unix package be built?
881 dnl --------------------------------------------------------------
883 if test x"$TargetPlatform" = x"i386-unknown-mingw32"; then
888 AC_SUBST([GhcLibsWithUnix])
893 dnl ** look for `perl', but only in /bin on Windows
896 AC_CHECK_PROG(PerlCmd,perl,/bin/perl,,/bin)
897 if test -z "$PerlCmd"; then
898 echo "You must install the version of Perl shipped with GHC"
899 echo "(or a compatible one) in /bin."
904 AC_PATH_PROG(PerlCmd,perl)
905 if test -z "$PerlCmd"; then
906 echo "You must install perl before you can continue"
907 echo "Perhaps it is already installed, but not in your PATH?"
910 FPTOOLS_CHECK_PERL_VERSION
915 dnl ** does #! path/to/perl work? (sometimes it's too long...)
918 dnl ** check for Python
919 AC_PATH_PROG(PythonCmd,python)
921 dnl ** look for GCC and find out which version
922 dnl Figure out which C compiler to use. Gcc is preferred.
923 dnl If gcc, make sure it's at least 2.1
929 dnl ** figure out how to invoke cpp directly (gcc -E is no good)
932 dnl ** Without optimization some INLINE trickery fails for GHCi
935 AC_SUBST(SRC_CC_OPTS)
937 dnl ** figure out how to do context diffs
940 dnl ** Find find command (for Win32's benefit)
943 dnl ** Find sort command (for the benefit of Win32 environs)
946 dnl Let's make sure install-sh is executable here. If we got it from
947 dnl a darcs repo, it might not be (see bug #978).
949 dnl ** figure out how to do a BSD-ish install
952 dnl If you can run configure, you certainly have /bin/sh
953 AC_DEFINE([HAVE_BIN_SH], [1], [Define to 1 if you have /bin/sh.])
955 dnl ** how to invoke `ar' and `ranlib'
956 FP_PROG_AR_NEEDS_RANLIB
957 FP_PROG_AR_SUPPORTS_INPUT
959 dnl ** Check to see whether ln -s works
963 dnl ** Find the path to sed
964 AC_PATH_PROG(SedCmd,sed)
967 dnl ** check for time command
968 AC_PATH_PROG(TimeCmd,time)
971 dnl if GNU tar is named gtar, look for it first.
972 AC_PATH_PROGS(TarCmd,gtar tar,tar)
974 AC_PATH_PROG(HSCOLOUR,HsColour)
975 # HsColour is passed to Cabal, so we need a native path
976 if test "x$HostPlatform" = "xi386-unknown-mingw32" && \
977 test "${OSTYPE}" != "msys" && \
978 test "${HSCOLOUR}" != ""
980 # Canonicalise to <drive>:/path/to/gcc
981 HSCOLOUR=`cygpath -m ${HSCOLOUR}`
984 dnl ** check for DocBook toolchain
986 FP_DIR_DOCBOOK_XSL([/usr/share/xml/docbook/stylesheet/nwalsh/current /usr/share/xml/docbook/stylesheet/nwalsh /usr/share/xml/docbook/xsl-stylesheets* /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 /opt/local/share/xsl/docbook-xsl])
989 dnl ** check for ghc-pkg command
992 AC_ARG_WITH(greencard,
993 [AC_HELP_STRING([--with-greencard=ARG],
994 [Use ARG as the path to greencard [default=autodetct]])],
996 GreenCardCmd=$withval;
997 FPTOOLS_GREENCARD(3.00)
1001 dnl ** check for installed happy binary + version
1002 dnl (don't do it if we're booting from .hc files though.)
1003 if test "$BootingFromHc" = "NO"; then
1007 dnl ** check for installed alex binary + version
1008 dnl (don't do it if we're booting from .hc files though.)
1009 if test "$BootingFromHc" = "NO"; then
1013 dnl Check we have an acceptable version of windres
1016 dnl --------------------------------------------------
1017 dnl ### program checking section ends here ###
1018 dnl --------------------------------------------------
1020 dnl --------------------------------------------------
1021 dnl * Platform header file and syscall feature tests
1022 dnl ### checking the state of the local header files and syscalls ###
1024 dnl ** check for full ANSI header (.h) files
1027 dnl ** Enable large file support. NB. do this before testing the type of
1028 dnl off_t, because it will affect the result of that test.
1031 dnl ** check for specific header (.h) files that we are interested in
1032 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 sched.h])
1034 dnl ** check if it is safe to include both <time.h> and <sys/time.h>
1037 dnl ** do we have long longs?
1038 AC_CHECK_TYPES([long long])
1040 dnl ** what are the sizes of various types
1041 AC_CHECK_SIZEOF(char, 1)
1042 AC_CHECK_SIZEOF(double, 8)
1043 AC_CHECK_SIZEOF(float, 4)
1044 AC_CHECK_SIZEOF(int, 4)
1045 AC_CHECK_SIZEOF(long, 4)
1046 if test "$ac_cv_type_long_long" = yes; then
1047 AC_CHECK_SIZEOF(long long, 8)
1049 AC_CHECK_SIZEOF(short, 2)
1050 AC_CHECK_SIZEOF(unsigned char, 1)
1051 AC_CHECK_SIZEOF(unsigned int, 4)
1052 AC_CHECK_SIZEOF(unsigned long, 4)
1053 if test "$ac_cv_type_long_long" = yes; then
1054 AC_CHECK_SIZEOF(unsigned long long, 8)
1056 AC_CHECK_SIZEOF(unsigned short, 2)
1057 AC_CHECK_SIZEOF(void *, 4)
1059 dnl ** what are alignment constraints on various types
1060 FP_CHECK_ALIGNMENT(char)
1061 FP_CHECK_ALIGNMENT(double)
1062 FP_CHECK_ALIGNMENT(float)
1063 FP_CHECK_ALIGNMENT(int)
1064 FP_CHECK_ALIGNMENT(long)
1065 if test "$ac_cv_type_long_long" = yes; then
1066 FP_CHECK_ALIGNMENT(long long)
1068 FP_CHECK_ALIGNMENT(short)
1069 FP_CHECK_ALIGNMENT(unsigned char)
1070 FP_CHECK_ALIGNMENT(unsigned int)
1071 FP_CHECK_ALIGNMENT(unsigned long)
1072 if test "$ac_cv_type_long_long" = yes; then
1073 FP_CHECK_ALIGNMENT(unsigned long long)
1075 FP_CHECK_ALIGNMENT(unsigned short)
1076 FP_CHECK_ALIGNMENT(void *)
1078 FP_CHECK_FUNC([WinExec],
1079 [@%:@include <windows.h>], [WinExec("",0)])
1081 FP_CHECK_FUNC([GetModuleFileName],
1082 [@%:@include <windows.h>], [GetModuleFileName((HMODULE)0,(LPTSTR)0,0)])
1084 dnl ** check return type of signal handlers
1085 dnl Foo: assumes we can use prototypes.
1086 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
1087 dnl AC_CACHE_CHECK([type of signal handlers], ac_cv_type_signal_handler,
1088 dnl [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
1089 dnl #include <signal.h>
1093 dnl void (*signal (int, void (*)(int)))(int);
1096 dnl [ac_cv_type_signal_handler=void_int],
1097 dnl [ac_cv_type_signal_handler=int_void])])
1098 dnl if test "$ac_cv_type_signal_handler" = void_int; then
1099 dnl AC_DEFINE(VOID_INT_SIGNALS)
1102 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
1104 if test "$ac_cv_type_signal" = void; then
1105 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).])
1108 dnl ** check for more functions
1109 dnl ** The following have been verified to be used in ghc/, but might be used somewhere else, too.
1110 AC_CHECK_FUNCS([getclock getrusage gettimeofday setitimer siginterrupt sysconf times ctime_r, sched_setaffinity])
1113 #include <sys/types.h>
1114 #include <sys/time.h>
1116 struct itimerval tval;
1117 tval.it_value.tv_sec = 1;
1118 tval.it_value.tv_usec = 0;
1119 tval.it_interval = tval.it_value;
1120 return setitimer(ITIMER_VIRTUAL, &tval, (void*)0) != 0;
1122 ],[AC_DEFINE([HAVE_SETITIMER_VIRTUAL], [1], [Define to 1 if setitimer accepts ITIMER_VIRTUAL, 0 else.])])
1124 dnl ** On OS X 10.4 (at least), time.h doesn't declare ctime_r if
1125 dnl ** _POSIX_C_SOURCE is defined
1126 AC_CHECK_DECLS([ctime_r], , ,
1127 [#define _POSIX_SOURCE 1
1128 #define _POSIX_C_SOURCE 199506L
1131 dnl ** For ghc/rts/gmp:
1132 AC_CHECK_FUNCS([getpagesize])
1134 dnl ** check whether this machine has gmp3 installed
1135 AC_CHECK_LIB(gmp, __gmpz_fdiv_qr, HaveLibGmp=YES; LibGmp=gmp,
1136 AC_CHECK_LIB(gmp3, __gmpz_fdiv_qr, HaveLibGmp=YES; LibGmp=gmp3,
1137 HaveLibGmp=NO; LibGmp=not-installed))
1138 if test $HaveLibGmp = YES; then
1139 AC_DEFINE([HAVE_LIB_GMP], [1], [Define to 1 if GMP library is installed.])
1141 AC_SUBST(HaveLibGmp)
1144 dnl ** (Mac OS X only: check for GMP.framework)
1146 case $HostPlatform in
1148 AC_MSG_CHECKING([for GMP.framework])
1150 LIBS="-framework GMP"
1151 AC_TRY_LINK_FUNC(__gmpz_fdiv_qr, HaveFrameworkGMP=YES,)
1152 if test $HaveFrameworkGMP = YES; then
1153 AC_DEFINE([HAVE_FRAMEWORK_GMP], [1], [Define to 1 if GMP.framework is installed (Mac OS X only).])
1156 AC_MSG_RESULT([$HaveFrameworkGMP])
1159 AC_SUBST(HaveFrameworkGMP)
1161 dnl ** check for mingwex library
1162 AC_CHECK_LIB(mingwex, closedir, HaveLibMingwEx=YES, HaveLibMingwEx=NO)
1163 AC_SUBST(HaveLibMingwEx)
1165 if test $HaveLibMingwEx = YES ; then
1166 AC_DEFINE([HAVE_MINGWEX], [1], [Define to 1 if you have the mingwex library.])
1169 if test "$HaveLibGmp" = "NO"; then
1170 if test "$HostArch_CPP" = "ia64" -o "$HostArch_CPP" = "mipseb" ; then
1171 AC_MSG_ERROR([You need to install libgmp (the in-tree version does not work on IA64 or mips64).])
1175 dnl ** check whether this machine has BFD and liberty installed (used for debugging)
1176 dnl the order of these tests matters: bfd needs liberty
1177 AC_CHECK_LIB(iberty, xmalloc)
1178 AC_CHECK_LIB(bfd, bfd_init)
1180 dnl ** check for math library
1181 AC_CHECK_FUNC(atan,[fp_libm_not_needed=yes;LIBM=],[fp_libm_not_needed=dunno])
1182 if test x"$fp_libm_not_needed" = xdunno; then
1183 AC_CHECK_LIB([m], [atan], [LIBS="-lm $LIBS"; LIBM="-lm"],[LIBM=])
1187 dnl ################################################################
1188 dnl Check for libraries
1189 dnl ################################################################
1191 dnl ** check whether we need -ldl to get dlopen()
1193 AC_CHECK_LIB(dl, dlopen,
1195 AC_DEFINE([HAVE_LIBDL], [1], [Define to 1 if you need -ldl to get dlopen().])
1200 dnl --------------------------------------------------
1201 dnl * Miscellaneous feature tests
1202 dnl --------------------------------------------------
1204 dnl ** can we get alloca?
1207 dnl ** Working vfork?
1210 dnl ** determine whether or not const works
1213 dnl ** are we big endian?
1215 FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN
1217 dnl ** check for leading underscores in symbol names
1218 FP_LEADING_UNDERSCORE
1220 dnl ** check for ld, whether it has an -x option, and if it is GNU ld
1224 dnl ** check for Apple-style dead-stripping support
1225 dnl (.subsections-via-symbols assembler directive)
1228 AC_MSG_CHECKING(for .subsections_via_symbols)
1230 [AC_LANG_PROGRAM([], [__asm__ (".subsections_via_symbols");])],
1232 AC_DEFINE([HAVE_SUBSECTIONS_VIA_SYMBOLS],[1],
1233 [Define to 1 if Apple-style dead-stripping is supported.])
1235 [AC_MSG_RESULT(no)])
1237 dnl *** check for GNU non-executable stack note support (ELF only)
1238 dnl (.section .note.GNU-stack,"",@progbits)
1240 AC_MSG_CHECKING(for GNU non-executable stack support)
1242 [AC_LANG_PROGRAM([__asm__ (".section .note.GNU-stack,\"\",@progbits");], [0])],
1244 AC_DEFINE([HAVE_GNU_NONEXEC_STACK],[1],
1245 [Define to 1 if GNU non-executable stack notes are supported.])
1247 [AC_MSG_RESULT(no)])
1249 dnl ** check for librt
1250 AC_CHECK_LIB(rt, clock_gettime)
1251 AC_CHECK_FUNCS(clock_gettime timer_create timer_settime)
1252 FP_CHECK_TIMER_CREATE
1254 dnl ** check for Apple's "interesting" long double compatibility scheme
1255 AC_MSG_CHECKING(for printf\$LDBLStub)
1256 AC_TRY_LINK_FUNC(printf\$LDBLStub,
1259 AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[1],
1260 [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
1264 AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[0],
1265 [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
1269 AC_PATH_PROGS([GTK_CONFIG], [pkg-config])
1270 if test -n "$GTK_CONFIG"; then
1271 if $GTK_CONFIG gtk+-2.0 --atleast-version=2.0; then
1272 GTK_CONFIG="$GTK_CONFIG gtk+-2.0"
1274 AC_MSG_WARN([GTK+ not usable, need at least version 2.0])
1278 AC_SUBST([GTK_CONFIG])
1281 AC_CHECK_LIB(papi, PAPI_library_init, HavePapiLib=YES, HavePapiLib=NO)
1282 AC_CHECK_HEADER([papi.h], [HavePapiHeader=YES], [HavePapiHeader=NO])
1283 AC_SUBST(HavePapiLib)
1284 AC_SUBST(HavePapiHeader)
1286 if test "$HavePapiLib" = "YES" -a "$HavePapiHeader" = "YES"; then
1293 AC_CONFIG_FILES([mk/config.mk compiler/ghc.cabal ghc/ghc-bin.cabal utils/runghc/runghc.cabal ghc.spec extra-gcc-opts docs/users_guide/ug-book.xml])
1294 AC_CONFIG_COMMANDS([mk/stamp-h],[echo timestamp > mk/stamp-h])
1298 # http://savannah.gnu.org/bugs/index.php?1516
1299 # $(eval ...) inside conditionals causes errors
1300 # with make 3.80, so warn the user if it looks like they're about to
1302 # We would use "grep -q" here, but Solaris's grep doesn't support it.
1304 if $1 --version 2>&1 | head -1 | grep 'GNU Make 3\.80' > /dev/null
1307 echo "WARNING: It looks like \"$1\" is GNU make 3.80."
1308 echo "This version cannot be used to build GHC."
1309 echo "Please use GNU make >= 3.81."