allow build settings to be overriden by adding mk/validate.mk
[ghc-hetmet.git] / aclocal.m4
index 62c5de7..f2762b3 100644 (file)
@@ -4,6 +4,33 @@
 # ensure we don't clash with any pre-supplied autoconf ones.
 
 
 # ensure we don't clash with any pre-supplied autoconf ones.
 
 
+# FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN
+# ----------------------------------
+# Little endian Arm on Linux with some ABIs has big endian word order
+# in doubles. Define FLOAT_WORDS_BIGENDIAN if this is the case.
+AC_DEFUN([FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN],
+  [AC_CACHE_CHECK([whether float word order is big endian], [fptools_cv_float_word_order_bigendian],
+    [AC_COMPILE_IFELSE(
+      [AC_LANG_PROGRAM(
+        [#include <endian.h>],
+        [#if defined(__FLOAT_WORD_ORDER) && __FLOAT_WORD_ORDER == BIG_ENDIAN
+             return 0;
+         #else
+             not float word order big endian
+         #endif]
+      )],
+      [fptools_cv_float_word_order_bigendian=yes],
+      [fptools_cv_float_word_order_bigendian=no])
+    ])
+  case $fptools_cv_float_word_order_bigendian in
+      yes)
+          AC_DEFINE([FLOAT_WORDS_BIGENDIAN], 1,
+          [Define to 1 if your processor stores words of floats with
+           the most significant byte first]) ;;
+  esac
+])
+
+
 # FP_EVAL_STDERR(COMMAND)
 # -----------------------
 # Eval COMMAND, save its stderr (without lines resulting from shell tracing)
 # FP_EVAL_STDERR(COMMAND)
 # -----------------------
 # Eval COMMAND, save its stderr (without lines resulting from shell tracing)
@@ -75,27 +102,6 @@ AC_SUBST(ContextDiffCmd, [$fp_cv_context_diff])
 ])# FP_PROG_CONTEXT_DIFF
 
 
 ])# FP_PROG_CONTEXT_DIFF
 
 
-# FP_DECL_ALTZONE
-# ---------------
-# Defines HAVE_DECL_ALTZONE to 1 if declared, 0 otherwise.
-#
-# Used by base package.
-AC_DEFUN([FP_DECL_ALTZONE],
-[AC_REQUIRE([AC_HEADER_TIME])dnl
-AC_CHECK_HEADERS([sys/time.h])
-AC_CHECK_DECLS([altzone], [], [],[#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-#  include <sys/time.h>
-# else
-#  include <time.h>
-# endif
-#endif])
-])# FP_DECL_ALTZONE
-
-
 # FP_COMPUTE_INT(EXPRESSION, VARIABLE, INCLUDES, IF-FAILS)
 # --------------------------------------------------------
 # Assign VARIABLE the value of the compile-time EXPRESSION using INCLUDES for
 # FP_COMPUTE_INT(EXPRESSION, VARIABLE, INCLUDES, IF-FAILS)
 # --------------------------------------------------------
 # Assign VARIABLE the value of the compile-time EXPRESSION using INCLUDES for
@@ -162,6 +168,10 @@ case $HostPlatform in
 alpha-dec-osf*) fptools_cv_leading_underscore=no;;
 *cygwin32) fptools_cv_leading_underscore=yes;;
 *mingw32) fptools_cv_leading_underscore=yes;;
 alpha-dec-osf*) fptools_cv_leading_underscore=no;;
 *cygwin32) fptools_cv_leading_underscore=yes;;
 *mingw32) fptools_cv_leading_underscore=yes;;
+
+    # HACK: Apple doesn't seem to provide nlist in the 64-bit-libraries
+x86_64-apple-darwin*) fptools_cv_leading_underscore=yes;;
+
 *) AC_RUN_IFELSE([AC_LANG_SOURCE([[#ifdef HAVE_NLIST_H
 #include <nlist.h>
 struct nlist xYzzY1[] = {{"xYzzY1", 0},{0}};
 *) AC_RUN_IFELSE([AC_LANG_SOURCE([[#ifdef HAVE_NLIST_H
 #include <nlist.h>
 struct nlist xYzzY1[] = {{"xYzzY1", 0},{0}};
@@ -256,8 +266,11 @@ else
 fi;
 changequote([, ])dnl
 ])
 fi;
 changequote([, ])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
+if test ! -f compiler/parser/Parser.hs || test ! -f compiler/main/ParsePkgConf.hs || test ! -f compiler/cmm/CmmParse.hs || test ! -f compiler/parser/ParserCore.hs
+then
+    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)
 ])
 HappyVersion=$fptools_cv_happy_version;
 AC_SUBST(HappyVersion)
 ])
@@ -276,8 +289,7 @@ dnl do without it for now.
 
 dnl
 dnl Check for Alex and version.  If we're building GHC, then we need
 
 dnl
 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 at least Alex version 2.0.1.
 dnl
 AC_DEFUN([FPTOOLS_ALEX],
 [
 dnl
 AC_DEFUN([FPTOOLS_ALEX],
 [
@@ -292,8 +304,11 @@ else
 fi;
 changequote([, ])dnl
 ])
 fi;
 changequote([, ])dnl
 ])
-FP_COMPARE_VERSIONS([$fptools_cv_alex_version],[-lt],[2.0],
-  [AC_MSG_ERROR([Alex version 2.0 or later is required to compile GHC.])])[]dnl
+if test ! -f compiler/cmm/CmmLex.hs || test ! -f compiler/parser/Lexer.hs
+then
+    FP_COMPARE_VERSIONS([$fptools_cv_alex_version],[-lt],[2.0.1],
+      [AC_MSG_ERROR([Alex version 2.0.1 or later is required to compile GHC.])])[]dnl
+fi
 AlexVersion=$fptools_cv_alex_version;
 AC_SUBST(AlexVersion)
 ])
 AlexVersion=$fptools_cv_alex_version;
 AC_SUBST(AlexVersion)
 ])
@@ -304,24 +319,30 @@ AC_SUBST(AlexVersion)
 # 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],
 # 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],
-[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])
+[
+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
 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
 AC_SUBST([LdCmd])
 ])# FP_PROG_LD
 
 AC_SUBST([LdCmd])
 ])# FP_PROG_LD
 
@@ -590,6 +611,15 @@ echo foo > conftest.txt
 $fp_prog_find conftest.txt -print > conftest.out 2>&1
 if grep '^conftest.txt$' conftest.out > /dev/null 2>&1 ; then
   # OK, looks like a real "find".
 $fp_prog_find conftest.txt -print > conftest.out 2>&1
 if grep '^conftest.txt$' conftest.out > /dev/null 2>&1 ; then
   # OK, looks like a real "find".
+  case $HostPlatform in
+    *mingw32)
+      if test x${OSTYPE} != xmsys
+      then
+           fp_prog_find="`cygpath --mixed ${fp_prog_find}`"
+        AC_MSG_NOTICE([normalized find command to $fp_prog_find])
+      fi ;;
+    *) ;;
+  esac
   FindCmd="$fp_prog_find"
 else
   # Found a poor WinDoze version of "find", ignore it.
   FindCmd="$fp_prog_find"
 else
   # Found a poor WinDoze version of "find", ignore it.
@@ -828,7 +858,7 @@ EOF
 # 'PATH'. Note that /usr/bin/fop is broken in SuSE 9.1 (unpatched), so try
 # /usr/share/fop/fop.sh in that case (or no 'fop'), too.
 AC_DEFUN([FP_PROG_FOP],
 # 'PATH'. Note that /usr/bin/fop is broken in SuSE 9.1 (unpatched), so try
 # /usr/share/fop/fop.sh in that case (or no 'fop'), too.
 AC_DEFUN([FP_PROG_FOP],
-[AC_PATH_PROGS([FopCmd1], [fop])
+[AC_PATH_PROGS([FopCmd1], [fop fop.sh])
 if test -n "$FopCmd1"; then
   AC_CACHE_CHECK([for $FopCmd1 usability], [fp_cv_fop_usability],
     [FP_GEN_FO
 if test -n "$FopCmd1"; then
   AC_CACHE_CHECK([for $FopCmd1 usability], [fp_cv_fop_usability],
     [FP_GEN_FO
@@ -939,10 +969,45 @@ 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])
 
    AC_DEFINE([HAVE_GCC_HAS_NO_UNIT_AT_A_TIME], [1], [Define to 1 if gcc supports -fno-unit-at-a-time.])
 fi])
 
+# FP_GCC_HAS_WRAPV
+# --------------------------
+AC_DEFUN([FP_GCC_HAS_WRAPV],
+[AC_REQUIRE([FP_HAVE_GCC])
+AC_CACHE_CHECK([whether gcc has -fwrapv], [fp_cv_gcc_has_wrapv],
+[FP_COMPARE_VERSIONS([$fp_gcc_version], [-ge], [3.4],
+  [fp_cv_gcc_has_wrapv=yes],
+  [fp_cv_gcc_has_wrapv=no])])
+if test "$fp_cv_gcc_has_wrapv" = "yes"; then
+   AC_DEFINE([HAVE_GCC_HAS_WRAPV], [1], [Define to 1 if gcc supports -fwrapv.])
+fi])
+
 # FP_SETUP_PROJECT_VERSION
 # ---------------------
 AC_DEFUN([FP_SETUP_PROJECT_VERSION],
 # FP_SETUP_PROJECT_VERSION
 # ---------------------
 AC_DEFUN([FP_SETUP_PROJECT_VERSION],
-[# Some renamings
+[
+if test "$RELEASE" = "NO"; then
+    AC_MSG_CHECKING([for GHC version date])
+    if test -f VERSION_DATE; then
+        PACKAGE_VERSION=${PACKAGE_VERSION}.`cat VERSION_DATE`
+        AC_MSG_RESULT(given $PACKAGE_VERSION)
+    elif test -d _darcs; then
+        changequote(, )dnl
+        ver_date=`darcs changes --quiet --no-summary --xml | head -500 | grep 'date=' | sed "s/^.*date='\([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\).*$/\1/g" | sort -n | tail -1`
+        if echo $ver_date | grep '^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$' 2>&1 >/dev/null; then true; else
+        changequote([, ])dnl
+                AC_MSG_ERROR([failed to detect version date: check that darcs is in your path])
+        fi
+        PACKAGE_VERSION=${PACKAGE_VERSION}.$ver_date
+        AC_MSG_RESULT(inferred $PACKAGE_VERSION)
+    elif test -f VERSION; then
+        PACKAGE_VERSION=`cat VERSION`
+        AC_MSG_RESULT(given $PACKAGE_VERSION)
+    else
+        AC_MSG_WARN([cannot determine snapshot version: no _darcs directory and no VERSION file])
+    fi
+fi
+
+# Some renamings
 AC_SUBST([ProjectName], [$PACKAGE_NAME])
 AC_SUBST([ProjectVersion], [$PACKAGE_VERSION])
 
 AC_SUBST([ProjectName], [$PACKAGE_NAME])
 AC_SUBST([ProjectVersion], [$PACKAGE_VERSION])
 
@@ -969,4 +1034,131 @@ ProjectPatchLevel=`echo $ProjectPatchLevel | sed 's/\.//'`
 AC_SUBST([ProjectPatchLevel])
 ])# FP_SETUP_PROJECT_VERSION
 
 AC_SUBST([ProjectPatchLevel])
 ])# FP_SETUP_PROJECT_VERSION
 
+AC_DEFUN([FP_CHECK_TIMER_CREATE],
+  [AC_CACHE_CHECK([for a working timer_create(CLOCK_REALTIME)], 
+    [fptools_cv_timer_create_works],
+    [AC_TRY_RUN([
+#ifdef HAVE_TIME_H
+#include <time.h>
+#endif
+#ifdef HAVE_SIGNAL_H
+#include <signal.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+int main(int argc, char *argv[])
+{
+#if HAVE_TIMER_CREATE && HAVE_TIMER_SETTIME
+    struct sigevent ev;
+    timer_t timer;
+    ev.sigev_notify = SIGEV_SIGNAL;
+    ev.sigev_signo  = SIGVTALRM;
+    if (timer_create(CLOCK_PROCESS_CPUTIME_ID, &ev, &timer) != 0) {
+       exit(1);
+    }
+#else
+    exit(1)
+#endif
+    exit(0);
+}
+     ],
+     [fptools_cv_timer_create_works=yes],
+     [fptools_cv_timer_create_works=no])
+  ])
+case $fptools_cv_timer_create_works in
+    yes) AC_DEFINE([USE_TIMER_CREATE], 1, 
+                   [Define to 1 if we can use timer_create(CLOCK_PROCESS_CPUTIME_ID,...)]);;
+esac
+])
+
+# FP_ARG_GMP
+# -------------
+AC_DEFUN([FP_ARG_GMP],
+[
+AC_ARG_WITH([gmp-includes],
+  [AC_HELP_STRING([--with-gmp-includes],
+    [directory containing gmp.h])],
+    [gmp_includes=$withval],
+    [gmp_includes=NONE])
+
+AC_ARG_WITH([gmp-libraries],
+  [AC_HELP_STRING([--with-gmp-libraries],
+    [directory containing gmp library])],
+    [gmp_libraries=$withval],
+    [gmp_libraries=NONE])
+])# FP_ARG_GMP
+
+AC_DEFUN([CHECK_GMP],
+[AC_REQUIRE([AC_PROG_CPP])
+AC_REQUIRE([AC_PROG_CC])
+])
+
+# --------------------------------------------------------------
+# Calculate absolute path to build tree
+# --------------------------------------------------------------
+
+AC_DEFUN([FP_FIND_ROOT],[
+AC_MSG_CHECKING(for path to top of build tree)
+
+hardtop=`pwd`
+
+dnl Remove common automounter nonsense
+dnl
+hardtop=`echo $hardtop | sed 's|^/tmp_mnt.*\(/local/.*\)$|\1|' | sed 's|^/tmp_mnt/|/|' | sed 's|^//\(.\)/|\1:/|' `
+
+dnl Find 'hardtop_plat', the native format for 'hardtop'
+dnl (i.e., right kind of \dnl slashes on a Win32 box, but with b-slashes
+dnl being escaped).
+dnl
+dnl Note OSTYPE: On Cygwin we need to use 'cygpath' to convert
+dnl              /cygdrive/c/foo to c:/foo but we must not do that if we
+dnl              aren't building using Cygwin (notably msys), because
+dnl              cygpath doesn't exist.  It seems that 'bash' sets
+dnl              OSTYPE to 'cygwin' or 'msys' respectively, but cygwin's
+dnl              'sh' does not.  So we hackily assume that if the shell
+dnl              hasn't set it to 'msys' then we must be in Cygwin.
+dnl              Sigh.
+dnl
+dnl              The Right Thing is probably to test $BuildPlatform
+dnl              instead, but we are sloppy about setting that correctly
+dnl              at the moment, so we just work around for now.
+dnl
+dnl              The quotes round "$(OSTYPE)" are essential, for the
+dnl              Cygwin-sh case where OSTYPE is not set.
+case $HostPlatform in
+  i386-unknown-mingw32 | i386-unknown-cygwin32)
+        if test "${OSTYPE}" != "msys"
+          then
+            # convert $hardtop to a path that mingw will understand too
+            cyghardtop=${hardtop}
+            hardtop=`cygpath -w ${cyghardtop} | sed -e 's@\\\\@/@g'`
+            hardtop_plat=`cygpath -w ${cyghardtop} | sed -e 's@\\\\@\\\\\\\\@g'`
+          else
+dnl OK, so we're in the MSYS case.  hardtop looks like /c/....
+dnl We want to make hardtop_plat into c:/...
+dnl Stop using [] for quotes temporarily, so we can use [] in the sed regexp
+changequote(, )dnl
+               hardtop_plat=`echo ${hardtop} | sed -e 's@^/\\([a-zA-Z]\\)/@\\1:/@g'`
+changequote([, ])dnl
+        fi
+        ;;
+  *)
+        hardtop_plat=${hardtop}
+        ;;
+esac
+AC_SUBST(hardtop)
+AC_SUBST(hardtop_plat)
+
+AC_MSG_RESULT(${hardtop})
+
+# We don't support building in directories with spaces.
+case "$hardtop" in
+  *' '*) AC_MSG_ERROR([
+   The build system does not support building in a directory containing
+   space characters.  Suggestion: move the build tree somewhere else.])
+ ;;
+esac
+])
+
 # LocalWords:  fi
 # LocalWords:  fi