I configured the dingo and binturong Solaris 10 animals to build 9.3 some time ago but apparently they always failed the configure phase. Turns out this is caused by thread_test's usage of sched_yield which is in librt on Solaris but which is not pulled in by anything on 9.3 and earlier on my box.
Apparently the other Solaris animal (castoroides) requires librt for fdatasync, but that's not required on my system. On 9.4 and master librt is required for shm_open so the check doesn't fail there. Attached a patch to check for sched_yield in configure, the patch only applies against 9.0 - 9.3 which are using autoconf 2.63. We should probably check for sched_yield anyway on all branches even if it's not strictly required on 9.4+ at the moment. / Oskari
From b5a7400bdfad10fcb78a371f29fbde5dff52b40d Mon Sep 17 00:00:00 2001 From: Oskari Saarenmaa <o...@ohmu.fi> 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
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers