From fd3927ac29fdae933d3007943ad73a5dc81335dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20=C4=8Cun=C3=A1t?= Date: Tue, 28 Aug 2018 22:05:53 +0200 Subject: [PATCH] coreutils: split a coreutils-full version - default coreutils is stripped of /share/ (11 -> 2 MiB) - coreutils-full retains /share/ and adds openssl for faster *sum tools - NixOS systemPackages contains coreutils-full - *Support parameter defaults are moved inside (it seemed confusing to have `? false` and "at once" with `? isLinux`) Closure considerations: + typical build-time closure will get lighter by ~9 MiB - typical closure of NixOS installation will grow by ~2 MiB, due to referring to both versions. I think it would be possible to re-use most of the utils between the two versions, but the expression would get much more complex. I considered having stdenv with minimal coreutils and the default `coreutils` attribute being full, but it turned out there were too many trivial references in nixpkgs, so it didn't seem easy to keep rebuild impact of openssl from growing significantly. --- nixos/modules/config/system-path.nix | 2 +- pkgs/tools/misc/coreutils/default.nix | 15 ++++++++++++--- pkgs/top-level/all-packages.nix | 7 ++----- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/nixos/modules/config/system-path.nix b/nixos/modules/config/system-path.nix index 361151665018..19c7b7cabfcc 100644 --- a/nixos/modules/config/system-path.nix +++ b/nixos/modules/config/system-path.nix @@ -13,7 +13,7 @@ let pkgs.attr pkgs.bashInteractive # bash with ncurses support pkgs.bzip2 - pkgs.coreutils + pkgs.coreutils-full pkgs.cpio pkgs.curl pkgs.diffutils diff --git a/pkgs/tools/misc/coreutils/default.nix b/pkgs/tools/misc/coreutils/default.nix index ee1ac7c5d183..44745454f027 100644 --- a/pkgs/tools/misc/coreutils/default.nix +++ b/pkgs/tools/misc/coreutils/default.nix @@ -1,9 +1,12 @@ { stdenv, lib, buildPackages , autoreconfHook, texinfo, fetchurl, perl, xz, libiconv, gmp ? null , hostPlatform, buildPlatform -, aclSupport ? false, acl ? null -, attrSupport ? false, attr ? null +, aclSupport ? stdenv.isLinux, acl ? null +, attrSupport ? stdenv.isLinux, attr ? null , selinuxSupport? false, libselinux ? null, libsepol ? null +# 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 , withPrefix ? false , singleBinary ? "symlinks" # you can also pass "shebangs" or false }: @@ -40,6 +43,7 @@ stdenv.mkDerivation rec { configureFlags = [ "--with-packager=https://NixOS.org" ] ++ optional (singleBinary != false) ("--enable-single-binary" + optionalString (isString singleBinary) "=${singleBinary}") + ++ optional withOpenssl "--with-openssl" ++ optional hostPlatform.isSunOS "ac_cv_func_inotify_init=no" ++ optional withPrefix "--program-prefix=g" ++ optionals (hostPlatform != buildPlatform && hostPlatform.libc == "glibc") [ @@ -52,6 +56,7 @@ stdenv.mkDerivation rec { buildInputs = [ gmp ] ++ optional aclSupport acl ++ optional attrSupport attr + ++ optional withOpenssl openssl ++ optionals hostPlatform.isCygwin [ autoreconfHook texinfo ] # due to patch ++ optionals selinuxSupport [ libselinux libsepol ] # TODO(@Ericson2314): Investigate whether Darwin could benefit too @@ -82,9 +87,13 @@ stdenv.mkDerivation rec { sed -i Makefile -e 's|^INSTALL =.*|INSTALL = ${buildPackages.coreutils}/bin/install -c|' ''; - postInstall = optionalString (hostPlatform != buildPlatform) '' + postInstall = optionalString (hostPlatform != buildPlatform && !minimal) '' rm $out/share/man/man1/* cp ${buildPackages.coreutils}/share/man/man1/* $out/share/man/man1 + '' + # du: 8.7 M locale + 0.4 M man pages + + optionalString minimal '' + rm -r "$out/share" ''; meta = { diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 3f48d65c11b4..0cf5bac9d8a3 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1945,11 +1945,8 @@ with pkgs; cool-retro-term = libsForQt5.callPackage ../applications/misc/cool-retro-term { }; - coreutils = callPackage ../tools/misc/coreutils { - aclSupport = stdenv.isLinux; - attrSupport = stdenv.isLinux; - }; - + coreutils = callPackage ../tools/misc/coreutils { }; + coreutils-full = coreutils.override { minimal = false; }; coreutils-prefixed = coreutils.override { withPrefix = true; singleBinary = false; }; corkscrew = callPackage ../tools/networking/corkscrew { };