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.
This commit is contained in:
Vladimír Čunát 2018-08-28 22:05:53 +02:00
parent 85facc4a70
commit fd3927ac29
No known key found for this signature in database
GPG key ID: E747DF1F9575A3AA
3 changed files with 15 additions and 9 deletions

View file

@ -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

View file

@ -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 = {

View file

@ -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 { };