diff --git a/configure.in b/configure.in
index 9d55d26..ada91ea 100644
--- a/configure.in
+++ b/configure.in
@@ -8,9 +8,9 @@
 ##------------------------------------------------------------##
 
 # Process this file with autoconf to produce a configure script.
-AC_INIT(Valgrind, 3.7.0.SVN, valgrind-users@lists.sourceforge.net)
+AC_INIT([Valgrind],[3.7.0.SVN],[valgrind-users@lists.sourceforge.net])
 AC_CONFIG_SRCDIR(coregrind/m_main.c)
-AM_CONFIG_HEADER(config.h)
+AC_CONFIG_HEADERS([config.h])
 AM_INIT_AUTOMAKE([foreign])
 
 AM_MAINTAINER_MODE
@@ -325,10 +325,9 @@
         AC_MSG_CHECKING([for 32 bit build support])
         safe_CFLAGS=$CFLAGS
         CFLAGS="-m32"
-        AC_TRY_LINK(, [
+        AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
           return 0;
-        ],
-        [
+        ]])], [
         AC_MSG_RESULT([yes])
         ], [
         vg_cv_only64bit="yes"
@@ -872,15 +871,13 @@
 
 AC_MSG_CHECKING([for CLOCK_MONOTONIC])
 
-AC_TRY_COMPILE(
-[
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
 #include <time.h>
-], [
+]], [[
   struct timespec t;
   clock_gettime(CLOCK_MONOTONIC, &t);
   return 0;
-],
-[
+]])], [
 AC_MSG_RESULT([yes])
 AC_DEFINE([HAVE_CLOCK_MONOTONIC], 1,
           [Define to 1 if you have the `CLOCK_MONOTONIC' constant.])
@@ -893,14 +890,12 @@
 
 AC_MSG_CHECKING([for pthread_rwlock_t])
 
-AC_TRY_COMPILE(
-[
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
 #define _GNU_SOURCE
 #include <pthread.h>
-], [
+]], [[
   pthread_rwlock_t rwl;
-],
-[
+]])], [
 AC_MSG_RESULT([yes])
 AC_DEFINE([HAVE_PTHREAD_RWLOCK_T], 1,
           [Define to 1 if you have the `pthread_rwlock_t' type.])
@@ -913,14 +908,12 @@
 
 AC_MSG_CHECKING([for PTHREAD_MUTEX_ADAPTIVE_NP])
 
-AC_TRY_COMPILE(
-[
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
 #define _GNU_SOURCE
 #include <pthread.h>
-], [
+]], [[
   return (PTHREAD_MUTEX_ADAPTIVE_NP);
-],
-[
+]])], [
 AC_MSG_RESULT([yes])
 AC_DEFINE([HAVE_PTHREAD_MUTEX_ADAPTIVE_NP], 1,
           [Define to 1 if you have the `PTHREAD_MUTEX_ADAPTIVE_NP' constant.])
@@ -933,14 +926,12 @@
 
 AC_MSG_CHECKING([for PTHREAD_MUTEX_ERRORCHECK_NP])
 
-AC_TRY_COMPILE(
-[
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
 #define _GNU_SOURCE
 #include <pthread.h>
-], [
+]], [[
   return (PTHREAD_MUTEX_ERRORCHECK_NP);
-],
-[
+]])], [
 AC_MSG_RESULT([yes])
 AC_DEFINE([HAVE_PTHREAD_MUTEX_ERRORCHECK_NP], 1,
           [Define to 1 if you have the `PTHREAD_MUTEX_ERRORCHECK_NP' constant.])
@@ -953,14 +944,12 @@
 
 AC_MSG_CHECKING([for PTHREAD_MUTEX_RECURSIVE_NP])
 
-AC_TRY_COMPILE(
-[
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
 #define _GNU_SOURCE
 #include <pthread.h>
-], [
+]], [[
   return (PTHREAD_MUTEX_RECURSIVE_NP);
-],
-[
+]])], [
 AC_MSG_RESULT([yes])
 AC_DEFINE([HAVE_PTHREAD_MUTEX_RECURSIVE_NP], 1,
           [Define to 1 if you have the `PTHREAD_MUTEX_RECURSIVE_NP' constant.])
@@ -973,15 +962,13 @@
 
 AC_MSG_CHECKING([for PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP])
 
-AC_TRY_COMPILE(
-[
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
 #define _GNU_SOURCE
 #include <pthread.h>
-], [
+]], [[
   pthread_mutex_t m = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
   return 0;
-],
-[
+]])], [
 AC_MSG_RESULT([yes])
 AC_DEFINE([HAVE_PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP], 1,
           [Define to 1 if you have the `PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP' constant.])
@@ -1020,13 +1007,11 @@
 safe_CFLAGS=$CFLAGS
 CFLAGS="-maltivec"
 
-AC_TRY_COMPILE(
-[
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
 #include <altivec.h>
-], [
+]], [[
   vector unsigned int v;
-],
-[
+]])], [
 ac_have_altivec=yes
 AC_MSG_RESULT([yes])
 AC_DEFINE([HAS_ALTIVEC], 1,
@@ -1053,14 +1038,12 @@
 safe_CFLAGS=$CFLAGS
 CFLAGS="-mvsx"
 
-AC_TRY_COMPILE(
-[
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
 #include <altivec.h>
-], [
+]], [[
   vector unsigned int v;
   __asm__ __volatile__("xsmaddadp 32, 32, 33" ::: "memory","cc");
-],
-[
+]])], [
 ac_have_vsx=yes
 AC_MSG_RESULT([yes])
 ], [
@@ -1077,12 +1060,11 @@
 
 safe_CFLAGS=$CFLAGS
 CFLAGS="-lpthread"
-AC_TRY_LINK(
-[
+AC_LINK_IFELSE([AC_LANG_PROGRAM([[
 extern int pthread_create_glibc_2_0(void*, const void*,
                                     void *(*)(void*), void*);
 __asm__(".symver pthread_create_glibc_2_0, pthread_create@GLIBC_2.0");
-], [
+]], [[
 #ifdef __powerpc__
 /*
  * Apparently on PowerPC linking this program succeeds and generates an
@@ -1093,8 +1075,7 @@
   pthread_create_glibc_2_0(0, 0, 0, 0);
 #endif
   return 0;
-],
-[
+]])], [
 ac_have_pthread_create_glibc_2_0=yes
 AC_MSG_RESULT([yes])
 AC_DEFINE([HAVE_PTHREAD_CREATE_GLIBC_2_0], 1,
@@ -1112,18 +1093,16 @@
 # Check for eventfd_t, eventfd() and eventfd_read()
 AC_MSG_CHECKING([for eventfd()])
 
-AC_TRY_LINK(
-[
+AC_LINK_IFELSE([AC_LANG_PROGRAM([[
 #include <sys/eventfd.h>
-], [
+]], [[
   eventfd_t ev;
   int fd;
 
   fd = eventfd(5, 0);
   eventfd_read(fd, &ev);
   return 0;
-],
-[
+]])], [
 AC_MSG_RESULT([yes])
 AC_DEFINE([HAVE_EVENTFD], 1,
           [Define to 1 if you have the `eventfd' function.])
@@ -1144,10 +1123,9 @@
 safe_CFLAGS=$CFLAGS
 CFLAGS="-m32"
 
-AC_TRY_COMPILE(, [
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
   return 0;
-],
-[
+]])], [
 FLAG_M32="-m32"
 AC_MSG_RESULT([yes])
 ], [
@@ -1165,10 +1143,9 @@
 safe_CFLAGS=$CFLAGS
 CFLAGS="-m64"
 
-AC_TRY_COMPILE(, [
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
   return 0;
-],
-[
+]])], [
 FLAG_M64="-m64"
 AC_MSG_RESULT([yes])
 ], [
@@ -1186,10 +1163,9 @@
 safe_CFLAGS=$CFLAGS
 CFLAGS="-mmmx"
 
-AC_TRY_COMPILE(, [
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
   return 0;
-],
-[
+]])], [
 FLAG_MMMX="-mmmx"
 AC_MSG_RESULT([yes])
 ], [
@@ -1207,10 +1183,9 @@
 safe_CFLAGS=$CFLAGS
 CFLAGS="-msse"
 
-AC_TRY_COMPILE(, [
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
   return 0;
-],
-[
+]])], [
 FLAG_MSSE="-msse"
 AC_MSG_RESULT([yes])
 ], [
@@ -1228,10 +1203,9 @@
 safe_CFLAGS=$CFLAGS
 CFLAGS="-mpreferred-stack-boundary=2"
 
-AC_TRY_COMPILE(, [
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
   return 0;
-],
-[
+]])], [
 PREFERRED_STACK_BOUNDARY="-mpreferred-stack-boundary=2"
 AC_MSG_RESULT([yes])
 ], [
@@ -1249,10 +1223,9 @@
 safe_CFLAGS=$CFLAGS
 CFLAGS="-Wno-pointer-sign"
 
-AC_TRY_COMPILE(, [
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
   return 0;
-],
-[
+]])], [
 no_pointer_sign=yes
 AC_MSG_RESULT([yes])
 ], [
@@ -1273,16 +1246,12 @@
 safe_CFLAGS=$CFLAGS
 CFLAGS="-Wno-empty-body"
 
-AC_TRY_COMPILE(
-[ ],
-[
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ ]], [[
   return 0;
-],
-[
+]])], [
 AC_SUBST([FLAG_W_NO_EMPTY_BODY], [-Wno-empty-body])
 AC_MSG_RESULT([yes])
-],
-[
+], [
 AC_SUBST([FLAG_W_NO_EMPTY_BODY], [])
 AC_MSG_RESULT([no])
 ])
@@ -1296,16 +1265,12 @@
 safe_CFLAGS=$CFLAGS
 CFLAGS="-Wno-format-zero-length"
 
-AC_TRY_COMPILE(
-[ ],
-[
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ ]], [[
   return 0;
-],
-[
+]])], [
 AC_SUBST([FLAG_W_NO_FORMAT_ZERO_LENGTH], [-Wno-format-zero-length])
 AC_MSG_RESULT([yes])
-],
-[
+], [
 AC_SUBST([FLAG_W_NO_FORMAT_ZERO_LENGTH], [])
 AC_MSG_RESULT([no])
 ])
@@ -1319,16 +1284,12 @@
 safe_CFLAGS=$CFLAGS
 CFLAGS="-Wno-nonnull"
 
-AC_TRY_COMPILE(
-[ ],
-[
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ ]], [[
   return 0;
-],
-[
+]])], [
 AC_SUBST([FLAG_W_NO_NONNULL], [-Wno-nonnull])
 AC_MSG_RESULT([yes])
-],
-[
+], [
 AC_SUBST([FLAG_W_NO_NONNULL], [])
 AC_MSG_RESULT([no])
 ])
@@ -1342,16 +1303,12 @@
 safe_CFLAGS=$CFLAGS
 CFLAGS="-Wno-overflow"
 
-AC_TRY_COMPILE(
-[ ],
-[
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ ]], [[
   return 0;
-],
-[
+]])], [
 AC_SUBST([FLAG_W_NO_OVERFLOW], [-Wno-overflow])
 AC_MSG_RESULT([yes])
-],
-[
+], [
 AC_SUBST([FLAG_W_NO_OVERFLOW], [])
 AC_MSG_RESULT([no])
 ])
@@ -1365,16 +1322,12 @@
 safe_CFLAGS=$CFLAGS
 CFLAGS="-Wno-uninitialized"
 
-AC_TRY_COMPILE(
-[ ],
-[
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ ]], [[
   return 0;
-],
-[
+]])], [
 AC_SUBST([FLAG_W_NO_UNINITIALIZED], [-Wno-uninitialized])
 AC_MSG_RESULT([yes])
-],
-[
+], [
 AC_SUBST([FLAG_W_NO_UNINITIALIZED], [])
 AC_MSG_RESULT([no])
 ])
@@ -1388,22 +1341,16 @@
 safe_CFLAGS=$CFLAGS
 CFLAGS="-Wextra"
 
-AC_TRY_COMPILE(
-[ ],
-[
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ ]], [[
   return 0;
-],
-[
+]])], [
 AC_SUBST([FLAG_W_EXTRA], [-Wextra])
 AC_MSG_RESULT([-Wextra])
 ], [
   CFLAGS="-W"
-  AC_TRY_COMPILE(
-  [ ],
-  [
+  AC_COMPILE_IFELSE(AC_LANG_PROGRAM([[ ]], [[
     return 0;
-  ],
-  [
+  ]]), [
   AC_SUBST([FLAG_W_EXTRA], [-W])
   AC_MSG_RESULT([-W])
   ], [
@@ -1420,10 +1367,9 @@
 safe_CFLAGS=$CFLAGS
 CFLAGS="-fno-stack-protector"
 
-AC_TRY_COMPILE(, [
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
   return 0;
-],
-[
+]])], [
 no_stack_protector=yes
 FLAG_FNO_STACK_PROTECTOR="-fno-stack-protector"
 AC_MSG_RESULT([yes])
@@ -1448,12 +1394,9 @@
 safe_CFLAGS=$CFLAGS
 CFLAGS="--param inline-unit-growth=900"
 
-AC_TRY_COMPILE(
-[ ],
-[
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ ]], [[
   return 0;
-],
-[
+]])], [
 AC_SUBST([FLAG_UNLIMITED_INLINE_UNIT_GROWTH],
          ["--param inline-unit-growth=900"])
 AC_MSG_RESULT([yes])
@@ -1489,11 +1432,10 @@
 # does the ppc assembler support "mtocrf" et al?
 AC_MSG_CHECKING([if ppc32/64 as supports mtocrf/mfocrf])
 
-AC_TRY_COMPILE(, [
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
 __asm__ __volatile__("mtocrf 4,0");
 __asm__ __volatile__("mfocrf 0,4");
-],
-[
+]])], [
 ac_have_as_ppc_mftocrf=yes
 AC_MSG_RESULT([yes])
 ], [
@@ -1512,12 +1454,11 @@
 # automake-level symbol (BUILD_SSE3_TESTS), used in test Makefile.am's
 AC_MSG_CHECKING([if x86/amd64 assembler speaks SSE3])
 
-AC_TRY_COMPILE(, [
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
   do { long long int x; 
      __asm__ __volatile__("fisttpq (%0)" : :"r"(&x) ); } 
   while (0)
-],
-[
+]])], [
 ac_have_as_sse3=yes
 AC_MSG_RESULT([yes])
 ], [
@@ -1533,13 +1474,12 @@
 # automake-level symbol (BUILD_SSSE3_TESTS), used in test Makefile.am's
 AC_MSG_CHECKING([if x86/amd64 assembler speaks SSSE3])
 
-AC_TRY_COMPILE(, [
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
   do { long long int x; 
    __asm__ __volatile__(
       "pabsb (%0),%%xmm7" : : "r"(&x) : "xmm7" ); }
   while (0)
-],
-[
+]])], [
 ac_have_as_ssse3=yes
 AC_MSG_RESULT([yes])
 ], [
@@ -1554,13 +1494,12 @@
 # Note, this doesn't generate a C-level symbol.  It generates a
 # automake-level symbol (BUILD_PCLMULQDQ_TESTS), used in test Makefile.am's
 AC_MSG_CHECKING([if x86/amd64 assembler supports 'pclmulqdq'])
-AC_TRY_COMPILE(, [
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
   do {
    __asm__ __volatile__(
       "pclmulqdq \$17,%%xmm6,%%xmm7" : : : "xmm6", "xmm7" ); }
   while (0)
-],
-[
+]])], [
 ac_have_as_pclmulqdq=yes
 AC_MSG_RESULT([yes])
 ], [
@@ -1576,12 +1515,11 @@
 # automake-level symbol (BUILD_LZCNT_TESTS), used in test Makefile.am's
 AC_MSG_CHECKING([if x86/amd64 assembler supports 'lzcnt'])
 
-AC_TRY_COMPILE([], [
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
   do { 		 
       __asm__ __volatile__("lzcnt %rax,%rax");
   } while (0)
-],
-[
+]])], [
   ac_have_as_lzcnt=yes
   AC_MSG_RESULT([yes])
 ], [
@@ -1597,13 +1535,12 @@
 # automake-level symbol (BUILD_SSE42_TESTS), used in test Makefile.am's
 AC_MSG_CHECKING([if x86/amd64 assembler speaks SSE4.2])
 
-AC_TRY_COMPILE(, [
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
   do { long long int x; 
    __asm__ __volatile__(
       "crc32q %%r15,%%r15" : : : "r15" ); }
   while (0)
-],
-[
+]])], [
 ac_have_as_sse42=yes
 AC_MSG_RESULT([yes])
 ], [
@@ -1669,12 +1606,11 @@
 # Verify whether the <linux/futex.h> header is usable.
 AC_MSG_CHECKING([if <linux/futex.h> is usable])
 
-AC_TRY_COMPILE([
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
 #include <linux/futex.h>
-], [
+]], [[
   return FUTEX_WAIT;
-],
-[
+]])], [
 AC_DEFINE([HAVE_USABLE_LINUX_FUTEX_H], 1,
           [Define to 1 if you have a usable <linux/futex.h> header file.])
 AC_MSG_RESULT([yes])
@@ -1696,7 +1632,6 @@
 #----------------------------------------------------------------------------
 AC_FUNC_MEMCMP
 AC_FUNC_MMAP
-AC_TYPE_SIGNAL
 
 AC_CHECK_LIB([pthread], [pthread_create])
 AC_CHECK_LIB([rt], [clock_gettime])
@@ -1786,14 +1721,14 @@
 saved_CFLAGS=$CFLAGS
 CC=$MPI_CC
 CFLAGS=$mflag_primary
-AC_TRY_LINK([
+AC_LINK_IFELSE([AC_LANG_PROGRAM([[
 #include <mpi.h>
 #include <stdio.h>
-],[
+]], [[
   int r = MPI_Init(NULL,NULL);
   r |= MPI_Type_get_contents( MPI_INT, 0,0,0, NULL,NULL,NULL );
   return r; 
-], [
+]])], [
 ac_have_mpi2_pri=yes
 AC_MSG_RESULT([yes, $MPI_CC])
 ], [
@@ -1818,14 +1753,14 @@
   CC=$MPI_CC
 fi
 CFLAGS=$mflag_secondary
-AC_TRY_LINK([
+AC_LINK_IFELSE([AC_LANG_PROGRAM([[
 #include <mpi.h>
 #include <stdio.h>
-],[
+]], [[
   int r = MPI_Init(NULL,NULL);
   r |= MPI_Type_get_contents( MPI_INT, 0,0,0, NULL,NULL,NULL );
   return r; 
-], [
+]])], [
 ac_have_mpi2_sec=yes
 AC_MSG_RESULT([yes, $MPI_CC])
 ], [
@@ -1925,18 +1860,15 @@
 safe_CFLAGS=$CFLAGS
 CFLAGS="$mflag_primary"
 
-AC_TRY_LINK(,
-[
+AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
   int variable = 1;
   return (__sync_bool_compare_and_swap(&variable, 1, 2)
           && __sync_add_and_fetch(&variable, 1) ? 1 : 0)
-],
-[
+]])], [
   ac_have_builtin_atomic=yes
   AC_MSG_RESULT([yes])
   AC_DEFINE(HAVE_BUILTIN_ATOMIC, 1, [Define to 1 if gcc supports __sync_bool_compare_and_swap() and __sync_add_and_fetch()])
-],
-[
+], [
   ac_have_builtin_atomic=no
   AC_MSG_RESULT([no])
 ])
@@ -1952,18 +1884,15 @@
 CXXFLAGS="$mflag_primary"
 
 AC_LANG_PUSH(C++)
-AC_TRY_LINK(,
-[
+AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
   int variable = 1;
   return (__sync_bool_compare_and_swap(&variable, 1, 2)
           && __sync_add_and_fetch(&variable, 1) ? 1 : 0)
-],
-[
+]])], [
   ac_have_builtin_atomic_cxx=yes
   AC_MSG_RESULT([yes])
   AC_DEFINE(HAVE_BUILTIN_ATOMIC_CXX, 1, [Define to 1 if g++ supports __sync_bool_compare_and_swap() and __sync_add_and_fetch()])
-],
-[
+], [
   ac_have_builtin_atomic_cxx=no
   AC_MSG_RESULT([no])
 ])
