7 from .manifest
import enforce_tabbing_helper
8 from .util
import roscompile
10 PLUGIN_PATTERN =
r'PLUGINLIB_EXPORT_CLASS\(([^:]+)::([^,]+),\s*([^:]+)::([^,]+)\)' 11 PLUGIN_RE = re.compile(PLUGIN_PATTERN)
15 xmls = collections.defaultdict(list)
16 for xml
in package.plugin_configs:
17 for parent_pkg
in xml.parent_pkgs:
18 xmls[parent_pkg].append(xml)
24 if xml.contains_library(library, pkg, name):
30 for library, deps
in build_rules.items():
37 """Check that all the plugins are properly defined. 39 We have three dictionaries 40 * The plugins that are defined by macros (defined_macros) 41 * The plugins that have associated configuration files (existing_plugins) 42 * The plugins that are linked by the manifest. (plugin_xml_by_package) 43 First, we reconcile the macros with the files. 44 Then we handle the manifest. 45 Then we make sure that the specific classes are in the configurations 47 defined_macros = package.source_code.search_for_pattern(PLUGIN_RE)
49 defined_plugins = package.manifest.get_plugin_xmls()
50 build_rules = package.cmake.get_source_build_rules(
'add_library', resolve_target_name=
True)
52 for rel_fn, plugin_info
in defined_macros.items():
55 for pkg1, name1, pkg2, name2
in plugin_info:
57 if pkg2
not in existing_plugins:
58 xml_filename =
'%s_plugins.xml' % pkg2
59 print(
'\tCreating %s' % xml_filename)
60 p_xml =
PluginXML(xml_filename, os.path.join(package.root, xml_filename))
61 package.plugin_configs.append(p_xml)
62 existing_plugins[pkg2] = [p_xml]
65 for plugin_xml
in existing_plugins[pkg2]:
66 if plugin_xml.rel_fn
not in defined_plugins[pkg2]:
67 ex_el = package.manifest.add_plugin_export(pkg2, plugin_xml.rel_fn)
73 xml = existing_plugins[pkg2][0]
74 xml.insert_new_class(library, pkg1, name1, pkg2, name2)
def lookup_library(build_rules, rel_fn)
def check_plugins(package)
def plugin_xml_by_package(package)
def enforce_tabbing_helper(manifest, node, tabs=1)
def contains_library(xmls, library, pkg, name)