@ -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 ? " s y m l i n k s " # 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 = " c o r e u t i l s ${ optionalString ( ! minimal ) " - f u l l " } " ;
let
inherit ( lib ) concatStringsSep isString optional optionals optionalString ;
isCross = ( stdenv . hostPlatform != stdenv . buildPlatform ) ;
in
stdenv . mkDerivation rec {
pname = " c o r e u t i l s " + ( optionalString ( ! minimal ) " - f u l l " ) ;
version = " 9 . 1 " ;
src = fetchurl {
url = " m i r r o r : / / g n u / c o r e u t i l s / c o r e u t i l s - ${ version } . t a r . x z " ;
sha256 = " s h a 2 5 6 : 0 8 q 4 b 0 w 7 m w f x b q j s 7 1 2 l 6 w r w l 2 i j s 7 k 5 0 k s s g b r y g 9 w b s w 8 g 9 8 b 1 " ;
sha256 = " s h a 2 5 6 - Y a H 0 E N e L p + f z e l p P U O b R M g r K M z d U h K M l X t 3 x e j h Y B C M = " ;
} ;
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 ' 2 i echo Skipping dd sparse test && exit 7 7 ' - i ./tests/dd/sparse.sh
sed ' 2 i echo Skipping du threshold test && exit 7 7 ' - i ./tests/du/threshold.sh
sed ' 2 i echo Skipping cp sparse test && exit 7 7 ' - i ./tests/cp/sparse.sh
@ -60,7 +70,7 @@ stdenv.mkDerivation (rec {
# intermittent failures on builders, unknown reason
sed ' 2 i echo Skipping du basic test && exit 7 7 ' - i ./tests/du/basic.sh
'' + ( o p t i o n a l S t r i n g ( s t d e n v . h o s t P l a t f o r m . l i b c = = " m u s l " ) ( l i b . co n c a t S t r i n g s S e p " \ n " [
'' + ( o p t i o n a l S t r i n g ( s t d e n v . h o s t P l a t f o r m . l i b c = = " m u s l " ) ( c o n c a t S t r i n g s S e p " \ n " [
''
echo " i n t m a i n ( ) { r e t u r n 7 7 ; } " > gnulib-tests/test-parse-datetime.c
echo " i n t m a i n ( ) { r e t u r n 7 7 ; } " > gnulib-tests/test-getlogin.c
@ -75,43 +85,54 @@ stdenv.mkDerivation (rec {
outputs = [ " o u t " " i n f o " ] ;
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 != " g l i b c " ) libiconv ;
configureFlags = [ " - - w i t h - p a c k a g e r = h t t p s : / / n i x o s . o r g " ]
++ optional ( singleBinary != false )
( " - - e n a b l e - s i n g l e - b i n a r y " + optionalString ( isString singleBinary ) " = ${ singleBinary } " )
++ optional withOpenssl " - - w i t h - o p e n s s l "
++ optional stdenv . hostPlatform . isSunOS " a c _ c v _ f u n c _ i n o t i f y _ i n i t = n o "
++ optional withPrefix " - - p r o g r a m - p r e f i x = g "
++ optional stdenv . isDarwin " - - d i s a b l e - n l s " # 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 == " g l i b c " ) [
# the shipped configure script doesn't enable nls, but using autoreconfHook
# does so which breaks the build
++ optional stdenv . isDarwin " - - d i s a b l e - n l s "
++ optionals ( isCross && stdenv . hostPlatform . libc == " g l i b c " ) [
# TODO(19b98110126fde7cbb1127af7e3fe1568eacad3d): Needed for fstatfs() I
# don't know why it is not properly detected cross building with glibc.
" f u _ c v _ s y s _ s t a t _ s t a t f s 2 _ b s i z e = y e s "
] ;
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 != " g l i b c " ) 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 == " g l i b c " || stdenv . hostPlatform . isMusl )
&& ! ( stdenv . hostPlatform . isMusl && stdenv . hostPlatform . isAarch64 )
doCheck = ( ! isCross )
&& ( stdenv . hostPlatform . libc == " g l i b c " || stdenv . hostPlatform . libc == " m u s l " )
&& ! ( stdenv . hostPlatform . libc == " m u s l " && stdenv . hostPlatform . isAarch64 )
&& ! stdenv . isAarch32 ;
# Prevents attempts of running 'help2man' on cross-built binaries.
PERL = if stdenv . hostPlatform == stdenv . buildPlatform then null else " m i s s i n g " ;
PERL = if isCross then " m i s s i n g " 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 /* $ o u t / s h a r e / m a n / m a n 1
''
@ -137,18 +158,17 @@ stdenv.mkDerivation (rec {
rm - r " $ o u t / s h a r e "
'' ;
meta = {
meta = with lib ; {
homepage = " h t t p s : / / w w w . g n u . o r g / s o f t w a r e / c o r e u t i l s / " ;
description = " T h e b a s i c f i l e , s h e l l a n d t e x t m a n i p u l a t i o n u t i l i t i e s o f t h e G N U o p e r a t i n g s y s t e m " ;
description = " T h e G N U C o r e U t i l i t i e s " ;
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 ] ;
} ;
} )
}