about summary refs log tree commit diff
path: root/pkgs/test/make-binary-wrapper
diff options
context:
space:
mode:
authorNaïm Favier <n@monade.li>2022-05-29 17:26:23 +0200
committerNaïm Favier <n@monade.li>2022-05-31 13:55:41 +0200
commiteef2c762ce19c8cf7172b319a7f4cd5555b5f289 (patch)
tree9e2697335364ef36570ad9192fea222e39c66861 /pkgs/test/make-binary-wrapper
parent5db40e768d1447624235b27d7176726550eb353f (diff)
makeBinaryWrapper: fix cross-compilation and add test
Fixes https://github.com/NixOS/nixpkgs/issues/175045
Diffstat (limited to 'pkgs/test/make-binary-wrapper')
-rw-r--r--pkgs/test/make-binary-wrapper/cross.nix23
-rw-r--r--pkgs/test/make-binary-wrapper/default.nix58
2 files changed, 55 insertions, 26 deletions
diff --git a/pkgs/test/make-binary-wrapper/cross.nix b/pkgs/test/make-binary-wrapper/cross.nix
new file mode 100644
index 0000000000000..36758086b92b2
--- /dev/null
+++ b/pkgs/test/make-binary-wrapper/cross.nix
@@ -0,0 +1,23 @@
+{ stdenv
+, runCommand
+, makeBinaryWrapper
+, binutils
+, expectedArch ? stdenv.hostPlatform.parsed.cpu.name
+}:
+
+runCommand "make-binary-wrapper-test-cross" {
+  nativeBuildInputs = [
+    makeBinaryWrapper
+    binutils
+  ];
+  inherit expectedArch;
+} ''
+  touch prog
+  chmod +x prog
+  makeWrapper prog $out
+  read -r _ arch < <($READELF --file-header $out | grep Machine:)
+  if [[ ''${arch,,} != *"''${expectedArch,,}"* ]]; then
+    echo "expected $expectedArch, got $arch"
+    exit 1
+  fi
+''
diff --git a/pkgs/test/make-binary-wrapper/default.nix b/pkgs/test/make-binary-wrapper/default.nix
index 2d3389c4a012c..afc2b41ff5a7a 100644
--- a/pkgs/test/make-binary-wrapper/default.nix
+++ b/pkgs/test/make-binary-wrapper/default.nix
@@ -1,12 +1,19 @@
-{ lib, coreutils, python3, gcc, writeText, writeScript, runCommand, makeBinaryWrapper }:
+{ lib
+, stdenv
+, pkgsCross
+, makeBinaryWrapper
+, writeText
+, runCommand
+, runCommandCC
+}:
 
 let
-  env = { buildInputs = [ makeBinaryWrapper ]; };
-  envCheck = runCommand "envcheck" env ''
-    ${gcc}/bin/cc -Wall -Werror -Wpedantic -o $out ${./envcheck.c}
+  env = { nativeBuildInputs = [ makeBinaryWrapper ]; };
+  envCheck = runCommandCC "envcheck" env ''
+    cc -Wall -Werror -Wpedantic -o $out ${./envcheck.c}
   '';
-  makeGoldenTest = testname: runCommand "test-wrapper_${testname}" env ''
-    mkdir -p ./tmp/foo
+  makeGoldenTest = testname: runCommand "make-binary-wrapper-test-${testname}" env ''
+    mkdir -p tmp/foo # for the chdir test
 
     params=$(<"${./.}/${testname}.cmdline")
     eval "makeCWrapper /send/me/flags $params" > wrapper.c
@@ -32,24 +39,23 @@ let
 
     cp wrapper.c $out
   '';
-  tests = let
-    names = [
-      "add-flags"
-      "argv0"
-      "basic"
-      "chdir"
-      "combination"
-      "env"
-      "inherit-argv0"
-      "invalid-env"
-      "prefix"
-      "suffix"
-      "overlength-strings"
-    ];
-    f = name: lib.nameValuePair name (makeGoldenTest name);
-  in builtins.listToAttrs (builtins.map f names);
-in writeText "make-binary-wrapper-test" ''
-  ${lib.concatStringsSep "\n" (lib.mapAttrsToList (_: test: ''
-    "${test.name}" "${test}"
-  '') tests)}
+  tests = lib.genAttrs [
+    "add-flags"
+    "argv0"
+    "basic"
+    "chdir"
+    "combination"
+    "env"
+    "inherit-argv0"
+    "invalid-env"
+    "overlength-strings"
+    "prefix"
+    "suffix"
+  ] makeGoldenTest // lib.optionalAttrs (! stdenv.isDarwin) {
+    cross = pkgsCross.aarch64-multiplatform.callPackage ./cross.nix { };
+  };
+in
+
+writeText "make-binary-wrapper-tests" ''
+  ${lib.concatStringsSep "\n" (builtins.attrValues tests)}
 '' // tests