def test_evaluate_two_defaults(self): """Test evaluate_defaults() with two defaults.""" modules = [ ('cc_defaults', { 'name': 'libfoo-defaults', 'a': 'libfoo_default_a', 'b': 'libfoo_default_b', }), ('cc_defaults', { 'name': 'libbar-defaults', 'a': 'libbar_default_a', 'b': 'libbar_default_b', 'c': 'libbar_default_c', }), ('cc_library', { 'name': 'libfoo', 'defaults': ['libfoo-defaults', 'libbar-defaults'], 'a': 'specified_a', }), ] modules = evaluate_defaults(modules) module = modules[-1][1] self.assertEqual(module['name'], 'libfoo') self.assertEqual(module['a'], 'specified_a') self.assertEqual(module['b'], 'libfoo_default_b') self.assertEqual(module['c'], 'libbar_default_c')
def parse_root_bp(self, root_bp_path): """Parse blueprint files and add module definitions.""" parser = RecursiveParser() parser.parse_file(root_bp_path) parsed_items = evaluate_defaults(parser.modules) self._add_modules_from_parsed_pairs(parsed_items)
def test_skip_modules_without_name(self): """Test whether evaluate_defaults() skips modules without names.""" modules = [('special_rules', {})] try: modules = evaluate_defaults(modules) except KeyError: self.fail('modules without names must not cause KeyErrors')
def parse_root_bp(self, root_bp_path, namespaces=None): """Parse blueprint files and add module definitions.""" namespaces = {''} if namespaces is None else set(namespaces) parser = RecursiveParser() parser.parse_file(root_bp_path) parsed_items = evaluate_defaults(parser.modules) parsed_items = fill_module_namespaces(root_bp_path, parsed_items) self._add_modules_from_parsed_pairs(parsed_items, namespaces)
def main(): """Main function.""" args = _parse_args() parser = RecursiveParser() parser.parse_file(args.root_bp) all_bad_deps = _check_modules_deps(evaluate_defaults(parser.modules)) for name, bad_deps in all_bad_deps: print('ERROR: {!r} must not depend on {}'.format(name, bad_deps), file=sys.stderr) if all_bad_deps: sys.exit(1)
def test_evaluate_recursive_diamond(self): """Test whether evaluate_defaults() can evaluate diamond defaults recursively.""" modules = [ ('cc_defaults', { 'name': 'libfoo-defaults', 'defaults': ['libtest-defaults'], 'a': 'libfoo_default_a', 'b': 'libfoo_default_b', }), ('cc_defaults', { 'name': 'libbar-defaults', 'defaults': ['libtest-defaults'], 'a': 'libbar_default_a', 'b': 'libbar_default_b', 'c': 'libbar_default_c', 'd': 'libbar_default_d', }), ('cc_defaults', { 'name': 'libtest-defaults', 'a': 'libtest_default_a', 'b': 'libtest_default_b', 'c': 'libtest_default_c', 'e': 'libtest_default_e', }), ('cc_library', { 'name': 'libfoo', 'defaults': ['libfoo-defaults', 'libbar-defaults'], 'a': 'specified_a', }), ] modules = evaluate_defaults(modules) module = modules[-1][1] self.assertEqual(module['name'], 'libfoo') self.assertEqual(module['a'], 'specified_a') self.assertEqual(module['b'], 'libfoo_default_b') self.assertEqual(module['c'], 'libtest_default_c') self.assertEqual(module['d'], 'libbar_default_d') self.assertEqual(module['e'], 'libtest_default_e')
def parse_blueprint(root_bp_path): """Parse Android.bp files.""" parser = RecursiveParser() parser.parse_file(root_bp_path) parsed_items = evaluate_defaults(parser.modules) return fill_module_namespaces(root_bp_path, parsed_items)