about summary refs log tree commit diff
path: root/pkgs/tools
diff options
context:
space:
mode:
authorJohn Ericson <John.Ericson@Obsidian.Systems>2017-06-23 20:24:27 -0400
committerJohn Ericson <John.Ericson@Obsidian.Systems>2017-06-23 20:24:27 -0400
commit87fab3d6a548fe4e10d84a8f3d8abdea65c2a9cd (patch)
tree8ccfb9bda2e3121ca35fbca93f2680c7c71a9d6e /pkgs/tools
parent56761c9b3d6f829a4f80e02d18fff30e8a6af1eb (diff)
parentf43ae985a68e515197c57de5ab8413d63ae6ef1a (diff)
downloadnixlib-87fab3d6a548fe4e10d84a8f3d8abdea65c2a9cd.tar
nixlib-87fab3d6a548fe4e10d84a8f3d8abdea65c2a9cd.tar.gz
nixlib-87fab3d6a548fe4e10d84a8f3d8abdea65c2a9cd.tar.bz2
nixlib-87fab3d6a548fe4e10d84a8f3d8abdea65c2a9cd.tar.lz
nixlib-87fab3d6a548fe4e10d84a8f3d8abdea65c2a9cd.tar.xz
nixlib-87fab3d6a548fe4e10d84a8f3d8abdea65c2a9cd.tar.zst
nixlib-87fab3d6a548fe4e10d84a8f3d8abdea65c2a9cd.zip
Merge some merged cross-compilation PRs into into staging
Diffstat (limited to 'pkgs/tools')
-rw-r--r--pkgs/tools/archivers/unzip/cross-cc.patch12
-rw-r--r--pkgs/tools/archivers/unzip/default.nix12
-rw-r--r--pkgs/tools/misc/coreutils/default.nix76
-rw-r--r--pkgs/tools/misc/findutils/default.nix19
-rw-r--r--pkgs/tools/misc/xburst-tools/default.nix5
-rw-r--r--pkgs/tools/networking/dropbear/default.nix7
-rw-r--r--pkgs/tools/system/ddrescue/default.nix14
-rw-r--r--pkgs/tools/text/gnupatch/default.nix13
8 files changed, 91 insertions, 67 deletions
diff --git a/pkgs/tools/archivers/unzip/cross-cc.patch b/pkgs/tools/archivers/unzip/cross-cc.patch
new file mode 100644
index 000000000000..3d38ffdef6e3
--- /dev/null
+++ b/pkgs/tools/archivers/unzip/cross-cc.patch
@@ -0,0 +1,12 @@
+--- a/unix/Makefile
++++ b/unix/Makefile
+@@ -42,9 +42,7 @@
+ # such as -DDOSWILD).
+ 
+ # UnZip flags
+-CC = cc#	try using "gcc" target rather than changing this (CC and LD
+ LD = $(CC)#	must match, else "unresolved symbol:  ___main" is possible)
+-AS = as
+ LOC = $(D_USE_BZ2) $(LOCAL_UNZIP)
+ AF = $(LOC)
+ CFLAGS = -O
diff --git a/pkgs/tools/archivers/unzip/default.nix b/pkgs/tools/archivers/unzip/default.nix
index b9fa760c019b..ad484b3d4d97 100644
--- a/pkgs/tools/archivers/unzip/default.nix
+++ b/pkgs/tools/archivers/unzip/default.nix
@@ -1,5 +1,8 @@
-{ stdenv, fetchurl, bzip2
-, enableNLS ? false, libnatspec }:
+{ stdenv, fetchurl
+, bzip2
+, enableNLS ? false, libnatspec
+, buildPlatform, hostPlatform
+}:
 
 stdenv.mkDerivation {
   name = "unzip-6.0";
@@ -25,14 +28,15 @@ stdenv.mkDerivation {
       url = "http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/app-arch/unzip/files/unzip-6.0-natspec.patch?revision=1.1";
       name = "unzip-6.0-natspec.patch";
       sha256 = "67ab260ae6adf8e7c5eda2d1d7846929b43562943ec4aff629bd7018954058b1";
-    });
+    })
+    ++ stdenv.lib.optional (hostPlatform != buildPlatform) ./cross-cc.patch;
 
   nativeBuildInputs = [ bzip2 ];
   buildInputs = [ bzip2 ] ++ stdenv.lib.optional enableNLS libnatspec;
 
   makefile = "unix/Makefile";
 
-  NIX_LDFLAGS = [ "-lbz2" ] ++ stdenv.lib.optional enableNLS "-lnatspec";
+  ${"NIX_${stdenv.cc.infixSalt_}LDFLAGS"} = [ "-lbz2" ] ++ stdenv.lib.optional enableNLS "-lnatspec";
 
   buildFlags = "generic D_USE_BZ2=-DUSE_BZIP2 L_BZ2=-lbz2";
 
diff --git a/pkgs/tools/misc/coreutils/default.nix b/pkgs/tools/misc/coreutils/default.nix
index fdd184180833..42f8e74df313 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
@@ -42,58 +43,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/;
@@ -112,4 +109,5 @@ stdenv.mkDerivation rec {
 
     maintainers = [ maintainers.eelco ];
   };
+
 }
diff --git a/pkgs/tools/misc/findutils/default.nix b/pkgs/tools/misc/findutils/default.nix
index 53d75485d5ca..06a140fed502 100644
--- a/pkgs/tools/misc/findutils/default.nix
+++ b/pkgs/tools/misc/findutils/default.nix
@@ -1,4 +1,9 @@
-{ stdenv, fetchurl, coreutils }:
+{ stdenv, fetchurl
+, coreutils
+, buildPlatform, hostPlatform
+}:
+
+let inherit (stdenv.lib) optionals; in
 
 stdenv.mkDerivation rec {
   name = "findutils-4.6.0";
@@ -10,20 +15,18 @@ stdenv.mkDerivation rec {
 
   patches = [ ./memory-leak.patch ./no-install-statedir.patch ];
 
-  buildInputs = [ coreutils ]; # bin/updatedb script needs to call sort
+  buildInputs = optionals (hostPlatform == buildPlatform) [ coreutils ]; # bin/updatedb script needs to call sort
 
   # Since glibc-2.25 the i686 tests hang reliably right after test-sleep.
-  doCheck = !stdenv.isDarwin && (stdenv.system != "i686-linux");
+  doCheck
+    =  !hostPlatform.isDarwin
+    && !(hostPlatform.libc == "glibc" && hostPlatform.isi686)
+    && hostPlatform == buildPlatform;
 
   outputs = [ "out" "info" ];
 
   configureFlags = [ "--localstatedir=/var/cache" ];
 
-  crossAttrs = {
-    # Fix the 'buildInputs = [ coreutils ]' above - that adds the cross coreutils to PATH :(
-    propagatedBuildInputs = [ ];
-  };
-
   enableParallelBuilding = true;
 
   meta = {
diff --git a/pkgs/tools/misc/xburst-tools/default.nix b/pkgs/tools/misc/xburst-tools/default.nix
index 408879a45345..c64ae609bcbb 100644
--- a/pkgs/tools/misc/xburst-tools/default.nix
+++ b/pkgs/tools/misc/xburst-tools/default.nix
@@ -1,5 +1,6 @@
 { stdenv, fetchgit, libusb, libusb1, autoconf, automake, confuse, pkgconfig
-, gccCross ? null }:
+, gccCross ? null, crossPrefix
+}:
 
 let
   version = "2011-12-26";
@@ -18,7 +19,7 @@ stdenv.mkDerivation {
   '';
 
   configureFlags = if gccCross != null then
-    "--enable-firmware CROSS_COMPILE=${gccCross.crossConfig}-"
+    "--enable-firmware CROSS_COMPILE=${crossPrefix}-"
     else "";
 
   # Not to strip cross build binaries (this is for the gcc-cross-wrapper)
diff --git a/pkgs/tools/networking/dropbear/default.nix b/pkgs/tools/networking/dropbear/default.nix
index aeace91df191..a918aa6375f3 100644
--- a/pkgs/tools/networking/dropbear/default.nix
+++ b/pkgs/tools/networking/dropbear/default.nix
@@ -22,13 +22,6 @@ stdenv.mkDerivation rec {
     makeFlags=VPATH=`cat $NIX_CC/nix-support/orig-libc`/lib
   '';
 
-  crossAttrs = {
-    # This works for uclibc, at least.
-    preConfigure = ''
-      makeFlags=VPATH=`cat ${stdenv.ccCross}/nix-support/orig-libc`/lib
-    '';
-  };
-
   patches = [
     # Allow sessions to inherit the PATH from the parent dropbear.
     # Otherwise they only get the usual /bin:/usr/bin kind of PATH
diff --git a/pkgs/tools/system/ddrescue/default.nix b/pkgs/tools/system/ddrescue/default.nix
index 3dcbf59d4d7d..0b94f328b84a 100644
--- a/pkgs/tools/system/ddrescue/default.nix
+++ b/pkgs/tools/system/ddrescue/default.nix
@@ -1,4 +1,9 @@
-{ stdenv, fetchurl, lzip }:
+{ stdenv
+, fetchurl, lzip
+, hostPlatform, buildPlatform
+}:
+
+let inherit (stdenv.lib) optionals; in
 
 stdenv.mkDerivation rec {
   name = "ddrescue-1.22";
@@ -10,7 +15,12 @@ stdenv.mkDerivation rec {
 
   nativeBuildInputs = [ lzip ];
 
-  doCheck = true;
+  doCheck = hostPlatform == buildPlatform;
+
+  ${if hostPlatform != buildPlatform then "crossPlatforms" else null} = [ ];
+  ${if hostPlatform != buildPlatform then "configureFlags" else null} = [
+    "CXX=${stdenv.cc.prefix}c++"
+  ];
 
   meta = with stdenv.lib; {
     description = "GNU ddrescue, a data recovery tool";
diff --git a/pkgs/tools/text/gnupatch/default.nix b/pkgs/tools/text/gnupatch/default.nix
index adbd69154ecc..57543eb303b0 100644
--- a/pkgs/tools/text/gnupatch/default.nix
+++ b/pkgs/tools/text/gnupatch/default.nix
@@ -1,4 +1,7 @@
-{ stdenv, fetchurl, ed }:
+{ stdenv, fetchurl
+, ed
+, buildPlatform, hostPlatform
+}:
 
 stdenv.mkDerivation rec {
   name = "patch-2.7.5";
@@ -10,11 +13,11 @@ stdenv.mkDerivation rec {
 
   buildInputs = stdenv.lib.optional doCheck ed;
 
-  crossAttrs = {
-    configureFlags = [ "ac_cv_func_strnlen_working=yes" ];
-  };
+  configureFlags = if hostPlatform == buildPlatform then null else [
+    "ac_cv_func_strnlen_working=yes"
+  ];
 
-  doCheck = true;
+  doCheck = hostPlatform == buildPlatform;
 
   meta = {
     description = "GNU Patch, a program to apply differences to files";