diff --git a/coreutils-build-timeout-as-pie.patch b/coreutils-build-timeout-as-pie.patch
index 87f2b08..41fc6b8 100644
--- a/coreutils-build-timeout-as-pie.patch
+++ b/coreutils-build-timeout-as-pie.patch
@@ -16,8 +16,8 @@ independent executable (PIE). This is enforced via RPMLINT.
Index: src/local.mk
===================================================================
---- src/local.mk.orig 2014-01-03 18:18:24.193893522 +0100
-+++ src/local.mk 2014-01-03 19:47:24.269617498 +0100
+--- src/local.mk.orig 2013-12-04 15:48:30.000000000 +0100
++++ src/local.mk 2014-01-09 01:26:38.363704044 +0100
@@ -17,7 +17,7 @@
## along with this program. If not, see .
diff --git a/coreutils-copy-fix-selinux-existing-dirs.patch b/coreutils-copy-fix-selinux-existing-dirs.patch
new file mode 100644
index 0000000..fdf253d
--- /dev/null
+++ b/coreutils-copy-fix-selinux-existing-dirs.patch
@@ -0,0 +1,90 @@
+Upstream patch on top of 8.22:
+ http://lists.gnu.org/archive/html/coreutils/2014-01/msg00012.html
+
+Stripped down to the relevant part: NEWS and THANKS.in chunks removed.
+Original NEWS entry:
+
+ cp -a again sets the correct SELinux context for existing directories in
+ the destination. Previously it set the context of an existing directory
+ to that of its last copied descendent.
+ [bug introduced in coreutils-8.22]
+
+Originally reported for Fedora by Michal Trunecka in rh#1045122:
+ https://bugzilla.redhat.com/show_bug.cgi?id=1045122
+
+______________________________________________________________________
+From f2f8b688b87b94ed3551f47f9a6422c873acf5d1 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?P=C3=A1draig=20Brady?=
+Date: Sun, 5 Jan 2014 15:00:55 +0000
+Subject: [PATCH] copy: fix SELinux context preservation for existing
+ directories
+
+* src/copy.c (copy_internal): Use the global process context
+to set the context of existing directories before they're populated.
+This is more consistent with the new directory case, and fixes
+a bug for existing directories where we erroneously set the
+context to the last copied descendent, rather than to that of
+the source directory itself.
+* tests/cp/cp-a-selinux.sh: Add a test for this case.
+---
+ src/copy.c | 13 ++++++++++++-
+ tests/cp/cp-a-selinux.sh | 15 +++++++++++++++
+ 2 files changed, 27 insertions(+), 1 deletion(-)
+
+Index: src/copy.c
+===================================================================
+--- src/copy.c.orig 2013-12-05 01:59:36.000000000 +0100
++++ src/copy.c 2014-01-09 02:47:33.108744454 +0100
+@@ -2408,6 +2408,17 @@ copy_internal (char const *src_name, cha
+ else
+ {
+ omitted_permissions = 0;
++
++ /* For directories, the process global context could be reset for
++ descendents, so use it to set the context for existing dirs here.
++ This will also give earlier indication of failure to set ctx. */
++ if (x->set_security_context || x->preserve_security_context)
++ if (! set_file_security_ctx (dst_name, x->preserve_security_context,
++ false, x))
++ {
++ if (x->require_preserve_context)
++ goto un_backup;
++ }
+ }
+
+ /* Decide whether to copy the contents of the directory. */
+@@ -2598,7 +2609,7 @@ copy_internal (char const *src_name, cha
+
+ /* With -Z or --preserve=context, set the context for existing files.
+ Note this is done already for copy_reg() for reasons described therein. */
+- if (!new_dst && !x->copy_as_regular
++ if (!new_dst && !x->copy_as_regular && !S_ISDIR (src_mode)
+ && (x->set_security_context || x->preserve_security_context))
+ {
+ if (! set_file_security_ctx (dst_name, x->preserve_security_context,
+Index: tests/cp/cp-a-selinux.sh
+===================================================================
+--- tests/cp/cp-a-selinux.sh.orig 2013-12-04 15:48:30.000000000 +0100
++++ tests/cp/cp-a-selinux.sh 2014-01-09 02:47:33.109744597 +0100
+@@ -41,6 +41,21 @@ test -s err && fail=1 #there must be n
+ ls -Z e | grep $ctx || fail=1
+ ls -Z f | grep $ctx || fail=1
+
++# Check handling of existing dirs which requires specific handling
++# due to recursion, and was handled incorrectly in coreutils-8.22
++mkdir -p backup/existing_dir/ || framework_failure_
++ls -Zd backup/existing_dir | grep $ctx && framework_failure_
++touch backup/existing_dir/file || framework_failure_
++chcon $ctx backup/existing_dir/file || framework_failure_
++# Set the dir context to ensure it is reset
++mkdir -p --context="$ctx" restore/existing_dir || framework_failure_
++# Set the permissions of the source to show they're reset too
++chmod o+rw restore/existing_dir
++# Copy and ensure existing directories updated
++cp -a backup/. restore/
++ls -Zd restore/existing_dir | grep $ctx &&
++ { ls -lZd restore/existing_dir; fail=1; }
++
+ # Check restorecon (-Z) functionality for file and directory
+ get_selinux_type() { ls -Zd "$1" | sed -n 's/.*:\(.*_t\):.*/\1/p'; }
+ # Also make a dir with our known context
diff --git a/coreutils-gnulib-tests-ppc64le.patch b/coreutils-gnulib-tests-ppc64le.patch
index 8b22c69..6582637 100644
--- a/coreutils-gnulib-tests-ppc64le.patch
+++ b/coreutils-gnulib-tests-ppc64le.patch
@@ -5,8 +5,8 @@
Index: gnulib-tests/test-isnanl.h
===================================================================
---- gnulib-tests/test-isnanl.h.orig 2014-01-03 18:18:24.131884585 +0100
-+++ gnulib-tests/test-isnanl.h 2014-01-03 19:47:25.428781733 +0100
+--- gnulib-tests/test-isnanl.h.orig 2013-12-04 15:53:33.000000000 +0100
++++ gnulib-tests/test-isnanl.h 2014-01-09 01:26:40.271972672 +0100
@@ -51,6 +51,15 @@ main ()
/* A bit pattern that is different from a Quiet NaN. With a bit of luck,
it's a Signalling NaN. */
@@ -25,8 +25,8 @@ Index: gnulib-tests/test-isnanl.h
# if LDBL_EXPBIT0_BIT > 0
Index: gnulib-tests/test-signbit.c
===================================================================
---- gnulib-tests/test-signbit.c.orig 2014-01-03 18:18:24.131884585 +0100
-+++ gnulib-tests/test-signbit.c 2014-01-03 19:47:25.446784284 +0100
+--- gnulib-tests/test-signbit.c.orig 2013-12-04 15:53:33.000000000 +0100
++++ gnulib-tests/test-signbit.c 2014-01-09 01:26:40.271972672 +0100
@@ -151,6 +151,16 @@ test_signbitl ()
#define NWORDS \
((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
diff --git a/coreutils-i18n.patch b/coreutils-i18n.patch
index 4db04f7..53498bb 100644
--- a/coreutils-i18n.patch
+++ b/coreutils-i18n.patch
@@ -1,5 +1,5 @@
lib/linebuffer.h | 8
- src/cut.c | 427 ++++++++++++++++++++++++-
+ src/cut.c | 433 ++++++++++++++++++++++++-
src/expand.c | 165 +++++++++
src/fold.c | 308 ++++++++++++++++--
src/join.c | 363 ++++++++++++++++++---
@@ -18,12 +18,12 @@
tests/misc/unexpand.pl | 39 ++
tests/misc/uniq.pl | 55 +++
tests/pr/pr-tests.pl | 49 ++
- 20 files changed, 3188 insertions(+), 180 deletions(-)
+ 20 files changed, 3194 insertions(+), 180 deletions(-)
Index: lib/linebuffer.h
===================================================================
--- lib/linebuffer.h.orig 2013-12-04 15:53:33.000000000 +0100
-+++ lib/linebuffer.h 2014-01-05 00:03:18.941940873 +0100
++++ lib/linebuffer.h 2014-01-09 00:22:09.644387186 +0100
@@ -21,6 +21,11 @@
# include
@@ -49,7 +49,7 @@ Index: lib/linebuffer.h
Index: src/cut.c
===================================================================
--- src/cut.c.orig 2013-12-04 15:48:30.000000000 +0100
-+++ src/cut.c 2014-01-05 00:03:18.942941015 +0100
++++ src/cut.c 2014-01-09 00:46:30.197738943 +0100
@@ -28,6 +28,11 @@
#include
#include
@@ -134,7 +134,16 @@ Index: src/cut.c
struct range_pair
{
-@@ -106,15 +169,25 @@ enum operating_mode
+@@ -75,6 +138,8 @@ static size_t n_rp;
+ /* Number of `struct range_pair's allocated. */
+ static size_t n_rp_allocated;
+
++/* Length of the delimiter given as argument to -d. */
++size_t delimlen;
+
+ /* Append LOW, HIGH to the list RP of range pairs, allocating additional
+ space if necessary. Update global variable N_RP. When allocating,
+@@ -106,15 +171,25 @@ enum operating_mode
{
undefined_mode,
@@ -161,7 +170,7 @@ Index: src/cut.c
/* If true do not output lines containing no delimeter characters.
Otherwise, all such lines are printed. This option is valid only
with field mode. */
-@@ -126,6 +199,9 @@ static bool complement;
+@@ -126,6 +201,9 @@ static bool complement;
/* The delimeter character for field mode. */
static unsigned char delim;
@@ -171,7 +180,7 @@ Index: src/cut.c
/* True if the --output-delimiter=STRING option was specified. */
static bool output_delimiter_specified;
-@@ -188,7 +264,7 @@ Print selected parts of lines from each
+@@ -188,7 +266,7 @@ Print selected parts of lines from each
-f, --fields=LIST select only these fields; also print any line\n\
that contains no delimiter character, unless\n\
the -s option is specified\n\
@@ -180,7 +189,7 @@ Index: src/cut.c
"), stdout);
fputs (_("\
--complement complement the set of selected bytes, characters\n\
-@@ -381,6 +457,9 @@ set_fields (const char *fieldstr)
+@@ -381,6 +459,9 @@ set_fields (const char *fieldstr)
if (operating_mode == byte_mode)
error (0, 0,
_("byte offset %s is too large"), quote (bad_num));
@@ -190,7 +199,7 @@ Index: src/cut.c
else
error (0, 0,
_("field number %s is too large"), quote (bad_num));
-@@ -505,6 +584,82 @@ cut_bytes (FILE *stream)
+@@ -505,6 +586,82 @@ cut_bytes (FILE *stream)
}
}
@@ -273,7 +282,7 @@ Index: src/cut.c
/* Read from stream STREAM, printing to standard output any selected fields. */
static void
-@@ -629,13 +784,198 @@ cut_fields (FILE *stream)
+@@ -629,13 +786,201 @@ cut_fields (FILE *stream)
}
}
@@ -456,7 +465,10 @@ Index: src/cut.c
+ break;
+
+ case field_mode:
-+ cut_fields_mb (stream);
++ if (delimlen == 1)
++ cut_fields (stream);
++ else
++ cut_fields_mb (stream);
+ break;
+
+ default:
@@ -475,16 +487,15 @@ Index: src/cut.c
}
/* Process file FILE to standard output.
-@@ -687,6 +1027,8 @@ main (int argc, char **argv)
+@@ -687,6 +1032,7 @@ main (int argc, char **argv)
bool ok;
bool delim_specified = false;
char *spec_list_string IF_LINT ( = NULL);
+ char mbdelim[MB_LEN_MAX + 1];
-+ size_t delimlen = 0;
initialize_main (&argc, &argv);
set_program_name (argv[0]);
-@@ -709,7 +1051,6 @@ main (int argc, char **argv)
+@@ -709,7 +1055,6 @@ main (int argc, char **argv)
switch (optc)
{
case 'b':
@@ -492,7 +503,7 @@ Index: src/cut.c
/* Build the byte list. */
if (operating_mode != undefined_mode)
FATAL_ERROR (_("only one type of list may be specified"));
-@@ -717,6 +1058,14 @@ main (int argc, char **argv)
+@@ -717,6 +1062,14 @@ main (int argc, char **argv)
spec_list_string = optarg;
break;
@@ -507,7 +518,7 @@ Index: src/cut.c
case 'f':
/* Build the field list. */
if (operating_mode != undefined_mode)
-@@ -728,10 +1077,36 @@ main (int argc, char **argv)
+@@ -728,10 +1081,38 @@ main (int argc, char **argv)
case 'd':
/* New delimiter. */
/* Interpret -d '' to mean 'use the NUL byte as the delimiter.' */
@@ -533,6 +544,8 @@ Index: src/cut.c
+ FATAL_ERROR (_("the delimiter must be a single character"));
+ memcpy (mbdelim, optarg, delimlen);
+ mbdelim[delimlen] = '\0';
++ if (delimlen == 1)
++ delim = *optarg;
+ }
+ }
+
@@ -548,7 +561,7 @@ Index: src/cut.c
break;
case OUTPUT_DELIMITER_OPTION:
-@@ -744,6 +1119,7 @@ main (int argc, char **argv)
+@@ -744,6 +1125,7 @@ main (int argc, char **argv)
break;
case 'n':
@@ -556,7 +569,7 @@ Index: src/cut.c
break;
case 's':
-@@ -783,15 +1159,34 @@ main (int argc, char **argv)
+@@ -783,15 +1165,34 @@ main (int argc, char **argv)
}
if (!delim_specified)
@@ -600,7 +613,7 @@ Index: src/cut.c
Index: src/expand.c
===================================================================
--- src/expand.c.orig 2013-12-04 15:48:30.000000000 +0100
-+++ src/expand.c 2014-01-05 00:03:18.942941015 +0100
++++ src/expand.c 2014-01-09 00:22:09.646387469 +0100
@@ -37,12 +37,34 @@
#include
#include
@@ -796,7 +809,7 @@ Index: src/expand.c
Index: src/fold.c
===================================================================
--- src/fold.c.orig 2013-12-04 15:48:30.000000000 +0100
-+++ src/fold.c 2014-01-05 00:03:18.942941015 +0100
++++ src/fold.c 2014-01-09 00:22:09.646387469 +0100
@@ -22,12 +22,34 @@
#include
#include
@@ -1197,7 +1210,7 @@ Index: src/fold.c
Index: src/join.c
===================================================================
--- src/join.c.orig 2013-12-04 15:48:30.000000000 +0100
-+++ src/join.c 2014-01-05 00:03:18.943941157 +0100
++++ src/join.c 2014-01-09 00:22:09.648387752 +0100
@@ -22,18 +22,32 @@
#include
#include
@@ -1693,7 +1706,7 @@ Index: src/join.c
Index: src/pr.c
===================================================================
--- src/pr.c.orig 2013-12-04 15:48:30.000000000 +0100
-+++ src/pr.c 2014-01-05 00:03:18.944941300 +0100
++++ src/pr.c 2014-01-09 00:22:09.649387893 +0100
@@ -312,6 +312,24 @@
#include
@@ -2460,7 +2473,7 @@ Index: src/pr.c
Index: src/sort.c
===================================================================
--- src/sort.c.orig 2013-12-04 15:48:30.000000000 +0100
-+++ src/sort.c 2014-01-05 00:03:18.945941442 +0100
++++ src/sort.c 2014-01-09 00:50:40.005001889 +0100
@@ -29,6 +29,14 @@
#include
#include
@@ -3281,12 +3294,12 @@ Index: src/sort.c
+ diff = - NONZERO (lenb);
+ else if (lenb == 0)
+ diff = 1;
++ else if (hard_LC_COLLATE && !folding)
++ {
++ diff = xmemcoll0 (texta, lena, textb, lenb);
++ }
+ else
-+ {
-+ diff = memcmp (texta, textb, MIN (lena,lenb));
-+ if (!diff)
-+ diff = xmemcoll (texta, lena, textb, lenb);
-+ }
++ diff = memcmp (texta, textb, MIN (lena + 1,lenb + 1));
+
+ if (ignore || translate)
+ free (texta);
@@ -3443,7 +3456,7 @@ Index: src/sort.c
Index: src/unexpand.c
===================================================================
--- src/unexpand.c.orig 2013-12-04 15:48:30.000000000 +0100
-+++ src/unexpand.c 2014-01-05 00:03:18.947941726 +0100
++++ src/unexpand.c 2014-01-09 00:22:09.651388176 +0100
@@ -38,12 +38,29 @@
#include
#include
@@ -3702,7 +3715,7 @@ Index: src/unexpand.c
Index: src/uniq.c
===================================================================
--- src/uniq.c.orig 2013-12-04 15:48:30.000000000 +0100
-+++ src/uniq.c 2014-01-05 00:03:18.947941726 +0100
++++ src/uniq.c 2014-01-09 00:22:09.651388176 +0100
@@ -21,6 +21,17 @@
#include
#include
@@ -4090,7 +4103,7 @@ Index: src/uniq.c
Index: tests/local.mk
===================================================================
--- tests/local.mk.orig 2013-12-04 15:48:30.000000000 +0100
-+++ tests/local.mk 2014-01-05 00:03:18.947941726 +0100
++++ tests/local.mk 2014-01-09 00:22:09.652388317 +0100
@@ -324,6 +324,7 @@ all_tests = \
tests/misc/sort-discrim.sh \
tests/misc/sort-files0-from.pl \
@@ -4102,7 +4115,7 @@ Index: tests/local.mk
Index: tests/misc/cut.pl
===================================================================
--- tests/misc/cut.pl.orig 2013-12-04 15:48:30.000000000 +0100
-+++ tests/misc/cut.pl 2014-01-05 00:03:18.948941869 +0100
++++ tests/misc/cut.pl 2014-01-09 00:22:09.652388317 +0100
@@ -23,9 +23,11 @@ use strict;
# Turn off localization of executable's output.
@ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3;
@@ -4128,7 +4141,7 @@ Index: tests/misc/cut.pl
Index: tests/misc/expand.pl
===================================================================
--- tests/misc/expand.pl.orig 2013-12-04 15:48:30.000000000 +0100
-+++ tests/misc/expand.pl 2014-01-05 00:03:18.948941869 +0100
++++ tests/misc/expand.pl 2014-01-09 00:22:09.652388317 +0100
@@ -23,6 +23,15 @@ use strict;
# Turn off localization of executable's output.
@ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3;
@@ -4186,7 +4199,7 @@ Index: tests/misc/expand.pl
Index: tests/misc/fold.pl
===================================================================
--- tests/misc/fold.pl.orig 2013-12-04 15:48:30.000000000 +0100
-+++ tests/misc/fold.pl 2014-01-05 00:03:18.948941869 +0100
++++ tests/misc/fold.pl 2014-01-09 00:22:09.652388317 +0100
@@ -20,9 +20,18 @@ use strict;
(my $program_name = $0) =~ s|.*/||;
@@ -4259,7 +4272,7 @@ Index: tests/misc/fold.pl
Index: tests/misc/join.pl
===================================================================
--- tests/misc/join.pl.orig 2013-12-04 15:48:30.000000000 +0100
-+++ tests/misc/join.pl 2014-01-05 00:03:18.949942011 +0100
++++ tests/misc/join.pl 2014-01-09 00:22:09.653388459 +0100
@@ -25,6 +25,15 @@ my $limits = getlimits ();
my $prog = 'join';
@@ -4329,7 +4342,7 @@ Index: tests/misc/join.pl
Index: tests/misc/sort-mb-tests.sh
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ tests/misc/sort-mb-tests.sh 2014-01-05 00:03:18.949942011 +0100
++++ tests/misc/sort-mb-tests.sh 2014-01-09 00:22:09.653388459 +0100
@@ -0,0 +1,45 @@
+#!/bin/sh
+# Verify sort's multi-byte support.
@@ -4379,7 +4392,7 @@ Index: tests/misc/sort-mb-tests.sh
Index: tests/misc/sort-merge.pl
===================================================================
--- tests/misc/sort-merge.pl.orig 2013-12-04 15:48:30.000000000 +0100
-+++ tests/misc/sort-merge.pl 2014-01-05 00:03:18.949942011 +0100
++++ tests/misc/sort-merge.pl 2014-01-09 00:22:09.653388459 +0100
@@ -26,6 +26,15 @@ my $prog = 'sort';
# Turn off localization of executable's output.
@ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3;
@@ -4439,7 +4452,7 @@ Index: tests/misc/sort-merge.pl
Index: tests/misc/sort.pl
===================================================================
--- tests/misc/sort.pl.orig 2013-12-04 15:48:30.000000000 +0100
-+++ tests/misc/sort.pl 2014-01-05 00:03:58.891623346 +0100
++++ tests/misc/sort.pl 2014-01-09 00:22:09.653388459 +0100
@@ -24,10 +24,15 @@ my $prog = 'sort';
# Turn off localization of executable's output.
@ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3;
@@ -4506,7 +4519,7 @@ Index: tests/misc/sort.pl
Index: tests/misc/unexpand.pl
===================================================================
--- tests/misc/unexpand.pl.orig 2013-12-04 15:48:30.000000000 +0100
-+++ tests/misc/unexpand.pl 2014-01-05 00:03:18.950942153 +0100
++++ tests/misc/unexpand.pl 2014-01-09 00:22:09.654388600 +0100
@@ -27,6 +27,14 @@ my $limits = getlimits ();
my $prog = 'unexpand';
@@ -4563,7 +4576,7 @@ Index: tests/misc/unexpand.pl
Index: tests/misc/uniq.pl
===================================================================
--- tests/misc/uniq.pl.orig 2013-12-04 15:48:30.000000000 +0100
-+++ tests/misc/uniq.pl 2014-01-05 00:03:18.950942153 +0100
++++ tests/misc/uniq.pl 2014-01-09 00:22:09.654388600 +0100
@@ -23,9 +23,17 @@ my $limits = getlimits ();
my $prog = 'uniq';
my $try = "Try '$prog --help' for more information.\n";
@@ -4639,7 +4652,7 @@ Index: tests/misc/uniq.pl
Index: tests/pr/pr-tests.pl
===================================================================
--- tests/pr/pr-tests.pl.orig 2013-12-04 15:48:30.000000000 +0100
-+++ tests/pr/pr-tests.pl 2014-01-05 00:03:18.950942153 +0100
++++ tests/pr/pr-tests.pl 2014-01-09 00:22:09.654388600 +0100
@@ -23,6 +23,15 @@ use strict;
my $prog = 'pr';
diff --git a/coreutils-invalid-ids.patch b/coreutils-invalid-ids.patch
index 87694be..cb42466 100644
--- a/coreutils-invalid-ids.patch
+++ b/coreutils-invalid-ids.patch
@@ -17,8 +17,8 @@ Andreas Gruenbacher
Index: src/chgrp.c
===================================================================
---- src/chgrp.c.orig 2014-01-03 18:18:24.257902746 +0100
-+++ src/chgrp.c 2014-01-03 19:47:23.019440368 +0100
+--- src/chgrp.c.orig 2013-12-04 15:48:30.000000000 +0100
++++ src/chgrp.c 2014-01-09 01:26:29.066362326 +0100
@@ -88,7 +88,7 @@ parse_group (const char *name)
{
unsigned long int tmp;
diff --git a/coreutils-remove_hostname_documentation.patch b/coreutils-remove_hostname_documentation.patch
index bae07fb..7f1068b 100644
--- a/coreutils-remove_hostname_documentation.patch
+++ b/coreutils-remove_hostname_documentation.patch
@@ -4,8 +4,8 @@
Index: doc/coreutils.texi
===================================================================
---- doc/coreutils.texi.orig 2014-01-03 18:18:24.527941663 +0100
-+++ doc/coreutils.texi 2014-01-03 19:47:18.522803264 +0100
+--- doc/coreutils.texi.orig 2013-12-13 03:43:10.000000000 +0100
++++ doc/coreutils.texi 2014-01-09 01:25:54.832410969 +0100
@@ -66,7 +66,6 @@
* groups: (coreutils)groups invocation. Print group names a user is in.
* head: (coreutils)head invocation. Output the first part of files.
diff --git a/coreutils-remove_kill_documentation.patch b/coreutils-remove_kill_documentation.patch
index 8632a5f..67a363e 100644
--- a/coreutils-remove_kill_documentation.patch
+++ b/coreutils-remove_kill_documentation.patch
@@ -4,8 +4,8 @@
Index: doc/coreutils.texi
===================================================================
---- doc/coreutils.texi.orig 2014-01-03 19:47:18.522803264 +0100
-+++ doc/coreutils.texi 2014-01-03 19:47:20.702112039 +0100
+--- doc/coreutils.texi.orig 2014-01-09 01:25:54.832410969 +0100
++++ doc/coreutils.texi 2014-01-09 01:26:25.779767542 +0100
@@ -69,7 +69,6 @@
* id: (coreutils)id invocation. Print user identity.
* install: (coreutils)install invocation. Copy and change attributes.
diff --git a/coreutils-skip-gnulib-test-tls.patch b/coreutils-skip-gnulib-test-tls.patch
new file mode 100644
index 0000000..a9acaca
--- /dev/null
+++ b/coreutils-skip-gnulib-test-tls.patch
@@ -0,0 +1,37 @@
+Subject: Skip the gnulib test 'test-tls' on some platforms
+
+On i586, x86_64, ppc and ppc64, this test is known to sometimes fail
+with a diagnostic like:
+
+ Starting test_tls ...*** Error in `./test-tls': free(): invalid pointer: 0x00007f21500008c0 ***
+ ======= Backtrace: =========
+ /lib64/libc.so.6(+0x7406f)[0x7f215845006f]
+ /lib64/libc.so.6(+0x7989e)[0x7f215845589e]
+ /lib64/libpthread.so.0(+0x7ee2)[0x7f215878fee2]
+ /lib64/libpthread.so.0(+0x813e)[0x7f215879013e]
+ /lib64/libc.so.6(clone+0x6d)[0x7f21584c3d6d]
+
+* gnulib-tests/gnulib.mk (test-tls): Comment to skip for now.
+
+---
+ gnulib-tests/gnulib.mk | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+Index: gnulib-tests/gnulib.mk
+===================================================================
+--- gnulib-tests/gnulib.mk.orig 2013-12-04 16:02:24.000000000 +0100
++++ gnulib-tests/gnulib.mk 2014-01-09 01:28:13.401082108 +0100
+@@ -2303,9 +2303,10 @@ EXTRA_DIST += test-time.c
+
+ ## begin gnulib module tls-tests
+
+-TESTS += test-tls
+-check_PROGRAMS += test-tls
+-test_tls_LDADD = $(LDADD) @LIBMULTITHREAD@ @YIELD_LIB@
++# Fails on i586 and x86_64.
++#TESTS += test-tls
++#check_PROGRAMS += test-tls
++#test_tls_LDADD = $(LDADD) @LIBMULTITHREAD@ @YIELD_LIB@
+
+ EXTRA_DIST += test-tls.c
+
diff --git a/coreutils-skip-some-sort-tests-on-ppc.patch b/coreutils-skip-some-sort-tests-on-ppc.patch
new file mode 100644
index 0000000..20fb016
--- /dev/null
+++ b/coreutils-skip-some-sort-tests-on-ppc.patch
@@ -0,0 +1,52 @@
+Subject: tests: skip some valgrind-ed tests of sort on ppc/ppc64
+
+Valgrind diagnoses problems in 'mkstemp64' deep down in glibc on PowerPC:
+
+ Conditional jump or move depends on uninitialised value(s)
+ at 0xFDB37DC: __udivmoddi4 (in /lib/libc-2.18.90.so)
+ by 0xFDB3DD7: __umoddi3@GLIBC_2.0 (in /lib/libc-2.18.90.so)
+ by 0xFDFDF9F: __gen_tempname (in /lib/libc-2.18.90.so)
+ by 0xFE77563: mkstemp64 (in /lib/libc-2.18.90.so)
+ by 0x100135D3: mkstemp_safer (mkstemp-safer.c:33)
+ by 0x10006ECF: create_temp_file (sort.c:942)
+ by 0x1000A427: maybe_create_temp (sort.c:1176)
+ by 0x100031BF: main (sort.c:1223)
+
+* tests/misc/sort-stale-thread-mem.sh: Skip on ppc/ppc64.
+* tests/misc/sort-u-FMR.sh: Likewise.
+
+---
+ tests/misc/sort-stale-thread-mem.sh | 4 ++++
+ tests/misc/sort-u-FMR.sh | 4 ++++
+ 2 files changed, 8 insertions(+)
+
+Index: tests/misc/sort-stale-thread-mem.sh
+===================================================================
+--- tests/misc/sort-stale-thread-mem.sh.orig 2013-12-04 15:48:30.000000000 +0100
++++ tests/misc/sort-stale-thread-mem.sh 2014-01-09 01:27:05.735557168 +0100
+@@ -27,6 +27,10 @@ require_valgrind_
+ grep '^#define HAVE_PTHREAD_T 1' "$CONFIG_HEADER" > /dev/null ||
+ skip_ 'requires pthreads'
+
++case "$( uname -m )" in
++ ppc | ppc64) skip_ "SUSE: disabled for now on ppc/ppc64";;
++esac
++
+ # gensort output seems to trigger the failure more often,
+ # so prefer gensort if it is available.
+ (gensort -a 10000 in) 2>/dev/null ||
+Index: tests/misc/sort-u-FMR.sh
+===================================================================
+--- tests/misc/sort-u-FMR.sh.orig 2013-12-04 15:48:30.000000000 +0100
++++ tests/misc/sort-u-FMR.sh 2014-01-09 01:27:05.736557309 +0100
+@@ -20,6 +20,10 @@
+ print_ver_ sort
+ require_valgrind_
+
++case "$( uname -m )" in
++ ppc | ppc64) skip_ "SUSE: disabled for now on ppc/ppc64";;
++esac
++
+ { echo 0; printf '%0900d\n' 1; } > in || framework_failure_
+
+ valgrind --error-exitcode=1 sort --p=1 -S32b -u in > out || fail=1
diff --git a/coreutils-sysinfo.patch b/coreutils-sysinfo.patch
index 7f0b339..f30232d 100644
--- a/coreutils-sysinfo.patch
+++ b/coreutils-sysinfo.patch
@@ -4,8 +4,8 @@
Index: src/uname.c
===================================================================
---- src/uname.c.orig 2014-01-03 18:18:24.316911250 +0100
-+++ src/uname.c 2014-01-03 19:47:21.922284919 +0100
+--- src/uname.c.orig 2013-12-04 15:48:30.000000000 +0100
++++ src/uname.c 2014-01-09 01:26:27.130914660 +0100
@@ -337,6 +337,36 @@ main (int argc, char **argv)
# endif
}
diff --git a/coreutils-tests-avoid-FP-cp-cpuinfo.patch b/coreutils-tests-avoid-FP-cp-cpuinfo.patch
new file mode 100644
index 0000000..d021d89
--- /dev/null
+++ b/coreutils-tests-avoid-FP-cp-cpuinfo.patch
@@ -0,0 +1,36 @@
+From 84e67a5bd239179e2faded424861dce5718fa12c Mon Sep 17 00:00:00 2001
+From: Bernhard Voelker
+Date: Tue, 7 Jan 2014 19:18:25 +0100
+Subject: [PATCH] tests: avoid FP failure when cp fails for /proc/cpuinfo
+
+On aarch64, cp fails to copy /proc/cpuinfo because the inode number
+seems to change between the initial stat() call and copying the file:
+
+ $ cp /proc/cpuinfo exp
+ cp: skipping file '/proc/cpuinfo', as it was \
+ replaced while being copied
+
+* tests/cp/proc-zero-len.sh: When cp fails, check on the above
+error message to skip the test.
+---
+ tests/cp/proc-zero-len.sh | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+Index: tests/cp/proc-zero-len.sh
+===================================================================
+--- tests/cp/proc-zero-len.sh.orig 2013-12-04 15:48:30.000000000 +0100
++++ tests/cp/proc-zero-len.sh 2014-01-09 01:28:38.447905329 +0100
+@@ -27,7 +27,12 @@ test -r $f || f=empty
+ cat $f > out || fail=1
+
+ # With coreutils-6.9, this would create a zero-length "exp" file.
+-cp $f exp || fail=1
++# Skip this test on architectures like aarch64 where the inode
++# number of the file changed during the cp run.
++cp $f exp 2>err \
++ || { fail=1;
++ grep 'replaced while being copied' \
++ && skip_ "File $f is being replaced while being copied"; }
+
+ # Don't simply compare contents; they might differ,
+ # e.g., if CPU freq changes between cat and cp invocations.
diff --git a/coreutils-tests-shorten-extreme-factor-tests.patch b/coreutils-tests-shorten-extreme-factor-tests.patch
new file mode 100644
index 0000000..b3f6db0
--- /dev/null
+++ b/coreutils-tests-shorten-extreme-factor-tests.patch
@@ -0,0 +1,36 @@
+From d3b433bd41c8978c31fee085cc7e6b0554a4c03e Mon Sep 17 00:00:00 2001
+From: Bernhard Voelker
+Date: Wed, 8 Jan 2014 01:15:58 +0100
+Subject: [PATCH] tests: shorten extreme-expensive factor tests
+
+The extended factor tests alone can take several hours on e.g. i586
+or arm6l. Strip the tests down from 37 to 3.
+
+* tests/local.mk (factor_tests): From the sequence of the tests
+00..36, remove all but t00, t05 and t36.
+---
+ tests/local.mk | 11 +++--------
+ 1 file changed, 3 insertions(+), 8 deletions(-)
+
+Index: tests/local.mk
+===================================================================
+--- tests/local.mk.orig 2014-01-09 00:22:09.652388317 +0100
++++ tests/local.mk 2014-01-09 01:29:51.697680994 +0100
+@@ -649,14 +649,9 @@ all_tests = \
+ # See tests/factor/create-test.sh.
+ tf = tests/factor
+ factor_tests = \
+- $(tf)/t00.sh $(tf)/t01.sh $(tf)/t02.sh $(tf)/t03.sh $(tf)/t04.sh \
+- $(tf)/t05.sh $(tf)/t06.sh $(tf)/t07.sh $(tf)/t08.sh $(tf)/t09.sh \
+- $(tf)/t10.sh $(tf)/t11.sh $(tf)/t12.sh $(tf)/t13.sh $(tf)/t14.sh \
+- $(tf)/t15.sh $(tf)/t16.sh $(tf)/t17.sh $(tf)/t18.sh $(tf)/t19.sh \
+- $(tf)/t20.sh $(tf)/t21.sh $(tf)/t22.sh $(tf)/t23.sh $(tf)/t24.sh \
+- $(tf)/t25.sh $(tf)/t26.sh $(tf)/t27.sh $(tf)/t28.sh $(tf)/t29.sh \
+- $(tf)/t30.sh $(tf)/t31.sh $(tf)/t32.sh $(tf)/t33.sh $(tf)/t34.sh \
+- $(tf)/t35.sh $(tf)/t36.sh
++ $(tf)/t00.sh \
++ $(tf)/t05.sh \
++ $(tf)/t36.sh
+
+ $(factor_tests): $(tf)/run.sh $(tf)/create-test.sh
+ $(AM_V_GEN)$(MKDIR_P) $(tf)
diff --git a/coreutils-testsuite.changes b/coreutils-testsuite.changes
index 2f37b79..8651421 100644
--- a/coreutils-testsuite.changes
+++ b/coreutils-testsuite.changes
@@ -1,3 +1,25 @@
+-------------------------------------------------------------------
+Thu Jan 9 01:55:08 UTC 2014 - mail@bernhard-voelker.de
+
+- Add upstream patch (coreutils-copy-fix-selinux-existing-dirs.patch):
+ cp -a: set the correct SELinux context on already existing
+ destination directories (rh#1045122).
+
+- Merge I18n fixes from Fedora (coreutils-i18n.patch):
+ * sort: fix sorting by non-first field (rh#1003544)
+ * cut: avoid using slower multi-byte code in non-UTF-8 locales
+ (rh#1021403, rh#499220).
+
+- Testsuite: skip some tests:
+ * coreutils-skip-some-sort-tests-on-ppc.patch: Add patch to
+ skip 2 valgrind'ed sort tests on ppc/ppc64.
+ * coreutils-skip-gnulib-test-tls.patch: Add patch to skip
+ the gnulib test 'test-tls' on i586, x86_64, ppc and ppc64.
+ * coreutils-tests-avoid-FP-cp-cpuinfo.patch: Add patch to skip a
+ test when cp fails for /proc/cpuinfo which happens on aarch64.
+ * coreutils-tests-shorten-extreme-factor-tests.patch: Add patch
+ to skip most of the extreme-expensive factor tests.
+
-------------------------------------------------------------------
Sat Jan 4 23:05:46 UTC 2014 - mail@bernhard-voelker.de
diff --git a/coreutils-testsuite.spec b/coreutils-testsuite.spec
index 06d4224..a18c3d7 100644
--- a/coreutils-testsuite.spec
+++ b/coreutils-testsuite.spec
@@ -97,9 +97,28 @@ Patch16: coreutils-invalid-ids.patch
# OBS / RPMLINT require /usr/bin/timeout to be built with the -fpie option.
Patch100: coreutils-build-timeout-as-pie.patch
+# Upstream patch to 8.22: cp -a: set the correct SELinux context
+# on already existing destination directories.
+Patch110: coreutils-copy-fix-selinux-existing-dirs.patch
+
# Fix imported gnulib long double math tests for little-endian PowerPC
Patch202: coreutils-gnulib-tests-ppc64le.patch
+# Skip 2 valgrind'ed sort tests on ppc/ppc64 which would fail due to
+# a glibc issue in mkstemp.
+Patch300: coreutils-skip-some-sort-tests-on-ppc.patch
+
+%ifarch %ix86 x86_64 ppc ppc64
+Patch301: coreutils-skip-gnulib-test-tls.patch
+%endif
+
+# tests: avoid FP failure when cp fails for /proc/cpuinfo
+# which happens e.g. on aarch64.
+Patch302: coreutils-tests-avoid-FP-cp-cpuinfo.patch
+
+# tests: shorten extreme-expensive factor tests
+Patch303: coreutils-tests-shorten-extreme-factor-tests.patch
+
# ================================================
%description
These are the GNU core utilities. This package is the union of
@@ -126,9 +145,18 @@ the GNU fileutils, sh-utils, and textutils packages.
%patch16
#
%patch100
-
+%patch110
%patch202
+%patch300
+
+%ifarch %ix86 x86_64 ppc ppc64
+%patch301
+%endif
+
+%patch302
+%patch303
+
#???## We need to statically link to gmp, otherwise we have a build loop
#???#sed -i s,'$(LIB_GMP)',%%{_libdir}/libgmp.a,g Makefile.in
diff --git a/coreutils.changes b/coreutils.changes
index 2f37b79..8651421 100644
--- a/coreutils.changes
+++ b/coreutils.changes
@@ -1,3 +1,25 @@
+-------------------------------------------------------------------
+Thu Jan 9 01:55:08 UTC 2014 - mail@bernhard-voelker.de
+
+- Add upstream patch (coreutils-copy-fix-selinux-existing-dirs.patch):
+ cp -a: set the correct SELinux context on already existing
+ destination directories (rh#1045122).
+
+- Merge I18n fixes from Fedora (coreutils-i18n.patch):
+ * sort: fix sorting by non-first field (rh#1003544)
+ * cut: avoid using slower multi-byte code in non-UTF-8 locales
+ (rh#1021403, rh#499220).
+
+- Testsuite: skip some tests:
+ * coreutils-skip-some-sort-tests-on-ppc.patch: Add patch to
+ skip 2 valgrind'ed sort tests on ppc/ppc64.
+ * coreutils-skip-gnulib-test-tls.patch: Add patch to skip
+ the gnulib test 'test-tls' on i586, x86_64, ppc and ppc64.
+ * coreutils-tests-avoid-FP-cp-cpuinfo.patch: Add patch to skip a
+ test when cp fails for /proc/cpuinfo which happens on aarch64.
+ * coreutils-tests-shorten-extreme-factor-tests.patch: Add patch
+ to skip most of the extreme-expensive factor tests.
+
-------------------------------------------------------------------
Sat Jan 4 23:05:46 UTC 2014 - mail@bernhard-voelker.de
diff --git a/coreutils.spec b/coreutils.spec
index 0c0eadf..26acb5d 100644
--- a/coreutils.spec
+++ b/coreutils.spec
@@ -97,9 +97,28 @@ Patch16: coreutils-invalid-ids.patch
# OBS / RPMLINT require /usr/bin/timeout to be built with the -fpie option.
Patch100: coreutils-build-timeout-as-pie.patch
+# Upstream patch to 8.22: cp -a: set the correct SELinux context
+# on already existing destination directories.
+Patch110: coreutils-copy-fix-selinux-existing-dirs.patch
+
# Fix imported gnulib long double math tests for little-endian PowerPC
Patch202: coreutils-gnulib-tests-ppc64le.patch
+# Skip 2 valgrind'ed sort tests on ppc/ppc64 which would fail due to
+# a glibc issue in mkstemp.
+Patch300: coreutils-skip-some-sort-tests-on-ppc.patch
+
+%ifarch %ix86 x86_64 ppc ppc64
+Patch301: coreutils-skip-gnulib-test-tls.patch
+%endif
+
+# tests: avoid FP failure when cp fails for /proc/cpuinfo
+# which happens e.g. on aarch64.
+Patch302: coreutils-tests-avoid-FP-cp-cpuinfo.patch
+
+# tests: shorten extreme-expensive factor tests
+Patch303: coreutils-tests-shorten-extreme-factor-tests.patch
+
# ================================================
%description
These are the GNU core utilities. This package is the union of
@@ -126,9 +145,18 @@ the GNU fileutils, sh-utils, and textutils packages.
%patch16
#
%patch100
-
+%patch110
%patch202
+%patch300
+
+%ifarch %ix86 x86_64 ppc ppc64
+%patch301
+%endif
+
+%patch302
+%patch303
+
#???## We need to statically link to gmp, otherwise we have a build loop
#???#sed -i s,'$(LIB_GMP)',%%{_libdir}/libgmp.a,g Makefile.in