Re: [HACKERS] thread_test's sched_yield requires -lrt on solaris

2015-06-30 Thread Alvaro Herrera
Oskari Saarenmaa wrote:
 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.

I'm going to apply this patch to all branches.  (I don't think it's so
cool to rely on librt being pulled in by unrelated functions.)

-- 
Álvaro Herrerahttp://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training  Services


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


[HACKERS] thread_test's sched_yield requires -lrt on solaris

2015-06-26 Thread Oskari Saarenmaa
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) 2conftest.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


Re: [HACKERS] thread_test's sched_yield requires -lrt on solaris

2015-06-26 Thread Robert Haas
On Fri, Jun 26, 2015 at 3:52 AM, Oskari Saarenmaa o...@ohmu.fi wrote:
 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.

Thanks for working on support for this obscure platform; testing such
platforms helps to improve portability and reliability.

You might want to add your patch to the next CommitFest:

https://commitfest.postgresql.org/action/commitfest_view/open

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers