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.13], [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 'perl boot'?"
34 AC_SUBST([CONFIGURE_ARGS], [$ac_configure_args])
36 dnl ----------------------------------------------------------
37 dnl ** Find unixy sort and find commands,
38 dnl ** which are needed by FP_SETUP_PROJECT_VERSION
40 dnl ** Find find command (for Win32's benefit)
43 dnl ** Find sort command (for the benefit of Win32 environs)
46 dnl ----------------------------------------------------------
47 FP_SETUP_PROJECT_VERSION
49 # Hmmm, we fix the RPM release number to 1 here... Is this convenient?
50 AC_SUBST([release], [1])
52 # First off, a distrib sanity check..
53 AC_CONFIG_SRCDIR([mk/config.mk.in])
55 dnl * We require autoconf version 2.52
56 dnl We need 2.50 due to the use of AC_SYS_LARGEFILE and AC_MSG_NOTICE.
57 dnl We need 2.52 due to the use of AS_TR_CPP and AS_TR_SH.
60 # -------------------------------------------------------------------------
61 # Prepare to generate the following header files
64 AC_CONFIG_HEADER(mk/config.h)
66 # No, semi-sadly, we don't do `--srcdir'...
67 if test x"$srcdir" != 'x.' ; then
68 echo "This configuration does not support the \`--srcdir' option.."
72 dnl --------------------------------------------------------------
73 dnl * Project specific configuration options
74 dnl --------------------------------------------------------------
75 dnl What follows is a bunch of options that can either be configured
76 dnl through command line options to the configure script or by
77 dnl supplying defns in the build tree's mk/build.mk. Having the option to
78 dnl use either is considered a Feature.
80 dnl ** What command to use to compile compiler sources ?
81 dnl --------------------------------------------------------------
84 [AC_HELP_STRING([--with-ghc=ARG],
85 [Use ARG as the path to GHC [default=autodetect]])],
87 [if test "$GHC" = ""; then
88 AC_PATH_PROG([GHC], [ghc])
92 dnl ** Booting from .hc files?
93 dnl --------------------------------------------------------------
94 AC_ARG_ENABLE(hc-boot,
95 [AC_HELP_STRING([--enable-hc-boot],
96 [Boot the Glasgow Haskell Compiler from intermediate .hc files.
97 (This option is mostly of interest to porters.) [default=no]])],
98 [ if test x"$enableval" = x"yes"; then
106 AC_SUBST(BootingFromHc)
108 AC_ARG_ENABLE(bootstrap-with-devel-snapshot,
109 [AC_HELP_STRING([--enable-bootstrap-with-devel-snapshot],
110 [Allow bootstrapping using a development snapshot of GHC. This is not guaranteed to work.])],
111 EnableBootstrapWithDevelSnaphost=YES,
112 EnableBootstrapWithDevelSnaphost=NO
115 if test "$WithGhc" != ""; then
116 FPTOOLS_GHC_VERSION([GhcVersion], [GhcMajVersion], [GhcMinVersion], [GhcPatchLevel])dnl
118 if test "$GhcMajVersion" = "unknown" -o "$GhcMinVersion" = "unknown"; then
119 AC_MSG_ERROR([Cannot determine the version of $WithGhc. Is it really GHC?])
122 AC_SUBST(GhcVersion)dnl
123 AC_SUBST(GhcMajVersion)dnl
124 AC_SUBST(GhcMinVersion)dnl
125 AC_SUBST(GhcPatchLevel)dnl
126 GhcMinVersion2=`echo "$GhcMinVersion" | sed 's/^\\(.\\)$/0\\1/'`
127 GhcCanonVersion="$GhcMajVersion$GhcMinVersion2"
128 FP_COMPARE_VERSIONS($GhcVersion,[-ge],[6.10.2],
129 [ghc_ge_6102=YES], [ghc_ge_6102=NO])
130 if test $GhcCanonVersion -ge 611; then ghc_ge_611=YES; else ghc_ge_611=NO; fi
131 if test $GhcCanonVersion -ge 613; then ghc_ge_613=YES; else ghc_ge_613=NO; fi
132 AC_SUBST(ghc_ge_6102)dnl
133 AC_SUBST(ghc_ge_611)dnl
134 AC_SUBST(ghc_ge_613)dnl
137 dnl ** Must have GHC to build GHC, unless --enable-hc-boot is on
138 if test "$BootingFromHc" = "NO" -a -d "$srcdir/compiler"; then
139 if test "$WithGhc" = ""; then
140 AC_MSG_ERROR([GHC is required unless bootstrapping from .hc files.])
142 FP_COMPARE_VERSIONS([$GhcVersion],[-lt],[6.10],
143 [AC_MSG_ERROR([GHC version 6.10 or later is required to compile GHC.])])dnl
145 if test `expr $GhcMinVersion % 2` = "1"; then
146 if test "$EnableBootstrapWithDevelSnaphost" = "NO"; then
148 $WithGhc is a development snapshot of GHC, version $GhcVersion.
149 Bootstrapping using this version of GHC is not supported, and may not
150 work. Use --enable-bootstrap-with-devel-snapshot to try it anyway,
151 or --with-ghc to specify a different GHC to use.])
156 # GHC is passed to Cabal, so we need a native path
157 if test "${WithGhc}" != ""
159 ghc_host=`"${WithGhc}" +RTS --info | grep 'Host platform' | sed -e 's/.*, "//' -e 's/")//'`
161 if test "$ghc_host" = "i386-unknown-mingw32"
163 if test "${OSTYPE}" = "msys"
165 WithGhc=`echo "${WithGhc}" | sed "s#^/\([a-zA-Z]\)/#\1:/#"`
167 # Canonicalise to <drive>:/path/to/ghc
168 WithGhc=`cygpath -m "${WithGhc}"`
170 echo "GHC path canonicalised to: ${WithGhc}"
175 dnl ** Without optimization some INLINE trickery fails for GHCi
178 dnl Allow to specify iconv options to the toplevel configure script
179 dnl so they can be properly passed to sub-builds.
180 dnl Note: ICONV_LIB_DIRS and ICONV_INCLUDE_DIRS are not predefined
181 dnl to the empty string to allow them to be overridden from the
184 AC_ARG_WITH([iconv-includes],
185 [AC_HELP_STRING([--with-iconv-includes],
186 [directory containing iconv.h])],
187 [ICONV_INCLUDE_DIRS=$withval])
189 AC_ARG_WITH([iconv-libraries],
190 [AC_HELP_STRING([--with-iconv-libraries],
191 [directory containing iconv library])],
192 [ICONV_LIB_DIRS=$withval])
194 AC_SUBST(ICONV_INCLUDE_DIRS)
195 AC_SUBST(ICONV_LIB_DIRS)
197 dnl Allow to specify gmp options to the toplevel configure script
198 dnl so they can be properly passed to sub-builds.
200 AC_ARG_WITH([gmp-includes],
201 [AC_HELP_STRING([--with-gmp-includes],
202 [directory containing gmp.h])],
203 [GMP_INCLUDE_DIRS=$withval])
205 AC_ARG_WITH([gmp-libraries],
206 [AC_HELP_STRING([--with-gmp-libraries],
207 [directory containing gmp library])],
208 [GMP_LIB_DIRS=$withval])
210 AC_SUBST(GMP_INCLUDE_DIRS)
211 AC_SUBST(GMP_LIB_DIRS)
213 dnl--------------------------------------------------------------------
214 dnl * Choose host(/target/build) platform
215 dnl--------------------------------------------------------------------
216 dnl If we aren't explicitly told what values to use with configure flags,
217 dnl we ask the bootstrapping compiler what platform it is for
219 if test "${WithGhc}" != ""
221 bootstrap_host=`"${WithGhc}" +RTS --info | grep '^ ,("Host platform"' | sed -e 's/.*, "//' -e 's/")//' | tr -d '\r'`
222 bootstrap_target=`"${WithGhc}" +RTS --info | grep '^ ,("Target platform"' | sed -e 's/.*, "//' -e 's/")//' | tr -d '\r'`
223 if test "$bootstrap_host" != "$bootstrap_target"
225 echo "Bootstrapping GHC is a cross compiler. This probably isn't going to work"
229 # We have to run these unconditionally, but we may discard their
230 # results in the following code
235 # If no argument was given for a configuration variable, then discard
236 # the guessed canonical system and use the configuration of the
237 # bootstrapping ghc. If an argument was given, map it from gnu format
240 # For why we do it this way, see: #3637, #1717, #2951
242 if test "$build_alias" = ""
244 if test "${WithGhc}" != ""
246 build=$bootstrap_target
247 echo "Build platform inferred as: $build"
249 echo "Can't work out build platform"
253 BuildArch=`echo "$build" | sed 's/-.*//'`
254 BuildVendor=`echo "$build" | sed -e 's/.*-\(.*\)-.*/\1/'`
255 BuildOS=`echo "$build" | sed 's/.*-//'`
257 GHC_CONVERT_CPU([$build_cpu], [BuildArch])
258 GHC_CONVERT_VENDOR([$build_vendor], [BuildVendor])
259 GHC_CONVERT_OS([$build_os], [BuildOS])
262 if test "$host_alias" = ""
264 if test "${WithGhc}" != ""
266 host=$bootstrap_target
267 echo "Host platform inferred as: $host"
269 echo "Can't work out host platform"
273 HostArch=`echo "$host" | sed 's/-.*//'`
274 HostVendor=`echo "$host" | sed -e 's/.*-\(.*\)-.*/\1/'`
275 HostOS=`echo "$host" | sed 's/.*-//'`
277 GHC_CONVERT_CPU([$host_cpu], [HostArch])
278 GHC_CONVERT_VENDOR([$host_vendor], [HostVendor])
279 GHC_CONVERT_OS([$host_os], [HostOS])
282 if test "$target_alias" = ""
284 if test "${WithGhc}" != ""
286 target=$bootstrap_target
287 echo "Target platform inferred as: $target"
289 echo "Can't work out target platform"
293 TargetArch=`echo "$target" | sed 's/-.*//'`
294 TargetVendor=`echo "$target" | sed -e 's/.*-\(.*\)-.*/\1/'`
295 TargetOS=`echo "$target" | sed 's/.*-//'`
297 GHC_CONVERT_CPU([$target_cpu], [TargetArch])
298 GHC_CONVERT_VENDOR([$target_vendor], [TargetVendor])
299 GHC_CONVERT_OS([$target_os], [TargetOS])
306 AC_MSG_WARN([GHC does not support the Cygwin target at the moment])
307 AC_MSG_WARN([I'm assuming you wanted to build for i386-unknown-mingw32])
314 i386-apple-darwin|powerpc-apple-darwin)
322 FPTOOLS_SET_C_LD_FLAGS([target],[CFLAGS],[LDFLAGS])
323 FPTOOLS_SET_C_LD_FLAGS([build],[CONF_CC_OPTS_STAGE0],[CONF_LD_OPTS_STAGE0])
324 FPTOOLS_SET_C_LD_FLAGS([target],[CONF_CC_OPTS_STAGE1],[CONF_LD_OPTS_STAGE1])
325 # Stage 3 won't be supported by cross-compilation
326 FPTOOLS_SET_C_LD_FLAGS([target],[CONF_CC_OPTS_STAGE2],[CONF_LD_OPTS_STAGE2])
330 alpha|arm|hppa|hppa1_1|i386|ia64|m68k|mips|mipseb|mipsel|powerpc|powerpc64|rs6000|s390|sparc|sparc64|vax|x86_64)
333 echo "Unknown arch $1"
341 dec|unknown|hp|apple|next|sun|sgi|ibm)
344 echo "Unknown vendor $1"
352 linux|freebsd|netbsd|openbsd|dragonfly|osf1|osf3|hpux|linuxaout|kfreebsdgnu|freebsd2|solaris2|cygwin32|mingw32|darwin|gnu|nextstep2|nextstep3|sunos4|ultrix|irix|aix|haiku)
355 echo "Unknown OS '$1'"
361 BuildPlatform="$BuildArch-$BuildVendor-$BuildOS"
362 BuildPlatform_CPP=`echo "$BuildPlatform" | sed -e 's/\./_/g' -e 's/-/_/g'`
363 BuildArch_CPP=` echo "$BuildArch" | sed -e 's/\./_/g' -e 's/-/_/g'`
364 BuildVendor_CPP=` echo "$BuildVendor" | sed -e 's/\./_/g' -e 's/-/_/g'`
365 BuildOS_CPP=` echo "$BuildOS" | sed -e 's/\./_/g' -e 's/-/_/g'`
367 checkArch "$BuildArch"
368 checkVendor "$BuildVendor"
371 HostPlatform="$HostArch-$HostVendor-$HostOS"
372 HostPlatform_CPP=`echo "$HostPlatform" | sed -e 's/\./_/g' -e 's/-/_/g'`
373 HostArch_CPP=` echo "$HostArch" | sed -e 's/\./_/g' -e 's/-/_/g'`
374 HostVendor_CPP=` echo "$HostVendor" | sed -e 's/\./_/g' -e 's/-/_/g'`
375 HostOS_CPP=` echo "$HostOS" | sed -e 's/\./_/g' -e 's/-/_/g'`
377 checkArch "$HostArch"
378 checkVendor "$HostVendor"
381 TargetPlatform="$TargetArch-$TargetVendor-$TargetOS"
382 TargetPlatform_CPP=`echo "$TargetPlatform" | sed -e 's/\./_/g' -e 's/-/_/g'`
383 TargetArch_CPP=` echo "$TargetArch" | sed -e 's/\./_/g' -e 's/-/_/g'`
384 TargetVendor_CPP=` echo "$TargetVendor" | sed -e 's/\./_/g' -e 's/-/_/g'`
385 TargetOS_CPP=` echo "$TargetOS" | sed -e 's/\./_/g' -e 's/-/_/g'`
387 checkArch "$TargetArch"
388 checkVendor "$TargetVendor"
391 AC_SUBST(BuildPlatform)
392 AC_SUBST(HostPlatform)
393 AC_SUBST(TargetPlatform)
394 AC_SUBST(HostPlatform_CPP)
395 AC_SUBST(BuildPlatform_CPP)
396 AC_SUBST(TargetPlatform_CPP)
398 AC_SUBST(HostArch_CPP)
399 AC_SUBST(BuildArch_CPP)
400 AC_SUBST(TargetArch_CPP)
403 AC_SUBST(BuildOS_CPP)
404 AC_SUBST(TargetOS_CPP)
406 AC_SUBST(HostVendor_CPP)
407 AC_SUBST(BuildVendor_CPP)
408 AC_SUBST(TargetVendor_CPP)
414 [AC_HELP_STRING([--with-hc=ARG],
415 [Use ARG as the path to the compiler for compiling ordinary
416 Haskell code (default= value of --with-ghc)])],
422 AC_PATH_PROGS(NHC,nhc nhc98)
423 AC_PATH_PROG(HBC,hbc)
425 # This uses GHC, so put it after the "GHC is required" check above:
428 if test "$HostOS" = "mingw32"
430 CC="$hardtop/inplace/mingw/bin/gcc.exe"
431 LD="$hardtop/inplace/mingw/bin/ld.exe"
432 NM="$hardtop/inplace/mingw/bin/nm.exe"
433 fp_prog_ar_raw="$hardtop/inplace/mingw/bin/ar.exe"
434 if ! test -d inplace/mingw ||
435 test inplace/mingw -ot ghc-tarballs/mingw/binutils*.tar.gz ||
436 test inplace/mingw -ot ghc-tarballs/mingw/gcc-core*.tar.gz ||
437 test inplace/mingw -ot ghc-tarballs/mingw/gcc-g++*.tar.gz ||
438 test inplace/mingw -ot ghc-tarballs/mingw/libcrypt*.tar.bz2 ||
439 test inplace/mingw -ot ghc-tarballs/mingw/mingw-runtime*.tar.gz ||
440 test inplace/mingw -ot ghc-tarballs/mingw/w32api*.tar.gz
442 AC_MSG_NOTICE([Making in-tree mingw tree])
448 tar -zxf ../../ghc-tarballs/mingw/binutils*.tar.gz &&
449 tar -zxf ../../ghc-tarballs/mingw/gcc-core*.tar.gz &&
450 tar -zxf ../../ghc-tarballs/mingw/gcc-g++*.tar.gz &&
451 tar -jxf ../../ghc-tarballs/mingw/libcrypt*.tar.bz2 &&
452 tar -zxf ../../ghc-tarballs/mingw/mingw-runtime*.tar.gz &&
453 tar -zxf ../../ghc-tarballs/mingw/w32api*.tar.gz &&
454 mv bin/gcc.exe bin/realgcc.exe
456 inplace/mingw/bin/realgcc.exe driver/gcc/gcc.c driver/utils/cwrapper.c driver/utils/getLocation.c -Idriver/utils -o inplace/mingw/bin/gcc.exe
457 AC_MSG_NOTICE([In-tree mingw tree created])
459 if ! test -d inplace/perl ||
460 test inplace/perl -ot ghc-tarballs/perl/ghc-perl*.tar.gz
462 AC_MSG_NOTICE([Making in-tree perl tree])
468 tar -zxf ../../ghc-tarballs/perl/ghc-perl*.tar.gz
470 AC_MSG_NOTICE([In-tree perl tree created])
474 dnl ** Which gcc to use?
475 dnl --------------------------------------------------------------
476 FP_ARG_WITH_PATH_GNU_PROG([CC], [gcc])
478 WhatGccIsCalled="$CC"
479 AC_SUBST(WhatGccIsCalled)
481 dnl ** Which ld to use?
482 dnl --------------------------------------------------------------
483 FP_ARG_WITH_PATH_GNU_PROG([LD], [ld])
487 dnl ** Which nm to use?
488 dnl --------------------------------------------------------------
489 FP_ARG_WITH_PATH_GNU_PROG([NM], [nm])
493 dnl ** Mac OS X: explicit deployment target
494 dnl --------------------------------------------------------------
495 AC_ARG_WITH([macosx-deployment-target],
496 [AC_HELP_STRING([--with-macosx-deployment-target=VERSION],
497 [Build for Mac OS VERSION and higher (default= version of build host)])],
498 [FP_MACOSX_DEPLOYMENT_TARGET="$withval"
499 if test "x$TargetOS_CPP-$TargetVendor_CPP" != "xdarwin-apple"; then
500 # ignore everywhere, but on Mac OS
501 AC_MSG_WARN([--macosx-deployment-target is only available on Mac OS X])
502 FP_MACOSX_DEPLOYMENT_TARGET=none
504 [FP_MACOSX_DEPLOYMENT_TARGET=none]
506 FP_CHECK_MACOSX_DEPLOYMENT_TARGET
507 AC_SUBST(MACOSX_DEPLOYMENT_VERSION)
508 AC_SUBST(MACOSX_DEPLOYMENT_SDK)
510 dnl --------------------------------------------------------------
511 dnl End of configure script option section
512 dnl --------------------------------------------------------------
515 dnl --------------------------------------------------------------
516 dnl * General configuration checks
517 dnl --------------------------------------------------------------
519 dnl ** Can the unix package be built?
520 dnl --------------------------------------------------------------
522 if test x"$TargetPlatform" = x"i386-unknown-mingw32"; then
527 AC_SUBST([GhcLibsWithUnix])
532 dnl ** look for `perl', but only in /bin on Windows
535 AC_CHECK_PROG(PerlCmd,perl,/bin/perl,,/bin)
536 if test -z "$PerlCmd"; then
537 echo "You must install the version of Perl shipped with GHC"
538 echo "(or a compatible one) in /bin."
543 AC_PATH_PROG(PerlCmd,perl)
544 if test -z "$PerlCmd"; then
545 echo "You must install perl before you can continue"
546 echo "Perhaps it is already installed, but not in your PATH?"
549 FPTOOLS_CHECK_PERL_VERSION
554 dnl ** does #! path/to/perl work? (sometimes it's too long...)
557 dnl ** check for Python
558 AC_PATH_PROG(PythonCmd,python)
560 dnl ** look for GCC and find out which version
561 dnl Figure out which C compiler to use. Gcc is preferred.
562 dnl If gcc, make sure it's at least 2.1
567 dnl ** figure out how to invoke cpp directly (gcc -E is no good)
570 AC_SUBST(CONF_CC_OPTS_STAGE0)
571 AC_SUBST(CONF_CC_OPTS_STAGE1)
572 AC_SUBST(CONF_CC_OPTS_STAGE2)
573 AC_SUBST(CONF_LD_OPTS_STAGE0)
574 AC_SUBST(CONF_LD_OPTS_STAGE1)
575 AC_SUBST(CONF_LD_OPTS_STAGE2)
577 dnl ** figure out how to do context diffs
580 dnl Let's make sure install-sh is executable here. If we got it from
581 dnl a darcs repo, it might not be (see bug #978).
583 dnl ** figure out how to do a BSD-ish install
586 dnl If you can run configure, you certainly have /bin/sh
587 AC_DEFINE([HAVE_BIN_SH], [1], [Define to 1 if you have /bin/sh.])
589 dnl ** how to invoke `ar' and `ranlib'
590 FP_PROG_AR_SUPPORTS_ATFILE
591 FP_PROG_AR_NEEDS_RANLIB
592 FP_PROG_AR_SUPPORTS_INPUT
594 dnl ** Check to see whether ln -s works
598 dnl ** Find the path to sed
599 AC_PATH_PROGS(SedCmd,gsed sed,sed)
602 dnl ** check for time command
603 AC_PATH_PROG(TimeCmd,time)
606 dnl if GNU tar is named gtar, look for it first.
607 AC_PATH_PROGS(TarCmd,gnutar gtar tar,tar)
609 dnl ** check for patch
610 dnl if GNU patch is named gpatch, look for it first
611 AC_PATH_PROGS(PatchCmd,gpatch patch, patch)
613 dnl ** check for dtrace (currently only implemented for Mac OS X)
615 AC_PATH_PROG(DtraceCmd,dtrace)
616 if test -n "$DtraceCmd"; then
617 if test "x$TargetOS_CPP-$TargetVendor_CPP" == "xdarwin-apple"; then
623 AC_PATH_PROG(HSCOLOUR,HsColour)
624 # HsColour is passed to Cabal, so we need a native path
625 if test "x$HostPlatform" = "xi386-unknown-mingw32" && \
626 test "${OSTYPE}" != "msys" && \
627 test "${HSCOLOUR}" != ""
629 # Canonicalise to <drive>:/path/to/gcc
630 HSCOLOUR=`cygpath -m ${HSCOLOUR}`
633 dnl ** check for DocBook toolchain
640 dnl ** check for ghc-pkg command
643 dnl ** check for installed happy binary + version
644 dnl (don't do it if we're booting from .hc files though.)
645 if test "$BootingFromHc" = "NO"; then
649 dnl ** check for installed alex binary + version
650 dnl (don't do it if we're booting from .hc files though.)
651 if test "$BootingFromHc" = "NO"; then
655 dnl --------------------------------------------------
656 dnl ### program checking section ends here ###
657 dnl --------------------------------------------------
659 dnl --------------------------------------------------
660 dnl * Platform header file and syscall feature tests
661 dnl ### checking the state of the local header files and syscalls ###
663 dnl ** check for full ANSI header (.h) files
666 dnl ** Enable large file support. NB. do this before testing the type of
667 dnl off_t, because it will affect the result of that test.
670 dnl ** check for specific header (.h) files that we are interested in
671 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/cpuset.h sys/mman.h sys/resource.h sys/select.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])
673 dnl ** check if it is safe to include both <time.h> and <sys/time.h>
676 dnl ** do we have long longs?
677 AC_CHECK_TYPES([long long])
679 dnl ** what are the sizes of various types
680 AC_CHECK_SIZEOF(char, 1)
681 AC_CHECK_SIZEOF(double, 8)
682 AC_CHECK_SIZEOF(float, 4)
683 AC_CHECK_SIZEOF(int, 4)
684 AC_CHECK_SIZEOF(long, 4)
685 if test "$ac_cv_type_long_long" = yes; then
686 AC_CHECK_SIZEOF(long long, 8)
688 AC_CHECK_SIZEOF(short, 2)
689 AC_CHECK_SIZEOF(unsigned char, 1)
690 AC_CHECK_SIZEOF(unsigned int, 4)
691 AC_CHECK_SIZEOF(unsigned long, 4)
692 if test "$ac_cv_type_long_long" = yes; then
693 AC_CHECK_SIZEOF(unsigned long long, 8)
695 AC_CHECK_SIZEOF(unsigned short, 2)
696 AC_CHECK_SIZEOF(void *, 4)
698 dnl ** what are alignment constraints on various types
699 FP_CHECK_ALIGNMENT(char)
700 FP_CHECK_ALIGNMENT(double)
701 FP_CHECK_ALIGNMENT(float)
702 FP_CHECK_ALIGNMENT(int)
703 FP_CHECK_ALIGNMENT(long)
704 if test "$ac_cv_type_long_long" = yes; then
705 FP_CHECK_ALIGNMENT(long long)
707 FP_CHECK_ALIGNMENT(short)
708 FP_CHECK_ALIGNMENT(unsigned char)
709 FP_CHECK_ALIGNMENT(unsigned int)
710 FP_CHECK_ALIGNMENT(unsigned long)
711 if test "$ac_cv_type_long_long" = yes; then
712 FP_CHECK_ALIGNMENT(unsigned long long)
714 FP_CHECK_ALIGNMENT(unsigned short)
715 FP_CHECK_ALIGNMENT(void *)
717 FP_CHECK_FUNC([WinExec],
718 [@%:@include <windows.h>], [WinExec("",0)])
720 FP_CHECK_FUNC([GetModuleFileName],
721 [@%:@include <windows.h>], [GetModuleFileName((HMODULE)0,(LPTSTR)0,0)])
723 dnl ** check return type of signal handlers
724 dnl Foo: assumes we can use prototypes.
725 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
726 dnl AC_CACHE_CHECK([type of signal handlers], ac_cv_type_signal_handler,
727 dnl [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
728 dnl #include <signal.h>
732 dnl void (*signal (int, void (*)(int)))(int);
735 dnl [ac_cv_type_signal_handler=void_int],
736 dnl [ac_cv_type_signal_handler=int_void])])
737 dnl if test "$ac_cv_type_signal_handler" = void_int; then
738 dnl AC_DEFINE(VOID_INT_SIGNALS)
741 dnl On BCC, signal handlers have type "int(void)", elsewhere its "void(int)".
743 if test "$ac_cv_type_signal" = void; then
744 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).])
747 dnl ** check for more functions
748 dnl ** The following have been verified to be used in ghc/, but might be used somewhere else, too.
749 AC_CHECK_FUNCS([getclock getrusage gettimeofday setitimer siginterrupt sysconf times ctime_r sched_setaffinity setlocale])
752 #include <sys/types.h>
753 #include <sys/time.h>
755 struct itimerval tval;
756 tval.it_value.tv_sec = 1;
757 tval.it_value.tv_usec = 0;
758 tval.it_interval = tval.it_value;
759 return setitimer(ITIMER_VIRTUAL, &tval, (void*)0) != 0;
761 ],[AC_DEFINE([HAVE_SETITIMER_VIRTUAL], [1], [Define to 1 if setitimer accepts ITIMER_VIRTUAL, 0 else.])])
763 dnl ** On OS X 10.4 (at least), time.h doesn't declare ctime_r if
764 dnl ** _POSIX_C_SOURCE is defined
765 AC_CHECK_DECLS([ctime_r], , ,
766 [#define _POSIX_SOURCE 1
767 #define _POSIX_C_SOURCE 199506L
770 dnl ** check for mingwex library
771 AC_CHECK_LIB(mingwex, closedir, HaveLibMingwEx=YES, HaveLibMingwEx=NO)
772 AC_SUBST(HaveLibMingwEx)
774 if test $HaveLibMingwEx = YES ; then
775 AC_DEFINE([HAVE_MINGWEX], [1], [Define to 1 if you have the mingwex library.])
778 dnl ** check for math library
779 dnl Keep that check as early as possible.
780 dnl as we need to know whether we need libm
781 dnl for math functions or not
782 dnl (see http://hackage.haskell.org/trac/ghc/ticket/3730)
783 AC_CHECK_LIB(m, atan, HaveLibM=YES, HaveLibM=NO)
784 if test $HaveLibM = YES
786 AC_DEFINE([HAVE_LIBM], [1], [Define to 1 if you need to link with libm])
789 dnl ** check whether this machine has BFD and liberty installed (used for debugging)
790 dnl the order of these tests matters: bfd needs liberty
791 AC_CHECK_LIB(iberty, xmalloc)
792 AC_CHECK_LIB(bfd, bfd_init)
794 dnl ################################################################
795 dnl Check for libraries
796 dnl ################################################################
798 dnl ** check whether we need -ldl to get dlopen()
800 AC_CHECK_LIB(dl, dlopen,
802 AC_DEFINE([HAVE_LIBDL], [1], [Define to 1 if you need -ldl to get dlopen().])
807 dnl --------------------------------------------------
808 dnl * Miscellaneous feature tests
809 dnl --------------------------------------------------
811 dnl ** can we get alloca?
814 dnl ** Working vfork?
817 dnl ** determine whether or not const works
820 dnl ** are we big endian?
822 FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN
824 dnl ** check for leading underscores in symbol names
825 FP_LEADING_UNDERSCORE
827 dnl ** check for ld, whether it has an -x option, and if it is GNU ld
831 dnl ** check for Apple-style dead-stripping support
832 dnl (.subsections-via-symbols assembler directive)
835 AC_MSG_CHECKING(for .subsections_via_symbols)
837 [AC_LANG_PROGRAM([], [__asm__ (".subsections_via_symbols");])],
839 AC_DEFINE([HAVE_SUBSECTIONS_VIA_SYMBOLS],[1],
840 [Define to 1 if Apple-style dead-stripping is supported.])
844 dnl *** check for GNU non-executable stack note support (ELF only)
845 dnl (.section .note.GNU-stack,"",@progbits)
847 dnl This test doesn't work with "gcc -g" in gcc 4.4 (GHC trac #3889:
848 dnl Error: can't resolve `.note.GNU-stack' {.note.GNU-stack section} - `.Ltext0' {.text section}
849 dnl so we empty CFLAGS while running this test
852 AC_MSG_CHECKING(for GNU non-executable stack support)
854 [AC_LANG_PROGRAM([__asm__ (".section .note.GNU-stack,\"\",@progbits");], [0])],
856 AC_DEFINE([HAVE_GNU_NONEXEC_STACK],[1],
857 [Define to 1 if GNU non-executable stack notes are supported.])
862 dnl ** check for librt
863 AC_CHECK_LIB(rt, clock_gettime)
864 AC_CHECK_FUNCS(clock_gettime timer_create timer_settime)
865 FP_CHECK_TIMER_CREATE
867 dnl ** check for Apple's "interesting" long double compatibility scheme
868 AC_MSG_CHECKING(for printf\$LDBLStub)
869 AC_TRY_LINK_FUNC(printf\$LDBLStub,
872 AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[1],
873 [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
877 AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[0],
878 [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
881 dnl ** check for eventfd which is needed by the I/O manager
882 AC_CHECK_HEADERS([sys/eventfd.h])
883 AC_CHECK_FUNCS([eventfd])
886 AC_PATH_PROGS([GTK_CONFIG], [pkg-config])
887 if test -n "$GTK_CONFIG"; then
888 if $GTK_CONFIG gtk+-2.0 --atleast-version=2.0; then
889 GTK_CONFIG="$GTK_CONFIG gtk+-2.0"
891 AC_MSG_WARN([GTK+ not usable, need at least version 2.0])
895 AC_SUBST([GTK_CONFIG])
898 AC_CHECK_LIB(papi, PAPI_library_init, HavePapiLib=YES, HavePapiLib=NO)
899 AC_CHECK_HEADER([papi.h], [HavePapiHeader=YES], [HavePapiHeader=NO])
900 AC_SUBST(HavePapiLib)
901 AC_SUBST(HavePapiHeader)
903 AC_CHECK_FUNCS(__mingw_vfprintf)
905 if test "$HavePapiLib" = "YES" -a "$HavePapiHeader" = "YES"; then
912 if test "$HAVE_DOCBOOK_XSL" = "NO" ||
913 test "$XsltprocCmd" = ""
915 BUILD_DOCBOOK_HTML=NO
917 BUILD_DOCBOOK_HTML=YES
919 AC_SUBST(BUILD_DOCBOOK_HTML)
921 if test "$DblatexCmd" = ""
927 BUILD_DOCBOOK_PDF=YES
929 AC_SUBST(BUILD_DOCBOOK_PS)
930 AC_SUBST(BUILD_DOCBOOK_PDF)
932 LIBRARY_VERSION(base)
933 LIBRARY_VERSION(Cabal)
934 LIBRARY_VERSION(ghc-prim)
935 LIBRARY_ghc_VERSION="$ProjectVersion"
936 AC_SUBST(LIBRARY_ghc_VERSION)
938 if grep ' ' compiler/ghc.cabal.in 2>&1 >/dev/null; then
939 AC_MSG_ERROR([compiler/ghc.cabal.in contains tab characters; please remove them])
942 AC_CONFIG_FILES([mk/config.mk mk/install.mk mk/project.mk compiler/ghc.cabal ghc/ghc-bin.cabal ghc.spec extra-gcc-opts docs/users_guide/ug-book.xml docs/users_guide/ug-ent.xml docs/index.html libraries/prologue.txt distrib/ghc.iss distrib/configure.ac])
943 AC_CONFIG_COMMANDS([mk/stamp-h],[echo timestamp > mk/stamp-h])
947 # http://savannah.gnu.org/bugs/index.php?1516
948 # $(eval ...) inside conditionals causes errors
949 # with make 3.80, so warn the user if it looks like they're about to
951 # We would use "grep -q" here, but Solaris's grep doesn't support it.
953 if $1 --version 2>&1 | head -1 | grep 'GNU Make 3\.80' > /dev/null
956 echo "WARNING: It looks like \"$1\" is GNU make 3.80."
957 echo "This version cannot be used to build GHC."
958 echo "Please use GNU make >= 3.81."
966 ----------------------------------------------------------------------
967 Configure completed successfully.
969 Building GHC version : $ProjectVersion
971 Build platform : $BuildPlatform
972 Host platform : $HostPlatform
973 Target platform : $TargetPlatform
976 if test "$BootingFromHc" = "YES"; then
978 Bootstrapping from HC files.
982 Bootstrapping using : $WithGhc
983 which is version : $GhcVersion
988 Using GCC : $WhatGccIsCalled
989 which is version : $GccVersion
992 Happy : $HappyCmd ($HappyVersion)
993 Alex : $AlexCmd ($AlexVersion)
996 dblatex : $DblatexCmd
997 xsltproc : $XsltprocCmd"]
999 if test "$HSCOLOUR" = ""; then
1001 HsColour was not found; documentation will not contain source links
1005 HsColour : $HSCOLOUR
1010 Building DocBook HTML documentation : $BUILD_DOCBOOK_HTML
1011 Building DocBook PS documentation : $BUILD_DOCBOOK_PS
1012 Building DocBook PDF documentation : $BUILD_DOCBOOK_PDF"]
1014 echo ["----------------------------------------------------------------------
1018 For a standard build of GHC (fully optimised with profiling), type (g)make.
1020 To make changes to the default build configuration, copy the file
1021 mk/build.mk.sample to mk/build.mk, and edit the settings in there.
1023 For more information on how to configure your GHC build, see
1024 http://hackage.haskell.org/trac/ghc/wiki/Building