mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-02-07 12:44:20 +00:00
bazel_6: fix: make patched bash a native binary
https://hydra.nixos.org/build/240805256/nixlog/1 https://hydra.nixos.org/build/240805170/nixlog/2 Failure is a bit obscured but long story short, a script within bazel gets custom nixpkgs shebang which in turn makes shell run in POSIX-compatible mode. Bazel expects bash in non-POSIX mode and osx-specific script starts to fail due to `set -e` and subshell interaction differences in those modes (sub-shells and functions suddently start inheriting `set -e` and fail to produce desired output). More debug info is available in #267670 Shell scripts aren't guaranteed to work as interpreters in shebang. In particular thin shell wrappers aren't shebang-ready on MacOS. It may work sometimes depending on what exactly would try to execute a script with such shebang, but generally it's not guaranteed to work. See #124556 Bash wrapper was introduced in #266847 and so far seems like the issue only affects darwin builds: hydra failure is in osx-specific script, also shebang issue is usually darwin-specific. Let's wrap it as a native binary to make it shebang-compatible. The wrapper is only currently added to `bazel_6` so no need for changes in other versions. ZHF: #265948
This commit is contained in:
parent
39c1b48127
commit
7377bba1c7
@ -23,6 +23,7 @@
|
||||
, substituteAll
|
||||
, writeTextFile
|
||||
, writeShellApplication
|
||||
, makeBinaryWrapper
|
||||
}:
|
||||
|
||||
let
|
||||
@ -129,7 +130,7 @@ let
|
||||
|
||||
defaultShellPath = lib.makeBinPath defaultShellUtils;
|
||||
|
||||
bashWithDefaultShellUtils = writeShellApplication {
|
||||
bashWithDefaultShellUtilsSh = writeShellApplication {
|
||||
name = "bash";
|
||||
runtimeInputs = defaultShellUtils;
|
||||
text = ''
|
||||
@ -140,6 +141,17 @@ let
|
||||
'';
|
||||
};
|
||||
|
||||
# Sript-based interpreters in shebangs aren't guaranteed to work,
|
||||
# especially on MacOS. So let's produce a binary
|
||||
bashWithDefaultShellUtils = stdenv.mkDerivation {
|
||||
name = "bash";
|
||||
src = bashWithDefaultShellUtilsSh;
|
||||
nativeBuildInputs = [ makeBinaryWrapper ];
|
||||
buildPhase = ''
|
||||
makeWrapper ${bashWithDefaultShellUtilsSh}/bin/bash $out/bin/bash
|
||||
'';
|
||||
};
|
||||
|
||||
platforms = lib.platforms.linux ++ lib.platforms.darwin;
|
||||
|
||||
system = if stdenv.hostPlatform.isDarwin then "darwin" else "linux";
|
||||
|
Loading…
Reference in New Issue
Block a user