aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Lukacs Berki <lberki@google.com>2017-01-13 15:16:03 +0000
committerGravatar Marcel Hlopko <hlopko@google.com>2017-01-13 16:12:58 +0000
commit4268c6e05d27e59a2f9861eaf3b67885cd741605 (patch)
tree335980f032e4f0c3774abd5330aab6fb7dea14bb
parent9f60395a04410abe3068c3e0fafbc917193d3f8a (diff)
Tell Python binaries the location of their runfiles tree using the RUNFILES_DIR environment variable.
Note that this is slightly different from the Java launcher (where the same is JAVA_RUNFILES) Fixes #2339. -- PiperOrigin-RevId: 144439111 MOS_MIGRATED_REVID=144439111
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/BaseSpawn.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/python/stub_template.txt1
-rw-r--r--src/main/java/com/google/devtools/build/lib/exec/StandaloneTestStrategy.java1
-rw-r--r--src/test/java/com/google/devtools/build/lib/actions/BaseSpawnTest.java2
-rwxr-xr-xsrc/test/shell/bazel/bazel_rules_test.sh23
5 files changed, 31 insertions, 2 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/actions/BaseSpawn.java b/src/main/java/com/google/devtools/build/lib/actions/BaseSpawn.java
index dd2d5de509..a7723f7b8e 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/BaseSpawn.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/BaseSpawn.java
@@ -218,15 +218,17 @@ public class BaseSpawn implements Spawn {
PathFragment runfilesRoot = getRunfilesRoot();
if (runfilesRoot == null
|| (environment.containsKey("JAVA_RUNFILES")
- && environment.containsKey("PYTHON_RUNFILES"))) {
+ && environment.containsKey("PYTHON_RUNFILES")
+ && environment.containsKey("RUNFILES_DIR"))) {
return environment;
} else {
ImmutableMap.Builder<String, String> env = ImmutableMap.builder();
env.putAll(environment);
- // TODO(bazel-team): Unify these into a single env variable.
+ // TODO(bazel-team): Remove JAVA_RUNFILES and PYTHON_RUNFILES.
String runfilesRootString = runfilesRoot.getPathString();
env.put("JAVA_RUNFILES", runfilesRootString);
env.put("PYTHON_RUNFILES", runfilesRootString);
+ env.put("RUNFILES_DIR", runfilesRootString);
return env.build();
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/python/stub_template.txt b/src/main/java/com/google/devtools/build/lib/bazel/rules/python/stub_template.txt
index 04316fea4d..55f0e7e488 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/python/stub_template.txt
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/python/stub_template.txt
@@ -105,6 +105,7 @@ def Main():
python_path += separator + old_python_path
new_env['PYTHONPATH'] = python_path
+ new_env['RUNFILES_DIR'] = module_space
# Now look for my main python source file.
# The magic string percent-main-percent is replaced with the filename of the
diff --git a/src/main/java/com/google/devtools/build/lib/exec/StandaloneTestStrategy.java b/src/main/java/com/google/devtools/build/lib/exec/StandaloneTestStrategy.java
index 9b2e1d3ab8..b444544ca6 100644
--- a/src/main/java/com/google/devtools/build/lib/exec/StandaloneTestStrategy.java
+++ b/src/main/java/com/google/devtools/build/lib/exec/StandaloneTestStrategy.java
@@ -248,6 +248,7 @@ public class StandaloneTestStrategy extends TestStrategy {
String testSrcDir = runfilesDir.relativeTo(execRoot).getPathString();
env.put("JAVA_RUNFILES", testSrcDir);
env.put("PYTHON_RUNFILES", testSrcDir);
+ env.put("RUNFILES_DIR", testSrcDir);
env.put("TEST_SRCDIR", testSrcDir);
env.put("TEST_TMPDIR", tmpDirString);
env.put("TEST_WORKSPACE", action.getRunfilesPrefix());
diff --git a/src/test/java/com/google/devtools/build/lib/actions/BaseSpawnTest.java b/src/test/java/com/google/devtools/build/lib/actions/BaseSpawnTest.java
index 07abe5283a..5d31bef105 100644
--- a/src/test/java/com/google/devtools/build/lib/actions/BaseSpawnTest.java
+++ b/src/test/java/com/google/devtools/build/lib/actions/BaseSpawnTest.java
@@ -65,6 +65,7 @@ public class BaseSpawnTest {
.putAll(baseEnviron)
.put("PYTHON_RUNFILES", runfilesDir)
.put("JAVA_RUNFILES", runfilesDir)
+ .put("RUNFILES_DIR", runfilesDir)
.build();
assertThat(underTest.getEnvironment()).isEqualTo(expected);
@@ -82,6 +83,7 @@ public class BaseSpawnTest {
.putAll(baseEnviron)
.put("PYTHON_RUNFILES", runfilesDir)
.put("JAVA_RUNFILES", runfilesDir)
+ .put("RUNFILES_DIR", runfilesDir)
.build();
assertThat(underTest.getEnvironment()).isEqualTo(expected);
diff --git a/src/test/shell/bazel/bazel_rules_test.sh b/src/test/shell/bazel/bazel_rules_test.sh
index 93bfa4101d..517a9dd5ed 100755
--- a/src/test/shell/bazel/bazel_rules_test.sh
+++ b/src/test/shell/bazel/bazel_rules_test.sh
@@ -382,6 +382,29 @@ EOF
expect_log "The number is 42"
}
+function test_python_runfiles() {
+ create_new_workspace
+ cd "${new_workspace_dir}"
+ mkdir py
+ cat > py/BUILD <<EOF
+py_binary(name="a", srcs=["a.py"], data=["foobar"])
+EOF
+
+ cat > py/a.py <<EOF
+import os
+
+for l in file(os.environ["RUNFILES_DIR"] + "/__main__/py/foobar").readlines():
+ print l
+EOF
+
+ echo KITTEN > py/foobar
+
+ bazel build //py:a || fail "build failed"
+ bazel-bin/py/a >&$TEST_log || fail "run failed"
+ expect_log KITTEN
+
+}
+
function test_build_with_aliased_input_file() {
mkdir -p a
cat > a/BUILD <<EOF