[build] Handle subdirectory BUILD files (#30327)

* Revert "Revert "[build] Handle subdirectory BUILD files (#30292)" (#30319)"

This reverts commit c6e9203fcb.

* fix
pull/30356/head
Craig Tiller 3 years ago committed by GitHub
parent a0ce815f34
commit f6a96e5506
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 10
      test/core/uri/BUILD
  2. 86
      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",
"//:exec_ctx",
"//:gpr_base",
"//:grpc",
"//test/core/util:grpc_test_util",
"//: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:
@ -272,22 +276,21 @@ def grpc_cc_library(name,
# other, whilst not biasing dependent projects
if 'avoid_dep' in tags or 'grpc_avoid_dep' in tags:
avoidness[name] += 10
if 'nofixdeps' in tags:
avoidness[name] += 1
for hdr in hdrs + public_hdrs:
vendors[hdr].append(name)
inc = set()
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 +363,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 +409,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,12 +454,17 @@ 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
if hdr == 'grpc/grpc.h' and not library.startswith('//:'):
# not the root build including grpc.h ==> //:grpc
deps.add('//:grpc')
continue
if hdr in INTERNAL_DEPS:
deps.add(INTERNAL_DEPS[hdr])
continue
@ -527,9 +558,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