summary refs log tree commit diff
diff options
context:
space:
mode:
authorJohn Ericson <John.Ericson@Obsidian.Systems>2017-06-19 22:18:22 -0400
committerJohn Ericson <John.Ericson@Obsidian.Systems>2017-06-22 17:53:52 -0400
commit167b80ba76ae767b1d37458afb113683921d8c74 (patch)
tree929891474bd3c775f7b9d7c56412fb12abc65870
parentf63f96ae355281bf89ea08f5c5af3b939878df5f (diff)
downloadnixlib-167b80ba76ae767b1d37458afb113683921d8c74.tar
nixlib-167b80ba76ae767b1d37458afb113683921d8c74.tar.gz
nixlib-167b80ba76ae767b1d37458afb113683921d8c74.tar.bz2
nixlib-167b80ba76ae767b1d37458afb113683921d8c74.tar.lz
nixlib-167b80ba76ae767b1d37458afb113683921d8c74.tar.xz
nixlib-167b80ba76ae767b1d37458afb113683921d8c74.tar.zst
nixlib-167b80ba76ae767b1d37458afb113683921d8c74.zip
coreutils: Modernize and fix for cross
"--host=..." needs to be passed but crossAttrs overrides that.
-rw-r--r--pkgs/tools/misc/coreutils/default.nix76
1 files changed, 37 insertions, 39 deletions
diff --git a/pkgs/tools/misc/coreutils/default.nix b/pkgs/tools/misc/coreutils/default.nix
index d87976cbc5e8..71fc791872f8 100644
--- a/pkgs/tools/misc/coreutils/default.nix
+++ b/pkgs/tools/misc/coreutils/default.nix
@@ -1,8 +1,9 @@
-{ lib, stdenv, buildPackages, fetchurl, perl, xz, gmp ? null
+{ stdenv, lib, buildPackages
+, autoconf, automake114x, texinfo, fetchurl, perl, xz, libiconv, gmp ? null
+, hostPlatform, buildPlatform
 , aclSupport ? false, acl ? null
 , attrSupport ? false, attr ? null
 , selinuxSupport? false, libselinux ? null, libsepol ? null
-, autoconf, automake114x, texinfo
 , withPrefix ? false
 , singleBinary ? "symlinks" # you can also pass "shebangs" or false
 }:
@@ -23,10 +24,10 @@ stdenv.mkDerivation rec {
   # FIXME needs gcc 4.9 in bootstrap tools
   hardeningDisable = [ "stackprotector" ];
 
-  patches = optional stdenv.isCygwin ./coreutils-8.23-4.cygwin.patch;
+  patches = optional hostPlatform.isCygwin ./coreutils-8.23-4.cygwin.patch;
 
   # The test tends to fail on btrfs and maybe other unusual filesystems.
-  postPatch = optionalString (!stdenv.isDarwin) ''
+  postPatch = optionalString (!hostPlatform.isDarwin) ''
     sed '2i echo Skipping dd sparse test && exit 0' -i ./tests/dd/sparse.sh
     sed '2i echo Skipping cp sparse test && exit 0' -i ./tests/cp/sparse.sh
     sed '2i echo Skipping rm deep-2 test && exit 0' -i ./tests/rm/deep-2.sh
@@ -39,58 +40,54 @@ stdenv.mkDerivation rec {
   configureFlags =
     optional (singleBinary != false)
       ("--enable-single-binary" + optionalString (isString singleBinary) "=${singleBinary}")
-    ++ optional stdenv.isSunOS "ac_cv_func_inotify_init=no"
-    ++ optional withPrefix "--program-prefix=g";
+    ++ optional hostPlatform.isSunOS "ac_cv_func_inotify_init=no"
+    ++ optional withPrefix "--program-prefix=g"
+    ++ optionals (hostPlatform != buildPlatform && 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
-    ++ optionals stdenv.isCygwin [ autoconf automake114x texinfo ]   # due to patch
-    ++ optionals selinuxSupport [ libselinux libsepol ];
-
-  crossAttrs = {
-    buildInputs = [ gmp.crossDrv ]
-      ++ optional aclSupport acl.crossDrv
-      ++ optional attrSupport attr.crossDrv
-      ++ optionals selinuxSupport [ libselinux.crossDrv libsepol.crossDrv ]
-      ++ optional (stdenv ? ccCross.libc.libiconv)
-        stdenv.ccCross.libc.libiconv.crossDrv;
-
-    # Prevents attempts of running 'help2man' on cross-built binaries.
-    PERL = "missing";
-
-    # Works around a bug with 8.26:
-    # Makefile:3440: *** Recursive variable 'INSTALL' references itself (eventually).  Stop.
-    preInstall = ''
-      sed -i Makefile -e 's|^INSTALL =.*|INSTALL = ${buildPackages.coreutils}/bin/install -c|'
-    '';
-
-    postInstall = ''
-      rm $out/share/man/man1/*
-      cp ${buildPackages.coreutils}/share/man/man1/* $out/share/man/man1
-    '';
-
-    # Needed for fstatfs()
-    # I don't know why it is not properly detected cross building with glibc.
-    configureFlags = [ "fu_cv_sys_stat_statfs2_bsize=yes" ];
-    doCheck = false;
-  };
+    ++ optionals hostPlatform.isCygwin [ autoconf automake114x texinfo ]   # due to patch
+    ++ optionals selinuxSupport [ libselinux libsepol ]
+       # TODO(@Ericson2314): Investigate whether Darwin could benefit too
+    ++ optional (hostPlatform != buildPlatform && hostPlatform.libc != "glibc") libiconv;
 
   # The tests are known broken on Cygwin
   # (http://thread.gmane.org/gmane.comp.gnu.core-utils.bugs/19025),
   # Darwin (http://thread.gmane.org/gmane.comp.gnu.core-utils.bugs/19351),
   # and {Open,Free}BSD.
   # With non-standard storeDir: https://github.com/NixOS/nix/issues/512
-  doCheck = stdenv ? glibc && builtins.storeDir == "/nix/store";
+  doCheck = hostPlatform == buildPlatform
+    && hostPlatform.libc == "glibc"
+    && builtins.storeDir == "/nix/store";
+
+  # Prevents attempts of running 'help2man' on cross-built binaries.
+  ${if hostPlatform == buildPlatform then null else "PERL"} = "missing";
 
   # Saw random failures like ‘help2man: can't get '--help' info from
   # man/sha512sum.td/sha512sum’.
   enableParallelBuilding = false;
 
   NIX_LDFLAGS = optionalString selinuxSupport "-lsepol";
-  FORCE_UNSAFE_CONFIGURE = optionalString stdenv.isSunOS "1";
+  FORCE_UNSAFE_CONFIGURE = optionalString hostPlatform.isSunOS "1";
+
+  makeFlags = optionalString hostPlatform.isDarwin "CFLAGS=-D_FORTIFY_SOURCE=0";
+
+  # Works around a bug with 8.26:
+  # Makefile:3440: *** Recursive variable 'INSTALL' references itself (eventually).  Stop.
+  ${if hostPlatform == buildPlatform then null else "preInstall"} = ''
+    sed -i Makefile -e 's|^INSTALL =.*|INSTALL = ${buildPackages.coreutils}/bin/install -c|'
+  '';
 
-  makeFlags = optionalString stdenv.isDarwin "CFLAGS=-D_FORTIFY_SOURCE=0";
+  ${if hostPlatform == buildPlatform then null else "postInstall"} = ''
+    rm $out/share/man/man1/*
+    cp ${buildPackages.coreutils}/share/man/man1/* $out/share/man/man1
+  '';
 
   meta = {
     homepage = http://www.gnu.org/software/coreutils/;
@@ -109,4 +106,5 @@ stdenv.mkDerivation rec {
 
     maintainers = [ maintainers.eelco ];
   };
+
 }