X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=configure.ac;h=51b04d6bc73a78bd069cc60eb08d9bdc01a9326b;hp=3fb728b6919f28a9e2b2d9b163b49bdd880ba521;hb=302e2e29f2e1074bfba561e077a484dc4e1d15f6;hpb=8066838aa14adf2371f6e1745424c3b6baa6d164 diff --git a/configure.ac b/configure.ac index 3fb728b..51b04d6 100644 --- a/configure.ac +++ b/configure.ac @@ -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 @@ -156,7 +156,7 @@ fi; # GHC is passed to Cabal, so we need a native path if test "${WithGhc}" != "" then - ghc_host=`${WithGhc} +RTS --info | grep 'Host platform' | sed -e 's/.*, "//' -e 's/")//'` + ghc_host=`"${WithGhc}" +RTS --info | grep 'Host platform' | sed -e 's/.*, "//' -e 's/")//'` if test "$ghc_host" = "i386-unknown-mingw32" then @@ -165,7 +165,7 @@ then WithGhc=`echo "${WithGhc}" | sed "s#^/\([a-zA-Z]\)/#\1:/#"` else # Canonicalise to :/path/to/ghc - WithGhc=`cygpath -m ${WithGhc}` + WithGhc=`cygpath -m "${WithGhc}"` fi echo "GHC path canonicalised to: ${WithGhc}" fi @@ -208,40 +208,87 @@ System types: --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" = "" +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='' @@ -296,7 +343,7 @@ checkVendor() { checkOS() { case $1 in - linux|freebsd|netbsd|openbsd|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'` @@ -378,47 +416,72 @@ AC_SUBST(WithHc) AC_PATH_PROGS(NHC,nhc nhc98) AC_PATH_PROG(HBC,hbc) +# This uses GHC, so put it after the "GHC is required" check above: +FP_FIND_ROOT + +if test "$HostOS" = "mingw32" +then + CC="$hardtop/inplace/mingw/bin/gcc.exe" + LD="$hardtop/inplace/mingw/bin/ld.exe" + NM="$hardtop/inplace/mingw/bin/nm.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/gcc-g++*.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 + then + AC_MSG_NOTICE([Making in-tree mingw tree]) + rm -rf inplace/mingw + 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 -zxf ../../ghc-tarballs/mingw/gcc-g++*.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 && + mv bin/gcc.exe bin/realgcc.exe + ) + 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 + AC_MSG_NOTICE([In-tree mingw tree created]) + fi + if ! test -d inplace/perl || + test inplace/perl -ot ghc-tarballs/perl/ghc-perl*.tar.gz + then + AC_MSG_NOTICE([Making in-tree perl tree]) + rm -rf inplace/perl + mkdir inplace + mkdir inplace/perl + ( + cd inplace/perl && + tar -zxf ../../ghc-tarballs/perl/ghc-perl*.tar.gz + ) + AC_MSG_NOTICE([In-tree perl tree created]) + fi +fi + dnl ** Which gcc to use? dnl -------------------------------------------------------------- -AC_ARG_WITH(gcc, -[AC_HELP_STRING([--with-gcc=ARG], - [Use ARG as the path to GCC [default=autodetect]])], -[WhatGccIsCalled="$withval" - if test "x$HostPlatform" = "xi386-unknown-mingw32" && \ - test "${OSTYPE}" != "msys" && \ - test "${withval}" != "" - then - # Canonicalise to :/path/to/gcc - withval=`cygpath -m ${withval}` - fi; - CC="$withval" - export CC - ], -[WhatGccIsCalled="gcc"] -) +FP_ARG_WITH_PATH_GNU_PROG([CC], [gcc]) +export CC +WhatGccIsCalled="$CC" AC_SUBST(WhatGccIsCalled) dnl ** Which ld to use? dnl -------------------------------------------------------------- -AC_ARG_WITH(ld, -[AC_HELP_STRING([--with-ld=ARG], - [Use ARG as the path to LD [default=autodetect]])], -[if test "x$HostPlatform" = "xi386-unknown-mingw32" && \ - test "${OSTYPE}" != "msys" && \ - test "${withval}" != "" - then - # Canonicalise to :/path/to/ld - withval=`cygpath -m ${withval}` - fi; - LD=$withval - FP_PROG_LD([$LD]) - ], - [FP_PROG_LD()] -) - -# This uses GHC, so put it after the "GHC is required" check above: -FP_FIND_ROOT +FP_ARG_WITH_PATH_GNU_PROG([LD], [ld]) +LdCmd="$LD" +AC_SUBST([LdCmd]) +dnl ** Which nm to use? +dnl -------------------------------------------------------------- +FP_ARG_WITH_PATH_GNU_PROG([NM], [nm]) +NmCmd="$NM" +AC_SUBST([NmCmd]) dnl ** Mac OS X: explicit deployment target dnl -------------------------------------------------------------- @@ -492,7 +555,6 @@ 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 -FP_MINGW_GCC FP_GCC_EXTRA_FLAGS dnl ** figure out how to invoke cpp directly (gcc -E is no good) @@ -514,6 +576,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 @@ -522,7 +585,7 @@ AC_PROG_LN_S dnl ** Find the path to sed -AC_PATH_PROG(SedCmd,sed) +AC_PATH_PROGS(SedCmd,gsed sed,sed) dnl ** check for time command @@ -530,12 +593,22 @@ AC_PATH_PROG(TimeCmd,time) dnl ** check for tar dnl if GNU tar is named gtar, look for it first. -AC_PATH_PROGS(TarCmd,gtar tar,tar) +AC_PATH_PROGS(TarCmd,gnutar gtar tar,tar) 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" && \ @@ -568,9 +641,6 @@ if test "$BootingFromHc" = "NO"; then FPTOOLS_ALEX fi; -dnl Check we have an acceptable version of windres -FPTOOLS_WINDRES - dnl -------------------------------------------------- dnl ### program checking section ends here ### dnl -------------------------------------------------- @@ -587,7 +657,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/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 @@ -694,18 +764,19 @@ 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_SEARCH_LIBS(atan, m, + [AC_DEFINE([HAVE_LIBM], [1], [Define to 1 if you need to link with libm])]) + 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 ################################################################ @@ -834,11 +905,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 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