You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
164 lines
5.7 KiB
164 lines
5.7 KiB
# generated from genmsg/cmake/pkg-genmsg.cmake.em |
|
|
|
@{ |
|
import os |
|
import sys |
|
|
|
import genmsg |
|
import genmsg.base |
|
genmsg.base.log_verbose('GENMSG_VERBOSE' in os.environ) |
|
import genmsg.deps |
|
import genmsg.gentools |
|
|
|
# split incoming variables |
|
messages = messages_str.split(';') if messages_str != '' else [] |
|
services = services_str.split(';') if services_str != '' else [] |
|
dependencies = dependencies_str.split(';') if dependencies_str != '' else [] |
|
dep_search_paths = dep_include_paths_str.split(';') if dep_include_paths_str != '' else [] |
|
|
|
dep_search_paths_dict = {} |
|
dep_search_paths_tuple_list = [] |
|
is_even = True |
|
for val in dep_search_paths: |
|
if is_even: |
|
dep_search_paths_dict.setdefault(val, []) |
|
val_prev = val |
|
is_even = False |
|
else: |
|
dep_search_paths_dict[val_prev].append(val) |
|
dep_search_paths_tuple_list.append((val_prev, val)) |
|
is_even = True |
|
dep_search_paths = dep_search_paths_dict |
|
|
|
if not messages and not services: |
|
print('message(WARNING "Invoking generate_messages() without having added any message or service file before.\nYou should either add add_message_files() and/or add_service_files() calls or remove the invocation of generate_messages().")') |
|
|
|
msg_deps = {} |
|
msg_dep_types = {} |
|
for m in messages: |
|
try: |
|
_deps = genmsg.deps.find_msg_dependencies_with_type(pkg_name, m, dep_search_paths) |
|
msg_deps[m] = [d[1] for d in _deps] |
|
msg_dep_types[m] = [d[0] for d in _deps] |
|
except genmsg.MsgNotFound as e: |
|
print('message(FATAL_ERROR "Could not find messages which \'%s\' depends on. Did you forget to specify generate_messages(DEPENDENCIES ...)?\n%s")' % (m, str(e).replace('"', '\\"'))) |
|
|
|
srv_deps = {} |
|
srv_dep_types = {} |
|
for s in services: |
|
try: |
|
_deps = genmsg.deps.find_srv_dependencies_with_type(pkg_name, s, dep_search_paths) |
|
srv_deps[s] = [d[1] for d in _deps] |
|
srv_dep_types[s] = [d[0] for d in _deps] |
|
except genmsg.MsgNotFound as e: |
|
print('message(FATAL_ERROR "Could not find messages which \'%s\' depends on. Did you forget to specify generate_messages(DEPENDENCIES ...)?\n%s")' % (s, str(e).replace('"', '\\"'))) |
|
|
|
}@ |
|
message(STATUS "@(pkg_name): @(len(messages)) messages, @(len(services)) services") |
|
|
|
set(MSG_I_FLAGS "@(';'.join(["-I%s:%s" % (dep, dir) for dep, dir in dep_search_paths_tuple_list]))") |
|
|
|
# Find all generators |
|
@[if langs]@ |
|
@[for l in langs.split(';')]@ |
|
find_package(@l REQUIRED) |
|
@[end for]@ |
|
@[end if]@ |
|
|
|
add_custom_target(@(pkg_name)_generate_messages ALL) |
|
|
|
# verify that message/service dependencies have not changed since configure |
|
@{all_deps = dict(list(msg_deps.items()) + list(srv_deps.items()))} |
|
@{all_dep_types = dict(list(msg_dep_types.items()) + list(srv_dep_types.items()))} |
|
@[for f in all_deps.keys()]@ |
|
@{dep_types = ':'.join(all_dep_types[f]).replace('\\','/')} |
|
get_filename_component(_filename "@(f)" NAME_WE) |
|
add_custom_target(_@(pkg_name)_generate_messages_check_deps_${_filename} |
|
COMMAND ${CATKIN_ENV} ${PYTHON_EXECUTABLE} ${GENMSG_CHECK_DEPS_SCRIPT} "@(pkg_name)" "@(f)" "@(dep_types)" |
|
) |
|
@[end for]@# messages and services |
|
|
|
# |
|
# langs = @langs |
|
# |
|
|
|
@[if langs]@ |
|
@[for l in langs.split(';')]@ |
|
### Section generating for lang: @l |
|
### Generating Messages |
|
@[for m in msg_deps.keys()]@ |
|
_generate_msg_@(l[3:])(@pkg_name |
|
"@m" |
|
"${MSG_I_FLAGS}" |
|
"@(';'.join(msg_deps[m]).replace("\\","/"))" |
|
${CATKIN_DEVEL_PREFIX}/${@(l)_INSTALL_DIR}/@pkg_name |
|
) |
|
@[end for]@# messages |
|
|
|
### Generating Services |
|
@[for s in srv_deps.keys()]@ |
|
_generate_srv_@(l[3:])(@pkg_name |
|
"@s" |
|
"${MSG_I_FLAGS}" |
|
"@(';'.join(srv_deps[s]).replace("\\","/"))" |
|
${CATKIN_DEVEL_PREFIX}/${@(l)_INSTALL_DIR}/@pkg_name |
|
) |
|
@[end for]@# services |
|
|
|
### Generating Module File |
|
_generate_module_@(l[3:])(@pkg_name |
|
${CATKIN_DEVEL_PREFIX}/${@(l)_INSTALL_DIR}/@pkg_name |
|
"${ALL_GEN_OUTPUT_FILES_@(l[3:])}" |
|
) |
|
|
|
add_custom_target(@(pkg_name)_generate_messages_@(l[3:]) |
|
DEPENDS ${ALL_GEN_OUTPUT_FILES_@(l[3:])} |
|
) |
|
add_dependencies(@(pkg_name)_generate_messages @(pkg_name)_generate_messages_@(l[3:])) |
|
|
|
# add dependencies to all check dependencies targets |
|
@[for f in all_deps.keys()]@ |
|
get_filename_component(_filename "@(f)" NAME_WE) |
|
add_dependencies(@(pkg_name)_generate_messages_@(l[3:]) _@(pkg_name)_generate_messages_check_deps_${_filename}) |
|
@[end for]@# messages and services |
|
|
|
# target for backward compatibility |
|
add_custom_target(@(pkg_name)_@(l)) |
|
add_dependencies(@(pkg_name)_@(l) @(pkg_name)_generate_messages_@(l[3:])) |
|
|
|
# register target for catkin_package(EXPORTED_TARGETS) |
|
list(APPEND ${PROJECT_NAME}_EXPORTED_TARGETS @(pkg_name)_generate_messages_@(l[3:])) |
|
|
|
@[end for]@# langs |
|
@[end if]@ |
|
|
|
@[if langs]@ |
|
@[for l in langs.split(';')]@ |
|
|
|
if(@(l)_INSTALL_DIR AND EXISTS ${CATKIN_DEVEL_PREFIX}/${@(l)_INSTALL_DIR}/@pkg_name) |
|
@[if l == 'genpy']@ |
|
install(CODE "execute_process(COMMAND \"@(PYTHON_EXECUTABLE)\" -m compileall \"${CATKIN_DEVEL_PREFIX}/${@(l)_INSTALL_DIR}/@pkg_name\")") |
|
@[end if]@ |
|
# install generated code |
|
install( |
|
DIRECTORY ${CATKIN_DEVEL_PREFIX}/${@(l)_INSTALL_DIR}/@pkg_name |
|
DESTINATION ${@(l)_INSTALL_DIR} |
|
@[if l == 'genpy' and package_has_static_sources]@ |
|
# skip all init files |
|
PATTERN "__init__.py" EXCLUDE |
|
PATTERN "__init__.pyc" EXCLUDE |
|
) |
|
# install init files which are not in the root folder of the generated code |
|
install( |
|
DIRECTORY ${CATKIN_DEVEL_PREFIX}/${@(l)_INSTALL_DIR}/@pkg_name |
|
DESTINATION ${@(l)_INSTALL_DIR} |
|
FILES_MATCHING |
|
REGEX "${CATKIN_DEVEL_PREFIX}/${@(l)_INSTALL_DIR}/@(pkg_name)/.+/__init__.pyc?$" |
|
@[end if]@ |
|
) |
|
endif() |
|
@[for d in dependencies]@ |
|
add_dependencies(@(pkg_name)_generate_messages_@(l[3:]) @(d)_generate_messages_@(l[3:])) |
|
@[end for]@# dependencies |
|
@[end for]@# langs |
|
@[end if]@
|
|
|