From b5a7400bdfad10fcb78a371f29fbde5dff52b40d Mon Sep 17 00:00:00 2001 From: Oskari Saarenmaa Date: Fri, 26 Jun 2015 09:36:29 +0300 Subject: [PATCH] configure: we need -lrt for sched_yield on solaris thread_test.c uses sched_yield which is in librt on Solaris. Previously we did not check for sched_yield in configure and would not pull in librt in all cases. On some Solaris versions librt was required by fdatasync, but that's not the case anymore on recent versions. On 9.4 and master librt is again required for shm_open, but in 9.3 and earlier there's nothing else using librt causing the thread_test check to fail. The configure.in diff in this patch applies against 9.0 - master, the configure diff only applies against 9.0 - 9.3 which use autoconf 2.63; 9.4 and master require an `autoreconf` run. --- configure | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ configure.in | 2 ++ 2 files changed, 90 insertions(+) diff --git a/configure b/configure index 1e95ab4..170e42a 100755 --- a/configure +++ b/configure @@ -8512,6 +8512,94 @@ if test "$ac_res" != no; then fi +# Required for thread_test.c on Solaris +{ $as_echo "$as_me:$LINENO: checking for library containing sched_yield" >&5 +$as_echo_n "checking for library containing sched_yield... " >&6; } +if test "${ac_cv_search_sched_yield+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char sched_yield (); +int +main () +{ +return sched_yield (); + ; + return 0; +} +_ACEOF +for ac_lib in '' rt; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_search_sched_yield=$ac_res +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext + if test "${ac_cv_search_sched_yield+set}" = set; then + break +fi +done +if test "${ac_cv_search_sched_yield+set}" = set; then + : +else + ac_cv_search_sched_yield=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_search_sched_yield" >&5 +$as_echo "$ac_cv_search_sched_yield" >&6; } +ac_res=$ac_cv_search_sched_yield +if test "$ac_res" != no; then + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + # Required for thread_test.c on Solaris 2.5: # Other ports use it too (HP-UX) so test unconditionally { $as_echo "$as_me:$LINENO: checking for library containing gethostbyname_r" >&5 diff --git a/configure.in b/configure.in index 222e3e0..b964644 100644 --- a/configure.in +++ b/configure.in @@ -892,6 +892,8 @@ AC_SEARCH_LIBS(getopt_long, [getopt gnugetopt]) AC_SEARCH_LIBS(crypt, crypt) # Solaris: AC_SEARCH_LIBS(fdatasync, [rt posix4]) +# Required for thread_test.c on Solaris +AC_SEARCH_LIBS(sched_yield, rt) # Required for thread_test.c on Solaris 2.5: # Other ports use it too (HP-UX) so test unconditionally AC_SEARCH_LIBS(gethostbyname_r, nsl) -- 2.4.3