From 4da1e6fb2edf59f4aca79aaeec7bca77a0989b29c855bcd9654ecc979040fe9d Mon Sep 17 00:00:00 2001 From: Philipp Thomas Date: Wed, 15 May 2013 13:59:06 +0000 Subject: [PATCH 1/2] Accepting request 175738 from home:-miska-:branches:Base:System - Provides: /bin/{kill,su} * for compatibility with programs requiring these (like lsb) until these will be provided by util-linux OBS-URL: https://build.opensuse.org/request/show/175738 OBS-URL: https://build.opensuse.org/package/show/Base:System/coreutils?expand=0&rev=185 --- coreutils.changes | 7 +++++++ coreutils.spec | 2 ++ 2 files changed, 9 insertions(+) diff --git a/coreutils.changes b/coreutils.changes index e0661a6..b08c523 100644 --- a/coreutils.changes +++ b/coreutils.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Wed May 15 11:26:29 UTC 2013 - mhrusecky@suse.com + +- Provides: /bin/{kill,su} + * for compatibility with programs requiring these (like lsb) until these will + be provided by util-linux + ------------------------------------------------------------------- Thu Apr 4 23:25:17 UTC 2013 - mail@bernhard-voelker.de diff --git a/coreutils.spec b/coreutils.spec index 7f607cb..13672d1 100644 --- a/coreutils.spec +++ b/coreutils.spec @@ -44,6 +44,8 @@ BuildRequires: valgrind Provides: %{name} = %{version} %if "%{name}" == "coreutils" +Provides: /bin/kill +Provides: /bin/su Provides: fileutils = %{version} Provides: mktemp = %{version} Provides: sh-utils = %{version} From 3e051dbc3b2b72a773e6f83a7f1d66899938a969d8824a1150450989a0abd50f Mon Sep 17 00:00:00 2001 From: Bernhard Voelker Date: Mon, 20 May 2013 20:13:40 +0000 Subject: [PATCH 2/2] Accepting request 176187 from home:bernhard-voelker:branches:Base:System - Try to fix nap() races in gnulib-tests. (coreutils-gnulib-tests-fix-nap-race.patch: add upstream patch) (coreutils-gnulib-tests-fix-nap-race-obs.patch: add openSUSE patch for OBS) OBS-URL: https://build.opensuse.org/request/show/176187 OBS-URL: https://build.opensuse.org/package/show/Base:System/coreutils?expand=0&rev=186 --- coreutils-gnulib-tests-fix-nap-race-obs.patch | 37 + coreutils-gnulib-tests-fix-nap-race.patch | 1071 +++++++++++++++++ coreutils-testsuite.changes | 14 + coreutils-testsuite.spec | 13 +- coreutils.changes | 7 + coreutils.spec | 11 +- 6 files changed, 1151 insertions(+), 2 deletions(-) create mode 100644 coreutils-gnulib-tests-fix-nap-race-obs.patch create mode 100644 coreutils-gnulib-tests-fix-nap-race.patch diff --git a/coreutils-gnulib-tests-fix-nap-race-obs.patch b/coreutils-gnulib-tests-fix-nap-race-obs.patch new file mode 100644 index 0000000..bfd50ec --- /dev/null +++ b/coreutils-gnulib-tests-fix-nap-race-obs.patch @@ -0,0 +1,37 @@ +From: Bernhard Voelker +Date: Mon, 20 May 2013 00:03:20 +0200 +Subject: [PATCH] tests/nap.h: increase delay multiplier to avoid problems in + VMs like OBS + +The gnulib change http://git.sv.gnu.org/cgit/gnulib.git/commit/?id=5191133e +(available upstreams with >= 8.22, applied to openSUSE's coreutils +package with "coreutils-gnulib-tests-fix-nap-race.patch", decreased the +probability of lost races to about a third, however such problems could +still be observed in virtual machines like OBS. +Increasing the factor from 1.125 to 3 seems to close the race window. + +* tests/nap.h (nap): Change the multiplier for the delay from 1.125 +to 3. + +--- + gnulib-tests/nap.h | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +Index: gnulib-tests/nap.h +=================================================================== +--- gnulib-tests/nap.h.orig ++++ gnulib-tests/nap.h +@@ -126,9 +126,11 @@ nap (void) + + /* Multiply by 1.125 (rounding up), to avoid problems if the + file system's clock is a bit slower than nanosleep's. ++ OBS: use 3 as multiplier to avoid this race a bit better ++ which is even more likely in VMs. + Ceiling it at INT_MAX, though. */ +- int delta = (d >> 3) + ((d & 7) != 0); +- d = delta < INT_MAX - d ? d + delta : INT_MAX; ++ int d2 = 3 * d; ++ d = d2 < INT_MAX ? d2 : INT_MAX; + delay.tv_sec = d / 1000000000; + delay.tv_nsec = d % 1000000000; + } diff --git a/coreutils-gnulib-tests-fix-nap-race.patch b/coreutils-gnulib-tests-fix-nap-race.patch new file mode 100644 index 0000000..f4e1fe1 --- /dev/null +++ b/coreutils-gnulib-tests-fix-nap-race.patch @@ -0,0 +1,1071 @@ +From: Bernhard Voelker +Date: Mon, 20 May 2013 00:03:20 +0200 +Subject: [PATCH] gnulib-tests: utimensat-tests, etc.: try to fix some races + +Some nap()-related tests often fail in OBS. +Cherry-pick the following attempt to avoid some races from +upstream gnulib: +http://git.sv.gnu.org/cgit/gnulib.git/commit/?id=5191133e +To be removed with coreutils-8.22. + +--- + ChangeLog | 5 + + Makefile.in | 7 +- + aclocal.m4 | 1 + configure | 99 --------------------------------- + gnulib-tests/Makefile.in | 126 ++++++++++++++++++------------------------ + gnulib-tests/gnulib.mk | 33 +++-------- + gnulib-tests/nap.h | 113 ++++++++++++++++++++++++------------- + gnulib-tests/test-stat-time.c | 45 +-------------- + gnulib-tests/test-usleep.c | 40 ------------- + gnulib-tests/usleep.c | 58 ------------------- + lib/config.hin | 9 --- + m4/gnulib-comp.m4 | 10 --- + m4/usleep.m4 | 45 --------------- + 13 files changed, 151 insertions(+), 440 deletions(-) + delete mode 100644 gnulib-tests/test-usleep.c + delete mode 100644 gnulib-tests/usleep.c + delete mode 100644 m4/usleep.m4 + +Index: ChangeLog +=================================================================== +--- ChangeLog.orig ++++ ChangeLog +@@ -1,3 +1,8 @@ ++2013-05-17 Bernhard Voelker ++ ++ gnulib: cherry-pick gnulib commit 5191133e ++ utimensat-tests, etc.: try to fix some races ++ + 2013-02-14 Pádraig Brady + + version 8.21 +Index: Makefile.in +=================================================================== +--- Makefile.in.orig ++++ Makefile.in +@@ -346,10 +346,9 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/0 + $(top_srcdir)/m4/unlink.m4 $(top_srcdir)/m4/unlinkat.m4 \ + $(top_srcdir)/m4/unlinkdir.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/uptime.m4 $(top_srcdir)/m4/userspec.m4 \ +- $(top_srcdir)/m4/usleep.m4 $(top_srcdir)/m4/utimbuf.m4 \ +- $(top_srcdir)/m4/utimecmp.m4 $(top_srcdir)/m4/utimens.m4 \ +- $(top_srcdir)/m4/utimensat.m4 $(top_srcdir)/m4/utimes.m4 \ +- $(top_srcdir)/m4/vasnprintf.m4 \ ++ $(top_srcdir)/m4/utimbuf.m4 $(top_srcdir)/m4/utimecmp.m4 \ ++ $(top_srcdir)/m4/utimens.m4 $(top_srcdir)/m4/utimensat.m4 \ ++ $(top_srcdir)/m4/utimes.m4 $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vasprintf-posix.m4 \ + $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ + $(top_srcdir)/m4/vfprintf-posix.m4 \ +Index: aclocal.m4 +=================================================================== +--- aclocal.m4.orig ++++ aclocal.m4 +@@ -1425,7 +1425,6 @@ m4_include([m4/unlinkdir.m4]) + m4_include([m4/unlocked-io.m4]) + m4_include([m4/uptime.m4]) + m4_include([m4/userspec.m4]) +-m4_include([m4/usleep.m4]) + m4_include([m4/utimbuf.m4]) + m4_include([m4/utimecmp.m4]) + m4_include([m4/utimens.m4]) +Index: configure +=================================================================== +--- configure.orig ++++ configure +@@ -3876,7 +3876,6 @@ as_fn_append ac_func_list " sleep" + as_fn_append ac_func_list " catgets" + as_fn_append ac_func_list " symlinkat" + as_fn_append ac_func_list " shutdown" +-as_fn_append ac_func_list " usleep" + as_fn_append ac_func_list " wctob" + as_fn_append ac_header_list " hurd.h" + as_fn_append ac_header_list " paths.h" +@@ -7942,8 +7941,6 @@ $as_echo "$as_me: autobuild timestamp... + # Code from module useless-if-before-free: + # Code from module userspec: + # Code from module userspec-tests: +- # Code from module usleep: +- # Code from module usleep-tests: + # Code from module utimecmp: + # Code from module utimens: + # Code from module utimens-tests: +@@ -58743,102 +58740,6 @@ $as_echo "#define UNLINK_CANNOT_UNLINK_D + abs_aux_dir=`cd "$ac_aux_dir"; pwd` + + +- +- +- +- ac_fn_c_check_type "$LINENO" "useconds_t" "ac_cv_type_useconds_t" "$ac_includes_default" +-if test "x$ac_cv_type_useconds_t" = xyes; then : +- +-else +- +-$as_echo "#define useconds_t unsigned int" >>confdefs.h +- +-fi +- +- if test $ac_cv_func_usleep = no; then +- HAVE_USLEEP=0 +- else +- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether usleep allows large arguments" >&5 +-$as_echo_n "checking whether usleep allows large arguments... " >&6; } +-if ${gl_cv_func_usleep_works+:} false; then : +- $as_echo_n "(cached) " >&6 +-else +- if test "$cross_compiling" = yes; then : +- case "$host_os" in +- # Guess yes on glibc systems. +- *-gnu*) gl_cv_func_usleep_works="guessing yes" ;; +- # If we don't know, assume the worst. +- *) gl_cv_func_usleep_works="guessing no" ;; +- esac +- +-else +- cat confdefs.h - <<_ACEOF >conftest.$ac_ext +-/* end confdefs.h. */ +- +-#include +- +-int +-main () +-{ +-return !!usleep (1000000); +- ; +- return 0; +-} +-_ACEOF +-if ac_fn_c_try_run "$LINENO"; then : +- gl_cv_func_usleep_works=yes +-else +- gl_cv_func_usleep_works=no +-fi +-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ +- conftest.$ac_objext conftest.beam conftest.$ac_ext +-fi +- +-fi +-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_usleep_works" >&5 +-$as_echo "$gl_cv_func_usleep_works" >&6; } +- case "$gl_cv_func_usleep_works" in +- *yes) ;; +- *) +- REPLACE_USLEEP=1 +- ;; +- esac +- fi +- +- if test $HAVE_USLEEP = 0 || test $REPLACE_USLEEP = 1; then +- +- +- +- +- +- +- +- +- gltests_LIBOBJS="$gltests_LIBOBJS usleep.$ac_objext" +- +- fi +- +- +- +- +- +- if test "$GNULIB_USLEEP" != 1; then +- if test "$GNULIB_USLEEP" = 0; then +- GNULIB_USLEEP=$gl_module_indicator_condition +- else +- GNULIB_USLEEP="($GNULIB_USLEEP || $gl_module_indicator_condition)" +- fi +- fi +- +- +- +- +- +-$as_echo "#define GNULIB_TEST_USLEEP 1" >>confdefs.h +- +- +- +- + abs_aux_dir=`cd "$ac_aux_dir"; pwd` + + +Index: gnulib-tests/Makefile.in +=================================================================== +--- gnulib-tests/Makefile.in.orig ++++ gnulib-tests/Makefile.in +@@ -198,19 +198,19 @@ TESTS = test-accept$(EXEEXT) test-file-h + test-uc_width$(EXEEXT) uniwidth/test-uc_width2.sh \ + test-unlink$(EXEEXT) test-unlinkat$(EXEEXT) \ + test-unsetenv$(EXEEXT) test-update-copyright.sh \ +- test-userspec$(EXEEXT) test-usleep$(EXEEXT) \ +- test-utimens$(EXEEXT) test-utimensat$(EXEEXT) \ +- test-vasnprintf$(EXEEXT) test-vasprintf-posix$(EXEEXT) \ +- test-vasprintf$(EXEEXT) test-vc-list-files-git.sh \ +- test-vc-list-files-cvs.sh test-verify$(EXEEXT) test-verify.sh \ +- test-version-etc.sh test-vfprintf-posix.sh \ +- test-vprintf-posix.sh test-wchar$(EXEEXT) test-wcrtomb.sh \ +- test-wcrtomb-w32-1.sh test-wcrtomb-w32-2.sh \ +- test-wcrtomb-w32-3.sh test-wcrtomb-w32-4.sh \ +- test-wcrtomb-w32-5.sh test-wctype-h$(EXEEXT) \ +- test-wcwidth$(EXEEXT) test-write$(EXEEXT) test-xalloc-die.sh \ +- test-xprintf-posix.sh test-xstrtoimax.sh test-xstrtol.sh \ +- test-xstrtoumax.sh test-xvasprintf$(EXEEXT) test-yesno.sh ++ test-userspec$(EXEEXT) test-utimens$(EXEEXT) \ ++ test-utimensat$(EXEEXT) test-vasnprintf$(EXEEXT) \ ++ test-vasprintf-posix$(EXEEXT) test-vasprintf$(EXEEXT) \ ++ test-vc-list-files-git.sh test-vc-list-files-cvs.sh \ ++ test-verify$(EXEEXT) test-verify.sh test-version-etc.sh \ ++ test-vfprintf-posix.sh test-vprintf-posix.sh \ ++ test-wchar$(EXEEXT) test-wcrtomb.sh test-wcrtomb-w32-1.sh \ ++ test-wcrtomb-w32-2.sh test-wcrtomb-w32-3.sh \ ++ test-wcrtomb-w32-4.sh test-wcrtomb-w32-5.sh \ ++ test-wctype-h$(EXEEXT) test-wcwidth$(EXEEXT) \ ++ test-write$(EXEEXT) test-xalloc-die.sh test-xprintf-posix.sh \ ++ test-xstrtoimax.sh test-xstrtol.sh test-xstrtoumax.sh \ ++ test-xvasprintf$(EXEEXT) test-yesno.sh + XFAIL_TESTS = + noinst_PROGRAMS = + check_PROGRAMS = test-accept$(EXEEXT) test-file-has-acl$(EXEEXT) \ +@@ -335,19 +335,18 @@ check_PROGRAMS = test-accept$(EXEEXT) te + test-uc_width$(EXEEXT) test-uc_width2$(EXEEXT) \ + test-unlink$(EXEEXT) test-unlinkat$(EXEEXT) \ + test-unsetenv$(EXEEXT) test-userspec$(EXEEXT) \ +- test-usleep$(EXEEXT) test-utimens$(EXEEXT) \ +- test-utimensat$(EXEEXT) test-vasnprintf$(EXEEXT) \ +- test-vasprintf-posix$(EXEEXT) test-vasprintf$(EXEEXT) \ +- test-verify$(EXEEXT) test-version-etc$(EXEEXT) \ +- test-vfprintf-posix$(EXEEXT) test-vprintf-posix$(EXEEXT) \ +- test-wchar$(EXEEXT) test-wcrtomb$(EXEEXT) \ +- test-wcrtomb-w32$(EXEEXT) test-wctype-h$(EXEEXT) \ +- test-wcwidth$(EXEEXT) test-write$(EXEEXT) \ +- test-xalloc-die$(EXEEXT) test-xfprintf-posix$(EXEEXT) \ +- test-xprintf-posix$(EXEEXT) test-xstrtoimax$(EXEEXT) \ +- test-xstrtol$(EXEEXT) test-xstrtoul$(EXEEXT) \ +- test-xstrtoumax$(EXEEXT) test-xvasprintf$(EXEEXT) \ +- test-yesno$(EXEEXT) ++ test-utimens$(EXEEXT) test-utimensat$(EXEEXT) \ ++ test-vasnprintf$(EXEEXT) test-vasprintf-posix$(EXEEXT) \ ++ test-vasprintf$(EXEEXT) test-verify$(EXEEXT) \ ++ test-version-etc$(EXEEXT) test-vfprintf-posix$(EXEEXT) \ ++ test-vprintf-posix$(EXEEXT) test-wchar$(EXEEXT) \ ++ test-wcrtomb$(EXEEXT) test-wcrtomb-w32$(EXEEXT) \ ++ test-wctype-h$(EXEEXT) test-wcwidth$(EXEEXT) \ ++ test-write$(EXEEXT) test-xalloc-die$(EXEEXT) \ ++ test-xfprintf-posix$(EXEEXT) test-xprintf-posix$(EXEEXT) \ ++ test-xstrtoimax$(EXEEXT) test-xstrtol$(EXEEXT) \ ++ test-xstrtoul$(EXEEXT) test-xstrtoumax$(EXEEXT) \ ++ test-xvasprintf$(EXEEXT) test-yesno$(EXEEXT) + @POSIX_SPAWN_PORTED_TRUE@am__append_1 = test-posix_spawn1 test-posix_spawn2 + @POSIX_SPAWN_PORTED_TRUE@am__append_2 = test-posix_spawn1 test-posix_spawn2 + @POSIX_SPAWN_PORTED_TRUE@am__append_3 = test-posix_spawn1.sh \ +@@ -553,10 +552,9 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/0 + $(top_srcdir)/m4/unlink.m4 $(top_srcdir)/m4/unlinkat.m4 \ + $(top_srcdir)/m4/unlinkdir.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/uptime.m4 $(top_srcdir)/m4/userspec.m4 \ +- $(top_srcdir)/m4/usleep.m4 $(top_srcdir)/m4/utimbuf.m4 \ +- $(top_srcdir)/m4/utimecmp.m4 $(top_srcdir)/m4/utimens.m4 \ +- $(top_srcdir)/m4/utimensat.m4 $(top_srcdir)/m4/utimes.m4 \ +- $(top_srcdir)/m4/vasnprintf.m4 \ ++ $(top_srcdir)/m4/utimbuf.m4 $(top_srcdir)/m4/utimecmp.m4 \ ++ $(top_srcdir)/m4/utimens.m4 $(top_srcdir)/m4/utimensat.m4 \ ++ $(top_srcdir)/m4/utimes.m4 $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vasprintf-posix.m4 \ + $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ + $(top_srcdir)/m4/vfprintf-posix.m4 \ +@@ -693,9 +691,7 @@ test_chdir_DEPENDENCIES = libtests.a ../ + $(am__DEPENDENCIES_1) + test_chown_SOURCES = test-chown.c + test_chown_OBJECTS = test-chown.$(OBJEXT) +-test_chown_LDADD = $(LDADD) +-test_chown_DEPENDENCIES = libtests.a ../lib/libcoreutils.a libtests.a \ +- $(am__DEPENDENCIES_1) ++test_chown_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) + test_cloexec_SOURCES = test-cloexec.c + test_cloexec_OBJECTS = test-cloexec.$(OBJEXT) + test_cloexec_LDADD = $(LDADD) +@@ -784,7 +780,8 @@ test_fchmodat_OBJECTS = test-fchmodat.$( + test_fchmodat_DEPENDENCIES = $(am__DEPENDENCIES_2) + test_fchownat_SOURCES = test-fchownat.c + test_fchownat_OBJECTS = test-fchownat.$(OBJEXT) +-test_fchownat_DEPENDENCIES = $(am__DEPENDENCIES_2) ++test_fchownat_DEPENDENCIES = $(am__DEPENDENCIES_2) \ ++ $(am__DEPENDENCIES_1) + test_fclose_SOURCES = test-fclose.c + test_fclose_OBJECTS = test-fclose.$(OBJEXT) + test_fclose_LDADD = $(LDADD) +@@ -820,7 +817,7 @@ test_fdopendir_DEPENDENCIES = $(am__DEPE + test_fdutimensat_SOURCES = test-fdutimensat.c + test_fdutimensat_OBJECTS = test-fdutimensat.$(OBJEXT) + test_fdutimensat_DEPENDENCIES = $(am__DEPENDENCIES_2) \ +- $(am__DEPENDENCIES_1) ++ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) + test_fflush_SOURCES = test-fflush.c + test_fflush_OBJECTS = test-fflush.$(OBJEXT) + test_fflush_LDADD = $(LDADD) +@@ -1005,7 +1002,7 @@ test_ftruncate_DEPENDENCIES = libtests.a + test_futimens_SOURCES = test-futimens.c + test_futimens_OBJECTS = test-futimens.$(OBJEXT) + test_futimens_DEPENDENCIES = $(am__DEPENDENCIES_2) \ +- $(am__DEPENDENCIES_1) ++ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) + test_fwrite_SOURCES = test-fwrite.c + test_fwrite_OBJECTS = test-fwrite.$(OBJEXT) + test_fwrite_LDADD = $(LDADD) +@@ -1156,9 +1153,7 @@ test_langinfo_DEPENDENCIES = libtests.a + libtests.a $(am__DEPENDENCIES_1) + test_lchown_SOURCES = test-lchown.c + test_lchown_OBJECTS = test-lchown.$(OBJEXT) +-test_lchown_LDADD = $(LDADD) +-test_lchown_DEPENDENCIES = libtests.a ../lib/libcoreutils.a libtests.a \ +- $(am__DEPENDENCIES_1) ++test_lchown_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) + test_link_SOURCES = test-link.c + test_link_OBJECTS = test-link.$(OBJEXT) + test_link_DEPENDENCIES = $(am__DEPENDENCIES_2) +@@ -1564,9 +1559,8 @@ test_stat_OBJECTS = test-stat.$(OBJEXT) + test_stat_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) + test_stat_time_SOURCES = test-stat-time.c + test_stat_time_OBJECTS = test-stat-time.$(OBJEXT) +-test_stat_time_LDADD = $(LDADD) +-test_stat_time_DEPENDENCIES = libtests.a ../lib/libcoreutils.a \ +- libtests.a $(am__DEPENDENCIES_1) ++test_stat_time_DEPENDENCIES = $(am__DEPENDENCIES_2) \ ++ $(am__DEPENDENCIES_1) + test_statat_SOURCES = test-statat.c + test_statat_OBJECTS = test-statat.$(OBJEXT) + test_statat_DEPENDENCIES = $(am__DEPENDENCIES_2) +@@ -1787,19 +1781,14 @@ test_unsetenv_DEPENDENCIES = libtests.a + test_userspec_SOURCES = test-userspec.c + test_userspec_OBJECTS = test-userspec.$(OBJEXT) + test_userspec_DEPENDENCIES = $(am__DEPENDENCIES_2) +-test_usleep_SOURCES = test-usleep.c +-test_usleep_OBJECTS = test-usleep.$(OBJEXT) +-test_usleep_LDADD = $(LDADD) +-test_usleep_DEPENDENCIES = libtests.a ../lib/libcoreutils.a libtests.a \ +- $(am__DEPENDENCIES_1) + test_utimens_SOURCES = test-utimens.c + test_utimens_OBJECTS = test-utimens.$(OBJEXT) + test_utimens_DEPENDENCIES = $(am__DEPENDENCIES_2) \ +- $(am__DEPENDENCIES_1) ++ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) + test_utimensat_SOURCES = test-utimensat.c + test_utimensat_OBJECTS = test-utimensat.$(OBJEXT) + test_utimensat_DEPENDENCIES = $(am__DEPENDENCIES_2) \ +- $(am__DEPENDENCIES_1) ++ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) + test_vasnprintf_SOURCES = test-vasnprintf.c + test_vasnprintf_OBJECTS = test-vasnprintf.$(OBJEXT) + test_vasnprintf_LDADD = $(LDADD) +@@ -1990,7 +1979,7 @@ SOURCES = $(libtests_a_SOURCES) $(EXTRA_ + $(test_u8_mbtoucr_SOURCES) $(test_u8_uctomb_SOURCES) \ + $(test_uc_width_SOURCES) $(test_uc_width2_SOURCES) \ + test-uname.c test-unistd.c test-unlink.c test-unlinkat.c \ +- test-unsetenv.c test-userspec.c test-usleep.c test-utimens.c \ ++ test-unsetenv.c test-userspec.c test-utimens.c \ + test-utimensat.c test-vasnprintf.c test-vasprintf.c \ + test-vasprintf-posix.c test-verify.c test-version-etc.c \ + test-vfprintf-posix.c test-vprintf-posix.c test-wchar.c \ +@@ -2077,7 +2066,7 @@ DIST_SOURCES = $(libtests_a_SOURCES) $(E + $(test_u8_mbtoucr_SOURCES) $(test_u8_uctomb_SOURCES) \ + $(test_uc_width_SOURCES) $(test_uc_width2_SOURCES) \ + test-uname.c test-unistd.c test-unlink.c test-unlinkat.c \ +- test-unsetenv.c test-userspec.c test-usleep.c test-utimens.c \ ++ test-unsetenv.c test-userspec.c test-utimens.c \ + test-utimensat.c test-vasnprintf.c test-vasprintf.c \ + test-vasprintf-posix.c test-verify.c test-version-etc.c \ + test-vfprintf-posix.c test-vprintf-posix.c test-wchar.c \ +@@ -3725,7 +3714,7 @@ EXTRA_DIST = accept.c w32sock.h test-acc + test-spawn-pipe.sh test-spawn-pipe-main.c \ + test-spawn-pipe-child.c macros.h test-spawn.c test-stat.h \ + test-stat.c signature.h macros.h test-stat-time.c macros.h \ +- test-statat.c test-stdalign.c macros.h test-stdbool.c \ ++ nap.h test-statat.c test-stdalign.c macros.h test-stdbool.c \ + test-stddef.c test-stdint.c test-stdio.c test-stdlib.c \ + test-sys_wait.h test-strchrnul.c signature.h macros.h \ + test-strerror.c signature.h macros.h strerror_r.c \ +@@ -3753,10 +3742,9 @@ EXTRA_DIST = accept.c w32sock.h test-acc + test-unlink.c signature.h macros.h test-unlinkat.c \ + test-rmdir.h test-unlink.h signature.h macros.h unlinkdir.h \ + test-unsetenv.c signature.h macros.h test-update-copyright.sh \ +- test-userspec.c usleep.c test-usleep.c signature.h macros.h \ +- nap.h test-futimens.h test-lutimens.h test-utimens.h \ +- test-utimens-common.h test-utimens.c macros.h nap.h \ +- test-lutimens.h test-utimens.h test-utimens-common.h \ ++ test-userspec.c nap.h test-futimens.h test-lutimens.h \ ++ test-utimens.h test-utimens-common.h test-utimens.c macros.h \ ++ nap.h test-lutimens.h test-utimens.h test-utimens-common.h \ + test-utimensat.c signature.h macros.h test-vasnprintf.c \ + macros.h test-vasprintf-posix.c minus-zero.h infinity.h nan.h \ + macros.h test-vasprintf.c signature.h macros.h \ +@@ -3827,8 +3815,8 @@ libtests_a_LIBADD = $(gltests_LIBOBJS) + libtests_a_DEPENDENCIES = $(gltests_LIBOBJS) + EXTRA_libtests_a_SOURCES = accept.c bind.c connect.c inet_pton.c \ + ioctl.c listen.c perror.c pipe.c setlocale.c setsockopt.c \ +- sleep.c socket.c strerror_r.c at-func.c symlinkat.c usleep.c \ +- wctob.c wctomb.c ++ sleep.c socket.c strerror_r.c at-func.c symlinkat.c wctob.c \ ++ wctomb.c + AM_LIBTOOLFLAGS = --preserve-dup-deps + test_accept_LDADD = $(LDADD) @LIBSOCKET@ + test_file_has_acl_LDADD = $(LDADD) $(LIB_ACL) +@@ -3839,6 +3827,7 @@ test_areadlinkat_LDADD = $(LDADD) @LIBIN + test_argmatch_LDADD = $(LDADD) @LIBINTL@ + test_bind_LDADD = $(LDADD) @LIBSOCKET@ $(INET_PTON_LIB) + test_canonicalize_LDADD = $(LDADD) @LIBINTL@ ++test_chown_LDADD = $(LDADD) $(LIB_NANOSLEEP) + test_closein_LDADD = $(LDADD) @LIBINTL@ + test_connect_LDADD = $(LDADD) @LIBSOCKET@ $(INET_PTON_LIB) + # Link with libintl when needed. dirent-safer uses fdopendir if it is present, +@@ -3849,15 +3838,17 @@ test_exclude_LDADD = $(LDADD) @LIBINTL@ + test_faccessat_LDADD = $(LDADD) $(LIB_EACCESS) @LIBINTL@ + test_fchdir_LDADD = $(LDADD) $(LIBINTL) + test_fchmodat_LDADD = $(LDADD) @LIBINTL@ +-test_fchownat_LDADD = $(LDADD) @LIBINTL@ ++test_fchownat_LDADD = $(LDADD) $(LIB_NANOSLEEP) @LIBINTL@ + test_fdatasync_LDADD = $(LDADD) $(LIB_FDATASYNC) + test_fdopendir_LDADD = $(LDADD) @LIBINTL@ +-test_fdutimensat_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) @LIBINTL@ ++test_fdutimensat_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) \ ++ $(LIB_NANOSLEEP) @LIBINTL@ ++ + test_filenamecat_LDADD = $(LDADD) @LIBINTL@ + test_frexp_nolibm_SOURCES = test-frexp.c randomd.c + test_frexpl_nolibm_SOURCES = test-frexpl.c randoml.c + test_fstatat_LDADD = $(LDADD) @LIBINTL@ +-test_futimens_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) @LIBINTL@ ++test_futimens_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) $(LIB_NANOSLEEP) @LIBINTL@ + test_getaddrinfo_LDADD = $(LDADD) @GETADDRINFO_LIB@ @LIBINTL@ + test_getcwd_lgpl_LDADD = $(LDADD) $(LIBINTL) + test_getcwd_LDADD = $(LDADD) @LIBINTL@ +@@ -3867,6 +3858,7 @@ test_getopt_LDADD = $(LDADD) $(LIBINTL) + test_iconv_LDADD = $(LDADD) @LIBICONV@ + test_inet_ntop_LDADD = $(LDADD) @INET_NTOP_LIB@ + test_inet_pton_LDADD = $(LDADD) @INET_PTON_LIB@ ++test_lchown_LDADD = $(LDADD) $(LIB_NANOSLEEP) + test_link_LDADD = $(LDADD) @LIBINTL@ + test_linkat_LDADD = $(LDADD) @LIBINTL@ + test_listen_LDADD = $(LDADD) @LIBSOCKET@ +@@ -3902,6 +3894,7 @@ test_spawn_pipe_main_LDADD = $(LDADD) @L + # Therefore don't link it against any libraries other than -lc. + test_spawn_pipe_child_LDADD = + test_stat_LDADD = $(LDADD) $(LIBINTL) ++test_stat_time_LDADD = $(LDADD) $(LIB_NANOSLEEP) + test_statat_LDADD = $(LDADD) @LIBINTL@ + test_striconv_LDADD = $(LDADD) @LIBICONV@ + test_strsignal_LDADD = $(LDADD) @LIBINTL@ $(LIBTHREAD) +@@ -3920,8 +3913,8 @@ test_uc_width2_SOURCES = uniwidth/test-u + test_uc_width2_LDADD = $(LDADD) $(LIBUNISTRING) + test_unlinkat_LDADD = $(LDADD) @LIBINTL@ + test_userspec_LDADD = $(LDADD) @LIBINTL@ +-test_utimens_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) @LIBINTL@ +-test_utimensat_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) @LIBINTL@ ++test_utimens_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) $(LIB_NANOSLEEP) @LIBINTL@ ++test_utimensat_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) $(LIB_NANOSLEEP) @LIBINTL@ + test_version_etc_LDADD = $(LDADD) @LIBINTL@ + test_xalloc_die_LDADD = $(LDADD) @LIBINTL@ + test_xfprintf_posix_LDADD = $(LDADD) @LIBINTL@ +@@ -4893,9 +4886,6 @@ test-unsetenv$(EXEEXT): $(test_unsetenv_ + test-userspec$(EXEEXT): $(test_userspec_OBJECTS) $(test_userspec_DEPENDENCIES) $(EXTRA_test_userspec_DEPENDENCIES) + @rm -f test-userspec$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_userspec_OBJECTS) $(test_userspec_LDADD) $(LIBS) +-test-usleep$(EXEEXT): $(test_usleep_OBJECTS) $(test_usleep_DEPENDENCIES) $(EXTRA_test_usleep_DEPENDENCIES) +- @rm -f test-usleep$(EXEEXT) +- $(AM_V_CCLD)$(LINK) $(test_usleep_OBJECTS) $(test_usleep_LDADD) $(LIBS) + test-utimens$(EXEEXT): $(test_utimens_OBJECTS) $(test_utimens_DEPENDENCIES) $(EXTRA_test_utimens_DEPENDENCIES) + @rm -f test-utimens$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_utimens_OBJECTS) $(test_utimens_LDADD) $(LIBS) +@@ -5252,7 +5242,6 @@ distclean-compile: + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-unlinkat.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-unsetenv.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-userspec.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-usleep.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-utimens.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-utimensat.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-vasnprintf.Po@am__quote@ +@@ -5280,7 +5269,6 @@ distclean-compile: + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_tls-test-tls.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_xvasprintf-test-xvasprintf.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unlinkdir.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usleep.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wctob.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wctomb.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@glthread/$(DEPDIR)/thread.Po@am__quote@ +@@ -6223,8 +6211,6 @@ test-update-copyright.sh.log: test-updat + @p='test-update-copyright.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) + test-userspec.log: test-userspec$(EXEEXT) + @p='test-userspec$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +-test-usleep.log: test-usleep$(EXEEXT) +- @p='test-usleep$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) + test-utimens.log: test-utimens$(EXEEXT) + @p='test-utimens$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) + test-utimensat.log: test-utimensat$(EXEEXT) +Index: gnulib-tests/gnulib.mk +=================================================================== +--- gnulib-tests/gnulib.mk.orig ++++ gnulib-tests/gnulib.mk +@@ -261,6 +261,7 @@ EXTRA_DIST += test-chdir.c signature.h m + + TESTS += test-chown + check_PROGRAMS += test-chown ++test_chown_LDADD = $(LDADD) $(LIB_NANOSLEEP) + EXTRA_DIST += nap.h test-chown.h test-chown.c signature.h macros.h + + ## end gnulib module chown-tests +@@ -459,7 +460,7 @@ EXTRA_DIST += test-fchmodat.c signature. + + TESTS += test-fchownat + check_PROGRAMS += test-fchownat +-test_fchownat_LDADD = $(LDADD) @LIBINTL@ ++test_fchownat_LDADD = $(LDADD) $(LIB_NANOSLEEP) @LIBINTL@ + EXTRA_DIST += nap.h test-chown.h test-lchown.h test-fchownat.c signature.h macros.h + + ## end gnulib module fchownat-tests +@@ -526,7 +527,8 @@ EXTRA_DIST += test-fdopendir.c signature + + TESTS += test-fdutimensat + check_PROGRAMS += test-fdutimensat +-test_fdutimensat_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) @LIBINTL@ ++test_fdutimensat_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) \ ++ $(LIB_NANOSLEEP) @LIBINTL@ + EXTRA_DIST += nap.h test-futimens.h test-lutimens.h test-utimens.h test-utimens-common.h test-fdutimensat.c macros.h + + ## end gnulib module fdutimensat-tests +@@ -780,7 +782,7 @@ EXTRA_DIST += test-ftruncate.c test-ftru + + TESTS += test-futimens + check_PROGRAMS += test-futimens +-test_futimens_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) @LIBINTL@ ++test_futimens_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) $(LIB_NANOSLEEP) @LIBINTL@ + EXTRA_DIST += nap.h test-futimens.h test-utimens-common.h test-futimens.c signature.h macros.h + + ## end gnulib module futimens-tests +@@ -1104,6 +1106,7 @@ EXTRA_DIST += test-langinfo.c + + TESTS += test-lchown + check_PROGRAMS += test-lchown ++test_lchown_LDADD = $(LDADD) $(LIB_NANOSLEEP) + EXTRA_DIST += nap.h test-lchown.h test-lchown.c signature.h macros.h + + ## end gnulib module lchown-tests +@@ -1963,7 +1966,8 @@ EXTRA_DIST += test-stat.h test-stat.c si + + TESTS += test-stat-time + check_PROGRAMS += test-stat-time +-EXTRA_DIST += test-stat-time.c macros.h ++test_stat_time_LDADD = $(LDADD) $(LIB_NANOSLEEP) ++EXTRA_DIST += test-stat-time.c macros.h nap.h + + ## end gnulib module stat-time-tests + +@@ -2419,28 +2423,11 @@ EXTRA_DIST += test-userspec.c + + ## end gnulib module userspec-tests + +-## begin gnulib module usleep +- +- +-EXTRA_DIST += usleep.c +- +-EXTRA_libtests_a_SOURCES += usleep.c +- +-## end gnulib module usleep +- +-## begin gnulib module usleep-tests +- +-TESTS += test-usleep +-check_PROGRAMS += test-usleep +-EXTRA_DIST += test-usleep.c signature.h macros.h +- +-## end gnulib module usleep-tests +- + ## begin gnulib module utimens-tests + + TESTS += test-utimens + check_PROGRAMS += test-utimens +-test_utimens_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) @LIBINTL@ ++test_utimens_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) $(LIB_NANOSLEEP) @LIBINTL@ + EXTRA_DIST += nap.h test-futimens.h test-lutimens.h test-utimens.h test-utimens-common.h test-utimens.c macros.h + + ## end gnulib module utimens-tests +@@ -2449,7 +2436,7 @@ EXTRA_DIST += nap.h test-futimens.h test + + TESTS += test-utimensat + check_PROGRAMS += test-utimensat +-test_utimensat_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) @LIBINTL@ ++test_utimensat_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) $(LIB_NANOSLEEP) @LIBINTL@ + EXTRA_DIST += nap.h test-lutimens.h test-utimens.h test-utimens-common.h test-utimensat.c signature.h macros.h + + ## end gnulib module utimensat-tests +Index: gnulib-tests/nap.h +=================================================================== +--- gnulib-tests/nap.h.orig ++++ gnulib-tests/nap.h +@@ -19,19 +19,33 @@ + #ifndef GLTEST_NAP_H + # define GLTEST_NAP_H + ++# include ++ ++/* Return A - B, in ns. ++ Return 0 if the true result would be negative. ++ Return INT_MAX if the true result would be greater than INT_MAX. */ + static int +-lt_mtime (struct stat const *a, struct stat const *b) ++diff_timespec (struct timespec a, struct timespec b) + { +- time_t as = a->st_mtime; +- time_t bs = b->st_mtime; +- int ans = get_stat_mtime_ns (a); +- int bns = get_stat_mtime_ns (b); ++ time_t as = a.tv_sec; ++ time_t bs = b.tv_sec; ++ int ans = a.tv_nsec; ++ int bns = b.tv_nsec; + +- return as < bs || (as == bs && ans < bns); ++ if (! (bs < as || (bs == as && bns < ans))) ++ return 0; ++ if (as - bs <= INT_MAX / 1000000000) ++ { ++ int sdiff = (as - bs) * 1000000000; ++ int usdiff = ans - bns; ++ if (usdiff < INT_MAX - sdiff) ++ return sdiff + usdiff; ++ } ++ return INT_MAX; + } + + static void +-get_mtime (int fd, struct stat *st, int do_write) ++get_stat (int fd, struct stat *st, int do_write) + { + if (do_write) + ASSERT (write (fd, "\n", 1) == 1); +@@ -39,50 +53,61 @@ get_mtime (int fd, struct stat *st, int + } + + /* Given a file whose descriptor is FD, see whether delaying by DELAY +- microseconds causes a change in a file's time stamp. If the time +- stamps differ, repeat the test one more time, in case we crossed a +- quantization boundary on a file system with lower resolution. *ST +- is the file's status, recently gotten. Update *ST to reflect the +- latest status gotten. */ ++ nanoseconds causes a change in a file's time stamp. *ST is the ++ file's status, recently gotten. Update *ST to reflect the latest ++ status gotten. If successful, return the needed delay, in ++ nanoseconds as determined by the observed time stamps; this may be ++ greater than DELAY if we crossed a quantization boundary. If ++ unsuccessful, return 0. */ + static int + nap_works (int fd, int delay, struct stat *st) + { +- struct stat old_st; +- old_st = *st; +- usleep (delay); +- get_mtime (fd, st, 1); +- if (! lt_mtime (&old_st, st)) +- return 0; +- old_st = *st; +- usleep (delay); +- get_mtime (fd, st, 1); +- return lt_mtime (&old_st, st); ++ struct stat old_st = *st; ++ struct timespec delay_spec; ++ int cdiff, mdiff; ++ delay_spec.tv_sec = delay / 1000000000; ++ delay_spec.tv_nsec = delay % 1000000000; ++ ASSERT (nanosleep (&delay_spec, 0) == 0); ++ get_stat (fd, st, 1); ++ ++ /* Return the greater of the ctime and the mtime differences, or ++ zero if it cannot be determined, or INT_MAX if either overflows. */ ++ cdiff = diff_timespec (get_stat_ctime (st), get_stat_ctime (&old_st)); ++ if (cdiff != 0) ++ { ++ mdiff = diff_timespec (get_stat_mtime (st), get_stat_mtime (&old_st)); ++ if (mdiff != 0) ++ return cdiff < mdiff ? mdiff : cdiff; ++ } ++ return 0; + } + + static int + guess_delay (void) + { +- /* Try a 1-microsecond sleep first, for speed. If that doesn't +- work, try a 1 ms sleep; that should work with ext. If it doesn't +- work, try a 20 ms sleep. xfs has a quantization of about 10 ++ /* Try a 1-ns sleep first, for speed. If that doesn't work, try 100 ++ ns, 1 microsecond, 1 ms, etc. xfs has a quantization of about 10 + milliseconds, even though it has a granularity of 1 nanosecond, + and NTFS has a default quantization of 15.25 milliseconds, even +- though it has a granularity of 100 nanoseconds, so 20 ms is a ++ though it has a granularity of 100 nanoseconds, so 15.25 ms is a + good quantization to try. If that doesn't work, try 1 second. + The worst case is 2 seconds, needed for FAT. */ +- static int const delaytab[] = {1, 1000, 20000, 1000000 }; ++ static int const delaytab[] = {1, 1000, 1000000, 15250000, 1000000000 }; + int fd = creat (BASE "tmp", 0600); + int i; +- int delay = 2000000; ++ int delay = 2000000000; + struct stat st; + ASSERT (0 <= fd); +- get_mtime (fd, &st, 0); ++ get_stat (fd, &st, 0); + for (i = 0; i < sizeof delaytab / sizeof delaytab[0]; i++) +- if (nap_works (fd, delaytab[i], &st)) +- { +- delay = delaytab[i]; +- break; +- } ++ { ++ int d = nap_works (fd, delaytab[i], &st); ++ if (d != 0) ++ { ++ delay = d; ++ break; ++ } ++ } + ASSERT (close (fd) == 0); + ASSERT (unlink (BASE "tmp") == 0); + return delay; +@@ -90,14 +115,24 @@ guess_delay (void) + + /* Sleep long enough to notice a timestamp difference on the file + system in the current directory. Assumes that BASE is defined, +- and requires that the test module depends on usleep. */ ++ and requires that the test module depends on nanosleep. */ + static void + nap (void) + { +- static int delay; +- if (!delay) +- delay = guess_delay (); +- usleep (delay); ++ static struct timespec delay; ++ if (!delay.tv_sec && !delay.tv_nsec) ++ { ++ int d = guess_delay (); ++ ++ /* Multiply by 1.125 (rounding up), to avoid problems if the ++ file system's clock is a bit slower than nanosleep's. ++ Ceiling it at INT_MAX, though. */ ++ int delta = (d >> 3) + ((d & 7) != 0); ++ d = delta < INT_MAX - d ? d + delta : INT_MAX; ++ delay.tv_sec = d / 1000000000; ++ delay.tv_nsec = d % 1000000000; ++ } ++ ASSERT (nanosleep (&delay, 0) == 0); + } + + #endif /* GLTEST_NAP_H */ +Index: gnulib-tests/test-stat-time.c +=================================================================== +--- gnulib-tests/test-stat-time.c.orig ++++ gnulib-tests/test-stat-time.c +@@ -27,6 +27,9 @@ + + #include "macros.h" + ++#define BASE "test-stat-time.t" ++#include "nap.h" ++ + enum { NFILES = 4 }; + + static int +@@ -79,48 +82,6 @@ do_stat (const char *filename, struct st + ASSERT (stat (filename, p) == 0); + } + +-/* Sleep long enough to notice a timestamp difference on the file +- system in the current directory. */ +-static void +-nap (void) +-{ +- static long delay; +- if (!delay) +- { +- /* Initialize only once, by sleeping for 20 milliseconds (needed +- since xfs has a quantization of about 10 milliseconds, even +- though it has a granularity of 1 nanosecond, and since NTFS +- has a default quantization of 15.25 milliseconds, even though +- it has a granularity of 100 nanoseconds). If the seconds +- differ, repeat the test one more time (in case we crossed a +- quantization boundary on a file system with 1 second +- resolution). If we can't observe a difference in only the +- nanoseconds, then fall back to 1 second if the time is odd, +- and 2 seconds (needed for FAT) if time is even. */ +- struct stat st1; +- struct stat st2; +- ASSERT (stat ("t-stt-stamp1", &st1) == 0); +- ASSERT (force_unlink ("t-stt-stamp1") == 0); +- delay = 20000; +- usleep (delay); +- create_file ("t-stt-stamp1"); +- ASSERT (stat ("t-stt-stamp1", &st2) == 0); +- if (st1.st_mtime != st2.st_mtime) +- { +- /* Seconds differ, give it one more shot. */ +- st1 = st2; +- ASSERT (force_unlink ("t-stt-stamp1") == 0); +- usleep (delay); +- create_file ("t-stt-stamp1"); +- ASSERT (stat ("t-stt-stamp1", &st2) == 0); +- } +- if (! (st1.st_mtime == st2.st_mtime +- && get_stat_mtime_ns (&st1) < get_stat_mtime_ns (&st2))) +- delay = (st1.st_mtime & 1) ? 1000000 : 2000000; +- } +- usleep (delay); +-} +- + static void + prepare_test (struct stat *statinfo, struct timespec *modtimes) + { +Index: gnulib-tests/test-usleep.c +=================================================================== +--- gnulib-tests/test-usleep.c ++++ /dev/null +@@ -1,40 +0,0 @@ +-/* Test of usleep() function. +- Copyright (C) 2009-2013 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 +- the Free Software Foundation; either version 3 of the License, or +- (at your option) any later version. +- +- This program is distributed in the hope that it will be useful, +- but WITHOUT ANY WARRANTY; without even the implied warranty of +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- GNU General Public License for more details. +- +- You should have received a copy of the GNU General Public License +- along with this program. If not, see . */ +- +-/* Written by Eric Blake , 2009. */ +- +-#include +- +-#include +- +-#include "signature.h" +-SIGNATURE_CHECK (usleep, int, (useconds_t)); +- +-#include +- +-#include "macros.h" +- +-int +-main (void) +-{ +- time_t start = time (NULL); +- ASSERT (usleep (1000000) == 0); +- ASSERT (start < time (NULL)); +- +- ASSERT (usleep (0) == 0); +- +- return 0; +-} +Index: gnulib-tests/usleep.c +=================================================================== +--- gnulib-tests/usleep.c ++++ /dev/null +@@ -1,58 +0,0 @@ +-/* Pausing execution of the current thread. +- Copyright (C) 2009-2013 Free Software Foundation, Inc. +- Written by Eric Blake , 2009. +- +- 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 +- the Free Software Foundation; either version 3 of the License, or +- (at your option) any later version. +- +- This program is distributed in the hope that it will be useful, +- but WITHOUT ANY WARRANTY; without even the implied warranty of +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- GNU General Public License for more details. +- +- You should have received a copy of the GNU General Public License +- along with this program. If not, see . */ +- +-/* This file is _intentionally_ light-weight. Rather than using +- select or nanosleep, both of which drag in external libraries on +- some platforms, this merely rounds up to the nearest second if +- usleep() does not exist. If sub-second resolution is important, +- then use a more powerful interface to begin with. */ +- +-#include +- +-/* Specification. */ +-#include +- +-#include +- +-#ifndef HAVE_USLEEP +-# define HAVE_USLEEP 0 +-#endif +- +-/* Sleep for MICRO microseconds, which can be greater than 1 second. +- Return -1 and set errno to EINVAL on range error (about 4295 +- seconds), or 0 on success. Interaction with SIGALARM is +- unspecified. */ +- +-int +-usleep (useconds_t micro) +-{ +- unsigned int seconds = micro / 1000000; +- if (sizeof seconds < sizeof micro && micro / 1000000 != seconds) +- { +- errno = EINVAL; +- return -1; +- } +- if (!HAVE_USLEEP && micro % 1000000) +- seconds++; +- while ((seconds = sleep (seconds)) != 0); +- +-#undef usleep +-#if !HAVE_USLEEP +-# define usleep(x) 0 +-#endif +- return usleep (micro % 1000000); +-} +Index: lib/config.hin +=================================================================== +--- lib/config.hin.orig ++++ lib/config.hin +@@ -735,9 +735,6 @@ + /* Define to 1 when the gnulib module unsetenv should be tested. */ + #undef GNULIB_TEST_UNSETENV + +-/* Define to 1 when the gnulib module usleep should be tested. */ +-#undef GNULIB_TEST_USLEEP +- + /* Define to 1 when the gnulib module utimensat should be tested. */ + #undef GNULIB_TEST_UTIMENSAT + +@@ -2387,9 +2384,6 @@ + /* Define to 1 if you have the `uselocale' function. */ + #undef HAVE_USELOCALE + +-/* Define to 1 if you have the `usleep' function. */ +-#undef HAVE_USLEEP +- + /* Define to 1 if you have the `utimensat' function. */ + #undef HAVE_UTIMENSAT + +@@ -3348,9 +3342,6 @@ + #endif + + +-/* Define to an unsigned 32-bit type if lacks this type. */ +-#undef useconds_t +- + /* Define as a macro for copying va_list variables. */ + #undef va_copy + +Index: m4/gnulib-comp.m4 +=================================================================== +--- m4/gnulib-comp.m4.orig ++++ m4/gnulib-comp.m4 +@@ -741,8 +741,6 @@ AC_DEFUN([gl_EARLY], + # Code from module useless-if-before-free: + # Code from module userspec: + # Code from module userspec-tests: +- # Code from module usleep: +- # Code from module usleep-tests: + # Code from module utimecmp: + # Code from module utimens: + # Code from module utimens-tests: +@@ -2255,11 +2253,6 @@ changequote([, ])dnl + gl_UNLINKDIR + abs_aux_dir=`cd "$ac_aux_dir"; pwd` + AC_SUBST([abs_aux_dir]) +- gl_FUNC_USLEEP +- if test $HAVE_USLEEP = 0 || test $REPLACE_USLEEP = 1; then +- AC_LIBOBJ([usleep]) +- fi +- gl_UNISTD_MODULE_INDICATOR([usleep]) + AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) + abs_aux_dir=`cd "$ac_aux_dir"; pwd` + AC_SUBST([abs_aux_dir]) +@@ -3436,7 +3429,6 @@ AC_DEFUN([gl_FILE_LIST], [ + m4/unlocked-io.m4 + m4/uptime.m4 + m4/userspec.m4 +- m4/usleep.m4 + m4/utimbuf.m4 + m4/utimecmp.m4 + m4/utimens.m4 +@@ -3839,7 +3831,6 @@ AC_DEFUN([gl_FILE_LIST], [ + tests/test-unsetenv.c + tests/test-update-copyright.sh + tests/test-userspec.c +- tests/test-usleep.c + tests/test-utimens-common.h + tests/test-utimens.c + tests/test-utimens.h +@@ -3913,7 +3904,6 @@ AC_DEFUN([gl_FILE_LIST], [ + tests=lib/symlinkat.c + tests=lib/unlinkdir.c + tests=lib/unlinkdir.h +- tests=lib/usleep.c + tests=lib/w32sock.h + tests=lib/wctob.c + tests=lib/wctomb-impl.h +Index: m4/usleep.m4 +=================================================================== +--- m4/usleep.m4 ++++ /dev/null +@@ -1,45 +0,0 @@ +-# usleep.m4 serial 3 +-dnl Copyright (C) 2009-2013 Free Software Foundation, Inc. +-dnl This file is free software; the Free Software Foundation +-dnl gives unlimited permission to copy and/or distribute it, +-dnl with or without modifications, as long as this notice is preserved. +- +-dnl This macro intentionally does not check for select or nanosleep; +-dnl both of those modules can require external libraries. +-AC_DEFUN([gl_FUNC_USLEEP], +-[ +- AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) +- dnl usleep was required in POSIX 2001, but dropped as obsolete in +- dnl POSIX 2008; therefore, it is not always exposed in headers. +- AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) +- AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles +- AC_CHECK_FUNCS_ONCE([usleep]) +- AC_CHECK_TYPE([useconds_t], [], +- [AC_DEFINE([useconds_t], [unsigned int], [Define to an unsigned 32-bit +- type if lacks this type.])]) +- if test $ac_cv_func_usleep = no; then +- HAVE_USLEEP=0 +- else +- dnl POSIX allows implementations to reject arguments larger than +- dnl 999999, but GNU guarantees it will work. +- AC_CACHE_CHECK([whether usleep allows large arguments], +- [gl_cv_func_usleep_works], +- [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ +-#include +-]], [[return !!usleep (1000000);]])], +- [gl_cv_func_usleep_works=yes], [gl_cv_func_usleep_works=no], +- [case "$host_os" in +- # Guess yes on glibc systems. +- *-gnu*) gl_cv_func_usleep_works="guessing yes" ;; +- # If we don't know, assume the worst. +- *) gl_cv_func_usleep_works="guessing no" ;; +- esac +- ])]) +- case "$gl_cv_func_usleep_works" in +- *yes) ;; +- *) +- REPLACE_USLEEP=1 +- ;; +- esac +- fi +-]) diff --git a/coreutils-testsuite.changes b/coreutils-testsuite.changes index e0661a6..2fa1631 100644 --- a/coreutils-testsuite.changes +++ b/coreutils-testsuite.changes @@ -1,3 +1,17 @@ +------------------------------------------------------------------- +Mon May 20 15:38:30 UTC 2013 - mail@bernhard-voelker.de + +- Try to fix nap() races in gnulib-tests. + (coreutils-gnulib-tests-fix-nap-race.patch: add upstream patch) + (coreutils-gnulib-tests-fix-nap-race-obs.patch: add openSUSE patch for OBS) + +------------------------------------------------------------------- +Wed May 15 11:26:29 UTC 2013 - mhrusecky@suse.com + +- Provides: /bin/{kill,su} + * for compatibility with programs requiring these (like lsb) until these will + be provided by util-linux + ------------------------------------------------------------------- Thu Apr 4 23:25:17 UTC 2013 - mail@bernhard-voelker.de diff --git a/coreutils-testsuite.spec b/coreutils-testsuite.spec index 62a0209..9e792ec 100644 --- a/coreutils-testsuite.spec +++ b/coreutils-testsuite.spec @@ -44,6 +44,8 @@ BuildRequires: valgrind Provides: %{name} = %{version} %if "%{name}" == "coreutils" +Provides: /bin/kill +Provides: /bin/su Provides: fileutils = %{version} Provides: mktemp = %{version} Provides: sh-utils = %{version} @@ -95,6 +97,13 @@ Patch16: coreutils-invalid-ids.patch Patch100: coreutils-build-timeout-as-pie.patch Patch101: coreutils-su.patch +# Fix gnulib-test failures related to gnulib-tests/nap.h. +Patch200: coreutils-gnulib-tests-fix-nap-race.patch + +# Fix gnulib-test failures: increase nap() delay multiplier even +# a bit more to avoid failures on OBS. +Patch201: coreutils-gnulib-tests-fix-nap-race-obs.patch + # ================================================ %description These are the GNU core utilities. This package is the union of @@ -131,6 +140,9 @@ receiving util-linux package available which comes with the new binaries. %patch100 %patch101 +%patch200 +%patch201 + xz -dc %{S:4} >po/de.po #???## We need to statically link to gmp, otherwise we have a build loop @@ -159,7 +171,6 @@ make all %{?_smp_mflags} V=1 %if "%{name}" == "coreutils-testsuite" # Make our multi-byte test for sort executable chmod a+x tests/misc/sort-mb-tests.sh - # Avoid parallel make, because otherwise some timeout based tests like # rm/ext3-perf may fail due to high CPU or IO load. make check-very-expensive \ diff --git a/coreutils.changes b/coreutils.changes index b08c523..2fa1631 100644 --- a/coreutils.changes +++ b/coreutils.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Mon May 20 15:38:30 UTC 2013 - mail@bernhard-voelker.de + +- Try to fix nap() races in gnulib-tests. + (coreutils-gnulib-tests-fix-nap-race.patch: add upstream patch) + (coreutils-gnulib-tests-fix-nap-race-obs.patch: add openSUSE patch for OBS) + ------------------------------------------------------------------- Wed May 15 11:26:29 UTC 2013 - mhrusecky@suse.com diff --git a/coreutils.spec b/coreutils.spec index 13672d1..c8e802d 100644 --- a/coreutils.spec +++ b/coreutils.spec @@ -97,6 +97,13 @@ Patch16: coreutils-invalid-ids.patch Patch100: coreutils-build-timeout-as-pie.patch Patch101: coreutils-su.patch +# Fix gnulib-test failures related to gnulib-tests/nap.h. +Patch200: coreutils-gnulib-tests-fix-nap-race.patch + +# Fix gnulib-test failures: increase nap() delay multiplier even +# a bit more to avoid failures on OBS. +Patch201: coreutils-gnulib-tests-fix-nap-race-obs.patch + # ================================================ %description These are the GNU core utilities. This package is the union of @@ -133,6 +140,9 @@ receiving util-linux package available which comes with the new binaries. %patch100 %patch101 +%patch200 +%patch201 + xz -dc %{S:4} >po/de.po #???## We need to statically link to gmp, otherwise we have a build loop @@ -161,7 +171,6 @@ make all %{?_smp_mflags} V=1 %if "%{name}" == "coreutils-testsuite" # Make our multi-byte test for sort executable chmod a+x tests/misc/sort-mb-tests.sh - # Avoid parallel make, because otherwise some timeout based tests like # rm/ext3-perf may fail due to high CPU or IO load. make check-very-expensive \