Bug-fix for infix function definitions (parse/rename)
[ghc-hetmet.git] / aclocal.m4
index 1a45e4f..ebe182d 100644 (file)
@@ -27,7 +27,7 @@ AC_DEFUN([FP_EVAL_STDERR],
 # 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])],
@@ -220,7 +220,7 @@ AS_IF([test "$fp_num1" $2 "$fp_num2"], [$4], [$5])[]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,
@@ -244,7 +244,7 @@ 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
-AC_DEFUN(FPTOOLS_HAPPY,
+AC_DEFUN([FPTOOLS_HAPPY],
 [
 if test -d $srcdir/happy; then
    SrcTreeHappyCmd=$hardtop/happy/src/happy-inplace
@@ -263,7 +263,7 @@ 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'`" ;
@@ -273,8 +273,8 @@ fi;
 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)
@@ -284,7 +284,7 @@ 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
@@ -311,7 +311,7 @@ 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
-AC_DEFUN(FPTOOLS_ALEX,
+AC_DEFUN([FPTOOLS_ALEX],
 [
 if test -d $srcdir/alex; then
    SrcTreeAlexCmd=$hardtop/alex/src/alex-inplace
@@ -330,7 +330,7 @@ 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'`" ;
@@ -363,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
+           # 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])
@@ -378,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
-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
@@ -484,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_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
+elif echo $TargetPlatform | grep "^.*-apple-darwin$"  > /dev/null 2> /dev/null; 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
@@ -530,7 +541,7 @@ AC_SUBST([ArSupportsInput])
 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;
@@ -552,18 +563,25 @@ rm -f conftest
 # 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
-  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],
@@ -583,11 +601,8 @@ AC_DEFUN([FP_MINGW_GCC],
 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
-if grep "version 5" conftest.out >/dev/null 2>&1; then
-   :
-else
    if grep "v5.6" conftest.out >/dev/null 2>&1; then
       :
    else
@@ -597,11 +612,10 @@ 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
 rm -fr conftest*
 ])
 
@@ -636,6 +650,25 @@ AC_SUBST([FindCmd])[]dnl
 ])# 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
@@ -643,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
-AC_DEFUN(FPTOOLS_NOCACHE_CHECK,
+AC_DEFUN([FPTOOLS_NOCACHE_CHECK],
 [AC_MSG_CHECKING([$1])
  $3
  AC_MSG_RESULT([$][$2])
@@ -657,7 +690,7 @@ 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
@@ -703,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])
-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
@@ -761,6 +794,12 @@ AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdio.h>
 # 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)
@@ -789,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])],
-[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])
@@ -1016,4 +1055,77 @@ else
   GhcPkgCmd=$fp_cv_matching_ghc_pkg
 fi])# FP_PROG_GHC_PKG
 
+
+# FP_GHC_HAS_READLINE
+# -------------------
+AC_DEFUN([FP_GHC_HAS_READLINE],
+[AC_REQUIRE([FP_PROG_GHC_PKG])
+AC_CACHE_CHECK([whether ghc has readline package], [fp_cv_ghc_has_readline],
+[if "${GhcPkgCmd-ghc-pkg}" --show-package readline >/dev/null 2>&1; then
+  fp_cv_ghc_has_readline=yes
+else
+  fp_cv_ghc_has_readline=no
+ fi])
+AC_SUBST([GhcHasReadline], [`echo $fp_cv_ghc_has_readline | sed 'y/yesno/YESNO/'`])
+])# FP_GHC_HAS_READLINE
+
+
+# FP_GCC_NEEDS_NO_OMIT_LFPTR
+# --------------------------
+# Some OSs (Mandrake Linux, in particular) configure GCC with
+# -momit-leaf-frame-pointer on by default. If this is the case, we need to turn
+# it off for mangling to work. The test is currently a bit crude, using only the
+# version number of gcc. Defines HAVE_GCC_MNO_OMIT_LFPTR.
+AC_DEFUN([FP_GCC_NEEDS_NO_OMIT_LFPTR],
+[AC_REQUIRE([FP_HAVE_GCC])
+AC_CACHE_CHECK([whether gcc needs -mno-omit-leaf-frame-pointer], [fp_cv_gcc_needs_no_omit_lfptr],
+[FP_COMPARE_VERSIONS([$fp_gcc_version], [-ge], [3.2],
+  [fp_cv_gcc_needs_no_omit_lfptr=yes],
+  [fp_cv_gcc_needs_no_omit_lfptr=no])])
+if test "$fp_cv_gcc_needs_no_omit_lfptr" = "yes"; then
+   AC_DEFINE([HAVE_GCC_MNO_OMIT_LFPTR], [1], [Define to 1 if gcc supports -mno-omit-leaf-frame-pointer.])
+fi])# FP_GCC_NEEDS_NO_OMIT_LFPTR
+
+# FP_GCC_HAS_NO_UNIT_AT_A_TIME
+# --------------------------
+AC_DEFUN([FP_GCC_HAS_NO_UNIT_AT_A_TIME],
+[AC_REQUIRE([FP_HAVE_GCC])
+AC_CACHE_CHECK([whether gcc has -fno-unit-at-a-time], [fp_cv_gcc_has_no_unit_at_a_time],
+[FP_COMPARE_VERSIONS([$fp_gcc_version], [-ge], [3.4],
+  [fp_cv_gcc_has_no_unit_at_a_time=yes],
+  [fp_cv_gcc_has_no_unit_at_a_time=no])])
+if test "$fp_cv_gcc_has_no_unit_at_a_time" = "yes"; then
+   AC_DEFINE([HAVE_GCC_HAS_NO_UNIT_AT_A_TIME], [1], [Define to 1 if gcc supports -fno-unit-at-a-time.])
+fi])
+
+# FP_SETUP_PROJECT_VERSION
+# ---------------------
+AC_DEFUN([FP_SETUP_PROJECT_VERSION],
+[# Some renamings
+AC_SUBST([ProjectName], [$PACKAGE_NAME])
+AC_SUBST([ProjectVersion], [$PACKAGE_VERSION])
+
+# Split PACKAGE_VERSION into (possibly empty) parts
+VERSION_MAJOR=`echo $PACKAGE_VERSION | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\1'/`
+VERSION_TMP=`echo $PACKAGE_VERSION | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\3'/`
+VERSION_MINOR=`echo $VERSION_TMP | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\1'/`
+ProjectPatchLevel=`echo $VERSION_TMP | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\3'/`
+
+# Calculate project version as an integer, using 2 digits for minor version
+case $VERSION_MINOR in
+  ?) ProjectVersionInt=${VERSION_MAJOR}0${VERSION_MINOR} ;;
+  ??) ProjectVersionInt=${VERSION_MAJOR}${VERSION_MINOR} ;;
+  *) AC_MSG_ERROR([bad minor version in $PACKAGE_VERSION]) ;;
+esac
+AC_SUBST([ProjectVersionInt])
+
+# The project patchlevel is zero unless stated otherwise
+test -z "$ProjectPatchLevel" && ProjectPatchLevel=0
+
+# Remove dots from the patch level; this allows us to have versions like 6.4.1.20050508
+ProjectPatchLevel=`echo $ProjectPatchLevel | sed 's/\.//'`
+
+AC_SUBST([ProjectPatchLevel])
+])# FP_SETUP_PROJECT_VERSION
+
 # LocalWords:  fi