[build] Handle subdirectory BUILD files (#30292)

* progress

* progress

* progress

* progress

* Automated change: Fix sanity tests

* progress

* progress

* progress

* progress

* fixes

* fix

* progress

* progress

* progress

* progress

* Automated change: Fix sanity tests

* fix

* handle relative paths

* [build] Handle subdirectory BUILD files

* Automated change: Fix sanity tests

* fix

Co-authored-by: ctiller <ctiller@users.noreply.github.com>
pull/30289/head
Craig Tiller 3 years ago committed by GitHub
parent 399050d0e1
commit 7e50d149bc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 12
      test/core/uri/BUILD
  2. 79
      tools/distrib/fix_build_deps.py

@ -24,11 +24,14 @@ grpc_fuzzer(
srcs = ["uri_fuzzer_test.cc"],
corpus = "uri_corpus",
language = "C++",
tags = ["no_windows"],
tags = [
"no_windows",
],
deps = [
"//:gpr",
"//:grpc",
"//test/core/util:grpc_test_util",
"//:exec_ctx",
"//:gpr_base",
"//:grpc_trace",
"//:uri_parser",
],
)
@ -37,6 +40,7 @@ grpc_cc_test(
srcs = ["uri_parser_test.cc"],
external_deps = ["gtest"],
language = "C++",
tags = ["nofixdeps"],
deps = [
"//:grpc",
"//test/core/util:grpc_test_util",

@ -246,6 +246,7 @@ class FakeSelects:
num_cc_libraries = 0
num_opted_out_cc_libraries = 0
parsing_path = None
def grpc_cc_library(name,
@ -260,6 +261,9 @@ def grpc_cc_library(name,
global args
global num_cc_libraries
global num_opted_out_cc_libraries
global parsing_path
assert (parsing_path is not None)
name = '//%s:%s' % (parsing_path, name)
num_cc_libraries += 1
if select_deps or 'nofixdeps' in tags:
if args.whats_left and not select_deps and 'nofixdeps' not in tags:
@ -280,14 +284,15 @@ def grpc_cc_library(name,
original_deps[name] = frozenset(deps)
original_external_deps[name] = frozenset(external_deps)
for src in hdrs + public_hdrs + srcs:
for line in open(src):
for line in open('%s%s' %
((parsing_path + '/' if parsing_path else ''), src)):
m = re.search(r'#include <(.*)>', line)
if m:
inc.add(m.group(1))
m = re.search(r'#include "(.*)"', line)
if m:
inc.add(m.group(1))
if 'grpc::g_glip' in line or 'grpc:g_core_codegen_interface' in line:
if 'grpc::g_glip' in line or 'grpc::g_core_codegen_interface' in line:
needs_codegen_base_src.add(name)
consumes[name] = list(inc)
@ -360,22 +365,42 @@ parser.add_argument('--whats_left',
help='show what is left to opt in')
args = parser.parse_args()
exec(
open('BUILD', 'r').read(), {
'load': lambda filename, *args: None,
'licenses': lambda licenses: None,
'package': lambda **kwargs: None,
'exports_files': lambda files: None,
'config_setting': lambda **kwargs: None,
'selects': FakeSelects(),
'python_config_settings': lambda **kwargs: None,
'grpc_cc_library': grpc_cc_library,
'select': lambda d: d["//conditions:default"],
'grpc_upb_proto_library': lambda name, **kwargs: None,
'grpc_upb_proto_reflection_library': lambda name, **kwargs: None,
'grpc_generate_one_off_targets': lambda: None,
'filegroup': lambda name, **kwargs: None,
}, {})
for dirname in ["", "test/core/uri"]:
parsing_path = dirname
exec(
open('%sBUILD' % (dirname + '/' if dirname else ''), 'r').read(), {
'load': lambda filename, *args: None,
'licenses': lambda licenses: None,
'package': lambda **kwargs: None,
'exports_files': lambda files: None,
'config_setting': lambda **kwargs: None,
'selects': FakeSelects(),
'python_config_settings': lambda **kwargs: None,
'grpc_cc_library': grpc_cc_library,
'grpc_cc_test': grpc_cc_library,
'grpc_fuzzer': grpc_cc_library,
'select': lambda d: d["//conditions:default"],
'grpc_upb_proto_library': lambda name, **kwargs: None,
'grpc_upb_proto_reflection_library': lambda name, **kwargs: None,
'grpc_generate_one_off_targets': lambda: None,
'grpc_package': lambda **kwargs: None,
'filegroup': lambda name, **kwargs: None,
}, {})
parsing_path = None
if args.whats_left:
print("{}/{} libraries are opted in".format(
num_cc_libraries - num_opted_out_cc_libraries, num_cc_libraries))
def make_relative_path(dep, lib):
if lib is None:
return dep
lib_path = lib[:lib.rfind(':') + 1]
if dep.startswith(lib_path):
return dep[len(lib_path):]
return dep
if args.whats_left:
print("{}/{} libraries are opted in".format(
@ -386,20 +411,23 @@ if args.whats_left:
# problem. (models the list monad in Haskell!)
class Choices:
def __init__(self):
def __init__(self, library):
self.library = library
self.to_add = []
self.to_remove = []
def add_one_of(self, choices):
if not choices:
return
self.to_add.append(tuple(choices))
self.to_add.append(
tuple(
make_relative_path(choice, self.library) for choice in choices))
def add(self, choice):
self.add_one_of([choice])
def remove(self, remove):
self.to_remove.append(remove)
self.to_remove.append(make_relative_path(remove, self.library))
def best(self, scorer):
choices = set()
@ -428,8 +456,8 @@ class Choices:
def make_library(library):
error = False
hdrs = sorted(consumes[library])
deps = Choices()
external_deps = Choices()
deps = Choices(library)
external_deps = Choices(None)
for hdr in hdrs:
if hdr == 'src/core/lib/profiling/stap_probes.h':
continue
@ -527,9 +555,8 @@ for library, lib_error, deps, external_deps in updated_libraries:
if lib_error:
error = True
continue
target = ':' + library
buildozer_set_list('external_deps', external_deps, target, via='deps')
buildozer_set_list('deps', deps, target)
buildozer_set_list('external_deps', external_deps, library, via='deps')
buildozer_set_list('deps', deps, library)
if buildozer_commands:
ok_statuses = (0, 3)

Loading…
Cancel
Save