diff --git a/pkgs/tools/misc/coreutils/default.nix b/pkgs/tools/misc/coreutils/default.nix index f22a7268fbc93c..16f3e4c721f7f0 100644 --- a/pkgs/tools/misc/coreutils/default.nix +++ b/pkgs/tools/misc/coreutils/default.nix @@ -22,14 +22,14 @@ with lib; stdenv.mkDerivation (rec { pname = "coreutils"; - version = "8.32"; + version = "9.0"; src = fetchurl { url = "mirror://gnu/${pname}/${pname}-${version}.tar.xz"; - sha256 = "sha256-RFjY3nhJ30TMqxXhaxVIsoUiTbul8I+sBwwcDgvMTPo="; + sha256 = "sha256-zjCs30pBvFuzDdlV6eqnX6IWtOPesIiJ7TJDPHs7l84="; }; - patches = [ ./sys-getdents-undeclared.patch ] + patches = [ ./fix-chmod-exit-code.patch ] ++ optional stdenv.hostPlatform.isCygwin ./coreutils-8.23-4.cygwin.patch # fix gnulib tests on 32-bit ARM. Included on coreutils master. # https://lists.gnu.org/r/bug-gnulib/2020-08/msg00225.html @@ -74,23 +74,26 @@ stdenv.mkDerivation (rec { sed '2i print "Skipping id zero test"; exit 77' -i ./tests/id/zero.sh sed '2i print "Skipping misc help-versiob test"; exit 77' -i ./tests/misc/help-version.sh sed '2i print "Skipping chown separator test"; exit 77' -i ./tests/chown/separator.sh - '' + optionalString (stdenv.hostPlatform.libc == "musl") (lib.concatStringsSep "\n" [ + '' + (optionalString (stdenv.hostPlatform.libc == "musl") (lib.concatStringsSep "\n" [ '' echo "int main() { return 77; }" > gnulib-tests/test-parse-datetime.c echo "int main() { return 77; }" > gnulib-tests/test-getlogin.c '' - ]); + ])) + (optionalString stdenv.isAarch64 '' + sed '2i print "Skipping tail assert test"; exit 77' -i ./tests/tail-2/assert.sh + ''); outputs = [ "out" "info" ]; - nativeBuildInputs = [ perl xz.bin ] - ++ optionals stdenv.hostPlatform.isCygwin [ autoreconfHook texinfo ]; # due to patch + nativeBuildInputs = [ perl xz.bin autoreconfHook ] # autoreconfHook is due to patch, normally only needed for cygwin + ++ optionals stdenv.hostPlatform.isCygwin [ texinfo ]; # due to patch configureFlags = [ "--with-packager=https://NixOS.org" ] ++ optional (singleBinary != false) ("--enable-single-binary" + optionalString (isString singleBinary) "=${singleBinary}") ++ optional withOpenssl "--with-openssl" ++ optional stdenv.hostPlatform.isSunOS "ac_cv_func_inotify_init=no" ++ optional withPrefix "--program-prefix=g" + ++ optional stdenv.isDarwin "--disable-nls" # the shipped configure script doesn't enable nls, but using autoreconfHook does so which breaks the build ++ optionals (stdenv.hostPlatform != stdenv.buildPlatform && stdenv.hostPlatform.libc == "glibc") [ # TODO(19b98110126fde7cbb1127af7e3fe1568eacad3d): Needed for fstatfs() I # don't know why it is not properly detected cross building with glibc. @@ -152,7 +155,7 @@ stdenv.mkDerivation (rec { license = licenses.gpl3Plus; platforms = platforms.unix ++ platforms.windows; priority = 10; - maintainers = [ maintainers.eelco ]; + maintainers = [ maintainers.eelco maintainers.das_j ]; }; } // optionalAttrs stdenv.hostPlatform.isMusl { # Work around a bogus warning in conjunction with musl. diff --git a/pkgs/tools/misc/coreutils/fix-chmod-exit-code.patch b/pkgs/tools/misc/coreutils/fix-chmod-exit-code.patch new file mode 100644 index 00000000000000..a966c3bda91796 --- /dev/null +++ b/pkgs/tools/misc/coreutils/fix-chmod-exit-code.patch @@ -0,0 +1,108 @@ +From e8b56ebd536e82b15542a00c888109471936bfda Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?P=C3=A1draig=20Brady?=
+Date: Fri, 24 Sep 2021 20:57:41 +0100
+Subject: [PATCH] chmod: fix exit status when ignoring symlinks
+
+* src/chmod.c: Reorder enum so CH_NOT_APPLIED
+can be treated as a non error.
+* tests/chmod/ignore-symlink.sh: A new test.
+* tests/local.mk: Reference the new test.
+* NEWS: Mention the bug fix.
+Fixes https://bugs.gnu.org/50784
+---
+ NEWS | 6 ++++++
+ src/chmod.c | 4 ++--
+ tests/chmod/ignore-symlink.sh | 31 +++++++++++++++++++++++++++++++
+ tests/local.mk | 1 +
+ 4 files changed, 40 insertions(+), 2 deletions(-)
+ create mode 100755 tests/chmod/ignore-symlink.sh
+
+diff --git a/NEWS b/NEWS
+index a1470a7d7..1cb3c28a1 100644
+--- a/NEWS
++++ b/NEWS
+@@ -2,6 +2,12 @@ GNU coreutils NEWS -*- outline -*-
+
+ * Noteworthy changes in release ?.? (????-??-??) [?]
+
++** Bug fixes
++
++ chmod -R no longer exits with error status when encountering symlinks.
++ All files would be processed correctly, but the exit status was incorrect.
++ [bug introduced in coreutils-9.0]
++
+
+ * Noteworthy changes in release 9.0 (2021-09-24) [stable]
+
+diff --git a/src/chmod.c b/src/chmod.c
+index 37b04f500..57ac47f33 100644
+--- a/src/chmod.c
++++ b/src/chmod.c
+@@ -44,8 +44,8 @@ struct change_status
+ enum
+ {
+ CH_NO_STAT,
+- CH_NOT_APPLIED,
+ CH_FAILED,
++ CH_NOT_APPLIED,
+ CH_NO_CHANGE_REQUESTED,
+ CH_SUCCEEDED
+ }
+@@ -322,7 +322,7 @@ process_file (FTS *fts, FTSENT *ent)
+ if ( ! recurse)
+ fts_set (fts, ent, FTS_SKIP);
+
+- return CH_NO_CHANGE_REQUESTED <= ch.status;
++ return CH_NOT_APPLIED <= ch.status;
+ }
+
+ /* Recursively change the modes of the specified FILES (the last entry
+diff --git a/tests/chmod/ignore-symlink.sh b/tests/chmod/ignore-symlink.sh
+new file mode 100755
+index 000000000..5ce3de816
+--- /dev/null
++++ b/tests/chmod/ignore-symlink.sh
+@@ -0,0 +1,31 @@
++#!/bin/sh
++# Test for proper exit code of chmod on a processed symlink.
++
++# Copyright (C) 2021 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