changeset 29361:653bdd2b1fa1 v9.0.0023

patch 9.0.0023: on Solaris timer_create() exists but does not work Commit: https://github.com/vim/vim/commit/f2ce76a8c0290af35e434e38cfe889ed0fec4c6a Author: Bram Moolenaar <Bram@vim.org> Date: Sat Jul 2 11:40:40 2022 +0100 patch 9.0.0023: on Solaris timer_create() exists but does not work Problem: On Solaris timer_create() exists but does not work. Solution: Adjust the configure check to run the test program. (closes #10647)
author Bram Moolenaar <Bram@vim.org>
date Sat, 02 Jul 2022 12:45:03 +0200
parents 8df35bdbb575
children cffb457247f4
files src/auto/configure src/configure.ac src/version.c
diffstat 3 files changed, 48 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/src/auto/configure
+++ b/src/auto/configure
@@ -13041,7 +13041,13 @@ rm -f core conftest.err conftest.$ac_obj
 $as_echo_n "checking for timer_create... " >&6; }
 save_LIBS="$LIBS"
 LIBS="$LIBS -lrt"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+if test "$cross_compiling" = yes; then :
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5; }
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 #include<signal.h>
@@ -13058,18 +13064,25 @@ main ()
 
   action.sigev_notify = SIGEV_THREAD;
   action.sigev_notify_function = set_flag;
-  timer_create(CLOCK_REALTIME, &action, &timer_id);
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+  if (timer_create(CLOCK_MONOTONIC, &action, &timer_id) < 0)
+    exit(1);  // cannot create a monotonic timer
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes; with -lrt" >&5
 $as_echo "yes; with -lrt" >&6; }; $as_echo "#define HAVE_TIMER_CREATE 1" >>confdefs.h
 
 else
   LIBS="$save_LIBS"
+  if test "$cross_compiling" = yes; then :
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5; }
+else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -13087,13 +13100,14 @@ main ()
 
     action.sigev_notify = SIGEV_THREAD;
     action.sigev_notify_function = set_flag;
-    timer_create(CLOCK_REALTIME, &action, &timer_id);
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+    if (timer_create(CLOCK_MONOTONIC, &action, &timer_id) < 0)
+      exit(1);  // cannot create a monotonic timer
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }; $as_echo "#define HAVE_TIMER_CREATE 1" >>confdefs.h
 
@@ -13101,11 +13115,15 @@ else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat() ignores a trailing slash" >&5
 $as_echo_n "checking whether stat() ignores a trailing slash... " >&6; }
--- a/src/configure.ac
+++ b/src/configure.ac
@@ -3805,10 +3805,12 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
 	AC_MSG_RESULT(no))
 
 dnl Check for timer_create. It probably requires the 'rt' library.
+dnl Run the program to find out if timer_create(CLOCK_MONOTONIC) actually
+dnl works, on Solaris timer_create() exists but fails at runtime.
 AC_MSG_CHECKING([for timer_create])
 save_LIBS="$LIBS"
 LIBS="$LIBS -lrt"
-AC_LINK_IFELSE([AC_LANG_PROGRAM([
+AC_RUN_IFELSE([AC_LANG_PROGRAM([
 #include<signal.h>
 #include<time.h>
 static void set_flag(union sigval sv) {}
@@ -3819,11 +3821,12 @@ static void set_flag(union sigval sv) {}
 
   action.sigev_notify = SIGEV_THREAD;
   action.sigev_notify_function = set_flag;
-  timer_create(CLOCK_REALTIME, &action, &timer_id);
+  if (timer_create(CLOCK_MONOTONIC, &action, &timer_id) < 0)
+    exit(1);  // cannot create a monotonic timer
   ])],
   AC_MSG_RESULT(yes; with -lrt); AC_DEFINE(HAVE_TIMER_CREATE),
   LIBS="$save_LIBS"
-  AC_LINK_IFELSE([AC_LANG_PROGRAM([
+  AC_RUN_IFELSE([AC_LANG_PROGRAM([
 #include<signal.h>
 #include<time.h>
 static void set_flag(union sigval sv) {}
@@ -3834,7 +3837,8 @@ static void set_flag(union sigval sv) {}
 
     action.sigev_notify = SIGEV_THREAD;
     action.sigev_notify_function = set_flag;
-    timer_create(CLOCK_REALTIME, &action, &timer_id);
+    if (timer_create(CLOCK_MONOTONIC, &action, &timer_id) < 0)
+      exit(1);  // cannot create a monotonic timer
     ])],
     AC_MSG_RESULT(yes); AC_DEFINE(HAVE_TIMER_CREATE),
     AC_MSG_RESULT(no)))
--- a/src/version.c
+++ b/src/version.c
@@ -736,6 +736,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    23,
+/**/
     22,
 /**/
     21,