From 312928f0bc5df5d8e1e6ed4a903218bc1d1bb1a7 Mon Sep 17 00:00:00 2001 From: AndersonTorres Date: Fri, 17 Jun 2022 18:37:46 -0300 Subject: [PATCH] coreutils: refactor the expression --- pkgs/tools/misc/coreutils/default.nix | 108 +++++++++++++++----------- 1 file changed, 64 insertions(+), 44 deletions(-) diff --git a/pkgs/tools/misc/coreutils/default.nix b/pkgs/tools/misc/coreutils/default.nix index 4b1a4add955e..f6d2591716e1 100644 --- a/pkgs/tools/misc/coreutils/default.nix +++ b/pkgs/tools/misc/coreutils/default.nix @@ -1,27 +1,37 @@ -{ 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 { @@ -30,7 +40,7 @@ stdenv.mkDerivation (rec { }; 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 ]; }; -}) +}