summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoraiuto <aiuto@google.com>2022-09-15 11:06:34 -0400
committerGitHub <noreply@github.com>2022-09-15 11:06:34 -0400
commit21888798fdd2ac733018d38a711195db01ab31c9 (patch)
tree0227782e1beb9d1dcc96ee6f3762d1d05a31deda
parent0f128a2579163798b75da0309c73d5cbfaf7e261 (diff)
downloadbazelbuild-rules_pkg-21888798fdd2ac733018d38a711195db01ab31c9.tar.gz
First cut at runfiles support in pkg_* rules (#605)
* First cut at runfiles in pkg_* rules * allow long paths in write_manifest to aid debugging
-rw-r--r--pkg/private/pkg_files.bzl30
-rw-r--r--tests/BUILD5
-rw-r--r--tests/mappings/BUILD3
-rw-r--r--tests/mappings/executable.manifest.golden4
-rw-r--r--tests/mappings/executable.manifest.windows.golden4
-rw-r--r--tests/mappings/manifest_test_lib.py4
-rw-r--r--tests/util/defs.bzl10
7 files changed, 47 insertions, 13 deletions
diff --git a/pkg/private/pkg_files.bzl b/pkg/private/pkg_files.bzl
index f78f28b..4bd9890 100644
--- a/pkg/private/pkg_files.bzl
+++ b/pkg/private/pkg_files.bzl
@@ -268,6 +268,10 @@ def add_label_list(
default_group: fallback mode to use for Package*Info elements without group
"""
+ if hasattr(ctx.attr, "include_runfiles"):
+ include_runfiles = ctx.attr.include_runfiles
+ else:
+ include_runfiles = False
# Compute the relative path
data_path = compute_data_path(
ctx,
@@ -295,6 +299,7 @@ def add_label_list(
default_mode = default_mode,
default_user = default_user,
default_group = default_group,
+ include_runfiles = include_runfiles,
)
@@ -306,7 +311,8 @@ def add_from_default_info(
data_path_without_prefix,
default_mode = None,
default_user = None,
- default_group = None):
+ default_group = None,
+ include_runfiles = False):
"""Helper method to add the DefaultInfo of a target to a content_map.
Args:
@@ -318,6 +324,7 @@ def add_from_default_info(
default_mode: fallback mode to use for Package*Info elements without mode
default_user: fallback user to use for Package*Info elements without user
default_group: fallback mode to use for Package*Info elements without group
+ include_runfiles: Include runfiles
"""
if not DefaultInfo in src:
return
@@ -341,14 +348,29 @@ def add_from_default_info(
fmode = "0755" if f == the_executable else default_mode
add_single_file(
content_map,
- d_path,
- f,
+ dest_path = d_path,
+ src = f,
origin = src.label,
mode = fmode,
user = default_user,
group = default_group,
)
-
+ if include_runfiles:
+ runfiles = src[DefaultInfo].default_runfiles
+ if runfiles:
+ base_path = d_path + '.runfiles'
+ for rf in runfiles.files.to_list():
+ d_path = base_path + '/' + rf.short_path
+ fmode = "0755" if rf == the_executable else default_mode
+ _check_dest(content_map, d_path, rf, src.label)
+ content_map[d_path] = _DestFile(
+ src = rf,
+ entry_type = ENTRY_IS_FILE,
+ origin = src.label,
+ mode = fmode,
+ user = default_user,
+ group = default_group,
+ )
def get_my_executable(src):
"""If a target represents an executable, return its file handle.
diff --git a/tests/BUILD b/tests/BUILD
index c6666c6..7f4c989 100644
--- a/tests/BUILD
+++ b/tests/BUILD
@@ -84,8 +84,9 @@ py_test(
)
cc_binary(
- name = "an_executable",
- srcs = ["foo.cc"],
+ name = "an_executable",
+ srcs = ["foo.cc"],
+ data = ["BUILD"],
)
py_test(
diff --git a/tests/mappings/BUILD b/tests/mappings/BUILD
index 6ebee0a..b9f55aa 100644
--- a/tests/mappings/BUILD
+++ b/tests/mappings/BUILD
@@ -126,12 +126,13 @@ manifest_golden_test(
target = "utf8",
)
-# Test handling of executable files
+# Test handling of executable + runfiles
write_content_manifest(
name = "executable_manifest",
srcs = [
"//tests:an_executable",
],
+ include_runfiles = True,
)
alias(
diff --git a/tests/mappings/executable.manifest.golden b/tests/mappings/executable.manifest.golden
index ae87199..c216822 100644
--- a/tests/mappings/executable.manifest.golden
+++ b/tests/mappings/executable.manifest.golden
@@ -1,3 +1,5 @@
[
-[0, "an_executable", "tests/an_executable", "0755", null, null]
+[0,"an_executable.runfiles/tests/BUILD","tests/BUILD","",null,null],
+[0,"an_executable.runfiles/tests/an_executable","tests/an_executable","0755",null,null],
+[0,"an_executable","tests/an_executable","0755",null,null]
]
diff --git a/tests/mappings/executable.manifest.windows.golden b/tests/mappings/executable.manifest.windows.golden
index 7573b32..5db6cbe 100644
--- a/tests/mappings/executable.manifest.windows.golden
+++ b/tests/mappings/executable.manifest.windows.golden
@@ -1,3 +1,5 @@
[
-[0, "an_executable.exe", "tests/an_executable.exe", "0755", null, null]
+[0,"an_executable.exe.runfiles/tests/an_executable.exe","tests/an_executable.exe","0755",null,null],
+[0,"an_executable.exe.runfiles/tests/BUILD","tests/BUILD","",null,null],
+[0,"an_executable.exe","tests/an_executable.exe","0755",null,null]
]
diff --git a/tests/mappings/manifest_test_lib.py b/tests/mappings/manifest_test_lib.py
index d928473..94c311c 100644
--- a/tests/mappings/manifest_test_lib.py
+++ b/tests/mappings/manifest_test_lib.py
@@ -33,7 +33,9 @@ class ContentManifestTest(unittest.TestCase):
e_file = ContentManifestTest.run_files.Rlocation('rules_pkg/' + expected)
with open(e_file, mode='rb') as e_fp:
expected = json.load(e_fp)
+ expected_dict = {x[1]: x for x in expected}
g_file = ContentManifestTest.run_files.Rlocation('rules_pkg/' + got)
with open(g_file, mode='rb') as g_fp:
got = json.load(g_fp)
- self.assertEqual(expected, got)
+ got_dict = {x[1]: x for x in got}
+ self.assertEqual(expected_dict, got_dict)
diff --git a/tests/util/defs.bzl b/tests/util/defs.bzl
index eb3124c..463525c 100644
--- a/tests/util/defs.bzl
+++ b/tests/util/defs.bzl
@@ -171,15 +171,19 @@ This is intended only for testing the manifest creation features.""",
""",
default = True,
),
+ "include_runfiles": attr.bool(),
},
)
-def write_content_manifest(name, srcs):
+def write_content_manifest(name, srcs, **kwargs):
+ out = kwargs.pop("out", name + ".manifest")
+ use_short_path = kwargs.pop("use_short_path", True)
_write_content_manifest(
name = name,
srcs = srcs,
- use_short_path = True,
- out = name + ".manifest",
+ out = out,
+ use_short_path = use_short_path,
+ **kwargs,
)
############################################################