about summary refs log tree commit diff
path: root/pkgs/tools/misc/coreutils/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/tools/misc/coreutils/default.nix')
-rw-r--r--pkgs/tools/misc/coreutils/default.nix110
1 files changed, 65 insertions, 45 deletions
diff --git a/pkgs/tools/misc/coreutils/default.nix b/pkgs/tools/misc/coreutils/default.nix
index b7ee796795391..f6d2591716e17 100644
--- a/pkgs/tools/misc/coreutils/default.nix
+++ b/pkgs/tools/misc/coreutils/default.nix
@@ -1,36 +1,46 @@
-{ stdenv, lib, buildPackages
-, autoreconfHook, bison, texinfo, fetchurl, perl, xz, libiconv, gmp ? null
-, aclSupport ? stdenv.isLinux, acl ? null
-, attrSupport ? stdenv.isLinux, attr ? null
-, selinuxSupport? false, libselinux ? null, libsepol ? null
+{ lib
+, stdenv
+, fetchurl
+, autoreconfHook
+, buildPackages
+, libiconv
+, perl
+, texinfo
+, xz
+, gmpSupport ? true, gmp
+, aclSupport ? stdenv.isLinux, acl
+, attrSupport ? stdenv.isLinux, attr
+, selinuxSupport ? false, libselinux, libsepol
 # No openssl in default version, so openssl-induced rebuilds aren't too big.
 # It makes *sum functions significantly faster.
-, minimal ? true, withOpenssl ? !minimal, openssl ? null
+, minimal ? true
+, withOpenssl ? !minimal, openssl
 , withPrefix ? false
 , singleBinary ? "symlinks" # you can also pass "shebangs" or false
 }:
 
-# Note: this package is used for bootstrapping fetchurl, and thus
-# cannot use fetchpatch! All mutable patches (generated by GitHub or
-# cgit) that are needed here should be included directly in Nixpkgs as
-# files.
+# Note: this package is used for bootstrapping fetchurl, and thus cannot use
+# fetchpatch! All mutable patches (generated by GitHub or cgit) that are needed
+# here should be included directly in Nixpkgs as files.
 
 assert aclSupport -> acl != null;
 assert selinuxSupport -> libselinux != null && libsepol != null;
 
-with lib;
-
-stdenv.mkDerivation (rec {
-  pname = "coreutils${optionalString (!minimal) "-full"}";
+let
+  inherit (lib) concatStringsSep isString optional optionals optionalString;
+  isCross = (stdenv.hostPlatform != stdenv.buildPlatform);
+in
+stdenv.mkDerivation rec {
+  pname = "coreutils" + (optionalString (!minimal) "-full");
   version = "9.1";
 
   src = fetchurl {
     url = "mirror://gnu/coreutils/coreutils-${version}.tar.xz";
-    sha256 = "sha256:08q4b0w7mwfxbqjs712l6wrwl2ijs7k50kssgbryg9wbsw8g98b1";
+    sha256 = "sha256-YaH0ENeLp+fzelpPUObRMgrKMzdUhKMlXt3xejhYBCM=";
   };
 
   postPatch = ''
-    # The test tends to fail on btrfs,f2fs and maybe other unusual filesystems.
+    # The test tends to fail on btrfs, f2fs and maybe other unusual filesystems.
     sed '2i echo Skipping dd sparse test && exit 77' -i ./tests/dd/sparse.sh
     sed '2i echo Skipping du threshold test && exit 77' -i ./tests/du/threshold.sh
     sed '2i echo Skipping cp sparse test && exit 77' -i ./tests/cp/sparse.sh
@@ -60,7 +70,7 @@ stdenv.mkDerivation (rec {
 
     # intermittent failures on builders, unknown reason
     sed '2i echo Skipping du basic test && exit 77' -i ./tests/du/basic.sh
-  '' + (optionalString (stdenv.hostPlatform.libc == "musl") (lib.concatStringsSep "\n" [
+  '' + (optionalString (stdenv.hostPlatform.libc == "musl") (concatStringsSep "\n" [
     ''
       echo "int main() { return 77; }" > gnulib-tests/test-parse-datetime.c
       echo "int main() { return 77; }" > gnulib-tests/test-getlogin.c
@@ -75,43 +85,54 @@ stdenv.mkDerivation (rec {
   outputs = [ "out" "info" ];
   separateDebugInfo = true;
 
-  nativeBuildInputs = [ perl xz.bin autoreconfHook ] # autoreconfHook is due to patch, normally only needed for cygwin
-    ++ optionals stdenv.hostPlatform.isCygwin [ texinfo ];  # due to patch
+  nativeBuildInputs = [
+    # autoreconfHook is due to patch, normally only needed for cygwin
+    autoreconfHook
+    perl
+    xz.bin
+  ]
+  ++ optionals stdenv.hostPlatform.isCygwin [
+    # due to patch
+    texinfo
+  ];
+
+  buildInputs = [ ]
+    ++ optional aclSupport acl
+    ++ optional attrSupport attr
+    ++ optional gmpSupport gmp
+    ++ optional withOpenssl openssl
+    ++ optionals selinuxSupport [ libselinux libsepol ]
+    # TODO(@Ericson2314): Investigate whether Darwin could benefit too
+    ++ optional (isCross && stdenv.hostPlatform.libc != "glibc") libiconv;
+
   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") [
+    # the shipped configure script doesn't enable nls, but using autoreconfHook
+    # does so which breaks the build
+    ++ optional stdenv.isDarwin "--disable-nls"
+    ++ optionals (isCross && stdenv.hostPlatform.libc == "glibc") [
       # TODO(19b98110126fde7cbb1127af7e3fe1568eacad3d): Needed for fstatfs() I
       # don't know why it is not properly detected cross building with glibc.
       "fu_cv_sys_stat_statfs2_bsize=yes"
     ];
 
-
-  buildInputs = [ gmp ]
-    ++ optional aclSupport acl
-    ++ optional attrSupport attr
-    ++ optional withOpenssl openssl
-    ++ optionals selinuxSupport [ libselinux libsepol ]
-       # TODO(@Ericson2314): Investigate whether Darwin could benefit too
-    ++ optional (stdenv.hostPlatform != stdenv.buildPlatform && stdenv.hostPlatform.libc != "glibc") libiconv;
-
   # The tests are known broken on Cygwin
   # (http://article.gmane.org/gmane.comp.gnu.core-utils.bugs/19025),
   # Darwin (http://article.gmane.org/gmane.comp.gnu.core-utils.bugs/19351),
   # and {Open,Free}BSD.
   # With non-standard storeDir: https://github.com/NixOS/nix/issues/512
   # On aarch64+musl, test-init.sh fails due to a segfault in diff.
-  doCheck = stdenv.hostPlatform == stdenv.buildPlatform
-    && (stdenv.hostPlatform.libc == "glibc" || stdenv.hostPlatform.isMusl)
-    && !(stdenv.hostPlatform.isMusl && stdenv.hostPlatform.isAarch64)
+  doCheck = (!isCross)
+    && (stdenv.hostPlatform.libc == "glibc" || stdenv.hostPlatform.libc == "musl")
+    && !(stdenv.hostPlatform.libc == "musl" && stdenv.hostPlatform.isAarch64)
     && !stdenv.isAarch32;
 
   # Prevents attempts of running 'help2man' on cross-built binaries.
-  PERL = if stdenv.hostPlatform == stdenv.buildPlatform then null else "missing";
+  PERL = if isCross then "missing" else null;
 
   enableParallelBuilding = true;
 
@@ -124,11 +145,11 @@ stdenv.mkDerivation (rec {
 
   # Works around a bug with 8.26:
   # Makefile:3440: *** Recursive variable 'INSTALL' references itself (eventually).  Stop.
-  preInstall = optionalString (stdenv.hostPlatform != stdenv.buildPlatform) ''
+  preInstall = optionalString isCross ''
     sed -i Makefile -e 's|^INSTALL =.*|INSTALL = ${buildPackages.coreutils}/bin/install -c|'
   '';
 
-  postInstall = optionalString (stdenv.hostPlatform != stdenv.buildPlatform && !minimal) ''
+  postInstall = optionalString (isCross && !minimal) ''
     rm $out/share/man/man1/*
     cp ${buildPackages.coreutils-full}/share/man/man1/* $out/share/man/man1
   ''
@@ -137,18 +158,17 @@ stdenv.mkDerivation (rec {
     rm -r "$out/share"
   '';
 
-  meta = {
+  meta = with lib; {
     homepage = "https://www.gnu.org/software/coreutils/";
-    description = "The basic file, shell and text manipulation utilities of the GNU operating system";
+    description = "The GNU Core Utilities";
     longDescription = ''
-      The GNU Core Utilities are the basic file, shell and text
-      manipulation utilities of the GNU operating system.  These are
-      the core utilities which are expected to exist on every
-      operating system.
+      The GNU Core Utilities are the basic file, shell and text manipulation
+      utilities of the GNU operating system. These are the core utilities which
+      are expected to exist on every operating system.
     '';
     license = licenses.gpl3Plus;
-    platforms = platforms.unix ++ platforms.windows;
+    maintainers = with maintainers; [ das_j ];
+    platforms = with platforms; unix ++ windows;
     priority = 10;
-    maintainers = [ maintainers.das_j ];
   };
-})
+}