|
|
|
@ -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 ]; |
|
|
|
|
}; |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|