diff --git a/src/auto/configure b/src/auto/configure
index b261631..e47369d 100755
--- a/src/auto/configure
+++ b/src/auto/configure
@@ -4529,8 +4529,8 @@
 test "$GCC" = yes && CPP_MM=M;
 
 if test -f ./toolcheck; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for buggy tools..." >&5
-$as_echo "$as_me: checking for buggy tools..." >&6;}
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for buggy tools" >&5
+$as_echo_n "checking for buggy tools... " >&6; }
   sh ./toolcheck 1>&6
 fi
 
@@ -10580,12 +10580,21 @@
   cppflags_save=$CPPFLAGS
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   if test "$zOSUnix" = "yes"; then
-	xmheader="Xm/Xm.h"
+	for ac_header in Xm/Xm.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "Xm/Xm.h" "ac_cv_header_Xm_Xm_h" "$ac_includes_default"
+if test "x$ac_cv_header_Xm_Xm_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_XM_XM_H 1
+_ACEOF
+
+fi
+
+done
+
   else
-	xmheader="Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h
-	   Xm/UnhighlightT.h Xm/Notebook.h"
-  fi
-  for ac_header in $xmheader
+	for ac_header in Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h
+	   Xm/UnhighlightT.h Xm/Notebook.h
 do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
@@ -10598,6 +10607,7 @@
 
 done
 
+  fi
 
   if test "x$ac_cv_header_Xm_XpmP_h" = "xyes"; then
         { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XpmAttributes_21 in Xm/XpmP.h" >&5
diff --git a/src/configure.ac b/src/configure.ac
index a6a926e..93630a4 100644
--- a/src/configure.ac
+++ b/src/configure.ac
@@ -5,7 +5,7 @@
 dnl generate lots of hard to fix "obsolete" warnings.
 
 AC_INIT(vim.h)
-AC_CONFIG_HEADER(auto/config.h:config.h.in)
+AC_CONFIG_HEADERS(auto/config.h:config.h.in)
 
 dnl Being able to run configure means the system is Unix (compatible).
 AC_DEFINE(UNIX)
@@ -42,10 +42,10 @@
 
   AC_MSG_CHECKING([if the compiler supports trailing commas])
   trailing_commas=no
-  AC_TRY_COMPILE([], [
+  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
     enum {
       one,
-    };],
+    };])],
     [AC_MSG_RESULT(yes); trailing_commas=yes],
     [AC_MSG_RESULT(no)])
   if test "$trailing_commas" = no; then
@@ -54,8 +54,8 @@
 
   AC_MSG_CHECKING([if the compiler supports C++ comments])
   slash_comments=no
-  AC_TRY_COMPILE([],
-    [// C++ comments?],
+  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],
+    [// C++ comments?])],
     [AC_MSG_RESULT(yes); slash_comments=yes],
     [AC_MSG_RESULT(no)])
   if test "$slash_comments" = no; then
@@ -154,8 +154,8 @@
 test "$GCC" = yes && CPP_MM=M; AC_SUBST(CPP_MM)
 
 if test -f ./toolcheck; then
-  AC_CHECKING(for buggy tools)
-  sh ./toolcheck 1>&AC_FD_MSG
+  AC_MSG_CHECKING(for buggy tools)
+  sh ./toolcheck 1>&AS_MESSAGE_FD
 fi
 
 OS_EXTRA_SRC=""; OS_EXTRA_OBJ=""
@@ -261,7 +261,7 @@
     save_cflags="$CFLAGS"
     save_ldflags="$LDFLAGS"
     CFLAGS="$CFLAGS -isysroot $DEVELOPER_DIR/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
-    AC_TRY_LINK([ ], [ ],
+    AC_LINK_IFELSE([AC_LANG_PROGRAM([ ], [ ])],
 	AC_MSG_RESULT(found, will make universal binary),
 
 	AC_MSG_RESULT(not found)
@@ -269,7 +269,7 @@
 	AC_MSG_CHECKING(if Intel architecture is supported)
 	CPPFLAGS="$CPPFLAGS -arch i386"
 	LDFLAGS="$save_ldflags -arch i386"
-	AC_TRY_LINK([ ], [ ],
+	AC_LINK_IFELSE([AC_LANG_PROGRAM([ ], [ ])],
 	    AC_MSG_RESULT(yes); MACARCH="intel",
 	    AC_MSG_RESULT(no, using PowerPC)
 		MACARCH="ppc"
@@ -396,14 +396,14 @@
 
 dnl Check for EBCDIC stolen from the LYNX port to z/OS Unix
 AC_MSG_CHECKING(if character set is EBCDIC)
-AC_TRY_COMPILE([ ],
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ ],
 [ /* TryCompile function for CharSet.
    Treat any failure as ASCII for compatibility with existing art.
    Use compile-time rather than run-time tests for cross-compiler
    tolerance.  */
 #if '0'!=240
 make an error "Character set is not EBCDIC"
-#endif ],
+#endif ])],
 [ # TryCompile action if true
 cf_cv_ebcdic=yes ],
 [ # TryCompile action if false
@@ -721,7 +721,7 @@
       AC_MSG_CHECKING([if link with ${LUA_LIBS} is sane])
       libs_save=$LIBS
       LIBS="$LIBS $LUA_LIBS"
-      AC_TRY_LINK(,[ ],
+      AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
 	AC_MSG_RESULT(yes); lua_ok="yes",
 	AC_MSG_RESULT(no); lua_ok="no"; LUA_LIBS="")
       LIBS=$libs_save
@@ -1046,7 +1046,7 @@
     libs_save=$LIBS
     CFLAGS="$CFLAGS $MZSCHEME_CFLAGS"
     LIBS="$LIBS $MZSCHEME_LIBS"
-    AC_TRY_LINK(,[ ],
+    AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
 	   AC_MSG_RESULT(yes); mzs_ok=yes,
 	   AC_MSG_RESULT(no: MZSCHEME DISABLED); mzs_ok=no)
     CFLAGS=$cflags_save
@@ -1150,7 +1150,7 @@
       LIBS="$LIBS $perllibs"
       perlldflags=`echo "$perlldflags" | sed -e 's/^ *//g'`
       LDFLAGS="$perlldflags $LDFLAGS"
-      AC_TRY_LINK(,[ ],
+      AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
 	     AC_MSG_RESULT(yes); perl_ok=yes,
 	     AC_MSG_RESULT(no: PERL DISABLED); perl_ok=no)
       CFLAGS=$cflags_save
@@ -1409,7 +1409,7 @@
 	  cflags_save=$CFLAGS
 	  CFLAGS="$CFLAGS $threadsafe_flag"
 	  LIBS="$LIBS $thread_lib"
-	  AC_TRY_LINK(,[ ],
+	  AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
 	     AC_MSG_RESULT(yes); PYTHON_CFLAGS="$PYTHON_CFLAGS $threadsafe_flag",
 	     AC_MSG_RESULT(no); LIBS=$libs_save_old
 	     )
@@ -1425,7 +1425,7 @@
 	libs_save=$LIBS
 	CFLAGS="$CFLAGS $PYTHON_CFLAGS"
 	LIBS="$LIBS $PYTHON_LIBS"
-	AC_TRY_LINK(,[ ],
+	AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
 	       AC_MSG_RESULT(yes); python_ok=yes,
 	       AC_MSG_RESULT(no: PYTHON DISABLED); python_ok=no)
 	CFLAGS=$cflags_save
@@ -1628,7 +1628,7 @@
           cflags_save=$CFLAGS
           CFLAGS="$CFLAGS $threadsafe_flag"
           LIBS="$LIBS $thread_lib"
-          AC_TRY_LINK(,[ ],
+          AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
              AC_MSG_RESULT(yes); PYTHON3_CFLAGS="$PYTHON3_CFLAGS $threadsafe_flag",
              AC_MSG_RESULT(no); LIBS=$libs_save_old
              )
@@ -1644,7 +1644,7 @@
         libs_save=$LIBS
         CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
         LIBS="$LIBS $PYTHON3_LIBS"
-        AC_TRY_LINK(,[ ],
+        AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
                AC_MSG_RESULT(yes); python3_ok=yes,
                AC_MSG_RESULT(no: PYTHON3 DISABLED); python3_ok=no)
         CFLAGS=$cflags_save
@@ -1792,7 +1792,7 @@
   libs_save=$LIBS
   CFLAGS="$CFLAGS $PYTHON_CFLAGS -fPIE"
   LIBS="$LIBS $PYTHON_LIBS"
-  AC_TRY_LINK(,[ ],
+  AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
 	 AC_MSG_RESULT(yes); fpie_ok=yes,
 	 AC_MSG_RESULT(no); fpie_ok=no)
   CFLAGS=$cflags_save
@@ -1814,7 +1814,7 @@
   libs_save=$LIBS
   CFLAGS="$CFLAGS $PYTHON3_CFLAGS -fPIE"
   LIBS="$LIBS $PYTHON3_LIBS"
-  AC_TRY_LINK(,[ ],
+  AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ ])],
 	 AC_MSG_RESULT(yes); fpie_ok=yes,
 	 AC_MSG_RESULT(no); fpie_ok=no)
   CFLAGS=$cflags_save
@@ -2128,7 +2128,7 @@
   fi
 
   AC_CACHE_CHECK([whether compiling with IPv6 networking is possible], [vim_cv_ipv6_networking],
-    [AC_TRY_LINK([
+    [AC_LINK_IFELSE([AC_LANG_PROGRAM([
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdarg.h>
@@ -2153,7 +2153,7 @@
 		if (errno == ECONNREFUSED)
 		  (void)connect(1, (struct sockaddr *)&server, sizeof(server));
 		(void)freeaddrinfo(res);
-	    ],
+	    ])],
 	[vim_cv_ipv6_networking="yes"],
 	[vim_cv_ipv6_networking="no"])])
 
@@ -2164,7 +2164,7 @@
     dnl On Solaris we need the nsl library.
     AC_CHECK_LIB(nsl, gethostbyname)
     AC_CACHE_CHECK([whether compiling with IPv4 networking is possible], [vim_cv_ipv4_networking],
-      [AC_TRY_LINK([
+      [AC_LINK_IFELSE([AC_LANG_PROGRAM([
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdarg.h>
@@ -2187,7 +2187,7 @@
 		(void)gethostbyname("microsoft.com");
 		if (errno == ECONNREFUSED)
 		  (void)connect(1, (struct sockaddr *)&server, sizeof(server));
-	    ],
+	    ])],
 	[vim_cv_ipv4_networking="yes"],
 	[vim_cv_ipv4_networking="no"; enable_netbeans="no"; enable_channel="no"])])
   fi
@@ -2356,8 +2356,8 @@
   AC_MSG_CHECKING(if X11 header files can be found)
   cflags_save=$CFLAGS
   CFLAGS="$CFLAGS $X_CFLAGS"
-  AC_TRY_COMPILE([#include <X11/Xlib.h>
-#include <X11/Intrinsic.h>], ,
+  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <X11/Xlib.h>
+#include <X11/Intrinsic.h>], )],
 	AC_MSG_RESULT(yes),
 	AC_MSG_RESULT(no); no_x=yes)
   CFLAGS=$cflags_save
@@ -2398,10 +2398,10 @@
     else
       CFLAGS="$CFLAGS $X_CFLAGS"
     fi
-    AC_TRY_COMPILE([#include <X11/Xlib.h>], ,
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <X11/Xlib.h>], )],
 	AC_MSG_RESULT(no),
 	CFLAGS="$CFLAGS -Wno-implicit-int"
-	AC_TRY_COMPILE([#include <X11/Xlib.h>], ,
+	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <X11/Xlib.h>], )],
 	    AC_MSG_RESULT(yes); cflags_save="$cflags_save -Wno-implicit-int",
 	    AC_MSG_RESULT(test failed)
 	)
@@ -2412,7 +2412,7 @@
 
     AC_MSG_CHECKING(size of wchar_t is 2 bytes)
     AC_CACHE_VAL(ac_cv_small_wchar_t,
-	[AC_TRY_RUN([
+	[AC_RUN_IFELSE([AC_LANG_SOURCE([
 #include <X11/Xlib.h>
 #if STDC_HEADERS
 # include <stdlib.h>
@@ -2423,7 +2423,7 @@
 		  if (sizeof(wchar_t) <= 2)
 		    exit(1);
 		  exit(0);
-		}],
+		}])],
 		ac_cv_small_wchar_t="no",
 		ac_cv_small_wchar_t="yes",
 		AC_MSG_ERROR(failed to compile test program))])
@@ -2624,7 +2624,7 @@
       dnl Now check if the installed GTK is sufficiently new.
       dnl
       rm -f conf.gtktest
-      AC_TRY_RUN([
+      AC_RUN_IFELSE([AC_LANG_SOURCE([
 #include <gtk/gtk.h>
 #include <stdio.h>
 #if STDC_HEADERS
@@ -2656,7 +2656,7 @@
 }
 return 1;
 }
-],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
+])],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
       CFLAGS="$ac_save_CFLAGS"
       LIBS="$ac_save_LIBS"
     }
@@ -3095,10 +3095,10 @@
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
 dnl Xmu/Editres.h may exist but can only be used after including Intrinsic.h
   AC_MSG_CHECKING([for X11/Xmu/Editres.h])
-  AC_TRY_COMPILE([
+  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
 #include <X11/Intrinsic.h>
 #include <X11/Xmu/Editres.h>],
-		      [int i; i = 0;],
+		      [int i; i = 0;])],
 	      AC_MSG_RESULT(yes)
 		      AC_DEFINE(HAVE_X11_XMU_EDITRES_H),
 	      AC_MSG_RESULT(no))
@@ -3110,17 +3110,16 @@
   cppflags_save=$CPPFLAGS
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
   if test "$zOSUnix" = "yes"; then
-	xmheader="Xm/Xm.h"
+	AC_CHECK_HEADERS(Xm/Xm.h)
   else
-	xmheader="Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h
-	   Xm/UnhighlightT.h Xm/Notebook.h"  
+	AC_CHECK_HEADERS(Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h
+	   Xm/UnhighlightT.h Xm/Notebook.h)
   fi    
-  AC_CHECK_HEADERS($xmheader)
 
   if test "x$ac_cv_header_Xm_XpmP_h" = "xyes"; then
     dnl Solaris uses XpmAttributes_21, very annoying.
     AC_MSG_CHECKING([for XpmAttributes_21 in Xm/XpmP.h])
-    AC_TRY_COMPILE([#include <Xm/XpmP.h>], [XpmAttributes_21 attr;],
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <Xm/XpmP.h>], [XpmAttributes_21 attr;])],
 	AC_MSG_RESULT(yes); AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes_21),
 	AC_MSG_RESULT(no); AC_DEFINE(XPMATTRIBUTES_TYPE, XpmAttributes)
 	)
@@ -3232,12 +3231,12 @@
 fi
 
 AC_MSG_CHECKING(whether __DATE__ and __TIME__ work)
-AC_TRY_COMPILE([#include <stdio.h>], [printf("(" __DATE__ " " __TIME__ ")");],
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <stdio.h>], [printf("(" __DATE__ " " __TIME__ ")");])],
 	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DATE_TIME),
 	AC_MSG_RESULT(no))
 
 AC_MSG_CHECKING(whether __attribute__((unused)) is allowed)
-AC_TRY_COMPILE([#include <stdio.h>], [int x __attribute__((unused));],
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <stdio.h>], [int x __attribute__((unused));])],
 	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ATTRIBUTE_UNUSED),
 	AC_MSG_RESULT(no))
 
@@ -3254,8 +3253,8 @@
 dnl compliant. In that case we define HAVE_UNION_WAIT (for NeXT)
 if test $ac_cv_header_sys_wait_h = no; then
   AC_MSG_CHECKING([for sys/wait.h that defines union wait])
-  AC_TRY_COMPILE([#include <sys/wait.h>],
-			[union wait xx, yy; xx = yy],
+  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <sys/wait.h>],
+			[union wait xx, yy; xx = yy])],
 		AC_MSG_RESULT(yes)
 			AC_DEFINE(HAVE_SYS_WAIT_H)
 			AC_DEFINE(HAVE_UNION_WAIT),
@@ -3288,10 +3287,10 @@
 
 dnl pthread_np.h may exist but can only be used after including pthread.h
 AC_MSG_CHECKING([for pthread_np.h])
-AC_TRY_COMPILE([
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
 #include <pthread.h>
 #include <pthread_np.h>],
-		      [int i; i = 0;],
+		      [int i; i = 0;])],
 	      AC_MSG_RESULT(yes)
 		      AC_DEFINE(HAVE_PTHREAD_NP_H),
 	      AC_MSG_RESULT(no))
@@ -3306,7 +3305,7 @@
 AC_MSG_CHECKING([if strings.h can be included after string.h])
 cppflags_save=$CPPFLAGS
 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
-AC_TRY_COMPILE([
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
 #if defined(_AIX) && !defined(_AIX51) && !defined(_NO_PROTO)
 # define _NO_PROTO	/* like in os_unix.h, causes conflict for AIX (Winn) */
 			/* but don't do it on AIX 5.1 (Uribarri) */
@@ -3320,7 +3319,7 @@
 #if defined(HAVE_STRINGS_H)
 # include <strings.h>
 #endif
-		], [int i; i = 0;],
+		], [int i; i = 0;])],
 		AC_MSG_RESULT(yes),
 		AC_DEFINE(NO_STRINGS_WITH_STRING_H)
 		AC_MSG_RESULT(no))
@@ -3393,7 +3392,7 @@
 
 dnl BSDI uses ss_base while others use ss_sp for the stack pointer.
 AC_MSG_CHECKING(whether stack_t has an ss_base field)
-AC_TRY_COMPILE([
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
 #include <sys/types.h>
 #if STDC_HEADERS
 # include <stdlib.h>
@@ -3401,7 +3400,7 @@
 #endif
 #include <signal.h>
 #include "confdefs.h"
-			], [stack_t sigstk; sigstk.ss_base = 0; ],
+			], [stack_t sigstk; sigstk.ss_base = 0; ])],
 	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SS_BASE),
 	AC_MSG_RESULT(no))
 
@@ -3412,7 +3411,7 @@
   AC_MSG_RESULT($with_tlib)
   LIBS="$LIBS -l$with_tlib"
   AC_MSG_CHECKING(for linking with $with_tlib library)
-  AC_TRY_LINK([], [], AC_MSG_RESULT(OK), AC_MSG_ERROR(FAILED))
+  AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], AC_MSG_RESULT(OK), AC_MSG_ERROR(FAILED))
   dnl Need to check for tgetent() below.
   olibs="$LIBS"
 else
@@ -3434,7 +3433,7 @@
       dnl It's possible that a library is found but it doesn't work
       dnl e.g., shared library that cannot be found
       dnl compile and run a test program to be sure
-      AC_TRY_RUN([
+      AC_RUN_IFELSE([AC_LANG_SOURCE([
 #ifdef HAVE_TERMCAP_H
 # include <termcap.h>
 #endif
@@ -3442,7 +3441,7 @@
 # include <stdlib.h>
 # include <stddef.h>
 #endif
-main() {char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(0); }],
+main() {char *s; s=(char *)tgoto("%p1%d", 0, 1); exit(0); }])],
 			  res="OK", res="FAIL", res="FAIL")
       if test "$res" = "OK"; then
 	break
@@ -3458,8 +3457,8 @@
 
 if test "x$olibs" = "x$LIBS"; then
   AC_MSG_CHECKING([for tgetent()])
-  AC_TRY_LINK([int tgetent(char *, const char *);],
-      [char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist");],
+  AC_LINK_IFELSE([AC_LANG_PROGRAM([int tgetent(char *, const char *);],
+      [[char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist");]])],
 	AC_MSG_RESULT(yes),
 	AC_MSG_ERROR([NOT FOUND!
       You need to install a terminal library; for example ncurses.
@@ -3523,68 +3522,68 @@
 fi
 
 AC_MSG_CHECKING(whether termcap.h contains ospeed)
-AC_TRY_LINK([
+AC_LINK_IFELSE([AC_LANG_PROGRAM([
 #ifdef HAVE_TERMCAP_H
 # include <termcap.h>
 #endif
-			], [ospeed = 20000],
+			], [ospeed = 20000])],
 	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_OSPEED),
 	[AC_MSG_RESULT(no)
 	AC_MSG_CHECKING(whether ospeed can be extern)
-	AC_TRY_LINK([
+	AC_LINK_IFELSE([AC_LANG_PROGRAM([
 #ifdef HAVE_TERMCAP_H
 # include <termcap.h>
 #endif
 extern short ospeed;
-			], [ospeed = 20000],
+			], [ospeed = 20000])],
 		AC_MSG_RESULT(yes); AC_DEFINE(OSPEED_EXTERN),
 		AC_MSG_RESULT(no))]
 	)
 
 AC_MSG_CHECKING([whether termcap.h contains UP, BC and PC])
-AC_TRY_LINK([
+AC_LINK_IFELSE([AC_LANG_PROGRAM([
 #ifdef HAVE_TERMCAP_H
 # include <termcap.h>
 #endif
-			], [if (UP == 0 && BC == 0) PC = 1],
+			], [if (UP == 0 && BC == 0) PC = 1])],
 	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_UP_BC_PC),
 	[AC_MSG_RESULT(no)
 	AC_MSG_CHECKING([whether UP, BC and PC can be extern])
-	AC_TRY_LINK([
+	AC_LINK_IFELSE([AC_LANG_PROGRAM([
 #ifdef HAVE_TERMCAP_H
 # include <termcap.h>
 #endif
 extern char *UP, *BC, PC;
-			], [if (UP == 0 && BC == 0) PC = 1],
+			], [if (UP == 0 && BC == 0) PC = 1])],
 		AC_MSG_RESULT(yes); AC_DEFINE(UP_BC_PC_EXTERN),
 		AC_MSG_RESULT(no))]
 	)
 
 AC_MSG_CHECKING(whether tputs() uses outfuntype)
-AC_TRY_COMPILE([
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
 #ifdef HAVE_TERMCAP_H
 # include <termcap.h>
 #endif
-			], [extern int xx(); tputs("test", 1, (outfuntype)xx)],
+			], [extern int xx(); tputs("test", 1, (outfuntype)xx)])],
 	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_OUTFUNTYPE),
 	AC_MSG_RESULT(no))
 
 AC_MSG_CHECKING([whether del_curterm() can be used])
-AC_TRY_LINK([
+AC_LINK_IFELSE([AC_LANG_PROGRAM([
 #ifdef HAVE_TERMCAP_H
 # include <termcap.h>
 #endif
 #include <term.h>
-			], [if (cur_term) del_curterm(cur_term);],
+			], [if (cur_term) del_curterm(cur_term);])],
 	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DEL_CURTERM),
 	AC_MSG_RESULT(no))
 
 dnl On some SCO machines sys/select redefines struct timeval
 AC_MSG_CHECKING([whether sys/select.h and sys/time.h may both be included])
-AC_TRY_COMPILE([
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
 #include <sys/types.h>
 #include <sys/time.h>
-#include <sys/select.h>], ,
+#include <sys/select.h>], )],
 	  AC_MSG_RESULT(yes)
 			AC_DEFINE(SYS_SELECT_WITH_SYS_TIME),
 	  AC_MSG_RESULT(no))
@@ -3602,7 +3601,7 @@
 
 AC_MSG_CHECKING(for SVR4 ptys)
 if test -c /dev/ptmx ; then
-  AC_TRY_LINK([
+  AC_LINK_IFELSE([AC_LANG_PROGRAM([
 // These should be in stdlib.h, but it depends on _XOPEN_SOURCE.
 char *ptsname(int);
 int unlockpt(int);
@@ -3610,7 +3609,7 @@
 	       ], [
 		ptsname(0);
 		grantpt(0);
-		unlockpt(0);],
+		unlockpt(0);])],
 	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SVR4_PTYS),
 	AC_MSG_RESULT(no))
 else
@@ -3646,6 +3645,8 @@
 
 dnl Checks for library functions. ===================================
 
+dnl TODO: this generates an obsolete warning, would need to remove and replace
+dnl all  RETSIGTYPE with "void" and SIGRETURN with "return".
 AC_TYPE_SIGNAL
 
 dnl find out what to use at the end of a signal function
@@ -3657,14 +3658,14 @@
 
 dnl check if struct sigcontext is defined (used for SGI only)
 AC_MSG_CHECKING(for struct sigcontext)
-AC_TRY_COMPILE([
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
 #include <signal.h>
 test_sig()
 {
     struct sigcontext *scont;
     scont = (struct sigcontext *)0;
     return 1;
-} ], ,
+} ], )],
 	  AC_MSG_RESULT(yes)
 		AC_DEFINE(HAVE_SIGCONTEXT),
 	  AC_MSG_RESULT(no))
@@ -3753,11 +3754,11 @@
     CFLAGS="$CFLAGS $canberra_cflags"
   fi
   LIBS="$LIBS $canberra_lib"
-  AC_TRY_LINK([
+  AC_LINK_IFELSE([AC_LANG_PROGRAM([
   # include <canberra.h>
       ], [
      ca_context *hello;
-     ca_context_create(&hello);],
+     ca_context_create(&hello);])],
        AC_MSG_RESULT(yes); AC_DEFINE(HAVE_CANBERRA),
        AC_MSG_RESULT(no; try installing libcanberra-dev); CFLAGS="$ac_save_CFLAGS"; LIBS="$ac_save_LIBS")
 fi
@@ -3792,24 +3793,24 @@
   ac_save_LIBS="$LIBS"
   CFLAGS="$CFLAGS $libsodium_cflags"
   LIBS="$LIBS $libsodium_lib"
-  AC_TRY_LINK([
+  AC_LINK_IFELSE([AC_LANG_PROGRAM([
   # include <sodium.h>
       ], [
-     printf("%d", sodium_init()); ],
+     printf("%d", sodium_init()); ])],
        AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SODIUM),
        AC_MSG_RESULT(no; try installing libsodium-dev); CFLAGS="$ac_save_CFLAGS"; LIBS="$ac_save_LIBS")
 fi
 
 dnl fstatfs() can take 2 to 4 arguments, try to use st_blksize if possible
 AC_MSG_CHECKING(for st_blksize)
-AC_TRY_COMPILE(
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
 [#include <sys/types.h>
 #include <sys/stat.h>],
 [	struct stat st;
 	int n;
 
 	stat("/", &st);
-	n = (int)st.st_blksize;],
+	n = (int)st.st_blksize;])],
 	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ST_BLKSIZE),
 	AC_MSG_RESULT(no))
 
@@ -3817,7 +3818,7 @@
 AC_MSG_CHECKING([for timer_create])
 save_LIBS="$LIBS"
 LIBS="$LIBS -lrt"
-AC_TRY_LINK([
+AC_LINK_IFELSE([AC_LANG_PROGRAM([
 #include<signal.h>
 #include<time.h>
 static void set_flag(union sigval) {}
@@ -3829,10 +3830,10 @@
   action.sigev_notify = SIGEV_THREAD;
   action.sigev_notify_function = set_flag;
   timer_create(CLOCK_REALTIME, &action, &timer_id);
-  ],
+  ])],
   AC_MSG_RESULT(yes; with -lrt); AC_DEFINE(HAVE_TIMER_CREATE),
   LIBS="$save_LIBS"
-  AC_TRY_LINK([
+  AC_LINK_IFELSE([AC_LANG_PROGRAM([
 #include<signal.h>
 #include<time.h>
 static void set_flag(union sigval) {}
@@ -3844,7 +3845,7 @@
     action.sigev_notify = SIGEV_THREAD;
     action.sigev_notify_function = set_flag;
     timer_create(CLOCK_REALTIME, &action, &timer_id);
-    ],
+    ])],
     AC_MSG_RESULT(yes); AC_DEFINE(HAVE_TIMER_CREATE),
     AC_MSG_RESULT(no)))
 
@@ -3886,8 +3887,8 @@
    # st_mtimespec.tv_nsec -- Darwin (Mac OSX)
    for ac_val in st_mtim.tv_nsec st_mtim._tv_nsec st_mtim.st__tim.tv_nsec st_mtime_n st_mtimespec.tv_nsec; do
      CPPFLAGS="$ac_save_CPPFLAGS -DST_MTIM_NSEC=$ac_val"
-     AC_TRY_COMPILE([#include <sys/types.h>
-#include <sys/stat.h>], [struct stat s; s.ST_MTIM_NSEC;],
+     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <sys/types.h>
+#include <sys/stat.h>], [struct stat s; s.ST_MTIM_NSEC;])],
        [ac_cv_struct_st_mtim_nsec=$ac_val; break])
    done
    CPPFLAGS="$ac_save_CPPFLAGS"
@@ -3904,28 +3905,28 @@
 AC_MSG_CHECKING(for iconv_open())
 save_LIBS="$LIBS"
 LIBS="$LIBS -liconv"
-AC_TRY_LINK([
+AC_LINK_IFELSE([AC_LANG_PROGRAM([
 #ifdef HAVE_ICONV_H
 # include <iconv.h>
 #endif
-    ], [iconv_open("fr", "to");],
+    ], [iconv_open("fr", "to");])],
     AC_MSG_RESULT(yes; with -liconv); AC_DEFINE(HAVE_ICONV),
     LIBS="$save_LIBS"
-    AC_TRY_LINK([
+    AC_LINK_IFELSE([AC_LANG_PROGRAM([
 #ifdef HAVE_ICONV_H
 # include <iconv.h>
 #endif
-	], [iconv_open("fr", "to");],
+	], [iconv_open("fr", "to");])],
 	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ICONV),
 	AC_MSG_RESULT(no)))
 
 
 AC_MSG_CHECKING(for nl_langinfo(CODESET))
-AC_TRY_LINK([
+AC_LINK_IFELSE([AC_LANG_PROGRAM([
 #ifdef HAVE_LANGINFO_H
 # include <langinfo.h>
 #endif
-], [char *cs = nl_langinfo(CODESET);],
+], [char *cs = nl_langinfo(CODESET);])],
 	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_NL_LANGINFO_CODESET),
 	AC_MSG_RESULT(no))
 
@@ -3933,7 +3934,7 @@
 dnl floating point when they are all present.
 AC_CHECK_LIB(m, strtod)
 AC_MSG_CHECKING([for strtod() and other floating point functions])
-AC_TRY_LINK([
+AC_LINK_IFELSE([AC_LANG_PROGRAM([
 #ifdef HAVE_MATH_H
 # include <math.h>
 #endif
@@ -3952,13 +3953,13 @@
     d = sin(1.11);
     d = cos(1.11);
     d = atan(1.11);
-    ],
+    ])],
 	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FLOAT_FUNCS),
 	AC_MSG_RESULT(no))
 
 dnl isinf() and isnan() need to include header files and may need -lm.
 AC_MSG_CHECKING([for isinf()])
-AC_TRY_LINK([
+AC_LINK_IFELSE([AC_LANG_PROGRAM([
 #ifdef HAVE_MATH_H
 # include <math.h>
 #endif
@@ -3966,12 +3967,12 @@
 # include <stdlib.h>
 # include <stddef.h>
 #endif
-], [int r = isinf(1.11); ],
+], [int r = isinf(1.11); ])],
 	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ISINF),
 	AC_MSG_RESULT(no))
 
 AC_MSG_CHECKING([for isnan()])
-AC_TRY_LINK([
+AC_LINK_IFELSE([AC_LANG_PROGRAM([
 #ifdef HAVE_MATH_H
 # include <math.h>
 #endif
@@ -3979,7 +3980,7 @@
 # include <stdlib.h>
 # include <stddef.h>
 #endif
-], [int r = isnan(1.11); ],
+], [int r = isnan(1.11); ])],
 	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ISNAN),
 	AC_MSG_RESULT(no))
 
@@ -3997,29 +3998,29 @@
 		  AC_CHECK_LIB(attr, fgetxattr, LIBS="$LIBS -lattr",,)],,),)
 
   AC_MSG_CHECKING(for POSIX ACL support)
-  AC_TRY_LINK([
+  AC_LINK_IFELSE([AC_LANG_PROGRAM([
 #include <sys/types.h>
 #ifdef HAVE_SYS_ACL_H
 # include <sys/acl.h>
 #endif
 acl_t acl;], [acl = acl_get_file("foo", ACL_TYPE_ACCESS);
 	acl_set_file("foo", ACL_TYPE_ACCESS, acl);
-	acl_free(acl);],
+	acl_free(acl);])],
 	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_POSIX_ACL),
 	AC_MSG_RESULT(no))
 
   AC_CHECK_LIB(sec, acl_get, [LIBS="$LIBS -lsec"; AC_DEFINE(HAVE_SOLARIS_ZFS_ACL)],
   AC_MSG_CHECKING(for Solaris ACL support)
-  AC_TRY_LINK([
+  AC_LINK_IFELSE([AC_LANG_PROGRAM([
 #ifdef HAVE_SYS_ACL_H
 # include <sys/acl.h>
 #endif], [acl("foo", GETACLCNT, 0, NULL);
-	],
+	])],
 	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SOLARIS_ACL),
 	AC_MSG_RESULT(no)))
 
   AC_MSG_CHECKING(for AIX ACL support)
-  AC_TRY_LINK([
+  AC_LINK_IFELSE([AC_LANG_PROGRAM([
 #if STDC_HEADERS
 # include <stdlib.h>
 # include <stddef.h>
@@ -4038,7 +4039,7 @@
 struct acl *aclent;], [aclsize = sizeof(struct acl);
 	aclent = (void *)malloc(aclsize);
 	statacl("foo", STX_NORMAL, aclent, aclsize);
-	],
+	])],
 	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_AIX_ACL),
 	AC_MSG_RESULT(no))
 else
@@ -4052,9 +4053,9 @@
   ac_save_LIBS="$LIBS"
   CFLAGS="$CFLAGS $GTK_CFLAGS"
   LIBS="$LIBS $GTK_LIBS"
-  AC_TRY_LINK(
+  AC_LINK_IFELSE([AC_LANG_PROGRAM(
   [#include <gtk/gtk.h>],
-  [ pango_shape_full(NULL, 0, NULL, 0, NULL, NULL); ],
+  [ pango_shape_full(NULL, 0, NULL, 0, NULL, NULL); ])],
 	  AC_MSG_RESULT(yes); AC_DEFINE(HAVE_PANGO_SHAPE_FULL),
 	  AC_MSG_RESULT(no))
   CFLAGS="$ac_save_CFLAGS"
@@ -4071,10 +4072,10 @@
   dnl Checking if gpm support can be compiled
   AC_CACHE_CHECK([for gpm], vi_cv_have_gpm,
 	[olibs="$LIBS" ; LIBS="-lgpm"]
-	AC_TRY_LINK(
+	AC_LINK_IFELSE([AC_LANG_PROGRAM(
 	    [#include <gpm.h>
 	    #include <linux/keyboard.h>],
-	    [Gpm_GetLibVersion(NULL);],
+	    [Gpm_GetLibVersion(NULL);])],
 	    dnl Configure defines HAVE_GPM, if it is defined feature.h defines
 	    dnl FEAT_MOUSE_GPM if mouse support is included
 	    [vi_cv_have_gpm=yes],
@@ -4104,7 +4105,7 @@
   dnl Configure defines HAVE_SYSMOUSE, if it is defined feature.h
   dnl defines FEAT_SYSMOUSE if mouse support is included
   AC_CACHE_CHECK([for sysmouse], vi_cv_have_sysmouse,
-	AC_TRY_LINK(
+	AC_LINK_IFELSE([AC_LANG_PROGRAM(
 	    [#include <sys/consio.h>
 	     #include <signal.h>
 	     #include <sys/fbio.h>],
@@ -4112,7 +4113,7 @@
 	     mouse.operation = MOUSE_MODE;
 	     mouse.operation = MOUSE_SHOW;
 	     mouse.u.mode.mode = 0;
-	     mouse.u.mode.signal = SIGUSR2;],
+	     mouse.u.mode.signal = SIGUSR2;])],
 	    [vi_cv_have_sysmouse=yes],
 	    [vi_cv_have_sysmouse=no])
     )
@@ -4125,55 +4126,55 @@
 
 dnl make sure the FD_CLOEXEC flag for fcntl()'s F_SETFD command is known
 AC_MSG_CHECKING(for FD_CLOEXEC)
-AC_TRY_COMPILE(
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
 [#if HAVE_FCNTL_H
 # include <fcntl.h>
 #endif],
-[	int flag = FD_CLOEXEC;],
+[	int flag = FD_CLOEXEC;])],
 	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FD_CLOEXEC),
 	AC_MSG_RESULT(not usable))
 
 dnl rename needs to be checked separately to work on Nextstep with cc
 AC_MSG_CHECKING(for rename)
-AC_TRY_LINK([#include <stdio.h>], [rename("this", "that")],
+AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <stdio.h>], [rename("this", "that")])],
 	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_RENAME),
 	AC_MSG_RESULT(no))
 
 dnl check for dirfd()
 AC_MSG_CHECKING(for dirfd)
-AC_TRY_LINK(
+AC_LINK_IFELSE([AC_LANG_PROGRAM(
 [#include <sys/types.h>
 #include <dirent.h>],
-[DIR * dir=opendir("dirname"); dirfd(dir);],
+[DIR * dir=opendir("dirname"); dirfd(dir);])],
 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DIRFD), AC_MSG_RESULT(not usable))
 
 dnl check for flock()
 AC_MSG_CHECKING(for flock)
-AC_TRY_LINK(
+AC_LINK_IFELSE([AC_LANG_PROGRAM(
 [#include <sys/file.h>],
-[flock(10, LOCK_SH);],
+[flock(10, LOCK_SH);])],
 AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FLOCK), AC_MSG_RESULT(not usable))
 
 dnl sysctl() may exist but not the arguments we use
 AC_MSG_CHECKING(for sysctl)
-AC_TRY_COMPILE(
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
 [#include <sys/types.h>
 #include <sys/sysctl.h>],
-[	int mib[2], r;
+[[	int mib[2], r;
 	size_t len;
 
 	mib[0] = CTL_HW;
 	mib[1] = HW_USERMEM;
 	len = sizeof(r);
 	(void)sysctl(mib, 2, &r, &len, (void *)0, (size_t)0);
-	],
+	]])],
 	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCTL),
 	AC_MSG_RESULT(not usable))
 
 dnl sysinfo() may exist but not be Linux compatible.
-dnl On some FreeBSD systems it may depend on libsysinfo, use TRY_LINK
+dnl On some FreeBSD systems it may depend on libsysinfo, try to link
 AC_MSG_CHECKING(for sysinfo)
-AC_TRY_LINK(
+AC_LINK_IFELSE([AC_LANG_PROGRAM(
 [#include <sys/types.h>
 #include <sys/sysinfo.h>],
 [	struct sysinfo sinfo;
@@ -4181,24 +4182,24 @@
 
 	(void)sysinfo(&sinfo);
 	t = sinfo.totalram;
-	],
+	])],
 	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO),
 	AC_MSG_RESULT(not usable))
 
 dnl struct sysinfo may have the mem_unit field or not
 AC_MSG_CHECKING(for sysinfo.mem_unit)
-AC_TRY_COMPILE(
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
 [#include <sys/types.h>
 #include <sys/sysinfo.h>],
 [	struct sysinfo sinfo;
 	sinfo.mem_unit = 1;
-	],
+	])],
 	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO_MEM_UNIT),
 	AC_MSG_RESULT(no))
 
 dnl struct sysinfo may have the uptime field or not
 AC_MSG_CHECKING(for sysinfo.uptime)
-AC_TRY_COMPILE(
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
 [#include <sys/types.h>
 #include <sys/sysinfo.h>],
 [	struct sysinfo sinfo;
@@ -4206,26 +4207,26 @@
 
 	(void)sysinfo(&sinfo);
 	ut = sinfo.uptime;
-	],
+	])],
 	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO_UPTIME),
 	AC_MSG_RESULT(no))
 
 dnl sysconf() may exist but not support what we want to use
 AC_MSG_CHECKING(for sysconf)
-AC_TRY_COMPILE(
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
 [#include <unistd.h>],
 [	(void)sysconf(_SC_PAGESIZE);
 	(void)sysconf(_SC_PHYS_PAGES);
-	],
+	])],
 	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCONF),
 	AC_MSG_RESULT(not usable))
 
 dnl check if we have _SC_SIGSTKSZ via sysconf()
 AC_MSG_CHECKING(for _SC_SIGSTKSZ via sysconf())
-AC_TRY_COMPILE(
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
 [#include <unistd.h>],
 [	(void)sysconf(_SC_SIGSTKSZ);
-	],
+	])],
 	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCONF_SIGSTKSZ),
 	AC_MSG_RESULT(not usable))
 
@@ -4240,7 +4241,7 @@
 
 dnl Make sure that uint32_t is really 32 bits unsigned.
 AC_MSG_CHECKING([uint32_t is 32 bits])
-AC_TRY_RUN([
+AC_RUN_IFELSE([AC_LANG_SOURCE([
 #ifdef HAVE_STDINT_H
 # include <stdint.h>
 #endif
@@ -4252,7 +4253,7 @@
   uint32_t nr2 = (uint32_t)0xffffffffUL;
   if (sizeof(uint32_t) != 4 || nr1 != 0xffffffffUL || nr2 + 1 != 0) return 1;
   return 0;
-}],
+}])],
 AC_MSG_RESULT(ok),
 AC_MSG_ERROR([WRONG!  uint32_t not defined correctly.]),
 AC_MSG_WARN([cannot check uint32_t when cross-compiling.]))
@@ -4341,13 +4342,13 @@
   CFLAGS="$CFLAGS $X_CFLAGS"
 
   AC_MSG_CHECKING(whether X_LOCALE needed)
-  AC_TRY_COMPILE([#include <X11/Xlocale.h>],,
-      AC_TRY_LINK_FUNC([_Xsetlocale], [AC_MSG_RESULT(yes)
+  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <X11/Xlocale.h>],)],
+      AC_LINK_IFELSE([AC_LANG_CALL([],[_Xsetlocale])], [AC_MSG_RESULT(yes)
 	      AC_DEFINE(X_LOCALE)], AC_MSG_RESULT(no)),
       AC_MSG_RESULT(no))
 
   AC_MSG_CHECKING(whether Xutf8SetWMProperties() can be used)
-  AC_TRY_LINK_FUNC([Xutf8SetWMProperties], [AC_MSG_RESULT(yes)
+  AC_LINK_IFELSE([AC_LANG_CALL([],[Xutf8SetWMProperties])], [AC_MSG_RESULT(yes)
 	      AC_DEFINE(HAVE_XUTF8SETWMPROPERTIES)], AC_MSG_RESULT(no))
 
   CFLAGS=$cflags_save
@@ -4366,21 +4367,21 @@
 dnl -i+m to test for older Exuberant ctags
 AC_MSG_CHECKING(how to create tags)
 test -f tags && mv tags tags.save
-if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
+if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1; then
   TAGPRG="ctags -I INIT+,INIT2+,INIT3+,INIT4+,INIT5+ --fields=+S"
-elif (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
+elif (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1; then
   TAGPRG="exctags -I INIT+,INIT2+,INIT3+,INIT4+,INIT5+ --fields=+S"
-elif (eval exuberant-ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
+elif (eval exuberant-ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1; then
   TAGPRG="exuberant-ctags -I INIT+,INIT2+,INIT3+,INIT4+,INIT5+ --fields=+S"
 else
   TAGPRG="ctags"
-  (eval etags	   /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags"
-  (eval etags -c   /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags -c"
-  (eval ctags	   /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags"
-  (eval ctags -t   /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -t"
-  (eval ctags -ts  /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -ts"
-  (eval ctags -tvs /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -tvs"
-  (eval ctags -i+m /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags -i+m"
+  (eval etags	   /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="etags"
+  (eval etags -c   /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="etags -c"
+  (eval ctags	   /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="ctags"
+  (eval ctags -t   /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="ctags -t"
+  (eval ctags -ts  /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="ctags -ts"
+  (eval ctags -tvs /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="ctags -tvs"
+  (eval ctags -i+m /dev/null) < /dev/null 1>&AS_MESSAGE_LOG_FD 2>&1 && TAGPRG="ctags -i+m"
 fi
 test -f tags.save && mv tags.save tags
 AC_MSG_RESULT($TAGPRG) AC_SUBST(TAGPRG)
@@ -4388,7 +4389,7 @@
 dnl Check how we can run man with a section number
 AC_MSG_CHECKING(how to run man with a section nr)
 MANDEF="man"
-(eval MANPAGER=cat PAGER=cat man -s 2 read) < /dev/null > /dev/null 2>&AC_FD_CC && MANDEF="man -s"
+(eval MANPAGER=cat PAGER=cat man -s 2 read) < /dev/null > /dev/null 2>&AS_MESSAGE_LOG_FD && MANDEF="man -s"
 AC_MSG_RESULT($MANDEF)
 if test "$MANDEF" = "man -s"; then
   AC_DEFINE(USEMAN_S)
@@ -4418,14 +4419,14 @@
     if test -n "$MSGFMT"; then
       olibs=$LIBS
       LIBS=""
-      AC_TRY_LINK(
+      AC_LINK_IFELSE([AC_LANG_PROGRAM(
 	[#include <libintl.h>],
-	[gettext("Test");],
+	[gettext("Test");])],
 	AC_MSG_RESULT([gettext() works]); have_gettext="yes"; LIBS=$olibs,
 	  LIBS="-lintl"
-	  AC_TRY_LINK(
+	  AC_LINK_IFELSE([AC_LANG_PROGRAM(
 	      [#include <libintl.h>],
-	      [gettext("Test");],
+	      [gettext("Test");])],
 	      AC_MSG_RESULT([gettext() works with -lintl]); have_gettext="yes";
 	      LIBS="$olibs -lintl",
 	      AC_MSG_RESULT([gettext() doesn't work]);
@@ -4441,10 +4442,10 @@
       AC_CHECK_FUNCS(bind_textdomain_codeset)
       dnl _nl_msg_cat_cntr is required for GNU gettext
       AC_MSG_CHECKING([for _nl_msg_cat_cntr])
-      AC_TRY_LINK(
+      AC_LINK_IFELSE([AC_LANG_PROGRAM(
 		[#include <libintl.h>
 		extern int _nl_msg_cat_cntr;],
-		[++_nl_msg_cat_cntr;],
+		[++_nl_msg_cat_cntr;])],
 		AC_MSG_RESULT([yes]); AC_DEFINE(HAVE_NL_MSG_CAT_CNTR),
 		AC_MSG_RESULT([no]))
       AC_MSG_CHECKING([if msgfmt supports --desktop])
@@ -4475,20 +4476,20 @@
 if test x${DLL} = xdlfcn.h; then
   AC_DEFINE(HAVE_DLFCN_H, 1, [ Define if we have dlfcn.h. ])
   AC_MSG_CHECKING([for dlopen()])
-  AC_TRY_LINK(,[
+  AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
 		extern void* dlopen();
 		dlopen();
-      ],
+      ])],
       AC_MSG_RESULT(yes);
 	      AC_DEFINE(HAVE_DLOPEN, 1, [ Define if we have dlopen() ]),
       AC_MSG_RESULT(no);
 	      AC_MSG_CHECKING([for dlopen() in -ldl])
 	      olibs=$LIBS
 	      LIBS="$LIBS -ldl"
-	      AC_TRY_LINK(,[
+	      AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
 				extern void* dlopen();
 				dlopen();
-		 ],
+		 ])],
 		 AC_MSG_RESULT(yes);
 			  AC_DEFINE(HAVE_DLOPEN, 1, [ Define if we have dlopen() ]),
 		 AC_MSG_RESULT(no);
@@ -4496,20 +4497,20 @@
   dnl ReliantUNIX has dlopen() in libc but everything else in libdl
   dnl ick :-)
   AC_MSG_CHECKING([for dlsym()])
-  AC_TRY_LINK(,[
+  AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
 		extern void* dlsym();
 		dlsym();
-      ],
+      ])],
       AC_MSG_RESULT(yes);
 	      AC_DEFINE(HAVE_DLSYM, 1, [ Define if we have dlsym() ]),
       AC_MSG_RESULT(no);
 	      AC_MSG_CHECKING([for dlsym() in -ldl])
 	      olibs=$LIBS
 	      LIBS="$LIBS -ldl"
-	      AC_TRY_LINK(,[
+	      AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
 				extern void* dlsym();
 				dlsym();
-		 ],
+		 ])],
 		 AC_MSG_RESULT(yes);
 			  AC_DEFINE(HAVE_DLSYM, 1, [ Define if we have dlsym() ]),
 		 AC_MSG_RESULT(no);
@@ -4517,20 +4518,20 @@
 elif test x${DLL} = xdl.h; then
   AC_DEFINE(HAVE_DL_H, 1, [ Define if we have dl.h. ])
   AC_MSG_CHECKING([for shl_load()])
-  AC_TRY_LINK(,[
+  AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
 		extern void* shl_load();
 		shl_load();
-     ],
+     ])],
      AC_MSG_RESULT(yes);
 	  AC_DEFINE(HAVE_SHL_LOAD, 1, [ Define if we have shl_load() ]),
      AC_MSG_RESULT(no);
 	  AC_MSG_CHECKING([for shl_load() in -ldld])
 	  olibs=$LIBS
 	  LIBS="$LIBS -ldld"
-	  AC_TRY_LINK(,[
+	  AC_LINK_IFELSE([AC_LANG_PROGRAM(,[
 			extern void* shl_load();
 			shl_load();
-	     ],
+	     ])],
 	     AC_MSG_RESULT(yes);
 		  AC_DEFINE(HAVE_SHL_LOAD, 1, [ Define if we have shl_load() ]),
 	     AC_MSG_RESULT(no);
@@ -4643,6 +4644,7 @@
 fi
 
 dnl write output files
-AC_OUTPUT(auto/config.mk:config.mk.in)
+AC_CONFIG_FILES(auto/config.mk:config.mk.in)
+AC_OUTPUT
 
 dnl vim: set sw=2 tw=78 fo+=l:
diff --git a/src/version.c b/src/version.c
index 744fad6..2919609 100644
--- a/src/version.c
+++ b/src/version.c
@@ -735,6 +735,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    5059,
+/**/
     5058,
 /**/
     5057,
