From 8b87e0d6ee0e645d1ac2b27c2fba0c97f2929e31 Mon Sep 17 00:00:00 2001
From: Alyssa Ross <hi@alyssa.is>
Date: Sun, 24 Nov 2019 16:56:11 +0000
Subject: [PATCH 1/4] common-mk: don't leak source-absolute paths
Source-absolute paths like //vm_tools/whatever were being leaked to
subprocesses, which of course didn't know how to understand them.
With this patch, source-absolute paths are only used to tell GN the
outputs, and normal Unix paths are passed to subprocesses.
---
common-mk/external_dependencies/BUILD.gn | 3 ++-
common-mk/mojom_bindings_generator.gni | 12 ++++++------
common-mk/mojom_type_mappings_generator.gni | 2 +-
common-mk/pkg_config.gni | 5 +++--
common-mk/proto_library.gni | 21 +++++++++++----------
5 files changed, 23 insertions(+), 20 deletions(-)
diff --git a/common-mk/external_dependencies/BUILD.gn b/common-mk/external_dependencies/BUILD.gn
index dbf45368ff..94aae4e2e2 100644
--- a/common-mk/external_dependencies/BUILD.gn
+++ b/common-mk/external_dependencies/BUILD.gn
@@ -45,6 +45,7 @@ genxml2cpp("dbus-proxies") {
action("cloud_policy_proto_generator") {
policy_resources_dir = "${sysroot}/usr/share/policy_resources"
proto_out_dir = "${target_gen_dir}/proto"
+ cloud_policy_protobuf_dir = rebase_path(proto_out_dir)
policy_tools_dir = "${sysroot}/usr/share/policy_tools"
script = "${policy_tools_dir}/generate_policy_source.py"
@@ -54,7 +55,7 @@ action("cloud_policy_proto_generator") {
]
outputs = [ "${proto_out_dir}/cloud_policy.proto" ]
args = [
- "--cloud-policy-protobuf=${proto_out_dir}/cloud_policy.proto",
+ "--cloud-policy-protobuf=${cloud_policy_protobuf_dir}/cloud_policy.proto",
"--chrome-version-file=${policy_resources_dir}/VERSION",
"--target-platform=chromeos",
"--policy-templates-file=${policy_resources_dir}/policy_templates.json",
diff --git a/common-mk/mojom_bindings_generator.gni b/common-mk/mojom_bindings_generator.gni
index 038c20ed36..205d7d3037 100644
--- a/common-mk/mojom_bindings_generator.gni
+++ b/common-mk/mojom_bindings_generator.gni
@@ -100,7 +100,7 @@ template("generate_mojom_bindings_gen") {
args = [
"mkdir",
"-p",
- mojo_templates_dir,
+ rebase_path(mojo_templates_dir),
]
}
@@ -116,7 +116,7 @@ template("generate_mojom_bindings_gen") {
args = [
"--use_bundled_pylibs",
"-o",
- mojo_templates_dir,
+ rebase_path(mojo_templates_dir),
"precompile",
]
deps = [ ":${mojo_templates_dir_action_name}" ]
@@ -143,7 +143,7 @@ template("generate_mojom_bindings_gen") {
args = [
"--mojom-file-list={{response_file_name}}",
"--output-root",
- _mojo_output_base,
+ rebase_path(_mojo_output_base),
"--input-root",
mojo_root, # Mojo depth.
"--input-root",
@@ -188,11 +188,11 @@ template("generate_mojom_bindings_gen") {
mojom_bindings_generator,
"--use_bundled_pylibs",
"--output_dir",
- _mojo_output_base,
+ rebase_path(_mojo_output_base),
"generate",
"--filelist={{response_file_name}}",
"--bytecode_path",
- mojo_templates_dir,
+ rebase_path(mojo_templates_dir),
"-I",
mojo_root, # Mojo include path.
"-d",
@@ -216,7 +216,7 @@ template("generate_mojom_bindings_gen") {
foreach(typemap, invoker.typemaps) {
args += [
"--typemap",
- typemap,
+ rebase_path(typemap),
]
}
}
diff --git a/common-mk/mojom_type_mappings_generator.gni b/common-mk/mojom_type_mappings_generator.gni
index ff09397111..959a8b6ca9 100644
--- a/common-mk/mojom_type_mappings_generator.gni
+++ b/common-mk/mojom_type_mappings_generator.gni
@@ -21,7 +21,7 @@ template("generate_mojom_type_mappings") {
outputs = [ "$target_gen_dir/${target_name}_typemapping" ]
args = [
"--output",
- "$target_gen_dir/${target_name}_typemapping",
+ rebase_path("$target_gen_dir/${target_name}_typemapping"),
] + rebase_path(sources, root_build_dir)
}
}
diff --git a/common-mk/pkg_config.gni b/common-mk/pkg_config.gni
index 24e2cf1401..151c49e560 100644
--- a/common-mk/pkg_config.gni
+++ b/common-mk/pkg_config.gni
@@ -81,10 +81,11 @@ template("generate_pkg_config") {
if (!defined(output_name)) {
output_name = name
}
- outputs = [ "${target_out_dir}/${output_name}.pc" ]
+ lib_path = "${target_out_dir}/${output_name}.pc"
+ outputs = [ lib_path ]
script = "//common-mk/generate-pc.py"
- args = [ "--output" ] + outputs + [ "--name=" + name ]
+ args = [ "--output", rebase_path(lib_path), "--name=" + name ]
if (defined(description)) {
args += [ "--description=" + description ]
}
diff --git a/common-mk/proto_library.gni b/common-mk/proto_library.gni
index 68b7904acc..2bef5f44ef 100644
--- a/common-mk/proto_library.gni
+++ b/common-mk/proto_library.gni
@@ -56,7 +56,7 @@ template("proto_library") {
cc_dir = "${root_gen_dir}/${proto_out_dir}"
proto_in_dir = rebase_path(proto_in_dir)
- proto_out_dir = rebase_path(proto_out_dir)
+ proto_out_dir = rebase_path(cc_dir)
proto_lib_dirs = [
proto_in_dir,
@@ -94,24 +94,23 @@ template("proto_library") {
args += [ "${proto_in_dir}/{{source_name_part}}.proto" ]
outputs = []
if (gen_python) {
- python_dir = "${root_gen_dir}/${proto_out_dir}/py"
args += [
"--python_out",
- "${python_dir}",
+ "${proto_out_dir}/py",
]
- outputs += [ "${python_dir}/{{source_name_part}}_pb.py" ]
+ outputs += [ "${cc_dir}/py/{{source_name_part}}_pb.py" ]
}
if (gen_grpc) {
if (gen_grpc_gmock) {
- args += [ "--grpc_out=generate_mock_code=true:${cc_dir}" ]
+ args += [ "--grpc_out=generate_mock_code=true:${proto_out_dir}" ]
outputs += [ "${cc_dir}/{{source_name_part}}_mock.grpc.pb.h" ]
} else {
- args += [ "--grpc_out=${cc_dir}" ]
+ args += [ "--grpc_out=${proto_out_dir}" ]
}
grpc_cpp_plugin = "/usr/bin/grpc_cpp_plugin"
args += [
"--plugin=protoc-gen-grpc=${grpc_cpp_plugin}",
- "--cpp_out=${gen_cpp_mode}${cc_dir}",
+ "--cpp_out=${gen_cpp_mode}${proto_out_dir}",
]
outputs += [
"${cc_dir}/{{source_name_part}}.grpc.pb.cc",
@@ -121,7 +120,7 @@ template("proto_library") {
]
}
if (!gen_grpc && !gen_python) {
- args += [ "--cpp_out=${gen_cpp_mode}${cc_dir}" ]
+ args += [ "--cpp_out=${gen_cpp_mode}${proto_out_dir}" ]
outputs += [
"${cc_dir}/{{source_name_part}}.pb.cc",
"${cc_dir}/{{source_name_part}}.pb.h",
@@ -218,7 +217,9 @@ template("goproto_library") {
# otherwise file descriptor var name will conflict.
# cf) https://github.com/golang/protobuf/issues/109
+ cc_dir = "${root_gen_dir}/${proto_out_dir}"
proto_in_dir = rebase_path(invoker.proto_in_dir)
+ proto_out_dir = rebase_path(cc_dir)
# Build protoc command line to run.
script = "//common-mk/file_generator_wrapper.py"
@@ -258,7 +259,7 @@ template("goproto_library") {
"--go_out",
# go_out_prefix can be empty, so we can always add a colon here.
- "${go_out_prefix}:${root_gen_dir}/${proto_out_dir}",
+ "${go_out_prefix}:${proto_out_dir}",
]
foreach(source, sources) {
args += [ rebase_path(source) ]
@@ -268,7 +269,7 @@ template("goproto_library") {
outputs = []
foreach(source, invoker.sources) {
name = get_path_info(source, "name")
- outputs += [ "${root_gen_dir}/${proto_out_dir}/${name}.pb.go" ]
+ outputs += [ "${cc_dir}/${name}.pb.go" ]
}
}
}
--
2.30.0