ardupilot/mk/PX4/Tools/genmsg/cmake/genmsg-extras.cmake.em

316 lines
12 KiB
Plaintext
Raw Normal View History

# generated from genmsg/cmake/genmsg-extras.cmake.in
if(_GENMSG_EXTRAS_INCLUDED_)
return()
endif()
set(_GENMSG_EXTRAS_INCLUDED_ TRUE)
# set destination for langs
set(GENMSG_LANGS_DESTINATION "etc/ros/genmsg")
@[if DEVELSPACE]@
# bin dir variables in develspace
set(GENMSG_CHECK_DEPS_SCRIPT "@(CMAKE_CURRENT_SOURCE_DIR)/scripts/genmsg_check_deps.py")
@[else]@
# bin dir variables in installspace
set(GENMSG_CHECK_DEPS_SCRIPT "${genmsg_DIR}/../../../@(CATKIN_PACKAGE_BIN_DESTINATION)/genmsg_check_deps.py")
@[end if]@
include(CMakeParseArguments)
# find message generators in all workspaces
set(message_generators "")
foreach(workspace ${CATKIN_WORKSPACES})
file(GLOB workspace_message_generators
RELATIVE ${workspace}/${GENMSG_LANGS_DESTINATION}
${workspace}/${GENMSG_LANGS_DESTINATION}/gen*)
list(APPEND message_generators ${workspace_message_generators})
endforeach()
if(message_generators)
list(SORT message_generators)
endif()
foreach(message_generator ${message_generators})
find_package(${message_generator} REQUIRED)
list(FIND CATKIN_MESSAGE_GENERATORS ${message_generator} _index)
if(_index EQUAL -1)
list(APPEND CATKIN_MESSAGE_GENERATORS ${message_generator})
endif()
endforeach()
if(CATKIN_MESSAGE_GENERATORS)
list(SORT CATKIN_MESSAGE_GENERATORS)
endif()
# disable specific message generators
string(REPLACE ":" ";" _disabled_message_generators "$ENV{ROS_LANG_DISABLE}")
# remove unknown generators from disabled list
foreach(message_generator ${_disabled_message_generators})
list(FIND CATKIN_MESSAGE_GENERATORS ${message_generator} _index)
if(_index EQUAL -1)
list(REMOVE_ITEM _disabled_message_generators ${message_generator})
message(WARNING "Unknown message generator specified in ROS_LANG_DISABLE: ${message_generator}")
endif()
endforeach()
if(_disabled_message_generators)
message(STATUS "Disabling the following message generators: ${_disabled_message_generators}")
list(REMOVE_ITEM CATKIN_MESSAGE_GENERATORS ${_disabled_message_generators})
endif()
message(STATUS "Using these message generators: ${CATKIN_MESSAGE_GENERATORS}")
macro(_prepend_path ARG_PATH ARG_FILES ARG_OUTPUT_VAR)
cmake_parse_arguments(ARG "UNIQUE" "" "" ${ARGN})
if(ARG_UNPARSED_ARGUMENTS)
message(FATAL_ERROR "_prepend_path() called with unused arguments: ${ARG_UNPARSED_ARGUMENTS}")
endif()
# todo, check for proper path, slasheds, etc
set(${ARG_OUTPUT_VAR} "")
foreach(_file ${ARG_FILES})
set(_value ${ARG_PATH}/${_file})
list(FIND ${ARG_OUTPUT_VAR} ${_value} _index)
if(NOT ARG_UNIQUE OR _index EQUAL -1)
list(APPEND ${ARG_OUTPUT_VAR} ${_value})
endif()
endforeach()
endmacro()
macro(add_message_files)
cmake_parse_arguments(ARG "NOINSTALL" "DIRECTORY;BASE_DIR" "FILES" ${ARGN})
if(ARG_UNPARSED_ARGUMENTS)
message(FATAL_ERROR "add_message_files() called with unused arguments: ${ARG_UNPARSED_ARGUMENTS}")
endif()
if(NOT ARG_DIRECTORY)
set(ARG_DIRECTORY "msg")
endif()
set(MESSAGE_DIR "${ARG_DIRECTORY}")
if(NOT IS_ABSOLUTE "${MESSAGE_DIR}")
set(MESSAGE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${MESSAGE_DIR}")
endif()
# override message directory (used by add_action_files())
if(ARG_BASE_DIR)
set(MESSAGE_DIR ${ARG_BASE_DIR})
endif()
if(NOT IS_DIRECTORY ${MESSAGE_DIR})
message(FATAL_ERROR "add_message_files() directory not found: ${MESSAGE_DIR}")
endif()
if(${PROJECT_NAME}_GENERATE_MESSAGES)
message(FATAL_ERROR "generate_messages() must be called after add_message_files()")
endif()
# if FILES are not passed search message files in the given directory
# note: ARGV is not variable, so it can not be passed to list(FIND) directly
set(_argv ${ARGV})
list(FIND _argv "FILES" _index)
if(_index EQUAL -1)
file(GLOB ARG_FILES RELATIVE "${MESSAGE_DIR}" "${MESSAGE_DIR}/*.msg")
list(SORT ARG_FILES)
endif()
_prepend_path(${MESSAGE_DIR} "${ARG_FILES}" FILES_W_PATH)
list(APPEND ${PROJECT_NAME}_MESSAGE_FILES ${FILES_W_PATH})
foreach(file ${FILES_W_PATH})
assert_file_exists(${file} "message file not found")
endforeach()
# remember path to messages to resolve them as dependencies
list(FIND ${PROJECT_NAME}_MSG_INCLUDE_DIRS_DEVELSPACE ${MESSAGE_DIR} _index)
if(_index EQUAL -1)
list(APPEND ${PROJECT_NAME}_MSG_INCLUDE_DIRS_DEVELSPACE ${MESSAGE_DIR})
endif()
if(NOT ARG_NOINSTALL)
# ensure that destination variables are initialized
catkin_destinations()
list(APPEND ${PROJECT_NAME}_MSG_INCLUDE_DIRS_INSTALLSPACE ${ARG_DIRECTORY})
install(FILES ${FILES_W_PATH}
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/${ARG_DIRECTORY})
_prepend_path("${ARG_DIRECTORY}" "${ARG_FILES}" FILES_W_PATH)
list(APPEND ${PROJECT_NAME}_INSTALLED_MESSAGE_FILES ${FILES_W_PATH})
endif()
endmacro()
macro(add_service_files)
cmake_parse_arguments(ARG "NOINSTALL" "DIRECTORY" "FILES" ${ARGN})
if(ARG_UNPARSED_ARGUMENTS)
message(FATAL_ERROR "add_service_files() called with unused arguments: ${ARG_UNPARSED_ARGUMENTS}")
endif()
if(NOT ARG_DIRECTORY)
set(ARG_DIRECTORY "srv")
endif()
set(SERVICE_DIR "${ARG_DIRECTORY}")
if(NOT IS_ABSOLUTE "${SERVICE_DIR}")
set(SERVICE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${SERVICE_DIR}")
endif()
if(NOT IS_DIRECTORY ${SERVICE_DIR})
message(FATAL_ERROR "add_service_files() directory not found: ${SERVICE_DIR}")
endif()
if(${PROJECT_NAME}_GENERATE_MESSAGES)
message(FATAL_ERROR "generate_messages() must be called after add_service_files()")
endif()
# if FILES are not passed search service files in the given directory
# note: ARGV is not variable, so it can not be passed to list(FIND) directly
set(_argv ${ARGV})
list(FIND _argv "FILES" _index)
if(_index EQUAL -1)
file(GLOB ARG_FILES RELATIVE "${SERVICE_DIR}" "${SERVICE_DIR}/*.srv")
list(SORT ARG_FILES)
endif()
_prepend_path(${SERVICE_DIR} "${ARG_FILES}" FILES_W_PATH)
list(APPEND ${PROJECT_NAME}_SERVICE_FILES ${FILES_W_PATH})
foreach(file ${FILES_W_PATH})
assert_file_exists(${file} "service file not found")
endforeach()
if(NOT ARG_NOINSTALL)
# ensure that destination variables are initialized
catkin_destinations()
install(FILES ${FILES_W_PATH}
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/${ARG_DIRECTORY})
_prepend_path("${ARG_DIRECTORY}" "${ARG_FILES}" FILES_W_PATH)
list(APPEND ${PROJECT_NAME}_INSTALLED_SERVICE_FILES ${FILES_W_PATH})
endif()
endmacro()
macro(generate_messages)
cmake_parse_arguments(ARG "" "" "DEPENDENCIES;LANGS" ${ARGN})
if(${PROJECT_NAME}_GENERATE_MESSAGES)
message(FATAL_ERROR "generate_messages() must only be called once per project'")
endif()
if(ARG_UNPARSED_ARGUMENTS)
message(FATAL_ERROR "generate_messages() called with unused arguments: ${ARG_UNPARSED_ARGUMENTS}")
endif()
if(${PROJECT_NAME}_CATKIN_PACKAGE)
message(FATAL_ERROR "generate_messages() must be called before catkin_package() in project '${PROJECT_NAME}'")
endif()
set(ARG_MESSAGES ${${PROJECT_NAME}_MESSAGE_FILES})
set(ARG_SERVICES ${${PROJECT_NAME}_SERVICE_FILES})
set(ARG_DEPENDENCIES ${ARG_DEPENDENCIES})
if(ARG_LANGS)
set(GEN_LANGS ${ARG_LANGS})
else()
set(GEN_LANGS ${CATKIN_MESSAGE_GENERATORS})
endif()
@[if DEVELSPACE]@
# cmake dir in develspace
set(genmsg_CMAKE_DIR "@(CMAKE_CURRENT_SOURCE_DIR)/cmake")
@[else]@
# cmake dir in installspace
set(genmsg_CMAKE_DIR "@(PKG_CMAKE_DIR)")
@[end if]@
# ensure that destination variables are initialized
catkin_destinations()
# generate devel space config of message include dirs for project
set(PKG_MSG_INCLUDE_DIRS "${${PROJECT_NAME}_MSG_INCLUDE_DIRS_DEVELSPACE}")
configure_file(
${genmsg_CMAKE_DIR}/pkg-msg-paths.cmake.develspace.in
${CATKIN_DEVEL_PREFIX}/share/${PROJECT_NAME}/cmake/${PROJECT_NAME}-msg-paths.cmake
@@ONLY)
# generate and install config of message include dirs for project
set(PKG_MSG_INCLUDE_DIRS "${${PROJECT_NAME}_MSG_INCLUDE_DIRS_INSTALLSPACE}")
configure_file(
${genmsg_CMAKE_DIR}/pkg-msg-paths.cmake.installspace.in
${CMAKE_CURRENT_BINARY_DIR}/catkin_generated/installspace/${PROJECT_NAME}-msg-paths.cmake
@@ONLY)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/catkin_generated/installspace/${PROJECT_NAME}-msg-paths.cmake
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/cmake)
# generate devel space pkg config extra defining variables with all processed message and service files
set(PKG_MSG_FILES "${${PROJECT_NAME}_MESSAGE_FILES}")
set(PKG_SRV_FILES "${${PROJECT_NAME}_SERVICE_FILES}")
configure_file(
${genmsg_CMAKE_DIR}/pkg-msg-extras.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/catkin_generated/${PROJECT_NAME}-msg-extras.cmake.develspace.in
@@ONLY)
# generate install space pkg config extra defining variables with all processed and installed message and service files
set(PKG_MSG_FILES "${${PROJECT_NAME}_INSTALLED_MESSAGE_FILES}")
set(PKG_SRV_FILES "${${PROJECT_NAME}_INSTALLED_SERVICE_FILES}")
configure_file(
${genmsg_CMAKE_DIR}/pkg-msg-extras.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/catkin_generated/${PROJECT_NAME}-msg-extras.cmake.installspace.in
@@ONLY)
# register pkg config files as cmake extra file for the project
list(APPEND ${PROJECT_NAME}_CFG_EXTRAS ${CMAKE_CURRENT_BINARY_DIR}/catkin_generated/${PROJECT_NAME}-msg-extras.cmake)
# find configuration containing include dirs for projects in all devel- and installspaces
set(workspaces ${CATKIN_WORKSPACES})
list(FIND workspaces ${CATKIN_DEVEL_PREFIX} _index)
if(_index EQUAL -1)
list(INSERT workspaces 0 ${CATKIN_DEVEL_PREFIX})
endif()
set(pending_deps ${PROJECT_NAME} ${ARG_DEPENDENCIES})
set(handled_deps "")
while(pending_deps)
list(GET pending_deps 0 dep)
list(REMOVE_AT pending_deps 0)
list(APPEND handled_deps ${dep})
if(NOT ${dep}_FOUND AND NOT ${dep}_SOURCE_DIR)
message(FATAL_ERROR "Messages depends on unknown pkg: ${dep} (Missing find_package(${dep}?))")
endif()
unset(_dep_msg_paths_file CACHE)
set(filename "share/${dep}/cmake/${dep}-msg-paths.cmake")
find_file(_dep_msg_paths_file ${filename} PATHS ${workspaces}
NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
if("${_dep_msg_paths_file}" STREQUAL "_dep_msg_paths_file-NOTFOUND")
message(FATAL_ERROR "Could not find '${filename}' (searched in '${workspaces}').")
endif()
include(${_dep_msg_paths_file})
unset(_dep_msg_paths_file CACHE)
# explicitly set message include dirs for current project since information from pkg-msg-paths.cmake is not yet available
if(${dep} STREQUAL ${PROJECT_NAME})
set(${dep}_MSG_INCLUDE_DIRS ${${PROJECT_NAME}_MSG_INCLUDE_DIRS_DEVELSPACE})
endif()
foreach(path ${${dep}_MSG_INCLUDE_DIRS})
list(APPEND MSG_INCLUDE_DIRS "${dep}")
list(APPEND MSG_INCLUDE_DIRS "${path}")
endforeach()
# add transitive msg dependencies
if(NOT ${dep} STREQUAL ${PROJECT_NAME})
foreach(recdep ${${dep}_MSG_DEPENDENCIES})
set(all_deps ${handled_deps} ${pending_deps})
list(FIND all_deps ${recdep} _index)
if(_index EQUAL -1)
list(APPEND pending_deps ${recdep})
endif()
endforeach()
endif()
endwhile()
# mark that generate_messages() was called in order to detect wrong order of calling with catkin_python_setup()
set(${PROJECT_NAME}_GENERATE_MESSAGES TRUE)
# check if catkin_python_setup() installs an __init__.py file for a package with the current project name
# in order to skip the installation of a generated __init__.py file
set(package_has_static_sources ${${PROJECT_NAME}_CATKIN_PYTHON_SETUP_HAS_PACKAGE_INIT})
em_expand(${genmsg_CMAKE_DIR}/pkg-genmsg.context.in
${CMAKE_CURRENT_BINARY_DIR}/cmake/${PROJECT_NAME}-genmsg-context.py
${genmsg_CMAKE_DIR}/pkg-genmsg.cmake.em
${CMAKE_CURRENT_BINARY_DIR}/cmake/${PROJECT_NAME}-genmsg.cmake)
include(${CMAKE_CURRENT_BINARY_DIR}/cmake/${PROJECT_NAME}-genmsg.cmake)
endmacro()