X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=configure.ac;h=dc94cf3f72071d0475795141cb3c87eda0d8e361;hp=c249b9adbc67cd6b4bff5e3747fd03501e6c3149;hb=4c9154facefe185dcbb99e2bb1cfe118f02f8bd3;hpb=22f78dd456cdf6d6c123556e3f715d008ecd86cd diff --git a/configure.ac b/configure.ac index c249b9a..dc94cf3 100644 --- a/configure.ac +++ b/configure.ac @@ -13,7 +13,7 @@ dnl # see what flags are available. (Better yet, read the documentation!) # -AC_INIT([The Glorious Glasgow Haskell Compilation System], [6.13], [glasgow-haskell-bugs@haskell.org], [ghc]) +AC_INIT([The Glorious Glasgow Haskell Compilation System], [7.1], [glasgow-haskell-bugs@haskell.org], [ghc]) # Set this to YES for a released version, otherwise NO : ${RELEASE=NO} @@ -27,7 +27,7 @@ AC_INIT([The Glorious Glasgow Haskell Compilation System], [6.13], [glasgow-hask # when the source distribution was created. if test ! -f mk/config.h.in; then - echo "mk/config.h.in doesn't exist: perhaps you haven't run 'sh boot'?" + echo "mk/config.h.in doesn't exist: perhaps you haven't run 'perl boot'?" exit 1 fi @@ -125,13 +125,13 @@ if test "$WithGhc" != ""; then AC_SUBST(GhcPatchLevel)dnl GhcMinVersion2=`echo "$GhcMinVersion" | sed 's/^\\(.\\)$/0\\1/'` GhcCanonVersion="$GhcMajVersion$GhcMinVersion2" - if test $GhcCanonVersion -ge 609; then ghc_ge_609=YES; else ghc_ge_609=NO; fi FP_COMPARE_VERSIONS($GhcVersion,[-ge],[6.10.2], [ghc_ge_6102=YES], [ghc_ge_6102=NO]) if test $GhcCanonVersion -ge 611; then ghc_ge_611=YES; else ghc_ge_611=NO; fi - AC_SUBST(ghc_ge_609)dnl + if test $GhcCanonVersion -ge 613; then ghc_ge_613=YES; else ghc_ge_613=NO; fi AC_SUBST(ghc_ge_6102)dnl AC_SUBST(ghc_ge_611)dnl + AC_SUBST(ghc_ge_613)dnl fi dnl ** Must have GHC to build GHC, unless --enable-hc-boot is on @@ -139,8 +139,8 @@ if test "$BootingFromHc" = "NO" -a -d "$srcdir/compiler"; then if test "$WithGhc" = ""; then AC_MSG_ERROR([GHC is required unless bootstrapping from .hc files.]) fi - FP_COMPARE_VERSIONS([$GhcVersion],[-lt],[6.8], - [AC_MSG_ERROR([GHC version 6.8 or later is required to compile GHC.])])dnl + FP_COMPARE_VERSIONS([$GhcVersion],[-lt],[6.10], + [AC_MSG_ERROR([GHC version 6.10 or later is required to compile GHC.])])dnl if test `expr $GhcMinVersion % 2` = "1"; then if test "$EnableBootstrapWithDevelSnaphost" = "NO"; then @@ -194,54 +194,109 @@ AC_ARG_WITH([iconv-libraries], AC_SUBST(ICONV_INCLUDE_DIRS) AC_SUBST(ICONV_LIB_DIRS) +dnl Allow to specify gmp options to the toplevel configure script +dnl so they can be properly passed to sub-builds. + +AC_ARG_WITH([gmp-includes], + [AC_HELP_STRING([--with-gmp-includes], + [directory containing gmp.h])], + [GMP_INCLUDE_DIRS=$withval]) + +AC_ARG_WITH([gmp-libraries], + [AC_HELP_STRING([--with-gmp-libraries], + [directory containing gmp library])], + [GMP_LIB_DIRS=$withval]) + +AC_SUBST(GMP_INCLUDE_DIRS) +AC_SUBST(GMP_LIB_DIRS) + dnl-------------------------------------------------------------------- dnl * Choose host(/target/build) platform dnl-------------------------------------------------------------------- -dnl We don't use the standard autoconf macros for this, but instead -dnl ask the bootstrapping compiler what platform it is for - -dnl Guess host/target/build platform(s) if necessary. -m4_divert_once([HELP_CANON], -[[ -System types: - --build=BUILD configure for building on BUILD [guessed] - --host=HOST cross-compile to build programs to run on HOST [guessed] - --target=TARGET configure for building compilers for TARGET [guessed]]])dnl - -if test "$build" = "" +dnl If we aren't explicitly told what values to use with configure flags, +dnl we ask the bootstrapping compiler what platform it is for + +if test "${WithGhc}" != "" +then + bootstrap_host=`"${WithGhc}" +RTS --info | grep '^ ,("Host platform"' | sed -e 's/.*, "//' -e 's/")//' | tr -d '\r'` + bootstrap_target=`"${WithGhc}" +RTS --info | grep '^ ,("Target platform"' | sed -e 's/.*, "//' -e 's/")//' | tr -d '\r'` + if test "$bootstrap_host" != "$bootstrap_target" + then + echo "Bootstrapping GHC is a cross compiler. This probably isn't going to work" + fi +fi + +# We have to run these unconditionally, but we may discard their +# results in the following code +AC_CANONICAL_BUILD +AC_CANONICAL_HOST +AC_CANONICAL_TARGET + +# If no argument was given for a configuration variable, then discard +# the guessed canonical system and use the configuration of the +# bootstrapping ghc. If an argument was given, map it from gnu format +# to ghc format. +# +# For why we do it this way, see: #3637, #1717, #2951 + +if test "$build_alias" = "" then if test "${WithGhc}" != "" then - build=`"${WithGhc}" +RTS --info | grep '^ ,("Target platform"' | sed -e 's/.*, "//' -e 's/")//' | tr -d '\r'` + build=$bootstrap_target echo "Build platform inferred as: $build" else echo "Can't work out build platform" exit 1 fi + + BuildArch=`echo "$build" | sed 's/-.*//'` + BuildVendor=`echo "$build" | sed -e 's/.*-\(.*\)-.*/\1/'` + BuildOS=`echo "$build" | sed 's/.*-//'` +else + GHC_CONVERT_CPU([$build_cpu], [BuildArch]) + GHC_CONVERT_VENDOR([$build_vendor], [BuildVendor]) + GHC_CONVERT_OS([$build_os], [BuildOS]) fi -if test "$host" = "" +if test "$host_alias" = "" then if test "${WithGhc}" != "" then - host=`"${WithGhc}" +RTS --info | grep '^ ,("Target platform"' | sed -e 's/.*, "//' -e 's/")//' | tr -d '\r'` + host=$bootstrap_target echo "Host platform inferred as: $host" else echo "Can't work out host platform" exit 1 fi + + HostArch=`echo "$host" | sed 's/-.*//'` + HostVendor=`echo "$host" | sed -e 's/.*-\(.*\)-.*/\1/'` + HostOS=`echo "$host" | sed 's/.*-//'` +else + GHC_CONVERT_CPU([$host_cpu], [HostArch]) + GHC_CONVERT_VENDOR([$host_vendor], [HostVendor]) + GHC_CONVERT_OS([$host_os], [HostOS]) fi -if test "$target" = "" +if test "$target_alias" = "" then if test "${WithGhc}" != "" then - target=`"${WithGhc}" +RTS --info | grep '^ ,("Target platform"' | sed -e 's/.*, "//' -e 's/")//' | tr -d '\r'` + target=$bootstrap_target echo "Target platform inferred as: $target" else echo "Can't work out target platform" exit 1 fi + + TargetArch=`echo "$target" | sed 's/-.*//'` + TargetVendor=`echo "$target" | sed -e 's/.*-\(.*\)-.*/\1/'` + TargetOS=`echo "$target" | sed 's/.*-//'` +else + GHC_CONVERT_CPU([$target_cpu], [TargetArch]) + GHC_CONVERT_VENDOR([$target_vendor], [TargetVendor]) + GHC_CONVERT_OS([$target_os], [TargetOS]) fi exeext='' @@ -258,17 +313,9 @@ case $host in ;; i386-apple-darwin|powerpc-apple-darwin) soext='.dylib' - CFLAGS="$CFLAGS -m32" - LDFLAGS="$LDFLAGS -m32" - CONF_CC_OPTS="$CONF_CC_OPTS -m32" - CONF_LD_OPTS="$CONF_LD_OPTS -m32" ;; x86_64-apple-darwin) soext='.dylib' - CFLAGS="$CFLAGS -m64" - LDFLAGS="$LDFLAGS -m64" - CONF_CC_OPTS="$CONF_CC_OPTS -m64" - CONF_LD_OPTS="$CONF_LD_OPTS -m64" ;; esac @@ -296,7 +343,7 @@ checkVendor() { checkOS() { case $1 in - linux|freebsd|netbsd|openbsd|dragonfly|osf1|osf3|hpux|linuxaout|kfreebsdgnu|freebsd2|solaris2|cygwin32|mingw32|darwin|gnu|nextstep2|nextstep3|sunos4|ultrix|irix|aix) + linux|freebsd|netbsd|openbsd|dragonfly|osf1|osf3|hpux|linuxaout|kfreebsdgnu|freebsd2|solaris2|cygwin32|mingw32|darwin|gnu|nextstep2|nextstep3|sunos4|ultrix|irix|aix|haiku) ;; *) echo "Unknown OS '$1'" @@ -305,10 +352,7 @@ checkOS() { esac } -BuildPlatform=$build -BuildArch=`echo "$build" | sed 's/-.*//'` -BuildVendor=`echo "$build" | sed -e 's/.*-\(.*\)-.*/\1/'` -BuildOS=`echo "$build" | sed 's/.*-//'` +BuildPlatform="$BuildArch-$BuildVendor-$BuildOS" BuildPlatform_CPP=`echo "$BuildPlatform" | sed -e 's/\./_/g' -e 's/-/_/g'` BuildArch_CPP=` echo "$BuildArch" | sed -e 's/\./_/g' -e 's/-/_/g'` BuildVendor_CPP=` echo "$BuildVendor" | sed -e 's/\./_/g' -e 's/-/_/g'` @@ -318,10 +362,7 @@ checkArch "$BuildArch" checkVendor "$BuildVendor" checkOS "$BuildOS" -HostPlatform=$host -HostArch=`echo "$host" | sed 's/-.*//'` -HostVendor=`echo "$host" | sed -e 's/.*-\(.*\)-.*/\1/'` -HostOS=`echo "$host" | sed 's/.*-//'` +HostPlatform="$HostArch-$HostVendor-$HostOS" HostPlatform_CPP=`echo "$HostPlatform" | sed -e 's/\./_/g' -e 's/-/_/g'` HostArch_CPP=` echo "$HostArch" | sed -e 's/\./_/g' -e 's/-/_/g'` HostVendor_CPP=` echo "$HostVendor" | sed -e 's/\./_/g' -e 's/-/_/g'` @@ -331,10 +372,7 @@ checkArch "$HostArch" checkVendor "$HostVendor" checkOS "$HostOS" -TargetPlatform=$target -TargetArch=`echo "$target" | sed 's/-.*//'` -TargetVendor=`echo "$target" | sed -e 's/.*-\(.*\)-.*/\1/'` -TargetOS=`echo "$target" | sed 's/.*-//'` +TargetPlatform="$TargetArch-$TargetVendor-$TargetOS" TargetPlatform_CPP=`echo "$TargetPlatform" | sed -e 's/\./_/g' -e 's/-/_/g'` TargetArch_CPP=` echo "$TargetArch" | sed -e 's/\./_/g' -e 's/-/_/g'` TargetVendor_CPP=` echo "$TargetVendor" | sed -e 's/\./_/g' -e 's/-/_/g'` @@ -386,27 +424,40 @@ then CC="$hardtop/inplace/mingw/bin/gcc.exe" LD="$hardtop/inplace/mingw/bin/ld.exe" NM="$hardtop/inplace/mingw/bin/nm.exe" + fp_prog_ar_raw="$hardtop/inplace/mingw/bin/ar.exe" if ! test -d inplace/mingw || - test inplace/mingw -ot ghc-tarballs/mingw/binutils*.tar.gz || - test inplace/mingw -ot ghc-tarballs/mingw/gcc-core*.tar.gz || - test inplace/mingw -ot ghc-tarballs/mingw/libcrypt*.tar.bz2 || - test inplace/mingw -ot ghc-tarballs/mingw/mingw-runtime*.tar.gz || - test inplace/mingw -ot ghc-tarballs/mingw/w32api*.tar.gz + test inplace/mingw -ot ghc-tarballs/mingw/binutils*.tar.lzma || + test inplace/mingw -ot ghc-tarballs/mingw/gcc-core*.tar.lzma || + test inplace/mingw -ot ghc-tarballs/mingw/gcc-c++*.tar.lzma || + test inplace/mingw -ot ghc-tarballs/mingw/libgmp*.tar.gz || + test inplace/mingw -ot ghc-tarballs/mingw/libmpc*.tar.gz || + test inplace/mingw -ot ghc-tarballs/mingw/libmpfr*.tar.gz || + test inplace/mingw -ot ghc-tarballs/mingw/mingwrt*-dev.tar.gz || + test inplace/mingw -ot ghc-tarballs/mingw/mingwrt*-dll.tar.gz || + test inplace/mingw -ot ghc-tarballs/mingw/w32api*.tar.lzma then AC_MSG_NOTICE([Making in-tree mingw tree]) rm -rf inplace/mingw - mkdir inplace + test -d inplace || mkdir inplace mkdir inplace/mingw ( cd inplace/mingw && - tar -zxf ../../ghc-tarballs/mingw/binutils*.tar.gz && - tar -zxf ../../ghc-tarballs/mingw/gcc-core*.tar.gz && - tar -jxf ../../ghc-tarballs/mingw/libcrypt*.tar.bz2 && - tar -zxf ../../ghc-tarballs/mingw/mingw-runtime*.tar.gz && - tar -zxf ../../ghc-tarballs/mingw/w32api*.tar.gz && + tar --lzma -xf ../../ghc-tarballs/mingw/binutils*.tar.lzma && + tar --lzma -xf ../../ghc-tarballs/mingw/gcc-core*.tar.lzma && + tar --lzma -xf ../../ghc-tarballs/mingw/gcc-c++*.tar.lzma && + tar --lzma -xf ../../ghc-tarballs/mingw/libgmp*.tar.lzma && + tar --lzma -xf ../../ghc-tarballs/mingw/libmpc*.tar.lzma && + tar --lzma -xf ../../ghc-tarballs/mingw/libmpfr*.tar.lzma && + tar -z -xf ../../ghc-tarballs/mingw/mingwrt*-dev.tar.gz && + tar -z -xf ../../ghc-tarballs/mingw/mingwrt*-dll.tar.gz && + tar --lzma -xf ../../ghc-tarballs/mingw/w32api*.tar.lzma && mv bin/gcc.exe bin/realgcc.exe ) - inplace/mingw/bin/realgcc.exe driver/gcc/gcc.c driver/utils/getLocation.c -Idriver/utils -o inplace/mingw/bin/gcc.exe + PATH=`pwd`/inplace/mingw/bin:$PATH 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 + if ! test -e inplace/mingw/bin/gcc.exe + then + AC_MSG_ERROR([GHC is required unless bootstrapping from .hc files.]) + fi AC_MSG_NOTICE([In-tree mingw tree created]) fi if ! test -d inplace/perl || @@ -437,21 +488,6 @@ FP_ARG_WITH_PATH_GNU_PROG([LD], [ld]) LdCmd="$LD" AC_SUBST([LdCmd]) -dnl ** Check for dlltool on Windows -dnl -------------------------------------------------------------- -case $HostOS_CPP in -cygwin32|mingw32) - AC_PATH_PROG(DlltoolCmd,dlltool) - if test -z "$DlltoolCmd"; then - echo "Can't find dlltool in your path, can't make DLLs." - exit 1 - fi - ;; -*) - AC_SUBST(DlltoolCmd,"") - ;; -esac - dnl ** Which nm to use? dnl -------------------------------------------------------------- FP_ARG_WITH_PATH_GNU_PROG([NM], [nm]) @@ -530,13 +566,24 @@ dnl Figure out which C compiler to use. Gcc is preferred. dnl If gcc, make sure it's at least 2.1 dnl FP_HAVE_GCC + +FPTOOLS_SET_C_LD_FLAGS([target],[CFLAGS],[LDFLAGS]) +FPTOOLS_SET_C_LD_FLAGS([build],[CONF_CC_OPTS_STAGE0],[CONF_LD_OPTS_STAGE0]) +FPTOOLS_SET_C_LD_FLAGS([target],[CONF_CC_OPTS_STAGE1],[CONF_LD_OPTS_STAGE1]) +# Stage 3 won't be supported by cross-compilation +FPTOOLS_SET_C_LD_FLAGS([target],[CONF_CC_OPTS_STAGE2],[CONF_LD_OPTS_STAGE2]) + FP_GCC_EXTRA_FLAGS dnl ** figure out how to invoke cpp directly (gcc -E is no good) AC_PROG_CPP -AC_SUBST(CONF_CC_OPTS) -AC_SUBST(CONF_LD_OPTS) +AC_SUBST(CONF_CC_OPTS_STAGE0) +AC_SUBST(CONF_CC_OPTS_STAGE1) +AC_SUBST(CONF_CC_OPTS_STAGE2) +AC_SUBST(CONF_LD_OPTS_STAGE0) +AC_SUBST(CONF_LD_OPTS_STAGE1) +AC_SUBST(CONF_LD_OPTS_STAGE2) dnl ** figure out how to do context diffs FP_PROG_CONTEXT_DIFF @@ -551,6 +598,7 @@ dnl If you can run configure, you certainly have /bin/sh AC_DEFINE([HAVE_BIN_SH], [1], [Define to 1 if you have /bin/sh.]) dnl ** how to invoke `ar' and `ranlib' +FP_PROG_AR_SUPPORTS_ATFILE FP_PROG_AR_NEEDS_RANLIB FP_PROG_AR_SUPPORTS_INPUT @@ -573,6 +621,16 @@ dnl ** check for patch dnl if GNU patch is named gpatch, look for it first AC_PATH_PROGS(PatchCmd,gpatch patch, patch) +dnl ** check for dtrace (currently only implemented for Mac OS X) +HaveDtrace=NO +AC_PATH_PROG(DtraceCmd,dtrace) +if test -n "$DtraceCmd"; then + if test "x$TargetOS_CPP-$TargetVendor_CPP" == "xdarwin-apple"; then + HaveDtrace=YES + fi +fi +AC_SUBST(HaveDtrace) + AC_PATH_PROG(HSCOLOUR,HsColour) # HsColour is passed to Cabal, so we need a native path if test "x$HostPlatform" = "xi386-unknown-mingw32" && \ @@ -621,7 +679,7 @@ dnl off_t, because it will affect the result of that test. AC_SYS_LARGEFILE dnl ** check for specific header (.h) files that we are interested in -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]) +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]) dnl ** check if it is safe to include both and AC_HEADER_TIME @@ -728,18 +786,22 @@ if test $HaveLibMingwEx = YES ; then AC_DEFINE([HAVE_MINGWEX], [1], [Define to 1 if you have the mingwex library.]) fi +dnl ** check for math library +dnl Keep that check as early as possible. +dnl as we need to know whether we need libm +dnl for math functions or not +dnl (see http://hackage.haskell.org/trac/ghc/ticket/3730) +AC_CHECK_LIB(m, atan, HaveLibM=YES, HaveLibM=NO) +if test $HaveLibM = YES +then + AC_DEFINE([HAVE_LIBM], [1], [Define to 1 if you need to link with libm]) +fi + dnl ** check whether this machine has BFD and liberty installed (used for debugging) dnl the order of these tests matters: bfd needs liberty AC_CHECK_LIB(iberty, xmalloc) AC_CHECK_LIB(bfd, bfd_init) -dnl ** check for math library -AC_CHECK_FUNC(atan,[fp_libm_not_needed=yes;LIBM=],[fp_libm_not_needed=dunno]) -if test x"$fp_libm_not_needed" = xdunno; then - AC_CHECK_LIB([m], [atan], [LIBS="-lm $LIBS"; LIBM="-lm"],[LIBM=]) -fi -AC_SUBST([LIBM]) - dnl ################################################################ dnl Check for libraries dnl ################################################################ @@ -793,6 +855,11 @@ AC_COMPILE_IFELSE( dnl *** check for GNU non-executable stack note support (ELF only) dnl (.section .note.GNU-stack,"",@progbits) +dnl This test doesn't work with "gcc -g" in gcc 4.4 (GHC trac #3889: +dnl Error: can't resolve `.note.GNU-stack' {.note.GNU-stack section} - `.Ltext0' {.text section} +dnl so we empty CFLAGS while running this test +CFLAGS2="$CFLAGS" +CFLAGS= AC_MSG_CHECKING(for GNU non-executable stack support) AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([__asm__ (".section .note.GNU-stack,\"\",@progbits");], [0])], @@ -801,6 +868,7 @@ AC_COMPILE_IFELSE( [Define to 1 if GNU non-executable stack notes are supported.]) ], [AC_MSG_RESULT(no)]) +CFLAGS="$CFLAGS2" dnl ** check for librt AC_CHECK_LIB(rt, clock_gettime) @@ -821,6 +889,10 @@ AC_TRY_LINK_FUNC(printf\$LDBLStub, [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).]) ]) +dnl ** check for eventfd which is needed by the I/O manager +AC_CHECK_HEADERS([sys/eventfd.h]) +AC_CHECK_FUNCS([eventfd]) + # test for GTK+ AC_PATH_PROGS([GTK_CONFIG], [pkg-config]) if test -n "$GTK_CONFIG"; then @@ -868,11 +940,17 @@ fi AC_SUBST(BUILD_DOCBOOK_PS) AC_SUBST(BUILD_DOCBOOK_PDF) +LIBRARY_VERSION(base) +LIBRARY_VERSION(Cabal) +LIBRARY_VERSION(ghc-prim) +LIBRARY_ghc_VERSION="$ProjectVersion" +AC_SUBST(LIBRARY_ghc_VERSION) + if grep ' ' compiler/ghc.cabal.in 2>&1 >/dev/null; then AC_MSG_ERROR([compiler/ghc.cabal.in contains tab characters; please remove them]) fi -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 distrib/ghc.iss distrib/configure-bin.ac]) +AC_CONFIG_FILES([mk/config.mk mk/install.mk mk/project.mk compiler/ghc.cabal ghc/ghc-bin.cabal utils/runghc/runghc.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]) AC_CONFIG_COMMANDS([mk/stamp-h],[echo timestamp > mk/stamp-h]) AC_OUTPUT