diff options
author | Guillaume Bouchard <guillaume.bouchard@tweag.io> | 2019-11-12 21:07:58 +0100 |
---|---|---|
committer | Guillaume Bouchard <guillaume.bouchard@tweag.io> | 2019-12-04 12:59:32 +0100 |
commit | 20752ba4f76250509d4dd89a0bf44c808cc589b9 (patch) | |
tree | 980111dacc3906be4e5cc2b23c1c01796d065a95 /pkgs/development/tools/build-managers | |
parent | 224737f0f72801e168495d293543f6914b46afed (diff) | |
download | nixlib-20752ba4f76250509d4dd89a0bf44c808cc589b9.tar nixlib-20752ba4f76250509d4dd89a0bf44c808cc589b9.tar.gz nixlib-20752ba4f76250509d4dd89a0bf44c808cc589b9.tar.bz2 nixlib-20752ba4f76250509d4dd89a0bf44c808cc589b9.tar.lz nixlib-20752ba4f76250509d4dd89a0bf44c808cc589b9.tar.xz nixlib-20752ba4f76250509d4dd89a0bf44c808cc589b9.tar.zst nixlib-20752ba4f76250509d4dd89a0bf44c808cc589b9.zip |
bazel: improve strict action env context
- Bazel strict action env set a default PATH to `/bin/:/usr/bin:/usr/local/bin`. This was previously changed to disable this behavior to improve hermeticity. However the previous change was only removing `/bin:/usr/bin`, keeping `/usr/local/bin`, this commit also remove this entry.
Diffstat (limited to 'pkgs/development/tools/build-managers')
-rw-r--r-- | pkgs/development/tools/build-managers/bazel/default.nix | 20 | ||||
-rw-r--r-- | pkgs/development/tools/build-managers/bazel/strict_action_env.patch | 13 |
2 files changed, 25 insertions, 8 deletions
diff --git a/pkgs/development/tools/build-managers/bazel/default.nix b/pkgs/development/tools/build-managers/bazel/default.nix index 74a4ff4a3da6..3064eb92043e 100644 --- a/pkgs/development/tools/build-managers/bazel/default.nix +++ b/pkgs/development/tools/build-managers/bazel/default.nix @@ -19,6 +19,7 @@ , enableNixHacks ? false , gcc-unwrapped , autoPatchelfHook +, substituteAll }: let @@ -145,6 +146,17 @@ stdenv.mkDerivation rec { # This is breaking the build of any C target. This patch removes the last # argument if it's found to be an empty string. ./trim-last-argument-to-gcc-if-empty.patch + + # --experimental_strict_action_env (which may one day become the default + # see bazelbuild/bazel#2574) hardcodes the default + # action environment to a non hermetic value (e.g. "/usr/local/bin"). + # This is non hermetic on non-nixos systems. On NixOS, bazel cannot find the required binaries. + # So we are replacing this bazel paths by defaultShellPath, + # improving hermeticity and making it work in nixos. + (substituteAll { + src = ./strict_action_env.patch; + strictActionEnvPatch = defaultShellPath; + }) ] ++ lib.optional enableNixHacks ./nix-hacks.patch; @@ -390,14 +402,6 @@ stdenv.mkDerivation rec { -e "/\$command \\\\$/a --host_java_toolchain='${javaToolchain}' \\\\" \ -i scripts/bootstrap/compile.sh - # --experimental_strict_action_env (which will soon become the - # default, see bazelbuild/bazel#2574) hardcodes the default - # action environment to a value that on NixOS at least is bogus. - # So we hardcode it to something useful. - substituteInPlace \ - src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java \ - --replace /bin:/usr/bin ${defaultShellPath} - # This is necessary to avoid: # "error: no visible @interface for 'NSDictionary' declares the selector # 'initWithContentsOfURL:error:'" diff --git a/pkgs/development/tools/build-managers/bazel/strict_action_env.patch b/pkgs/development/tools/build-managers/bazel/strict_action_env.patch new file mode 100644 index 000000000000..1402c20f6bdb --- /dev/null +++ b/pkgs/development/tools/build-managers/bazel/strict_action_env.patch @@ -0,0 +1,13 @@ +diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java +index a70b5559bc..10bdffe961 100644 +--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java ++++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java +@@ -466,7 +466,7 @@ public class BazelRuleClassProvider { + // Note that --action_env does not propagate to the host config, so it is not a viable + // workaround when a genrule is itself built in the host config (e.g. nested genrules). See + // #8536. +- return "/bin:/usr/bin:/usr/local/bin"; ++ return "@strictActionEnvPatch@"; + } + + String newPath = ""; |