5 from .util
import get_config, get_ignore_data, roscompile
7 SHOULD_ALPHABETIZE = [
'COMPONENTS',
'DEPENDENCIES',
'FILES',
'CATKIN_DEPENDS']
10 CATKIN_INSTALL_PYTHON_PRENAME =
'\n ' 14 if len(dependencies) == 0:
16 if len(cmake.content_map[
'find_package']) == 0:
18 cmd.add_section(
'', [
'catkin'])
19 cmd.add_section(
'REQUIRED')
20 cmake.add_command(cmd)
22 for cmd
in cmake.content_map[
'find_package']:
23 tokens = cmd.get_tokens()
24 if tokens
and tokens[0] ==
'catkin' and cmd.get_section(
'REQUIRED'):
25 req_sec = cmd.get_section(
'REQUIRED')
26 section = cmd.get_section(
'COMPONENTS')
27 if section
is None and req_sec.values:
30 cmd.add_section(
'COMPONENTS', sorted(dependencies))
32 existing = cmake.resolve_variables(section.values)
33 needed_items = dependencies - set(existing)
35 section.add_values(needed_items)
38 cmake.section_check(dependencies,
'catkin_package',
'CATKIN_DEPENDS')
43 dependencies = package.get_dependencies_from_msgs()
44 dependencies.update(package.get_build_dependencies())
49 valid_targets = {search_target}
50 alt_target = cmake.resolve_variables(search_target)
51 if alt_target != search_target:
52 valid_targets.add(alt_target)
54 for cmd
in cmake.content_map[
'add_dependencies']:
55 target = cmd.first_token()
56 if target
in valid_targets:
58 resolved_target = cmake.resolve_variables(target)
59 if resolved_target
in valid_targets:
64 for gen
in package.get_all_generators():
65 if name == gen.base_name:
71 for rel_fn
in sources:
72 if rel_fn
not in package.source_code.sources:
74 src = package.source_code.sources[rel_fn]
75 for pkg, name
in src.search_lines_for_pattern(CPLUS):
76 if len(name) == 0
or name[-2:] !=
'.h':
78 name = name.replace(
'.h',
'')
79 if is_message(pkg, name)
or is_service(pkg, name):
83 if package.dynamic_reconfigs:
84 deps.add(package.name)
90 targets = package.cmake.get_target_build_rules()
91 for target, sources
in targets.items():
96 if package.name
in deps:
110 add_deps =
Command(
'add_dependencies')
113 if len(add_deps.sections) == 0:
114 add_deps.add_section(
'', [target])
115 add_deps.changed =
True 117 section = add_deps.sections[0]
118 if cat_depend
and '${catkin_EXPORTED_TARGETS}' not in section.values:
119 section.add(
'${catkin_EXPORTED_TARGETS}')
120 add_deps.changed =
True 122 tokens = [package.cmake.resolve_variables(s)
for s
in section.values]
123 key =
'${%s_EXPORTED_TARGETS}' % package.name
124 if key
not in tokens:
126 add_deps.changed =
True 129 package.cmake.add_command(add_deps)
133 prev_len = len(section.values)
134 section.values = [v
for v
in section.values
if pattern
not in v]
135 return prev_len != len(section.values)
140 global_changed =
False 141 targets = package.cmake.get_target_build_rules()
142 for target
in targets:
144 if add_deps
is None or len(add_deps.sections) == 0:
147 section = add_deps.sections[0]
152 add_deps.changed =
True 153 global_changed =
True 160 CATKIN =
'${catkin_LIBRARIES}' 161 targets = package.cmake.get_libraries() + package.cmake.get_executables()
162 for cmd
in package.cmake.content_map[
'target_link_libraries']:
163 tokens = cmd.get_tokens()
164 if tokens[0]
in targets:
165 if CATKIN
not in tokens:
166 print(
'\tAdding %s to target_link_libraries for %s' % (CATKIN, tokens[0]))
167 cmd.add_token(CATKIN)
168 targets.remove(tokens[0])
170 for target
in targets:
171 print(
'\tAdding target_link_libraries for %s' % target)
172 cmd =
Command(
'target_link_libraries')
173 cmd.add_section(
'', [target, CATKIN])
174 package.cmake.add_command(cmd)
179 if len(package.generators) == 0:
182 for gen_type, cmake_cmd
in [(
'msg',
'add_message_files'),
183 (
'srv',
'add_service_files'),
184 (
'action',
'add_action_files')]:
185 names = [gen.name
for gen
in package.generators[gen_type]]
186 package.cmake.section_check(names, cmake_cmd,
'FILES')
188 package.cmake.section_check([
'message_generation'],
'find_package',
'COMPONENTS')
189 package.cmake.section_check([
'message_runtime'],
'catkin_package',
'CATKIN_DEPENDS')
190 for cmd
in package.cmake.content_map[
'catkin_package']:
191 section = cmd.get_section(
'CATKIN_DEPENDS')
192 if 'message_generation' in section.values:
193 section.values.remove(
'message_generation')
196 msg_deps = package.get_dependencies_from_msgs()
198 package.cmake.section_check(msg_deps,
'generate_messages',
199 'DEPENDENCIES', zero_okay=
True)
201 package.cmake.section_check(msg_deps,
'generate_messages',
208 if package.source_code.has_header_files():
209 package.cmake.section_check([
'include'],
'catkin_package',
'INCLUDE_DIRS')
210 package.cmake.section_check([
'include'],
'include_directories', alpha_order=
False)
213 if len(package.source_code.get_source_by_language(
'c++')) > 0:
214 package.cmake.section_check([
'${catkin_INCLUDE_DIRS}'],
'include_directories', alpha_order=
False)
217 if not has_includes
and 'include_directories' in package.cmake.content_map:
218 for cmd
in package.cmake.content_map[
'include_directories']:
219 package.cmake.remove_command(cmd)
224 package.cmake.section_check(package.cmake.get_libraries(),
'catkin_package',
'LIBRARIES')
228 for content
in cmake.contents:
229 if content.__class__ == Command:
230 for section
in content.get_real_sections():
231 if section.name
in SHOULD_ALPHABETIZE:
232 sorted_values = sorted(section.values)
233 if sorted_values != section.values:
234 section.values = sorted_values
235 content.changed =
True 236 elif content.__class__ == CommandGroup:
247 for cmd
in package.cmake.content_map[
'catkin_package']:
248 for section
in cmd.get_real_sections():
249 section.style.prename = NEWLINE_PLUS_4
255 acceptable_styles = [(NEWLINE_PLUS_8, NEWLINE_PLUS_8), (NEWLINE_PLUS_4, NEWLINE_PLUS_8)]
257 for cmd_name, section_name
in [(
'find_package',
'COMPONENTS'), (
'catkin_package',
'CATKIN_DEPENDS')]:
258 for cmd
in package.cmake.content_map[cmd_name]:
259 for section
in cmd.get_real_sections():
260 if section.name != section_name:
262 n = len(str(section))
264 key = section.style.name_val_sep, section.style.val_sep
265 if key
not in acceptable_styles:
266 section.style.name_val_sep = NEWLINE_PLUS_4
267 section.style.val_sep = NEWLINE_PLUS_8
273 for cmd
in package.cmake.content_map[
'add_message_files'] + package.cmake.content_map[
'add_service_files']:
274 for section
in cmd.get_real_sections():
275 if len(section.values) > 1:
276 section.style.name_val_sep = NEWLINE_PLUS_4
277 section.style.val_sep = NEWLINE_PLUS_4
283 for cmd
in package.cmake.content_map[
'install']:
285 cmd.sections = [s
for s
in cmd.sections
if type(s) != str]
287 for section
in cmd.sections[1:]:
288 if len(section.values) == 0:
289 section.style.prename = NEWLINE_PLUS_8
292 section.style.prename = NEWLINE_PLUS_8
294 section.style.prename =
'' 296 for cmd
in package.cmake.content_map[
'catkin_install_python']:
297 section = cmd.sections[1]
298 if section.style.prename != CATKIN_INSTALL_PYTHON_PRENAME:
299 section.style.prename = CATKIN_INSTALL_PYTHON_PRENAME
304 return list(filter(
lambda x: x !=
'', a))
308 for i, section
in enumerate(command.sections):
309 if type(section) != str:
311 for ignorable
in ignorables:
312 while ignorable
in command.sections[i]:
313 command.changed =
True 314 command.sections[i] = command.sections[i].replace(ignorable, replacement)
317 if command.sections == [
'\n']:
318 command.sections = []
322 for i, content
in enumerate(cmake.contents):
323 if content.__class__ == Command:
325 elif content.__class__ == CommandGroup:
328 for ignorable
in ignorables:
329 while ignorable
in cmake.contents[i]:
330 cmake.contents[i] = cmake.contents[i].replace(ignorable, replacement)
343 for i, content
in enumerate(package.cmake.contents[:-2]):
344 if str(content)[-1] ==
'\n' and package.cmake.contents[i + 1] ==
'\n' and package.cmake.contents[i + 2] ==
'\n':
345 package.cmake.contents[i + 1] =
'' 353 default_style = config.get(
'cmake_style')
354 package.cmake.enforce_ordering(default_style)
def check_cmake_dependencies(package)
def remove_empty_strings(a)
def check_includes(package)
def check_generators(package)
def remove_old_style_cpp_dependencies(package)
def prettify_msgs_srvs(package)
def prettify_package_lists(package)
def enforce_cmake_ordering(package, config=None)
def get_ignore_data(name, variables=None, add_newline=True)
def remove_boilerplate_cmake_comments(package)
def check_cmake_dependencies_helper(cmake, dependencies, check_catkin_pkg=True)
def prettify_catkin_package_cmd(package)
def remove_empty_cmake_lines(package)
def get_matching_add_depends(cmake, search_target)
def remove_cmake_comments_helper(cmake, ignorables, replacement='')
def target_catkin_libraries(package)
def alphabetize_sections(package)
def alphabetize_sections_helper(cmake)
def remove_pattern(section, pattern)
def get_msg_dependencies_from_source(package, sources)
def match_generator_name(package, name)
def check_library_setup(package)
def prettify_installs(package)
def check_exported_dependencies(package)
def remove_cmake_command_comments_helper(command, ignorables, replacement='')