floating-point fix for x86_64
[ghc-hetmet.git] / aclocal.m4
index 3a8aa2e..858a3f0 100644 (file)
@@ -27,7 +27,7 @@ AC_DEFUN([FP_EVAL_STDERR],
 # to check stderr *and* the exit value.
 #
 # Used by ghc.
 # to check stderr *and* the exit value.
 #
 # Used by ghc.
-AC_DEFUN(FP_CHECK_FLAG,
+AC_DEFUN([FP_CHECK_FLAG],
 [AC_LANG_COMPILER_REQUIRE()dnl
 AC_LANG_CASE([C],          [fp_compiler="$CC"  m4_pushdef([fp_Flags], [CFLAGS])],
              [C++],        [fp_compiler="$CXX" m4_pushdef([fp_Flags], [CXXFLAGS])],
 [AC_LANG_COMPILER_REQUIRE()dnl
 AC_LANG_CASE([C],          [fp_compiler="$CC"  m4_pushdef([fp_Flags], [CFLAGS])],
              [C++],        [fp_compiler="$CXX" m4_pushdef([fp_Flags], [CXXFLAGS])],
@@ -220,7 +220,7 @@ AS_IF([test "$fp_num1" $2 "$fp_num2"], [$4], [$5])[]dnl
 dnl
 dnl Check for GreenCard and version.
 dnl
 dnl
 dnl Check for GreenCard and version.
 dnl
-AC_DEFUN(FPTOOLS_GREENCARD,
+AC_DEFUN([FPTOOLS_GREENCARD],
 [
 AC_PATH_PROG(GreenCardCmd,greencard)
 AC_CACHE_CHECK([for version of greencard], fptools_cv_greencard_version,
 [
 AC_PATH_PROG(GreenCardCmd,greencard)
 AC_CACHE_CHECK([for version of greencard], fptools_cv_greencard_version,
@@ -244,20 +244,26 @@ dnl Check for Happy and version.  If we're building GHC, then we need
 dnl at least Happy version 1.14.  If there's no installed Happy, we look
 dnl for a happy source tree and point the build system at that instead.
 dnl
 dnl at least Happy version 1.14.  If there's no installed Happy, we look
 dnl for a happy source tree and point the build system at that instead.
 dnl
-AC_DEFUN(FPTOOLS_HAPPY,
+AC_DEFUN([FPTOOLS_HAPPY],
 [
 if test -d $srcdir/happy; then
    SrcTreeHappyCmd=$hardtop/happy/src/happy-inplace
 [
 if test -d $srcdir/happy; then
    SrcTreeHappyCmd=$hardtop/happy/src/happy-inplace
+else
+   SrcTreeHappyCmd=""
 fi
 if test x"$UseSrcTreeHappy" = xYES; then
 fi
 if test x"$UseSrcTreeHappy" = xYES; then
-  HappyCmd=$SrcTreeHappyCmd
+  if test x"$SrcTreeHappyCmd" != x; then
+     HappyCmd=$SrcTreeHappyCmd
+  else
+     AC_MSG_ERROR([--enable-src-tree-happy given, but happy not found in source tree])
+  fi
 else
   AC_PATH_PROG(HappyCmd,happy,$SrcTreeHappyCmd)
 fi
 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
 changequote(, )dnl
 [if test x"$HappyCmd" = x"$SrcTreeHappyCmd" -a -e $srcdir/happy/mk/version.mk; then
 else
   AC_PATH_PROG(HappyCmd,happy,$SrcTreeHappyCmd)
 fi
 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
 changequote(, )dnl
 [if test x"$HappyCmd" = x"$SrcTreeHappyCmd" -a -e $srcdir/happy/mk/version.mk; then
-   fptools_cv_happy_version=`grep '^ProjectVersion[    ]*=' $srcdir/happy/mk/version.mk | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`;
+   fptools_cv_happy_version=`grep '^ProjectVersion[    ]*=' $srcdir/happy/mk/version.mk | sed 's/[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`;
 elif test x"$HappyCmd" != x; then
    fptools_cv_happy_version="`$HappyCmd -v |
                          grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ;
 elif test x"$HappyCmd" != x; then
    fptools_cv_happy_version="`$HappyCmd -v |
                          grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ;
@@ -267,8 +273,8 @@ fi;
 changequote([, ])dnl
 ])
 if test -d $srcdir/ghc -a ! -f $srcdir/ghc/compiler/parser/Parser.hs; then
 changequote([, ])dnl
 ])
 if test -d $srcdir/ghc -a ! -f $srcdir/ghc/compiler/parser/Parser.hs; then
-  FP_COMPARE_VERSIONS([$fptools_cv_happy_version],[-lt],[1.14],
-  [AC_MSG_ERROR([Happy version 1.14 or later is required to compile GHC.])])[]dnl
+  FP_COMPARE_VERSIONS([$fptools_cv_happy_version],[-lt],[1.15],
+  [AC_MSG_ERROR([Happy version 1.15 or later is required to compile GHC.])])[]dnl
 fi
 HappyVersion=$fptools_cv_happy_version;
 AC_SUBST(HappyVersion)
 fi
 HappyVersion=$fptools_cv_happy_version;
 AC_SUBST(HappyVersion)
@@ -278,13 +284,19 @@ dnl
 dnl Check for Haddock and version.  If there's no installed Haddock, we look
 dnl for a haddock source tree and point the build system at that instead.
 dnl
 dnl Check for Haddock and version.  If there's no installed Haddock, we look
 dnl for a haddock source tree and point the build system at that instead.
 dnl
-AC_DEFUN(FPTOOLS_HADDOCK,
+AC_DEFUN([FPTOOLS_HADDOCK],
 [
 if test -d $srcdir/haddock; then
    SrcTreeHaddockCmd=$hardtop/haddock/src/haddock-inplace
 [
 if test -d $srcdir/haddock; then
    SrcTreeHaddockCmd=$hardtop/haddock/src/haddock-inplace
+else
+   SrcTreeHaddockCmd=""
 fi
 if test x"$UseSrcTreeHaddock" = xYES; then
 fi
 if test x"$UseSrcTreeHaddock" = xYES; then
-  HaddockCmd=$SrcTreeHaddockCmd
+  if test x"$SrcTreeHaddockCmd" != x; then
+     HaddockCmd=$SrcTreeHaddockCmd
+  else
+     AC_MSG_ERROR([--enable-src-tree-haddock given, but haddock not found in source tree])
+  fi
 else
   AC_PATH_PROG(HaddockCmd,haddock,$SrcTreeHaddockCmd)
 fi
 else
   AC_PATH_PROG(HaddockCmd,haddock,$SrcTreeHaddockCmd)
 fi
@@ -299,20 +311,26 @@ dnl Check for Alex and version.  If we're building GHC, then we need
 dnl at least Alex version 2.0.  If there's no installed Alex, we look
 dnl for a alex source tree and point the build system at that instead.
 dnl
 dnl at least Alex version 2.0.  If there's no installed Alex, we look
 dnl for a alex source tree and point the build system at that instead.
 dnl
-AC_DEFUN(FPTOOLS_ALEX,
+AC_DEFUN([FPTOOLS_ALEX],
 [
 if test -d $srcdir/alex; then
    SrcTreeAlexCmd=$hardtop/alex/src/alex-inplace
 [
 if test -d $srcdir/alex; then
    SrcTreeAlexCmd=$hardtop/alex/src/alex-inplace
+else
+   SrcTreeAlexCmd=""
 fi
 if test x"$UseSrcTreeAlex" = xYES; then
 fi
 if test x"$UseSrcTreeAlex" = xYES; then
-  AlexCmd=$SrcTreeAlexCmd
+  if test x"$SrcTreeAlexCmd" != x; then
+     AlexCmd=$SrcTreeAlexCmd
+  else
+     AC_MSG_ERROR([--enable-src-tree-alex given, but alex not found in source tree])
+  fi
 else
   AC_PATH_PROG(AlexCmd,alex,$SrcTreeAlexCmd)
 fi
 AC_CACHE_CHECK([for version of alex], fptools_cv_alex_version,
 changequote(, )dnl
 [if test x"$AlexCmd" = x"$SrcTreeAlexCmd"; then
 else
   AC_PATH_PROG(AlexCmd,alex,$SrcTreeAlexCmd)
 fi
 AC_CACHE_CHECK([for version of alex], fptools_cv_alex_version,
 changequote(, )dnl
 [if test x"$AlexCmd" = x"$SrcTreeAlexCmd"; then
-   fptools_cv_alex_version=`grep '^ProjectVersion[     ]*=' $srcdir/alex/mk/version.mk | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`;
+   fptools_cv_alex_version=`grep '^ProjectVersion[     ]*=' $srcdir/alex/mk/version.mk | sed 's/[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`;
 elif test x"$AlexCmd" != x; then
    fptools_cv_alex_version="`$AlexCmd -v |
                          grep 'Alex [Vv]ersion' | sed -e 's/Alex [Vv]ersion \([0-9\.]*\).*/\1/g'`" ;
 elif test x"$AlexCmd" != x; then
    fptools_cv_alex_version="`$AlexCmd -v |
                          grep 'Alex [Vv]ersion' | sed -e 's/Alex [Vv]ersion \([0-9\.]*\).*/\1/g'`" ;
@@ -345,6 +363,12 @@ case $HostPlatform in
              LdCmd="`cygpath -w ${fp_prog_ld_raw} | sed -e 's@\\\\@/@g'`"
               AC_MSG_NOTICE([normalized ld command to $LdCmd])
             fi
              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
 AC_SUBST([LdCmd])
             ;;
 esac
 AC_SUBST([LdCmd])
@@ -360,7 +384,7 @@ AC_DEFUN([FP_PROG_LD_X],
 AC_CACHE_CHECK([whether ld understands -x], [fp_cv_ld_x],
 [echo 'foo() {}' > conftest.c
 ${CC-cc} -c conftest.c
 AC_CACHE_CHECK([whether ld understands -x], [fp_cv_ld_x],
 [echo 'foo() {}' > conftest.c
 ${CC-cc} -c conftest.c
-if ${LdCmd} -r -x -o conftest2.o conftest.o; then
+if ${LdCmd} -r -x -o conftest2.o conftest.o > /dev/null 2>&1; then
    fp_cv_ld_x=yes
 else
    fp_cv_ld_x=no
    fp_cv_ld_x=yes
 else
    fp_cv_ld_x=no
@@ -466,9 +490,14 @@ AC_SUBST([ArCmd], ["$fp_prog_ar $fp_prog_ar_args"])
 AC_DEFUN([FP_PROG_AR_NEEDS_RANLIB],
 [AC_REQUIRE([FP_PROG_AR_IS_GNU])
 AC_REQUIRE([FP_PROG_AR_ARGS])
 AC_DEFUN([FP_PROG_AR_NEEDS_RANLIB],
 [AC_REQUIRE([FP_PROG_AR_IS_GNU])
 AC_REQUIRE([FP_PROG_AR_ARGS])
+AC_REQUIRE([AC_PROG_CC])
 AC_CACHE_CHECK([whether ranlib is needed], [fp_cv_prog_ar_needs_ranlib],
 [if test $fp_prog_ar_is_gnu = yes; then
   fp_cv_prog_ar_needs_ranlib=no
 AC_CACHE_CHECK([whether ranlib is needed], [fp_cv_prog_ar_needs_ranlib],
 [if test $fp_prog_ar_is_gnu = yes; then
   fp_cv_prog_ar_needs_ranlib=no
+elif test $TargetPlatform = powerpc-apple-darwin; then
+  # It's quite tedious to check for Apple's crazy timestamps in .a files,
+  # so we hardcode it.
+  fp_cv_prog_ar_needs_ranlib=yes
 elif echo $fp_prog_ar_args | grep "s" > /dev/null 2> /dev/null; then
   fp_cv_prog_ar_needs_ranlib=no
 else
 elif echo $fp_prog_ar_args | grep "s" > /dev/null 2> /dev/null; then
   fp_cv_prog_ar_needs_ranlib=no
 else
@@ -512,7 +541,7 @@ AC_SUBST([ArSupportsInput])
 dnl
 dnl AC_SHEBANG_PERL - can we she-bang perl?
 dnl
 dnl
 dnl AC_SHEBANG_PERL - can we she-bang perl?
 dnl
-AC_DEFUN(FPTOOLS_SHEBANG_PERL,
+AC_DEFUN([FPTOOLS_SHEBANG_PERL],
 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
 [echo "#!$PerlCmd"'
 exit $1;
 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
 [echo "#!$PerlCmd"'
 exit $1;
@@ -534,18 +563,25 @@ rm -f conftest
 # output variables HaveGcc and GccVersion.
 AC_DEFUN([FP_HAVE_GCC],
 [AC_REQUIRE([AC_PROG_CC])
 # output variables HaveGcc and GccVersion.
 AC_DEFUN([FP_HAVE_GCC],
 [AC_REQUIRE([AC_PROG_CC])
-AC_CACHE_CHECK([whether your gcc is OK], [fp_cv_have_gcc],
-[if test -z "$GCC"; then
-  fp_cv_have_gcc='no'
-  AC_MSG_WARN([You would be better off with gcc, perhaps it is already installed, but not in your PATH?])
+if test -z "$GCC"; then
+   fp_have_gcc=NO
 else
 else
-  fp_cv_have_gcc='yes'
-  gcc_version_str="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [[^0-9]]*\([[0-9]][[0-9]]*\)\.\([[0-9]][[0-9]]*\).*/\1\.\2/g' `"
-  FP_COMPARE_VERSIONS([$gcc_version_str], [-lt], [2.0],
-    [AC_MSG_ERROR([Need at least gcc version 2.0 (2.95.3 recommend)])])
-fi])
-AC_SUBST([HaveGcc], [`echo $fp_cv_have_gcc | sed 'y/yesno/YESNO/'`])
-AC_SUBST([GccVersion], [`gcc --version | grep mingw | cut -f 3 -d ' '`])
+   fp_have_gcc=YES
+fi
+if test "$fp_have_gcc" = "NO" -a -d $srcdir/ghc; then
+  AC_MSG_ERROR([gcc is required])
+fi
+AC_CACHE_CHECK([version of gcc], [fp_gcc_version],
+[if test "$fp_have_gcc" = "YES"; then
+   fp_gcc_version="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [[^0-9]]*\([[0-9.]]*\).*/\1/g'`"
+   FP_COMPARE_VERSIONS([$fp_gcc_version], [-lt], [2.0],
+     [AC_MSG_ERROR([Need at least gcc version 2.0 (3.4+ recommended)])])
+ else
+   fp_gcc_version="not-installed"
+ fi
+])
+AC_SUBST([HaveGcc], [$fp_have_gcc])
+AC_SUBST([GccVersion], [$fp_gcc_version])
 ])# FP_HAVE_GCC
 
 AC_DEFUN([FP_MINGW_GCC],
 ])# FP_HAVE_GCC
 
 AC_DEFUN([FP_MINGW_GCC],
@@ -565,11 +601,8 @@ AC_DEFUN([FP_MINGW_GCC],
 dnl Small feature test for perl version. Assumes PerlCmd
 dnl contains path to perl binary
 dnl
 dnl Small feature test for perl version. Assumes PerlCmd
 dnl contains path to perl binary
 dnl
-AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
+AC_DEFUN([FPTOOLS_CHECK_PERL_VERSION],
 [$PerlCmd -v >conftest.out 2>&1
 [$PerlCmd -v >conftest.out 2>&1
-if grep "version 5" conftest.out >/dev/null 2>&1; then
-   :
-else
    if grep "v5.6" conftest.out >/dev/null 2>&1; then
       :
    else
    if grep "v5.6" conftest.out >/dev/null 2>&1; then
       :
    else
@@ -579,11 +612,10 @@ else
          if grep "version 6" conftest.out >/dev/null 2>&1; then
             :
          else
          if grep "version 6" conftest.out >/dev/null 2>&1; then
             :
          else
-            echo "Your version of perl probably won't work."
-         fi  
+            AC_MSG_ERROR([your version of perl probably won't work, try upgrading it.])
+         fi
       fi
    fi
       fi
    fi
-fi
 rm -fr conftest*
 ])
 
 rm -fr conftest*
 ])
 
@@ -618,6 +650,25 @@ AC_SUBST([FindCmd])[]dnl
 ])# FP_PROG_FIND
 
 
 ])# FP_PROG_FIND
 
 
+# FP_PROG_SORT
+# ------------
+# Find a Unix-like sort
+AC_DEFUN([FP_PROG_SORT],
+[AC_PATH_PROG([fp_prog_sort], [sort])
+echo conwip > conftest.txt
+$fp_prog_sort -f conftest.txt > conftest.out 2>&1
+if grep 'conwip' conftest.out > /dev/null 2>&1 ; then
+  # The goods
+  SortCmd="$fp_prog_sort"
+else
+  # Summink else..pick next one.
+  AC_MSG_WARN([$fp_prog_sort looks like a non-*nix sort, ignoring it])
+  FP_CHECK_PROG([SortCmd], [sort], [], [], [$fp_prog_sort])
+fi
+rm -f conftest.txt conftest.out
+AC_SUBST([SortCmd])[]dnl
+])# FP_PROG_SORT
+
 dnl
 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
 dnl values of the second argument to the result of running
 dnl
 dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
 dnl values of the second argument to the result of running
@@ -625,7 +676,7 @@ dnl the commands given by the third. It does not cache its
 dnl result, so it is suitable for checks which should be
 dnl run every time.
 dnl
 dnl result, so it is suitable for checks which should be
 dnl run every time.
 dnl
-AC_DEFUN(FPTOOLS_NOCACHE_CHECK,
+AC_DEFUN([FPTOOLS_NOCACHE_CHECK],
 [AC_MSG_CHECKING([$1])
  $3
  AC_MSG_RESULT([$][$2])
 [AC_MSG_CHECKING([$1])
  $3
  AC_MSG_RESULT([$][$2])
@@ -639,7 +690,7 @@ dnl
 dnl Test for version of installed ghc.  Uses $GHC.
 dnl [original version pinched from c2hs]
 dnl
 dnl Test for version of installed ghc.  Uses $GHC.
 dnl [original version pinched from c2hs]
 dnl
-AC_DEFUN(FPTOOLS_GHC_VERSION,
+AC_DEFUN([FPTOOLS_GHC_VERSION],
 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
 ["${WithGhc-ghc}" --version > conftestghc 2>&1
   cat conftestghc >&AS_MESSAGE_LOG_FD
 [FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
 ["${WithGhc-ghc}" --version > conftestghc 2>&1
   cat conftestghc >&AS_MESSAGE_LOG_FD
@@ -685,7 +736,7 @@ dnl ** Map an arithmetic C type to a Haskell type.
 dnl    Based on autconf's AC_CHECK_SIZEOF.
 
 dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION])
 dnl    Based on autconf's AC_CHECK_SIZEOF.
 
 dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION])
-AC_DEFUN(FPTOOLS_CHECK_HTYPE,
+AC_DEFUN([FPTOOLS_CHECK_HTYPE],
 [changequote(<<, >>)dnl
 dnl The name to #define.
 define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))dnl
 [changequote(<<, >>)dnl
 dnl The name to #define.
 define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))dnl
@@ -743,6 +794,12 @@ AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdio.h>
 # include <OpenGL/gl.h>
 #endif
 
 # include <OpenGL/gl.h>
 #endif
 
+#if defined(HAVE_AL_AL_H)
+# include <AL/al.h>
+#elif defined(HAVE_OPENAL_AL_H)
+# include <OpenAL/al.h>
+#endif
+
 #if defined(HAVE_AL_ALC_H)
 # include <AL/alc.h>
 #elif defined(HAVE_OPENAL_ALC_H)
 #if defined(HAVE_AL_ALC_H)
 # include <AL/alc.h>
 #elif defined(HAVE_OPENAL_ALC_H)
@@ -771,8 +828,8 @@ main() {
   exit(0);
 }]])],[AC_CV_NAME=`cat conftestval`],
 [ifelse([$2], , [AC_CV_NAME=NotReallyAType; AC_CV_NAME_supported=no], [AC_CV_NAME=$2])],
   exit(0);
 }]])],[AC_CV_NAME=`cat conftestval`],
 [ifelse([$2], , [AC_CV_NAME=NotReallyAType; AC_CV_NAME_supported=no], [AC_CV_NAME=$2])],
-[ifelse([$3], , [AC_CV_NAME=NotReallyATypeCross; AC_CV_NAME_supported=no], [AC_CV_NAME=$3])])]) dnl
-CPPFLAGS="$fp_check_htype_save_cppflags"
+[ifelse([$3], , [AC_CV_NAME=NotReallyATypeCross; AC_CV_NAME_supported=no], [AC_CV_NAME=$3])])
+CPPFLAGS="$fp_check_htype_save_cppflags"]) dnl
 if test "$AC_CV_NAME_supported" = yes; then
   AC_MSG_RESULT($AC_CV_NAME)
   AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME, [Define to Haskell type for $1])
 if test "$AC_CV_NAME_supported" = yes; then
   AC_MSG_RESULT($AC_CV_NAME)
   AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME, [Define to Haskell type for $1])