Cope with libraries in libraries/foo/bar rather than just libraries/foo
[ghc-hetmet.git] / aclocal.m4
index db0904b..0432ed3 100644 (file)
@@ -1,3 +1,15 @@
+    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);
+}
 # Extra autoconf macros for the Glasgow fptools
 #
 # To be a good autoconf citizen, names of local macros have prefixed with FP_ to
@@ -922,18 +934,18 @@ else
 fi])# FP_PROG_GHC_PKG
 
 
-# FP_GHC_HAS_READLINE
+# FP_GHC_HAS_EDITLINE
 # -------------------
-AC_DEFUN([FP_GHC_HAS_READLINE],
+AC_DEFUN([FP_GHC_HAS_EDITLINE],
 [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
+AC_CACHE_CHECK([whether ghc has editline package], [fp_cv_ghc_has_editline],
+[if "${GhcPkgCmd-ghc-pkg}" --show-package editline >/dev/null 2>&1; then
+  fp_cv_ghc_has_editline=yes
 else
-  fp_cv_ghc_has_readline=no
+  fp_cv_ghc_has_editline=no
  fi])
-AC_SUBST([GhcHasReadline], [`echo $fp_cv_ghc_has_readline | sed 'y/yesno/YESNO/'`])
-])# FP_GHC_HAS_READLINE
+AC_SUBST([GhcHasEditline], [`echo $fp_cv_ghc_has_editline | sed 'y/yesno/YESNO/'`])
+])# FP_GHC_HAS_EDITLINE
 
 
 # FP_GCC_EXTRA_FLAGS
@@ -1031,10 +1043,19 @@ ProjectPatchLevel=`echo $ProjectPatchLevel | sed 's/\.//'`
 AC_SUBST([ProjectPatchLevel])
 ])# FP_SETUP_PROJECT_VERSION
 
+
+# Check for a working timer_create().  We need a pretty detailed check
+# here, because there exist partially-working implementations of
+# timer_create() in certain versions of Linux (see bug #1933).
+#
 AC_DEFUN([FP_CHECK_TIMER_CREATE],
   [AC_CACHE_CHECK([for a working timer_create(CLOCK_REALTIME)], 
     [fptools_cv_timer_create_works],
     [AC_TRY_RUN([
+#include <stdio.h>
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
 #ifdef HAVE_TIME_H
 #include <time.h>
 #endif
@@ -1044,19 +1065,103 @@ AC_DEFUN([FP_CHECK_TIMER_CREATE],
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
+
+static volatile int tock = 0;
+static void handler(int i)
+{
+   tock = 1;
+}
+
+static void timeout(int i)
+{
+  // timer_settime() has been known to hang, so just in case
+  // we install a 1-second timeout (see #2257)
+  exit(99);
+}
+
 int main(int argc, char *argv[])
 {
-#if HAVE_TIMER_CREATE && HAVE_TIMER_SETTIME
+
     struct sigevent ev;
     timer_t timer;
+    struct itimerspec it;
+    struct sigaction action;
+    int m,n,count = 0;
+
     ev.sigev_notify = SIGEV_SIGNAL;
     ev.sigev_signo  = SIGVTALRM;
+
+    action.sa_handler = handler;
+    action.sa_flags = 0;
+    sigemptyset(&action.sa_mask);
+    if (sigaction(SIGVTALRM, &action, NULL) == -1) {
+        fprintf(stderr,"SIGVTALRM problem\n");
+        exit(3);
+    }
+
+    action.sa_handler = timeout;
+    action.sa_flags = 0;
+    sigemptyset(&action.sa_mask);
+    if (sigaction(SIGALRM, &action, NULL) == -1) {
+      fprintf(stderr,"SIGALRM problem\n");
+      exit(3);
+    }
+    alarm(1);
+
     if (timer_create(CLOCK_PROCESS_CPUTIME_ID, &ev, &timer) != 0) {
+        fprintf(stderr,"No CLOCK_PROCESS_CPUTIME_ID timer\n");
        exit(1);
     }
-#else
-    exit(1)
-#endif
+
+    it.it_value.tv_sec = 0;
+    it.it_value.tv_nsec = 1;
+    it.it_interval = it.it_value;
+    if (timer_settime(timer, 0, &it, NULL) != 0) {
+        fprintf(stderr,"settime problem\n");
+        exit(4);
+    }
+
+    tock = 0;
+
+    for(n = 3; n < 20000; n++){
+        for(m = 2; m <= n/2; m++){
+            if (!(n%m)) count++;
+            if (tock) goto out;
+        }
+    }
+out:
+
+    if (!tock) {
+        fprintf(stderr,"no CLOCK_PROCESS_CPUTIME_ID signal\n");
+        exit(5);
+    }
+
+    timer_delete(timer);
+
+    if (timer_create(CLOCK_REALTIME, &ev, &timer) != 0) {
+        fprintf(stderr,"No CLOCK_REALTIME timer\n");
+        exit(2);
+    }
+
+    it.it_value.tv_sec = 0;
+    it.it_value.tv_nsec = 1000000;
+    it.it_interval = it.it_value;
+    if (timer_settime(timer, 0, &it, NULL) != 0) {
+        fprintf(stderr,"settime problem\n");
+        exit(4);
+    }
+
+    tock = 0;
+
+    usleep(300);
+
+    if (!tock) {
+        fprintf(stderr,"no CLOCK_REALTIME signal\n");
+        exit(5);
+    }
+
+    timer_delete(timer);
+
     exit(0);
 }
      ],
@@ -1091,6 +1196,35 @@ AC_DEFUN([CHECK_GMP],
 AC_REQUIRE([AC_PROG_CC])
 ])
 
+# FP_CHECK_MACOSX_DEPLOYMENT_TARGET
+# ---------------------------------
+AC_DEFUN([FP_CHECK_MACOSX_DEPLOYMENT_TARGET],
+[
+if test "x$TargetOS_CPP-$TargetVendor_CPP" = "xdarwin-apple"; then
+  AC_MSG_CHECKING([Mac OS X deployment target])
+  case $FP_MACOSX_DEPLOYMENT_TARGET in
+    none)  ;;
+    10.4)  MACOSX_DEPLOYMENT_VERSION=10.4
+          MACOSX_DEPLOYMENT_SDK=/Developer/SDKs/MacOSX10.4u.sdk
+          ;;
+    10.4u) MACOSX_DEPLOYMENT_VERSION=10.4
+          MACOSX_DEPLOYMENT_SDK=/Developer/SDKs/MacOSX10.4u.sdk
+          ;;
+    *)     MACOSX_DEPLOYMENT_VERSION=$FP_MACOSX_DEPLOYMENT_TARGET
+          MACOSX_DEPLOYMENT_SDK=/Developer/SDKs/MacOSX${FP_MACOSX_DEPLOYMENT_TARGET}.sdk
+          ;;
+  esac
+  if test "x$FP_MACOSX_DEPLOYMENT_TARGET" = "xnone"; then
+    AC_MSG_RESULT(none)
+  else
+    if test ! -d $MACOSX_DEPLOYMENT_SDK; then
+      AC_MSG_ERROR([Unknown deployment target $FP_MACOSX_DEPLOYMENT_TARGET])
+    fi
+    AC_MSG_RESULT([${MACOSX_DEPLOYMENT_VERSION} (${MACOSX_DEPLOYMENT_SDK})])
+  fi
+fi
+])
+
 # --------------------------------------------------------------
 # Calculate absolute path to build tree
 # --------------------------------------------------------------
@@ -1121,10 +1255,7 @@ dnl Remove common automounter nonsense
 dnl
 hardtop=`echo $hardtop | sed 's|^/tmp_mnt.*\(/local/.*\)$|\1|' | sed 's|^/tmp_mnt/|/|'`
 
-hardtop_plat="$hardtop"
-
 AC_SUBST(hardtop)
-AC_SUBST(hardtop_plat)
 
 AC_MSG_RESULT(${hardtop})