X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=aclocal.m4;h=bee5085b4ba5b5b93646235a0d04fa7a7659137a;hp=097ff9c5afe153d79debd471abc1f531bdda9d50;hb=9ba922ee06b048774d7a82964867ff768a78126e;hpb=04eaa2d72ce1474f4b36621363108ed915ace9ef diff --git a/aclocal.m4 b/aclocal.m4 index 097ff9c..bee5085 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -4,6 +4,37 @@ # ensure we don't clash with any pre-supplied autoconf ones. +# FPTOOLS_SET_C_LD_FLAGS +# ---------------------------------- +# Set the C and LD flags for a given platform +AC_DEFUN([FPTOOLS_SET_C_LD_FLAGS], +[ + case $$1 in + i386-apple-darwin) + # By default, gcc on OS X will generate SSE + # instructions, which need things 16-byte aligned, + # but we don't 16-byte align things. Thus drop + # back to generic i686 compatibility. Trac #2983. + $2="$$2 -march=i686 -m32" + $3="$$3 -march=i686 -m32" + ;; + x86_64-apple-darwin) + $2="$$2 -m64" + $3="$$3 -m64" + ;; + esac + + # If gcc knows about the stack protector, turn it off. + # Otherwise the stack-smash handler gets triggered. + echo 'int main(void) {return 0;}' > conftest.c + if $CC -c conftest.c -fno-stack-protector > /dev/null 2>&1 + then + $2="$$2 -fno-stack-protector" + fi + rm conftest.c conftest.o +]) + + # FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN # ---------------------------------- # Little endian Arm on Linux with some ABIs has big endian word order @@ -44,6 +75,40 @@ AC_DEFUN([FP_EVAL_STDERR], ])# FP_EVAL_STDERR +# FP_ARG_WITH_PATH_GNU_PROG +# -------------------- +# XXX +# +# $1 = the command to look for +# $2 = the variable to set +# +AC_DEFUN([FP_ARG_WITH_PATH_GNU_PROG], +[ +AC_ARG_WITH($2, +[AC_HELP_STRING([--with-$2=ARG], + [Use ARG as the path to $2 [default=autodetect]])], +[ + if test "$HostOS" = "mingw32" + then + AC_MSG_WARN([Request to use $withval will be ignored]) + else + $1=$withval + fi +], +[ + if test "$HostOS" != "mingw32" + then + AC_PATH_PROG([$1], [$2]) + if test -z "$$1" + then + AC_MSG_ERROR([cannot find $2 in your PATH, no idea how to link]) + fi + fi +] +) +]) # FP_ARG_WITH_PATH_GNU_PROG + + # FP_PROG_CONTEXT_DIFF # -------------------- # Figure out how to do context diffs. Sets the output variable ContextDiffCmd. @@ -89,7 +154,7 @@ AC_DEFUN([FP_COMPUTE_INT], # A variation of AC_CHECK_SIZEOF for computing the alignment restrictions of a # given type. Defines ALIGNMENT_TYPE. AC_DEFUN([FP_CHECK_ALIGNMENT], -[AS_LITERAL_IF([$1], [], +[AS_LITERAL_IF(m4_translit([[$1]], [*], [p]), [], [AC_FATAL([$0: requires literal arguments])])[]dnl AC_CHECK_TYPE([$1], [], [], [$3])[]dnl m4_pushdef([fp_Cache], [AS_TR_SH([fp_cv_alignment_$1])])[]dnl @@ -230,7 +295,7 @@ if test "x$HostPlatform" = "xi386-unknown-mingw32" && \ test "${HappyCmd}" != "" then # Canonicalise to :/path/to/gcc - HappyCmd=`cygpath -m ${HappyCmd}` + HappyCmd=`cygpath -m "${HappyCmd}"` AC_MSG_NOTICE([normalized happy command to $HappyCmd]) fi @@ -266,7 +331,7 @@ if test "x$HostPlatform" = "xi386-unknown-mingw32" && \ test "${AlexCmd}" != "" then # Canonicalise to :/path/to/gcc - AlexCmd=`cygpath -m ${AlexCmd}` + AlexCmd=`cygpath -m "${AlexCmd}"` fi AC_CACHE_CHECK([for version of alex], fptools_cv_alex_version, @@ -289,85 +354,12 @@ AC_SUBST(AlexVersion) ]) -dnl -dnl Check for windres and version. -dnl 2.15.91 works -dnl 2.17.50 doesn't work -dnl 2.18.50 works -dnl -AC_DEFUN([FPTOOLS_WINDRES], -[ -if test "x$HostPlatform" = "xi386-unknown-mingw32" -then - AC_PATH_PROG(WindResCmd,windres,) - # Alex is passed to Cabal, so we need a native path - if test "${OSTYPE}" != "msys" && \ - test "${WindResCmd}" != "" - then - # Canonicalise to :/path/to/gcc - WindResCmd=`cygpath -m ${WindResCmd}` - fi - - AC_CACHE_CHECK([for version of windres], fptools_cv_windres_version, - changequote(, )dnl - [ - if test x"$WindResCmd" != x - then - fptools_cv_windres_version="`$WindResCmd --version | - grep 'GNU windres' | - sed -e 's/GNU windres[^0-9]* \([0-9\.]*\).*/\1/g'`" ; - else - fptools_cv_windres_version=""; - fi - changequote([, ])dnl - ]) - FP_COMPARE_VERSIONS([$fptools_cv_windres_version],[-eq],[2.17.50], - [AC_MSG_ERROR([Your windres version isn't compatible with GHC. 2.15.91 and 2.18.50 are known to work.])])[] - WindResVersion=$fptools_cv_windres_version; - AC_SUBST(WindResVersion) -fi -]) - - -# FP_PROG_LD -# ---------- -# Sets the output variable LdCmd to the (non-Cygwin version of the) full path -# of ld. Exits if no ld can be found -AC_DEFUN([FP_PROG_LD], -[ -if test -z "$1" -then - AC_PATH_PROG([fp_prog_ld_raw], [ld]) - if test -z "$fp_prog_ld_raw"; then - AC_MSG_ERROR([cannot find ld in your PATH, no idea how to link]) - fi - LdCmd=$fp_prog_ld_raw - case $HostPlatform in - *mingw32) if test x${OSTYPE} != xmsys; then - LdCmd="`cygpath -w ${fp_prog_ld_raw} | sed -e 's@\\\\@/@g'`" - AC_MSG_NOTICE([normalized ld command to $LdCmd]) - fi - # Insist on >= ld-2.15.x, since earlier versions doesn't handle - # the generation of relocatable object files with large amounts - # of relocations correctly. (cf. HSbase.o splittage-hack) - fp_prog_ld_version=`${LdCmd} --version | sed -n '/GNU ld/p' | tr -cd 0-9 | cut -b1-3` - FP_COMPARE_VERSIONS([$fp_prog_ld_version],[-lt],[214], - [AC_MSG_ERROR([GNU ld version later than 2.14 required to compile GHC on Windows.])])[]dnl - ;; - esac -else - LdCmd="$1" -fi -AC_SUBST([LdCmd]) -])# FP_PROG_LD - - # FP_PROG_LD_X # ------------ # Sets the output variable LdXFlag to -x if ld supports this flag, otherwise the # variable's value is empty. AC_DEFUN([FP_PROG_LD_X], -[AC_REQUIRE([FP_PROG_LD]) +[ AC_CACHE_CHECK([whether ld understands -x], [fp_cv_ld_x], [echo 'foo() {}' > conftest.c ${CC-cc} -c conftest.c @@ -391,7 +383,7 @@ AC_SUBST([LdXFlag]) # Sets the output variable LdIsGNULd to YES or NO, depending on whether it is # GNU ld or not. AC_DEFUN([FP_PROG_LD_IS_GNU], -[AC_REQUIRE([FP_PROG_LD]) +[ AC_CACHE_CHECK([whether ld is GNU ld], [fp_cv_gnu_ld], [if ${LdCmd} --version 2> /dev/null | grep "GNU" > /dev/null 2>&1; then fp_cv_gnu_ld=yes @@ -411,10 +403,10 @@ AC_DEFUN([FP_PROG_AR], if test -z "$fp_prog_ar_raw"; then AC_MSG_ERROR([cannot find ar in your PATH, no idea how to make a library]) fi -fp_prog_ar=$fp_prog_ar_raw +fp_prog_ar="$fp_prog_ar_raw" case $HostPlatform in *mingw32) if test x${OSTYPE} != xmsys; then - fp_prog_ar="`cygpath -w ${fp_prog_ar_raw} | sed -e 's@\\\\@/@g'`" + fp_prog_ar="`cygpath -w "${fp_prog_ar_raw}" | sed -e 's@\\\\@/@g'`" AC_MSG_NOTICE([normalized ar command to $fp_prog_ar]) fi ;; @@ -428,15 +420,42 @@ esac AC_DEFUN([FP_PROG_AR_IS_GNU], [AC_REQUIRE([FP_PROG_AR]) AC_CACHE_CHECK([whether $fp_prog_ar_raw is GNU ar], [fp_cv_prog_ar_is_gnu], -[if $fp_prog_ar_raw --version 2> /dev/null | grep "GNU" > /dev/null 2>&1; then +[if "$fp_prog_ar_raw" --version 2> /dev/null | grep "GNU" > /dev/null 2>&1; then fp_cv_prog_ar_is_gnu=yes else fp_cv_prog_ar_is_gnu=no fi]) fp_prog_ar_is_gnu=$fp_cv_prog_ar_is_gnu +AC_SUBST([ArIsGNUAr], [`echo $fp_prog_ar_is_gnu | tr 'a-z' 'A-Z'`]) ])# FP_PROG_AR_IS_GNU +# FP_PROG_AR_SUPPORTS_ATFILE +# ----------------- +# Sets fp_prog_ar_supports_atfile to yes or no, depending on whether +# or not it supports the @file syntax +AC_DEFUN([FP_PROG_AR_SUPPORTS_ATFILE], +[AC_REQUIRE([FP_PROG_AR]) + AC_REQUIRE([FP_PROG_AR_ARGS]) +AC_CACHE_CHECK([whether $fp_prog_ar_raw supports @file], [fp_cv_prog_ar_supports_atfile], +[ +rm -f conftest* +touch conftest.file +echo conftest.file > conftest.atfile +echo conftest.file >> conftest.atfile +"$fp_prog_ar_raw" $fp_prog_ar_args conftest.a @conftest.atfile > /dev/null 2>&1 +fp_prog_ar_supports_atfile_tmp=`"$fp_prog_ar_raw" t conftest.a 2> /dev/null | grep -c conftest.file` +rm -f conftest* +if test "$fp_prog_ar_supports_atfile_tmp" -eq 2 +then + fp_cv_prog_ar_supports_atfile=yes +else + fp_cv_prog_ar_supports_atfile=no +fi]) +fp_prog_ar_supports_atfile=$fp_cv_prog_ar_supports_atfile +AC_SUBST([ArSupportsAtFile], [`echo $fp_prog_ar_supports_atfile | tr 'a-z' 'A-Z'`]) +])# FP_PROG_AR_SUPPORTS_ATFILE + # FP_PROG_AR_ARGS # --------------- # Sets fp_prog_ar_args to the arguments for ar and the output variable ArCmd @@ -454,7 +473,7 @@ else touch conftest.dummy for fp_var in clqsZ clqs cqs clq cq ; do rm -f conftest.a - if $fp_prog_ar_raw $fp_var conftest.a conftest.dummy > /dev/null 2> /dev/null; then + if "$fp_prog_ar_raw" $fp_var conftest.a conftest.dummy > /dev/null 2> /dev/null; then fp_cv_prog_ar_args=$fp_var break fi @@ -465,7 +484,8 @@ else fi fi]) fp_prog_ar_args=$fp_cv_prog_ar_args -AC_SUBST([ArCmd], ["$fp_prog_ar $fp_prog_ar_args"]) +AC_SUBST([ArCmd], ["$fp_prog_ar"]) +AC_SUBST([ArArgs], ["$fp_prog_ar_args"]) ])# FP_PROG_AR_ARGS @@ -511,7 +531,7 @@ AC_CACHE_CHECK([whether $fp_prog_ar_raw supports -input], [fp_cv_prog_ar_support if test $fp_prog_ar_is_gnu = no; then rm -f conftest* touch conftest.lst - if FP_EVAL_STDERR([$fp_prog_ar_raw $fp_prog_ar_args conftest.a -input conftest.lst]) >/dev/null; then + if FP_EVAL_STDERR(["$fp_prog_ar_raw" $fp_prog_ar_args conftest.a -input conftest.lst]) >/dev/null; then test -s conftest.err || fp_cv_prog_ar_supports_input=yes fi rm -f conftest* @@ -577,20 +597,6 @@ AC_SUBST([GccVersion], [$fp_cv_gcc_version]) AC_SUBST(GccLT34) ])# FP_HAVE_GCC -AC_DEFUN([FP_MINGW_GCC], -[ - case $HostOS_CPP in - mingw*) AC_MSG_CHECKING([whether $CC is a mingw gcc]) - if $CC -v 2>&1 | grep mingw >/dev/null; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - AC_MSG_ERROR([Please use --with-gcc to specify a mingw gcc]) - fi;; - *) ;; - esac -]) - dnl Small feature test for perl version. Assumes PerlCmd dnl contains path to perl binary. dnl @@ -932,24 +938,24 @@ fi # FP_PROG_GHC_PKG # ---------------- # Try to find a ghc-pkg matching the ghc mentioned in the environment variable -# WithGhc. If the latter is unset or no matching ghc-pkg can be found, try to -# find a plain ghc-pkg. Sets the output variable GhcPkgCmd. +# WithGhc. Sets the output variable GhcPkgCmd. AC_DEFUN([FP_PROG_GHC_PKG], [AC_CACHE_CHECK([for ghc-pkg matching $WithGhc], fp_cv_matching_ghc_pkg, -[fp_ghc_pkg_guess=`echo $WithGhc | sed 's,ghc\(@<:@^/\\@:>@*\)$,ghc-pkg\1,'` -if "$fp_ghc_pkg_guess" -l > /dev/null 2>&1; then - fp_cv_matching_ghc_pkg=$fp_ghc_pkg_guess -elif "$fp_ghc_pkg_guess" list > /dev/null 2>&1; then - # from 6.10, ghc-pkg doesn't support the old -l syntax any more +[ +# If we are told to use ghc-stage2, then we're using an in-tree +# compiler. In this case, we just want ghc-pkg, not ghc-pkg-stage2, +# so we sed off -stage[0-9]$. However, if we are told to use +# ghc-6.12.1 then we want to use ghc-pkg-6.12.1, so we keep any +# other suffix. +fp_ghc_pkg_guess=`echo $WithGhc | sed -e 's/-stage@<:@0-9@:>@$//' -e 's,ghc\(@<:@^/\\@:>@*\)$,ghc-pkg\1,'` +if "$fp_ghc_pkg_guess" list > /dev/null 2>&1; then fp_cv_matching_ghc_pkg=$fp_ghc_pkg_guess else - fp_cv_matching_ghc_pkg=no + AC_MSG_ERROR([Cannot find matching ghc-pkg]) fi]) -if test x"$fp_cv_matching_ghc_pkg" = xno; then - AC_PATH_PROG([GhcPkgCmd], [ghc-pkg]) -else - GhcPkgCmd=$fp_cv_matching_ghc_pkg -fi])# FP_PROG_GHC_PKG +GhcPkgCmd=$fp_cv_matching_ghc_pkg +AC_SUBST([GhcPkgCmd]) +])# FP_PROG_GHC_PKG # FP_GCC_EXTRA_FLAGS @@ -1260,7 +1266,7 @@ if test ! -f utils/ghc-pwd/ghc-pwd && test ! -f utils/ghc-pwd/ghc-pwd.exe; then rm -f *.hi rm -f ghc-pwd rm -f ghc-pwd.exe - $WithGhc -v0 --make ghc-pwd -o ghc-pwd + "$WithGhc" -v0 -no-user-package-conf --make ghc-pwd -o ghc-pwd cd ../.. fi @@ -1287,4 +1293,105 @@ case "$hardtop" in esac ]) +# GHC_CONVERT_CPU(cpu, target_var) +# -------------------------------- +# converts cpu from gnu to ghc naming, and assigns the result to $target_var +AC_DEFUN([GHC_CONVERT_CPU],[ +case "$1" in + alpha*) + $2="alpha" + ;; + arm*) + $2="arm" + ;; + hppa1.1*) + $2="hppa1_1" + ;; + hppa*) + $2="hppa" + ;; + i386) + $2="i386" + ;; + ia64) + $2="ia64" + ;; + m68k*) + $2="m68k" + ;; + mipseb*) + $2="mipseb" + ;; + mipsel*) + $2="mipsel" + ;; + mips*) + $2="mips" + ;; + powerpc64*) + $2="powerpc64" + ;; + powerpc*) + $2="powerpc" + ;; + rs6000) + $2="rs6000" + ;; + s390*) + $2="s390" + ;; + sparc64*) + $2="sparc64" + ;; + sparc*) + $2="sparc" + ;; + vax) + $2="vax" + ;; + x86_64) + $2="x86_64" + ;; + *) + echo "Unknown CPU $1" + exit 1 + ;; + esac +]) + +# GHC_CONVERT_VENDOR(vendor, target_var) +# -------------------------------- +# converts vendor from gnu to ghc naming, and assigns the result to $target_var +AC_DEFUN([GHC_CONVERT_VENDOR],[ +$2="$1" +]) + +# GHC_CONVERT_OS(os, target_var) +# -------------------------------- +# converts os from gnu to ghc naming, and assigns the result to $target_var +AC_DEFUN([GHC_CONVERT_OS],[ +case "$1" in + linux-*|linux) + $2="linux" + ;; + # As far as I'm aware, none of these have relevant variants + freebsd|netbsd|openbsd|dragonfly|osf1|osf3|hpux|linuxaout|kfreebsdgnu|freebsd2|solaris2|cygwin32|mingw32|darwin|gnu|nextstep2|nextstep3|sunos4|ultrix|irix|aix|haiku) + $2="$1" + ;; + *) + echo "Unknown OS $1" + exit 1 + ;; + esac +]) + +# LIBRARY_VERSION(lib) +# -------------------------------- +# Gets the version number of a library. +# If $1 is ghc-prim, then we define LIBRARY_ghc_prim_VERSION as 1.2.3 +AC_DEFUN([LIBRARY_VERSION],[ +LIBRARY_[]translit([$1], [-], [_])[]_VERSION=`grep -i "^version:" libraries/$1/$1.cabal | sed "s/.* //"` +AC_SUBST(LIBRARY_[]translit([$1], [-], [_])[]_VERSION) +]) + # LocalWords: fi