aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authorChris Fairles <cfairles@gcc.gnu.org>2009-01-15 14:01:04 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2009-01-15 14:01:04 +0000
commit959d14e166813ae53bfc2e0bb5c2953bce764702 (patch)
treea3d0a02869ac2d4272d8edb67dd33bc6a37b3633 /libstdc++-v3
parent52535a64bf7645528bea628863a96a1588de0ac7 (diff)
downloadgcc-959d14e166813ae53bfc2e0bb5c2953bce764702.zip
gcc-959d14e166813ae53bfc2e0bb5c2953bce764702.tar.gz
gcc-959d14e166813ae53bfc2e0bb5c2953bce764702.tar.bz2
acinclude.m4 ([GLIBCXX_ENABLE_CLOCK_GETTIME], [...]): Remove.
2009-01-15 Chris Fairles <cfairles@gcc.gnu.org> Paolo Carlini <paolo.carlini@oracle.com> * acinclude.m4 ([GLIBCXX_ENABLE_CLOCK_GETTIME], [GLIBCXX_CHECK_NANOSLEEP]): Remove. ([GLIBCXX_ENABLE_LIBSTDCXX_TIME]): Add. * configure.ac: Adjust. * doc/xml/manual/configure.xml: Update. * testsuite/lib/libstdc++.exp (check_v3_target_sched_yield): Add. * testsuite/lib/dg-options.exp (dg-require-sched-yield): Add. * testsuite/30_threads/thread/this_thread/2.cc: Use the latter. * configure: Regenerate. * config.h.in: Likewise. * src/thread.cc (thread::thread(), thread::~thread, thread::get_id, thread::joinable, thread::swap, this_thread::get_id, this_thread::yield): Define inline... * include/std/thread: ... here. * config/abi/pre/gnu.ver: Adjust. Co-Authored-By: Paolo Carlini <paolo.carlini@oracle.com> From-SVN: r143397
Diffstat (limited to 'libstdc++-v3')
-rw-r--r--libstdc++-v3/ChangeLog20
-rw-r--r--libstdc++-v3/acinclude.m4114
-rw-r--r--libstdc++-v3/config.h.in6
-rw-r--r--libstdc++-v3/config/abi/pre/gnu.ver9
-rwxr-xr-xlibstdc++-v3/configure778
-rw-r--r--libstdc++-v3/configure.ac7
-rw-r--r--libstdc++-v3/doc/xml/manual/configure.xml22
-rw-r--r--libstdc++-v3/include/std/thread57
-rw-r--r--libstdc++-v3/src/thread.cc40
-rw-r--r--libstdc++-v3/testsuite/30_threads/thread/this_thread/2.cc3
-rw-r--r--libstdc++-v3/testsuite/lib/dg-options.exp12
-rw-r--r--libstdc++-v3/testsuite/lib/libstdc++.exp60
12 files changed, 738 insertions, 390 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index ee72977..bbcb814 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,23 @@
+2009-01-15 Chris Fairles <cfairles@gcc.gnu.org>
+ Paolo Carlini <paolo.carlini@oracle.com>
+
+ * acinclude.m4 ([GLIBCXX_ENABLE_CLOCK_GETTIME],
+ [GLIBCXX_CHECK_NANOSLEEP]): Remove.
+ ([GLIBCXX_ENABLE_LIBSTDCXX_TIME]): Add.
+ * configure.ac: Adjust.
+ * doc/xml/manual/configure.xml: Update.
+ * testsuite/lib/libstdc++.exp (check_v3_target_sched_yield): Add.
+ * testsuite/lib/dg-options.exp (dg-require-sched-yield): Add.
+ * testsuite/30_threads/thread/this_thread/2.cc: Use the latter.
+ * configure: Regenerate.
+ * config.h.in: Likewise.
+
+ * src/thread.cc (thread::thread(), thread::~thread, thread::get_id,
+ thread::joinable, thread::swap, this_thread::get_id,
+ this_thread::yield): Define inline...
+ * include/std/thread: ... here.
+ * config/abi/pre/gnu.ver: Adjust.
+
2009-01-13 Uros Bizjak <ubizjak@gmail.com>
* testsuite/ext/pb_ds/regression/hash_data_map_rand.cc:
diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4
index 71cc7e9..4dd2b2b 100644
--- a/libstdc++-v3/acinclude.m4
+++ b/libstdc++-v3/acinclude.m4
@@ -1074,26 +1074,28 @@ AC_DEFUN([GLIBCXX_ENABLE_C99], [
dnl
-dnl Check for clock_gettime clocks, used in the implementation of 20.8.5
-dnl [time.clock] in the current C++0x working draft.
-dnl
-dnl --enable-clock-gettime
-dnl --enable-clock-gettime=yes
-dnl checks for the availability of monotonic and realtime clocks
-dnl in libc and libposix4 and in case links the latter
-dnl --enable-clock-gettime=rt
+dnl Check for clock_gettime, nanosleep and sched_yield, used in the
+dnl implementation of 20.8.5 [time.clock], and 30.2.2 [thread.thread.this]
+dnl in the current C++0x working draft.
+dnl
+dnl --enable-libstdcxx-time
+dnl --enable-libstdcxx-time=yes
+dnl checks for the availability of monotonic and realtime clocks,
+dnl nanosleep and sched_yield in libc and libposix4 and, in case, links
+dnl the latter
+dnl --enable-libstdcxx-time=rt
dnl also searches (and, in case, links) librt. Note that this is
dnl not always desirable because, in glibc, for example, in turn it
dnl triggers the linking of libpthread too, which activates locking,
dnl a large overhead for single-thread programs.
-dnl --enable-clock-gettime=no
-dnl --disable-clock-gettime
+dnl --enable-libstdcxx-time=no
+dnl --disable-libstdcxx-time
dnl disables the checks completely
dnl
-AC_DEFUN([GLIBCXX_ENABLE_CLOCK_GETTIME], [
+AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_TIME], [
- AC_MSG_CHECKING([for clock_gettime clocks])
- GLIBCXX_ENABLE(clock-gettime,$1,[=KIND],
+ AC_MSG_CHECKING([for clock_gettime, nanosleep and sched_yield])
+ GLIBCXX_ENABLE(libstdcxx-time,$1,[=KIND],
[use KIND for check type],
[permit yes|no|rt])
@@ -1103,19 +1105,47 @@ AC_DEFUN([GLIBCXX_ENABLE_CLOCK_GETTIME], [
CXXFLAGS="$CXXFLAGS -fno-exceptions"
ac_save_LIBS="$LIBS"
- ac_has_clock_monotonic=no;
+ ac_has_clock_monotonic=no;
ac_has_clock_realtime=no;
- if test x"$enable_clock_gettime" != x"no"; then
+ if test x"$enable_libstdcxx_time" != x"no"; then
- if test x"$enable_clock_gettime" = x"rt"; then
+ if test x"$enable_libstdcxx_time" = x"rt"; then
AC_SEARCH_LIBS(clock_gettime, [rt posix4])
+ AC_SEARCH_LIBS(nanosleep, [rt posix4])
else
AC_SEARCH_LIBS(clock_gettime, [posix4])
+ AC_SEARCH_LIBS(nanosleep, [posix4])
fi
case "$ac_cv_search_clock_gettime" in
-l*) GLIBCXX_LIBS=$ac_cv_search_clock_gettime
+ ;;
+ esac
+ case "$ac_cv_search_nanosleep" in
+ -l*) GLIBCXX_LIBS="$GLIBCXX_LIBS $ac_cv_search_nanosleep"
+ ;;
+ esac
+
+ AC_SEARCH_LIBS(sched_yield, [rt posix4])
+
+ case "$ac_cv_search_sched_yield" in
+ -lposix4*)
+ GLIBCXX_LIBS="$GLIBCXX_LIBS $ac_cv_search_sched_yield"
+ AC_DEFINE(_GLIBCXX_USE_SCHED_YIELD, 1,
+ [ Defined if sched_yield is available. ])
+ ;;
+ -lrt*)
+ if test x"$enable_libstdcxx_time" = x"rt"; then
+ GLIBCXX_LIBS="$GLIBCXX_LIBS $ac_cv_search_sched_yield"
+ AC_DEFINE(_GLIBCXX_USE_SCHED_YIELD, 1,
+ [ Defined if sched_yield is available. ])
+ fi
+ ;;
+ *)
+ AC_DEFINE(_GLIBCXX_USE_SCHED_YIELD, 1,
+ [ Defined if sched_yield is available. ])
+ ;;
esac
AC_CHECK_HEADERS(unistd.h, ac_has_unistd_h=yes, ac_has_unistd_h=no)
@@ -1146,8 +1176,20 @@ AC_DEFUN([GLIBCXX_ENABLE_CLOCK_GETTIME], [
], [ac_has_clock_realtime=yes], [ac_has_clock_realtime=no])
AC_MSG_RESULT($ac_has_clock_realtime)
- fi
+ AC_MSG_CHECKING([for nanosleep])
+ AC_TRY_LINK(
+ [#include <unistd.h>
+ #include <time.h>
+ ],
+ [#if _POSIX_TIMERS > 0
+ timespec tp;
+ #endif
+ nanosleep(&tp, 0);
+ ], [ac_has_nanosleep=yes], [ac_has_nanosleep=no])
+
+ AC_MSG_RESULT($ac_has_nanosleep)
+ fi
fi
if test x"$ac_has_clock_monotonic" = x"yes"; then
@@ -1160,6 +1202,11 @@ AC_DEFUN([GLIBCXX_ENABLE_CLOCK_GETTIME], [
[ Defined if clock_gettime has realtime clock support. ])
fi
+ if test x"$ac_has_nanosleep" = x"yes"; then
+ AC_DEFINE(_GLIBCXX_USE_NANOSLEEP, 1,
+ [ Defined if nanosleep is available. ])
+ fi
+
AC_SUBST(GLIBCXX_LIBS)
CXXFLAGS="$ac_save_CXXFLAGS"
@@ -1201,39 +1248,6 @@ AC_DEFUN([GLIBCXX_CHECK_GETTIMEOFDAY], [
])
dnl
-dnl Check for nanosleep, used in the implementation of 30.2.2
-dnl [thread.thread.this] in the current C++0x working draft.
-dnl
-AC_DEFUN([GLIBCXX_CHECK_NANOSLEEP], [
-
- AC_MSG_CHECKING([for nanosleep])
-
- AC_LANG_SAVE
- AC_LANG_CPLUSPLUS
- ac_save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS="$CXXFLAGS -fno-exceptions"
-
- ac_has_nanosleep=no;
- AC_CHECK_HEADERS(time.h, ac_has_time_h=yes, ac_has_time_h=no)
- if test x"$ac_has_time_h" = x"yes"; then
- AC_MSG_CHECKING([for nanosleep])
- AC_TRY_COMPILE([#include <time.h>],
- [timespec ts; nanosleep(&ts, 0);],
- [ac_has_nanosleep=yes], [ac_has_nanosleep=no])
-
- AC_MSG_RESULT($ac_has_nanosleep)
- fi
-
- if test x"$ac_has_nanosleep" = x"yes"; then
- AC_DEFINE(_GLIBCXX_USE_NANOSLEEP, 1,
- [ Defined if nanosleep is available. ])
- fi
-
- CXXFLAGS="$ac_save_CXXFLAGS"
- AC_LANG_RESTORE
-])
-
-dnl
dnl Check for ISO/IEC 9899:1999 "C99" support to ISO/IEC DTR 19768 "TR1"
dnl facilities in Chapter 8, "C compatibility".
dnl
diff --git a/libstdc++-v3/config.h.in b/libstdc++-v3/config.h.in
index 5d63b7f..10246a0 100644
--- a/libstdc++-v3/config.h.in
+++ b/libstdc++-v3/config.h.in
@@ -415,9 +415,6 @@
/* Define to 1 if you have the <tgmath.h> header file. */
#undef HAVE_TGMATH_H
-/* Define to 1 if you have the <time.h> header file. */
-#undef HAVE_TIME_H
-
/* Define to 1 if the target supports thread-local storage. */
#undef HAVE_TLS
@@ -815,6 +812,9 @@
of TR1 (Chapter 5.1). */
#undef _GLIBCXX_USE_RANDOM_TR1
+/* Defined if sched_yield is available. */
+#undef _GLIBCXX_USE_SCHED_YIELD
+
/* Define if code specialized for wchar_t should be used. */
#undef _GLIBCXX_USE_WCHAR_T
diff --git a/libstdc++-v3/config/abi/pre/gnu.ver b/libstdc++-v3/config/abi/pre/gnu.ver
index 833435d..887ea3f 100644
--- a/libstdc++-v3/config/abi/pre/gnu.ver
+++ b/libstdc++-v3/config/abi/pre/gnu.ver
@@ -901,21 +901,12 @@ GLIBCXX_3.4.11 {
_ZNSt22condition_variable_anyD2Ev;
# thread
- _ZNKSt6thread6get_idEv;
- _ZNKSt6thread8joinableEv;
_ZNSt10shared_ptrISt18__thread_data_baseED1Ev;
- _ZNSt11this_thread5yieldEv;
- _ZNSt11this_thread6get_idEv;
_ZNSt12bad_weak_ptrD0Ev;
_ZNSt12bad_weak_ptrD1Ev;
_ZNSt6thread14__start_threadEv;
_ZNSt6thread4joinEv;
- _ZNSt6thread4swapEOS_;
_ZNSt6thread6detachEv;
- _ZNSt6threadC1Ev;
- _ZNSt6threadC2Ev;
- _ZNSt6threadD1Ev;
- _ZNSt6threadD2Ev;
# system_error
_ZSt15system_category;
diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
index 598e207..714b9b5 100755
--- a/libstdc++-v3/configure
+++ b/libstdc++-v3/configure
@@ -1052,7 +1052,7 @@ Optional Features:
--enable-fully-dynamic-string
do not put empty strings in per-process static
memory [default=no]
- --enable-clock-gettime=KIND
+ --enable-libstdcxx-time=KIND
use KIND for check type [default=no]
--enable-tls Use thread-local storage [default=yes]
--disable-rpath do not hardcode runtime library paths
@@ -21711,25 +21711,25 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
-# For clock_gettime support.
+# For clock_gettime, nanosleep and sched_yield support.
# NB: The default is [no], because otherwise it requires linking.
- echo "$as_me:$LINENO: checking for clock_gettime clocks" >&5
-echo $ECHO_N "checking for clock_gettime clocks... $ECHO_C" >&6
- # Check whether --enable-clock-gettime or --disable-clock-gettime was given.
-if test "${enable_clock_gettime+set}" = set; then
- enableval="$enable_clock_gettime"
+ echo "$as_me:$LINENO: checking for clock_gettime, nanosleep and sched_yield" >&5
+echo $ECHO_N "checking for clock_gettime, nanosleep and sched_yield... $ECHO_C" >&6
+ # Check whether --enable-libstdcxx-time or --disable-libstdcxx-time was given.
+if test "${enable_libstdcxx_time+set}" = set; then
+ enableval="$enable_libstdcxx_time"
case "$enableval" in
yes|no|rt) ;;
- *) { { echo "$as_me:$LINENO: error: Unknown argument to enable/disable clock-gettime" >&5
-echo "$as_me: error: Unknown argument to enable/disable clock-gettime" >&2;}
+ *) { { echo "$as_me:$LINENO: error: Unknown argument to enable/disable libstdcxx-time" >&5
+echo "$as_me: error: Unknown argument to enable/disable libstdcxx-time" >&2;}
{ (exit 1); exit 1; }; } ;;
esac
else
- enable_clock_gettime=no
+ enable_libstdcxx_time=no
fi;
@@ -21748,9 +21748,9 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
ac_has_clock_monotonic=no;
ac_has_clock_realtime=no;
- if test x"$enable_clock_gettime" != x"no"; then
+ if test x"$enable_libstdcxx_time" != x"no"; then
- if test x"$enable_clock_gettime" = x"rt"; then
+ if test x"$enable_libstdcxx_time" = x"rt"; then
echo "$as_me:$LINENO: checking for library containing clock_gettime" >&5
echo $ECHO_N "checking for library containing clock_gettime... $ECHO_C" >&6
if test "${ac_cv_search_clock_gettime+set}" = set; then
@@ -21887,6 +21887,142 @@ if test "$ac_cv_search_clock_gettime" != no; then
fi
+ echo "$as_me:$LINENO: checking for library containing nanosleep" >&5
+echo $ECHO_N "checking for library containing nanosleep... $ECHO_C" >&6
+if test "${ac_cv_search_nanosleep+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+ac_cv_search_nanosleep=no
+if test x$gcc_no_link = xyes; then
+ { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
+echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char nanosleep ();
+int
+main ()
+{
+nanosleep ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_search_nanosleep="none required"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test "$ac_cv_search_nanosleep" = no; then
+ for ac_lib in rt posix4; do
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ if test x$gcc_no_link = xyes; then
+ { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
+echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char nanosleep ();
+int
+main ()
+{
+nanosleep ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_search_nanosleep="-l$ac_lib"
+break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ done
+fi
+LIBS=$ac_func_search_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_search_nanosleep" >&5
+echo "${ECHO_T}$ac_cv_search_nanosleep" >&6
+if test "$ac_cv_search_nanosleep" != no; then
+ test "$ac_cv_search_nanosleep" = "none required" || LIBS="$ac_cv_search_nanosleep $LIBS"
+
+fi
+
else
echo "$as_me:$LINENO: checking for library containing clock_gettime" >&5
echo $ECHO_N "checking for library containing clock_gettime... $ECHO_C" >&6
@@ -22024,10 +22160,316 @@ if test "$ac_cv_search_clock_gettime" != no; then
fi
+ echo "$as_me:$LINENO: checking for library containing nanosleep" >&5
+echo $ECHO_N "checking for library containing nanosleep... $ECHO_C" >&6
+if test "${ac_cv_search_nanosleep+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+ac_cv_search_nanosleep=no
+if test x$gcc_no_link = xyes; then
+ { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
+echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char nanosleep ();
+int
+main ()
+{
+nanosleep ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_search_nanosleep="none required"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test "$ac_cv_search_nanosleep" = no; then
+ for ac_lib in posix4; do
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ if test x$gcc_no_link = xyes; then
+ { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
+echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char nanosleep ();
+int
+main ()
+{
+nanosleep ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_search_nanosleep="-l$ac_lib"
+break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ done
+fi
+LIBS=$ac_func_search_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_search_nanosleep" >&5
+echo "${ECHO_T}$ac_cv_search_nanosleep" >&6
+if test "$ac_cv_search_nanosleep" != no; then
+ test "$ac_cv_search_nanosleep" = "none required" || LIBS="$ac_cv_search_nanosleep $LIBS"
+
+fi
+
fi
case "$ac_cv_search_clock_gettime" in
-l*) GLIBCXX_LIBS=$ac_cv_search_clock_gettime
+ ;;
+ esac
+ case "$ac_cv_search_nanosleep" in
+ -l*) GLIBCXX_LIBS="$GLIBCXX_LIBS $ac_cv_search_nanosleep"
+ ;;
+ esac
+
+ echo "$as_me:$LINENO: checking for library containing sched_yield" >&5
+echo $ECHO_N "checking for library containing sched_yield... $ECHO_C" >&6
+if test "${ac_cv_search_sched_yield+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+ac_cv_search_sched_yield=no
+if test x$gcc_no_link = xyes; then
+ { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
+echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char sched_yield ();
+int
+main ()
+{
+sched_yield ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_search_sched_yield="none required"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test "$ac_cv_search_sched_yield" = no; then
+ for ac_lib in rt posix4; do
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ if test x$gcc_no_link = xyes; then
+ { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
+echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char sched_yield ();
+int
+main ()
+{
+sched_yield ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_search_sched_yield="-l$ac_lib"
+break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ done
+fi
+LIBS=$ac_func_search_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_search_sched_yield" >&5
+echo "${ECHO_T}$ac_cv_search_sched_yield" >&6
+if test "$ac_cv_search_sched_yield" != no; then
+ test "$ac_cv_search_sched_yield" = "none required" || LIBS="$ac_cv_search_sched_yield $LIBS"
+
+fi
+
+
+ case "$ac_cv_search_sched_yield" in
+ -lposix4*)
+ GLIBCXX_LIBS="$GLIBCXX_LIBS $ac_cv_search_sched_yield"
+
+cat >>confdefs.h <<\_ACEOF
+#define _GLIBCXX_USE_SCHED_YIELD 1
+_ACEOF
+
+ ;;
+ -lrt*)
+ if test x"$enable_libstdcxx_time" = x"rt"; then
+ GLIBCXX_LIBS="$GLIBCXX_LIBS $ac_cv_search_sched_yield"
+
+cat >>confdefs.h <<\_ACEOF
+#define _GLIBCXX_USE_SCHED_YIELD 1
+_ACEOF
+
+ fi
+ ;;
+ *)
+
+cat >>confdefs.h <<\_ACEOF
+#define _GLIBCXX_USE_SCHED_YIELD 1
+_ACEOF
+
+ ;;
esac
@@ -22309,8 +22751,70 @@ rm -f conftest.err conftest.$ac_objext \
echo "$as_me:$LINENO: result: $ac_has_clock_realtime" >&5
echo "${ECHO_T}$ac_has_clock_realtime" >&6
- fi
+ echo "$as_me:$LINENO: checking for nanosleep" >&5
+echo $ECHO_N "checking for nanosleep... $ECHO_C" >&6
+ if test x$gcc_no_link = xyes; then
+ { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5
+echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <unistd.h>
+ #include <time.h>
+
+int
+main ()
+{
+#if _POSIX_TIMERS > 0
+ timespec tp;
+ #endif
+ nanosleep(&tp, 0);
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_has_nanosleep=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_has_nanosleep=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+ echo "$as_me:$LINENO: result: $ac_has_nanosleep" >&5
+echo "${ECHO_T}$ac_has_nanosleep" >&6
+ fi
fi
if test x"$ac_has_clock_monotonic" = x"yes"; then
@@ -22329,6 +22833,14 @@ _ACEOF
fi
+ if test x"$ac_has_nanosleep" = x"yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define _GLIBCXX_USE_NANOSLEEP 1
+_ACEOF
+
+ fi
+
CXXFLAGS="$ac_save_CXXFLAGS"
@@ -22440,246 +22952,6 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
-# For nanosleep support
-
-
- echo "$as_me:$LINENO: checking for nanosleep" >&5
-echo $ECHO_N "checking for nanosleep... $ECHO_C" >&6
-
-
-
- ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- ac_save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS="$CXXFLAGS -fno-exceptions"
-
- ac_has_nanosleep=no;
-
-for ac_header in time.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
- echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-else
- # Is the header compilable?
-echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_header_compiler=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_header_compiler=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6
-
-# Is the header present?
-echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <$ac_header>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_cxx_preproc_warn_flag
- ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- ac_header_preproc=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
-fi
-rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in
- yes:no: )
- { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
- { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
- (
- cat <<\_ASBOX
-## ----------------------------------------- ##
-## Report this to the package-unused lists. ##
-## ----------------------------------------- ##
-_ASBOX
- ) |
- sed "s/^/$as_me: WARNING: /" >&2
- ;;
-esac
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- eval "$as_ac_Header=\$ac_header_preproc"
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
- ac_has_time_h=yes
-else
- ac_has_time_h=no
-fi
-
-done
-
- if test x"$ac_has_time_h" = x"yes"; then
- echo "$as_me:$LINENO: checking for nanosleep" >&5
-echo $ECHO_N "checking for nanosleep... $ECHO_C" >&6
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <time.h>
-int
-main ()
-{
-timespec ts; nanosleep(&ts, 0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_cxx_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_has_nanosleep=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_has_nanosleep=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-
- echo "$as_me:$LINENO: result: $ac_has_nanosleep" >&5
-echo "${ECHO_T}$ac_has_nanosleep" >&6
- fi
-
- if test x"$ac_has_nanosleep" = x"yes"; then
-
-cat >>confdefs.h <<\_ACEOF
-#define _GLIBCXX_USE_NANOSLEEP 1
-_ACEOF
-
- fi
-
- CXXFLAGS="$ac_save_CXXFLAGS"
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
if test "${ac_cv_header_locale_h+set}" = set; then
echo "$as_me:$LINENO: checking for locale.h" >&5
diff --git a/libstdc++-v3/configure.ac b/libstdc++-v3/configure.ac
index 36701f2..ae97d89 100644
--- a/libstdc++-v3/configure.ac
+++ b/libstdc++-v3/configure.ac
@@ -145,16 +145,13 @@ GLIBCXX_CHECK_STDIO_MACROS
# For gettimeofday support.
GLIBCXX_CHECK_GETTIMEOFDAY
-# For clock_gettime support.
+# For clock_gettime, nanosleep and sched_yield support.
# NB: The default is [no], because otherwise it requires linking.
-GLIBCXX_ENABLE_CLOCK_GETTIME([no])
+GLIBCXX_ENABLE_LIBSTDCXX_TIME([no])
# For gthread support
GLIBCXX_CHECK_GTHREADS
-# For nanosleep support
-GLIBCXX_CHECK_NANOSLEEP
-
AC_LC_MESSAGES
# Check for available headers.
diff --git a/libstdc++-v3/doc/xml/manual/configure.xml b/libstdc++-v3/doc/xml/manual/configure.xml
index 9ddd31c..7fa5a1e 100644
--- a/libstdc++-v3/doc/xml/manual/configure.xml
+++ b/libstdc++-v3/doc/xml/manual/configure.xml
@@ -327,17 +327,19 @@
</para>
</listitem></varlistentry>
- <varlistentry><term><code>--enable-clock-gettime=OPTION</code></term>
+ <varlistentry><term><code>--enable-libstdcxx-time=OPTION</code></term>
<listitem><para>Enables link-type checks for the availability of the
- clock_gettime clocks, used in [time.clock] of the current C++0x draft.
- The choice OPTION=yes checks for the availability of the monotonic and
- realtime clocks in libc and libposix4. In case of need the latter is
- also linked to libstdc++ as part of the build process. OPTION=rt
- also searches (and, in case, links) librt. Note that the latter
- is not always desirable because, in glibc, for example, in turn it
- triggers the linking of libpthread too, which activates locking,
- a large overhead for single-thread programs. OPTION=no skips the
- tests completely. The default is OPTION=no.
+ clock_gettime clocks, used in the implementation of [time.clock],
+ and of the nanosleep and sched_yield functions, used in the
+ implementation of [thread.thread.this] of the current C++0x draft.
+ The choice OPTION=yes checks for the availability of the facilities
+ in libc and libposix4. In case of need the latter is also linked
+ to libstdc++ as part of the build process. OPTION=rt also searches
+ (and, in case, links) librt. Note that the latter is not always
+ desirable because, in glibc, for example, in turn it triggers the
+ linking of libpthread too, which activates locking, a large overhead
+ for single-thread programs. OPTION=no skips the tests completely.
+ The default is OPTION=no.
</para>
</listitem></varlistentry>
diff --git a/libstdc++-v3/include/std/thread b/libstdc++-v3/include/std/thread
index 2a70100..422e362 100644
--- a/libstdc++-v3/include/std/thread
+++ b/libstdc++-v3/include/std/thread
@@ -1,6 +1,6 @@
// <thread> -*- C++ -*-
-// Copyright (C) 2008 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -96,7 +96,7 @@ namespace std
typedef __gthread_t native_handle_type;
// cons
- thread();
+ thread() = default;
template<typename _Callable>
explicit thread(_Callable __f)
@@ -108,7 +108,8 @@ namespace std
: _M_thread_data(__make_thread_data(std::bind(__f, __args...)))
{ __start_thread(); }
- ~thread();
+ ~thread()
+ { detach(); }
thread(const thread&) = delete;
thread(thread&&);
@@ -117,7 +118,8 @@ namespace std
// members
void
- swap(thread&& __t);
+ swap(thread&& __t)
+ { std::swap(_M_thread_data, __t._M_thread_data); }
bool
joinable() const;
@@ -128,7 +130,7 @@ namespace std
void
detach();
- id
+ thread::id
get_id() const;
native_handle_type
@@ -181,18 +183,20 @@ namespace std
thread::id
get_id();
- void
- yield();
+#ifdef _GLIBCXX_USE_SCHED_YIELD
+ inline void
+ yield()
+ { __gthread_yield(); }
+#endif
+#ifdef _GLIBCXX_USE_NANOSLEEP
template<typename _Clock, typename _Duration>
- void
+ inline void
sleep_until(const chrono::time_point<_Clock, _Duration>& __atime)
- {
- sleep_for(__atime - _Clock::now());
- }
+ { sleep_for(__atime - _Clock::now()); }
template<typename _Rep, typename _Period>
- void
+ inline void
sleep_for(const chrono::duration<_Rep, _Period>& __rtime)
{
chrono::seconds __s =
@@ -207,10 +211,9 @@ namespace std
static_cast<long>(__ns.count())
};
-#ifdef _GLIBCXX_USE_NANOSLEEP
::nanosleep(&__ts, 0);
-#endif
}
+#endif
}
/// thread::id
@@ -226,10 +229,8 @@ namespace std
friend bool
operator==(thread::id __x, thread::id __y)
- {
- return
- static_cast<bool>(__gthread_equal(__x._M_thread_id, __y._M_thread_id));
- }
+ { return static_cast<bool>(__gthread_equal(__x._M_thread_id,
+ __y._M_thread_id)); }
friend bool
operator<(thread::id __x, thread::id __y)
@@ -271,6 +272,26 @@ namespace std
else
return __out << __id._M_thread_id;
}
+
+ inline bool
+ thread::joinable() const
+ { return get_id() != thread::id(); }
+
+ inline thread::id
+ thread::get_id() const
+ {
+ if(_M_thread_data)
+ return thread::id(_M_thread_data->_M_thread_handle);
+ else
+ return thread::id();
+ }
+
+ namespace this_thread
+ {
+ inline thread::id
+ get_id()
+ { return thread::id(__gthread_self()); }
+ }
}
#endif // _GLIBCXX_HAS_GTHREADS && _GLIBCXX_USE_C99_STDINT_TR1
diff --git a/libstdc++-v3/src/thread.cc b/libstdc++-v3/src/thread.cc
index b869e07..b7a4f83 100644
--- a/libstdc++-v3/src/thread.cc
+++ b/libstdc++-v3/src/thread.cc
@@ -1,6 +1,6 @@
// thread -*- C++ -*-
-// Copyright (C) 2008 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -58,27 +58,6 @@ namespace std
}
}
- thread::thread()
- { }
-
- thread::~thread()
- {
- detach();
- }
-
- thread::id
- thread::get_id() const
- {
- if(_M_thread_data)
- return thread::id(_M_thread_data->_M_thread_handle);
- else
- return thread::id();
- }
-
- bool
- thread::joinable() const
- { return get_id() != id(); }
-
void
thread::join()
{
@@ -108,12 +87,6 @@ namespace std
}
}
- void
- thread::swap(thread&& __t)
- {
- std::swap(_M_thread_data, __t._M_thread_data);
- }
-
void
thread::__start_thread()
{
@@ -123,17 +96,6 @@ namespace std
if(__e)
__throw_system_error(__e);
}
-
- namespace this_thread
- {
- thread::id
- get_id()
- { return thread::id(__gthread_self()); }
-
- void
- yield()
- { __gthread_yield(); }
- }
}
#endif // _GLIBCXX_HAS_GTHREADS && _GLIBCXX_USE_C99_STDINT_TR1
diff --git a/libstdc++-v3/testsuite/30_threads/thread/this_thread/2.cc b/libstdc++-v3/testsuite/30_threads/thread/this_thread/2.cc
index cf60c2c..a632a45 100644
--- a/libstdc++-v3/testsuite/30_threads/thread/this_thread/2.cc
+++ b/libstdc++-v3/testsuite/30_threads/thread/this_thread/2.cc
@@ -4,8 +4,9 @@
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
// { dg-require-gthreads "" }
+// { dg-require-sched-yield "" }
-// Copyright (C) 2008 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
diff --git a/libstdc++-v3/testsuite/lib/dg-options.exp b/libstdc++-v3/testsuite/lib/dg-options.exp
index 7807225..8270376 100644
--- a/libstdc++-v3/testsuite/lib/dg-options.exp
+++ b/libstdc++-v3/testsuite/lib/dg-options.exp
@@ -1,6 +1,7 @@
# Handlers for additional dg-xxx keywords in tests.
-# Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+# Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009
+# Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -125,6 +126,15 @@ proc dg-require-nanosleep { args } {
return
}
+proc dg-require-sched-yield { args } {
+ if { ![ check_v3_target_sched_yield ] } {
+ upvar dg-do-what dg-do-what
+ set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
+ return
+ }
+ return
+}
+
proc dg-require-string-conversions { args } {
if { ![ check_v3_target_string_conversions ] } {
upvar dg-do-what dg-do-what
diff --git a/libstdc++-v3/testsuite/lib/libstdc++.exp b/libstdc++-v3/testsuite/lib/libstdc++.exp
index 3b2e18b..bd01b25 100644
--- a/libstdc++-v3/testsuite/lib/libstdc++.exp
+++ b/libstdc++-v3/testsuite/lib/libstdc++.exp
@@ -1,6 +1,6 @@
# libstdc++ "tool init file" for DejaGNU
-# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
# Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
@@ -1261,6 +1261,64 @@ proc check_v3_target_nanosleep { } {
return $et_nanosleep
}
+proc check_v3_target_sched_yield { } {
+ global cxxflags
+ global DEFAULT_CXXFLAGS
+ global et_sched_yield
+
+ global tool
+
+ if { ![info exists et_sched_yield_target_name] } {
+ set et_sched_yield_target_name ""
+ }
+
+ # If the target has changed since we set the cached value, clear it.
+ set current_target [current_target_name]
+ if { $current_target != $et_sched_yield_target_name } {
+ verbose "check_v3_target_sched_yield: `$et_sched_yield_target_name'" 2
+ set et_sched_yield_target_name $current_target
+ if [info exists et_sched_yield] {
+ verbose "check_v3_target_sched_yield: removing cached result" 2
+ unset et_sched_yield
+ }
+ }
+
+ if [info exists et_sched_yield] {
+ verbose "check_v3_target_sched_yield: using cached result" 2
+ } else {
+ set et_sched_yield 0
+
+ # Set up and compile a C++0x test program that depends
+ # on the sched_yield facility to be available.
+ set src sched_yield[pid].cc
+ set exe sched_yield[pid].exe
+
+ set f [open $src "w"]
+ puts $f "#include <bits/c++config.h>"
+ puts $f "int main()"
+ puts $f "#ifdef _GLIBCXX_USE_SCHED_YIELD"
+ puts $f "{ return 0; }"
+ puts $f "#endif"
+ close $f
+
+ set cxxflags_saved $cxxflags
+ set cxxflags "$cxxflags $DEFAULT_CXXFLAGS -Werror"
+
+ set lines [v3_target_compile $src $exe executable ""]
+ set cxxflags $cxxflags_saved
+ file delete $src
+
+ if [string match "" $lines] {
+ # No error message, compilation succeeded.
+ set et_sched_yield 1
+ } else {
+ verbose "check_v3_target_sched_yield: compilation failed" 2
+ }
+ }
+ verbose "check_v3_target_sched_yield: $et_sched_yield" 2
+ return $et_sched_yield
+}
+
proc check_v3_target_string_conversions { } {
global cxxflags
global DEFAULT_CXXFLAGS