diff --git a/rtt_dynamic_reconfigure/include/orocos/rtt_dynamic_reconfigure/server.h b/rtt_dynamic_reconfigure/include/orocos/rtt_dynamic_reconfigure/server.h index 0c695389..ae6a7051 100644 --- a/rtt_dynamic_reconfigure/include/orocos/rtt_dynamic_reconfigure/server.h +++ b/rtt_dynamic_reconfigure/include/orocos/rtt_dynamic_reconfigure/server.h @@ -37,6 +37,7 @@ #define RTT_DYNAMIC_RECONFIGURE_SERVER_H #include +#include #include #include #include diff --git a/rtt_rosclock/CMakeLists.txt b/rtt_rosclock/CMakeLists.txt index 57562129..28cee7f6 100644 --- a/rtt_rosclock/CMakeLists.txt +++ b/rtt_rosclock/CMakeLists.txt @@ -3,7 +3,7 @@ project(rtt_rosclock) find_package(catkin REQUIRED COMPONENTS roscpp rtt_ros rospack rostime cmake_modules rosgraph_msgs) -include_directories(include ${catkin_INCLUDE_DIRS} ${Xenomai_POSIX_INCLUDE_DIRS}) +include_directories(include ${catkin_INCLUDE_DIRS}) orocos_library(rtt_rosclock src/rtt_rosclock.cpp @@ -19,10 +19,17 @@ target_link_libraries(sim_clock_activity_service # Link against Xenomai POSIX skin to get if(OROCOS_TARGET STREQUAL "xenomai") - list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/config) - find_package(XenomaiPosix REQUIRED) - add_definitions(-D__XENO__) - set_target_properties(rtt_rosclock PROPERTIES LINK_FLAGS "${XENOMAI_POSIX_LDFLAGS}") + set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/config) + find_package(Xenomai REQUIRED) + if(NOT XENOMAI_POSIX_FOUND) + message(FATAL_ERROR "Xenomai Posix skin is required for rtt_rosclock") + endif() + include_directories(${Xenomai_POSIX_INCLUDE_DIRS}) + set_target_properties(rtt_rosclock PROPERTIES + LINK_FLAGS ${XENOMAI_POSIX_LDFLAGS} + COMPILE_FLAGS ${XENOMAI_POSIX_CFLAGS} + COMPILE_DEFINITIONS __XENO__ + ) target_link_libraries(rtt_rosclock ${XENOMAI_POSIX_LIBRARIES}) endif() diff --git a/rtt_rosclock/config/FindXenomai.cmake b/rtt_rosclock/config/FindXenomai.cmake new file mode 100644 index 00000000..92a22280 --- /dev/null +++ b/rtt_rosclock/config/FindXenomai.cmake @@ -0,0 +1,196 @@ +################################################################################ +# Copyright 2020 Antoine HOARAU +# +# CMake script for finding the XENOMAI 2 native or XENOMAI 3 alchemy/posix/rtdm skin. +# If the optional XENOMAI_ROOT_DIR environment variable exists, header files and +# libraries will be searched in the XENOMAI_ROOT_DIR/include and XENOMAI_ROOT_DIR/lib +# directories, respectively. Otherwise the default CMake search process will be +# used. +# +# This script creates the following variables for each skin. +# +# Native/Alchemy skin : +# +# XENOMAI_FOUND: Boolean that indicates if the package was found +# XENOMAI_INCLUDE_DIRS: Paths to the necessary header files +# XENOMAI_LIBRARIES: Package libraries +# XENOMAI_DEFINITIONS: Package compile definitions (-D) +# XENOMAI_CFLAGS_OTHER: Package compiler flags (-f) +# XENOMAI_LDFLAGS_OTHER: Everything that is not -L,-l,-Wl, or *bootstrap(-pic).o +# XENOMAI_CFLAGS: Raw compile flags (from xeno-config) +# XENOMAI_LDFLAGS: Raw linker flags (from xeno-config) +# +# And it also sets the XENOMAI_POSIX_* and XENOMAI_RTDM_* variables. +# +# Posix Interface : +# +# XENOMAI_POSIX_FOUND: Boolean that indicates if the package was found +# XENOMAI_POSIX_INCLUDE_DIRS: Paths to the necessary header files +# XENOMAI_POSIX_LIBRARIES: Package libraries +# XENOMAI_POSIX_DEFINITIONS: Package compile definitions (-D) +# XENOMAI_POSIX_CFLAGS_OTHER: Package compiler flags (-f) +# XENOMAI_POSIX_LDFLAGS_OTHER: Everything that is not -L,-l,-Wl, or *bootstrap(-pic).o +# XENOMAI_POSIX_CFLAGS: Raw compile flags (from xeno-config) +# XENOMAI_POSIX_LDFLAGS: Raw linker flags (from xeno-config) +# +# RTDM Interface : +# +# XENOMAI_RTDM_FOUND: Boolean that indicates if the package was found +# XENOMAI_RTDM_INCLUDE_DIRS: Paths to the necessary header files +# XENOMAI_RTDM_LIBRARIES: Package libraries +# XENOMAI_RTDM_DEFINITIONS: Package compile defitions (-D) +# XENOMAI_RTDM_CFLAGS_OTHER: Package compiler flags (-f) +# XENOMAI_RTDM_LDFLAGS_OTHER: Everything that is not -L,-l,-Wl, or *bootstrap(-pic).o +# XENOMAI_RTDM_CFLAGS: Raw compile flags (from xeno-config) +# XENOMAI_RTDM_LDFLAGS: Raw linker flags (from xeno-config) +# +# NOTE: You still need FindRTnet.cmake for rtnet support on xenomai 2.x +################################################################################ + +include(FindPackageHandleStandardArgs) + +# Get hint from environment variable (if any) +if(NOT $ENV{XENOMAI_ROOT_DIR} STREQUAL "") + set(XENOMAI_ROOT_DIR $ENV{XENOMAI_ROOT_DIR} CACHE PATH "Xenomai base directory location (optional, used for nonstandard installation paths)" FORCE) + mark_as_advanced(XENOMAI_ROOT_DIR) +endif() + +# Find headers and libraries +if(XENOMAI_ROOT_DIR) + # Use location specified by environment variable + find_program(XENOMAI_XENO_CONFIG NAMES xeno-config PATHS ${XENOMAI_ROOT_DIR}/bin NO_DEFAULT_PATH) +else() + # Use default CMake search process + find_program(XENOMAI_XENO_CONFIG NAMES xeno-config) +endif() + +mark_as_advanced(XENOMAI_XENO_CONFIG) + +function(find_xeno_skin_variables prefix skin_name) + set(${prefix}_FOUND "") + set(${prefix}_INCLUDE_DIRS "") + set(${prefix}_LIBRARIES "") + set(${prefix}_DEFINITIONS "") + set(${prefix}_CFLAGS_OTHER "") + set(${prefix}_LDFLAGS_OTHER "") + set(${prefix}_LDFLAGS "") + set(${prefix}_CFLAGS "") + + execute_process(COMMAND ${XENOMAI_XENO_CONFIG} --skin=${skin_name} --ldflags ${XENO_CONFIG_LDFLAGS_EXTRA_ARGS} + OUTPUT_VARIABLE ${prefix}_LDFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_VARIABLE ${prefix}_LDFLAGS_ERROR) + execute_process(COMMAND ${XENOMAI_XENO_CONFIG} --skin=${skin_name} --cflags + OUTPUT_VARIABLE ${prefix}_CFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_VARIABLE ${prefix}_CFLAGS_ERROR) + + if(${prefix}_LDFLAGS_ERROR) + message(FATAL_ERROR "Could not determine ldflags with command ${XENOMAI_XENO_CONFIG} --skin=${skin_name} --ldflags ${XENO_CONFIG_LDFLAGS_EXTRA_ARGS}") + endif() + + if(${prefix}_CFLAGS_ERROR) + message(FATAL_ERROR "Could not determine cflags with command ${XENOMAI_XENO_CONFIG} --skin=${skin_name} --cflags") + endif() + + set(${prefix}_FOUND TRUE) + + string(STRIP ${prefix}_LDFLAGS "${${prefix}_LDFLAGS}") + string(STRIP ${prefix}_CFLAGS "${${prefix}_CFLAGS}") + string(REPLACE " " ";" _${prefix}_LDFLAGS ${${prefix}_LDFLAGS}) + string(REPLACE " " ";" _${prefix}_CFLAGS ${${prefix}_CFLAGS}) + + foreach(_entry ${_${prefix}_LDFLAGS}) + string(REGEX MATCH "^-L(.+)|^-l(.+)|^(-Wl,.+)|^(.*bootstrap(-pic)?.o)" _lib ${_entry}) + if(_lib) + list(APPEND ${prefix}_LIBRARY ${_lib}) + endif() + endforeach() + foreach(_entry ${_${prefix}_CFLAGS}) + string(REGEX MATCH "^-I.+" _include_dir ${_entry}) + string(REGEX MATCH "^-D.+" _definition ${_entry}) + string(REGEX MATCH "^-f.+" _compile_flag ${_entry}) + if(_include_dir) + string(REGEX REPLACE "^-I" "" _include_dir ${_include_dir}) + list(APPEND ${prefix}_INCLUDE_DIR ${_include_dir}) + elseif(_definition) + string(REGEX REPLACE "^-D" "" _definition ${_definition}) + list(APPEND ${prefix}_DEFINITIONS ${_definition}) + elseif(_compile_flag) + list(APPEND ${prefix}_CFLAGS_OTHER ${_compile_flag}) + endif() + endforeach() + + message(STATUS " + ========================================== + Xenomai ${XENOMAI_VERSION} ${skin_name} skin + libs : ${${prefix}_LIBRARY} + include : ${${prefix}_INCLUDE_DIR} + definitions : ${${prefix}_DEFINITIONS} + cflags other : ${${prefix}_CFLAGS_OTHER} + ldflags other : ${${prefix}_LDFLAGS_OTHER} + ldflags : ${${prefix}_LDFLAGS} + cflags : ${${prefix}_CFLAGS} + ========================================== + ") + + set(${prefix}_FOUND ${${prefix}_FOUND} CACHE INTERNAL "") + + set(${prefix}_INCLUDE_DIRS ${${prefix}_INCLUDE_DIR} CACHE INTERNAL "") + set(${prefix}_LIBRARIES ${${prefix}_LIBRARY} CACHE INTERNAL "") + set(${prefix}_DEFINITIONS ${${prefix}_DEFINITIONS} CACHE INTERNAL "") + set(${prefix}_CFLAGS_OTHER ${${prefix}_CFLAGS_OTHER} CACHE INTERNAL "") + set(${prefix}_LDFLAGS_OTHER ${${prefix}_CFLAGS_OTHER} CACHE INTERNAL "") + + set(${prefix}_LDFLAGS ${${prefix}_LDFLAGS} CACHE INTERNAL "") + set(${prefix}_CFLAGS ${${prefix}_CFLAGS} CACHE INTERNAL "") + + mark_as_advanced(${prefix}_LIBRARIES ${prefix}_INCLUDE_DIRS ${prefix}_DEFINITIONS ${prefix}_LDFLAGS ${prefix}_CFLAGS ${prefix}_CFLAGS_OTHER ${prefix}_LDFLAGS_OTHER) +endfunction() + +function(handle_standard_args prefix) + find_package_handle_standard_args(${prefix} DEFAULT_MSG ${prefix}_LIBRARIES ${prefix}_INCLUDE_DIRS ${prefix}_DEFINITIONS ${prefix}_LDFLAGS ${prefix}_CFLAGS ${prefix}_CFLAGS_OTHER) +endfunction() + +if(XENOMAI_XENO_CONFIG) + # Detect Xenomai version + execute_process(COMMAND ${XENOMAI_XENO_CONFIG} --version OUTPUT_VARIABLE XENOMAI_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE) + string(REPLACE "." ";" XENOMAI_VERSION_LIST ${XENOMAI_VERSION}) + string(REPLACE "-" ";" XENOMAI_VERSION_LIST "${XENOMAI_VERSION_LIST}") # Handle 3.1-dev (git) + list(GET XENOMAI_VERSION_LIST 0 XENOMAI_VERSION_MAJOR) + list(GET XENOMAI_VERSION_LIST 1 XENOMAI_VERSION_MINOR) + + # Xenomai 2.x native skin (rt_) + if(${XENOMAI_VERSION_MAJOR} EQUAL 2) + set(XENOMAI_SKIN_NAME native) + endif() + + # Xenomai 3.x alchemy skin (rt_) + if(${XENOMAI_VERSION_MAJOR} EQUAL 3) + set(XENOMAI_SKIN_NAME alchemy) + # NOTE: --auto-init-solib bootstraps xenomai_init() + set(XENO_CONFIG_LDFLAGS_EXTRA_ARGS "--auto-init-solib") + endif() + + if(NOT XENOMAI_SKIN_NAME) + message(FATAL_ERROR "Only Xenomai 2.x and 3.x are supported, your version is ${XENOMAI_VERSION}") + endif() + + find_xeno_skin_variables(XENOMAI ${XENOMAI_SKIN_NAME}) + find_xeno_skin_variables(XENOMAI_POSIX posix) + find_xeno_skin_variables(XENOMAI_RTDM rtdm) +else() + set(XENOMAI_FOUND FALSE) + set(XENOMAI_POSIX_FOUND FALSE) + set(XENOMAI_RTDM_FOUND FALSE) +endif() + +if(Xenomai_FIND_QUIETLY) + set(XENOMAI_FIND_QUIETLY True) + set(XENOMAI_POSIX_FIND_QUIETLY True) + set(XENOMAI_RTDM_FIND_QUIETLY True) +endif() + +find_package_handle_standard_args(Xenomai VERSION_VAR XENOMAI_VERSION REQUIRED_VARS XENOMAI_XENO_CONFIG) + +handle_standard_args(XENOMAI) +handle_standard_args(XENOMAI_POSIX) +handle_standard_args(XENOMAI_RTDM) diff --git a/rtt_rosclock/config/FindXenomaiPosix.cmake b/rtt_rosclock/config/FindXenomaiPosix.cmake deleted file mode 100644 index e4ee7158..00000000 --- a/rtt_rosclock/config/FindXenomaiPosix.cmake +++ /dev/null @@ -1,103 +0,0 @@ -################################################################################ -# -# CMake script for finding the XENOMAI 2/3 posix skin. -# If the optional XENOMAI_POSIX_ROOT_DIR environment variable exists, header files and -# libraries will be searched in the XENOMAI_POSIX_ROOT_DIR/include and XENOMAI_POSIX_ROOT_DIR/lib -# directories, respectively. Otherwise the default CMake search process will be -# used. -# -# This script creates the following variables: -# XENOMAI_POSIX_FOUND: Boolean that indicates if the package was found -# XENOMAI_POSIX_INCLUDE_DIRS: Paths to the necessary header files -# XENOMAI_POSIX_LIBRARIES: Package libraries -# -################################################################################ -include(LibFindMacros) - -# Get hint from environment variable (if any) -if(NOT $ENV{XENOMAI_POSIX_ROOT_DIR} STREQUAL "") - set(XENOMAI_POSIX_ROOT_DIR $ENV{XENOMAI_POSIX_ROOT_DIR} CACHE PATH "Xenomai base directory location (optional, used for nonstandard installation paths)" FORCE) - mark_as_advanced(XENOMAI_POSIX_ROOT_DIR) -endif() - -if ( Xenomai_FIND_QUIETLY ) - set( XENOMAI_POSIX_FIND_QUIETLY "QUIET") -endif() - -if ( Xenomai_FIND_REQUIRED ) - set( XENOMAI_POSIX_FIND_REQUIRED "REQUIRED") -endif() - -# Find headers and libraries -if(XENOMAI_POSIX_ROOT_DIR) - # Use location specified by environment variable - find_program(XENOMAI_POSIX_XENO_CONFIG NAMES xeno-config PATHS ${XENOMAI_POSIX_ROOT_DIR}/bin NO_DEFAULT_PATH) -else() - # Use default CMake search process - find_program(XENOMAI_POSIX_XENO_CONFIG NAMES xeno-config ) -endif() - -if(XENOMAI_POSIX_XENO_CONFIG ) - # Detect Xenomai version - execute_process(COMMAND ${XENOMAI_POSIX_XENO_CONFIG} --version OUTPUT_VARIABLE XENOMAI_POSIX_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE) - string(REPLACE "." ";" XENOMAI_POSIX_VERSION_LIST ${XENOMAI_POSIX_VERSION} ) - list(GET XENOMAI_POSIX_VERSION_LIST 0 XENOMAI_POSIX_VERSION_MAJOR) - list(GET XENOMAI_POSIX_VERSION_LIST 1 XENOMAI_POSIX_VERSION_MINOR) - list(GET XENOMAI_POSIX_VERSION_LIST 2 XENOMAI_POSIX_VERSION_PATCH) -else() - message(FATAL_ERROR "Your Xenomai installation is broken: I can not determine Xenomai cflags/ldflags without xeno-config.") -endif() - -# Here we have xeno-config -if(${XENOMAI_POSIX_VERSION_MAJOR} EQUAL 2) - set(XENOMAI_POSIX_SKIN_NAME posix) -endif() - -if(${XENOMAI_POSIX_VERSION_MAJOR} EQUAL 3) - set(XENOMAI_POSIX_SKIN_NAME posix) - set(XENO_CONFIG_LDFLAGS_EXTRA_ARGS "--no-auto-init") -endif() - -if(NOT XENOMAI_POSIX_SKIN_NAME) - message(FATAL_ERROR "Only Xenomai 2.x and 3.x are supported, your version is ${XENOMAI_POSIX_VERSION}") -endif() - -message(STATUS "Xenomai ${XENOMAI_POSIX_VERSION} detected, searching for ${XENOMAI_POSIX_SKIN_NAME} skin.") - -execute_process(COMMAND ${XENOMAI_POSIX_XENO_CONFIG} --skin=${XENOMAI_POSIX_SKIN_NAME} --ldflags ${XENO_CONFIG_LDFLAGS_EXTRA_ARGS} - OUTPUT_VARIABLE XENOMAI_POSIX_LDFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE - ERROR_VARIABLE XENOMAI_POSIX_LDFLAGS_ERROR) -execute_process(COMMAND ${XENOMAI_POSIX_XENO_CONFIG} --skin=${XENOMAI_POSIX_SKIN_NAME} --cflags ${XENOMAI_POSIX_COMPAT} - OUTPUT_VARIABLE XENOMAI_POSIX_CFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE - ERROR_VARIABLE XENOMAI_POSIX_CFLAGS_ERROR) - -if( XENOMAI_POSIX_LDFLAGS_ERROR) - message(FATAL_ERROR "Could not determine ldflags with command ${XENOMAI_POSIX_XENO_CONFIG} --skin=${XENOMAI_POSIX_SKIN_NAME} --ldflags ${XENO_CONFIG_LDFLAGS_EXTRA_ARGS}") -endif() - -if( XENOMAI_POSIX_CFLAGS_ERROR) - message(FATAL_ERROR "Could not determine cflags with command ${XENOMAI_POSIX_XENO_CONFIG} --skin=${XENOMAI_POSIX_SKIN_NAME} --cflags ${XENO_CONFIG_LDFLAGS_EXTRA_ARGS}") -endif() - -string(REGEX MATCHALL "-L([^ ]+)|-l([^ ]+)" XENOMAI_POSIX_LIBRARY ${XENOMAI_POSIX_LDFLAGS}) -string(REGEX MATCHALL "-I([^ ]+)" XENOMAI_POSIX_INCLUDE_DIR ${XENOMAI_POSIX_CFLAGS}) -string(REGEX MATCHALL "-D([^ ]+)" XENOMAI_POSIX_COMPILE_DEFINITIONS ${XENOMAI_POSIX_CFLAGS}) -string(REPLACE "-I" ";" XENOMAI_POSIX_INCLUDE_DIR ${XENOMAI_POSIX_INCLUDE_DIR}) - -# Set the include dir variables and the libraries and let libfind_process do the rest. -# NOTE: Singular variables for this library, plural for libraries this this lib depends on. -set(XENOMAI_POSIX_PROCESS_INCLUDES XENOMAI_POSIX_INCLUDE_DIR) -set(XENOMAI_POSIX_PROCESS_LIBS XENOMAI_POSIX_LIBRARY) - -message(STATUS " -========================================== -Xenomai ${XENOMAI_POSIX_VERSION} ${XENOMAI_POSIX_SKIN_NAME} skin - libs : ${XENOMAI_POSIX_LIBRARY} - include : ${XENOMAI_POSIX_INCLUDE_DIR} - ldflags : ${XENOMAI_POSIX_LDFLAGS} - cflags : ${XENOMAI_POSIX_CFLAGS} -========================================== -") - - -libfind_process(XENOMAI_POSIX) diff --git a/rtt_rosclock/config/LibFindMacros.cmake b/rtt_rosclock/config/LibFindMacros.cmake deleted file mode 100644 index 5c648ff6..00000000 --- a/rtt_rosclock/config/LibFindMacros.cmake +++ /dev/null @@ -1,101 +0,0 @@ -# Works the same as find_package, but forwards the "REQUIRED" and "QUIET" arguments -# used for the current package. For this to work, the first parameter must be the -# prefix of the current package, then the prefix of the new package etc, which are -# passed to find_package. -macro (libfind_package PREFIX) - set (LIBFIND_PACKAGE_ARGS ${ARGN}) - if (${PREFIX}_FIND_QUIETLY) - set (LIBFIND_PACKAGE_ARGS ${LIBFIND_PACKAGE_ARGS} QUIET) - endif (${PREFIX}_FIND_QUIETLY) - if (${PREFIX}_FIND_REQUIRED) - set (LIBFIND_PACKAGE_ARGS ${LIBFIND_PACKAGE_ARGS} REQUIRED) - endif (${PREFIX}_FIND_REQUIRED) - find_package(${LIBFIND_PACKAGE_ARGS}) -endmacro (libfind_package) - -# Damn CMake developers made the UsePkgConfig system deprecated in the same release (2.6) -# where they added pkg_check_modules. Consequently I need to support both in my scripts -# to avoid those deprecated warnings. Here's a helper that does just that. -# Works identically to pkg_check_modules, except that no checks are needed prior to use. -macro (libfind_pkg_check_modules PREFIX PKGNAME) - if (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4) - include(UsePkgConfig) - pkgconfig(${PKGNAME} ${PREFIX}_INCLUDE_DIRS ${PREFIX}_LIBRARY_DIRS ${PREFIX}_LDFLAGS ${PREFIX}_CFLAGS) - else (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4) - find_package(PkgConfig) - if (PKG_CONFIG_FOUND) - pkg_check_modules(${PREFIX} ${PKGNAME}) - endif (PKG_CONFIG_FOUND) - endif (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4) -endmacro (libfind_pkg_check_modules) - -# Do the final processing once the paths have been detected. -# If include dirs are needed, ${PREFIX}_PROCESS_INCLUDES should be set to contain -# all the variables, each of which contain one include directory. -# Ditto for ${PREFIX}_PROCESS_LIBS and library files. -# Will set ${PREFIX}_FOUND, ${PREFIX}_INCLUDE_DIRS and ${PREFIX}_LIBRARIES. -# Also handles errors in case library detection was required, etc. -macro (libfind_process PREFIX) - # Skip processing if already processed during this run - if (NOT ${PREFIX}_FOUND) - # Start with the assumption that the library was found - set (${PREFIX}_FOUND TRUE) - - # Process all includes and set _FOUND to false if any are missing - foreach (i ${${PREFIX}_PROCESS_INCLUDES}) - if (${i}) - set (${PREFIX}_INCLUDE_DIRS ${${PREFIX}_INCLUDE_DIRS} ${${i}}) - mark_as_advanced(${i}) - else (${i}) - set (${PREFIX}_FOUND FALSE) - endif (${i}) - endforeach (i) - - # Process all libraries and set _FOUND to false if any are missing - foreach (i ${${PREFIX}_PROCESS_LIBS}) - if (${i}) - set (${PREFIX}_LIBRARIES ${${PREFIX}_LIBRARIES} ${${i}}) - mark_as_advanced(${i}) - else (${i}) - set (${PREFIX}_FOUND FALSE) - endif (${i}) - endforeach (i) - - # Print message and/or exit on fatal error - if (${PREFIX}_FOUND) - if (NOT ${PREFIX}_FIND_QUIETLY) - message (STATUS "Found ${PREFIX} ${${PREFIX}_VERSION}") - endif (NOT ${PREFIX}_FIND_QUIETLY) - else (${PREFIX}_FOUND) - if (${PREFIX}_FIND_REQUIRED) - foreach (i ${${PREFIX}_PROCESS_INCLUDES} ${${PREFIX}_PROCESS_LIBS}) - message("${i}=${${i}}") - endforeach (i) - message (FATAL_ERROR "Required library ${PREFIX} NOT FOUND.\nInstall the library (dev version) and try again. If the library is already installed, set the ${PREFIX}_ROOT_DIR environment variable or use cmake to set the missing variables manually.") - else (${PREFIX}_FIND_REQUIRED) # NOTE: else case not included in original file - message (STATUS "Optional library ${PREFIX} NOT FOUND. If the library is already installed, use the ${PREFIX}_ROOT_DIR environment variable or ccmake to set the missing variables manually.") - endif (${PREFIX}_FIND_REQUIRED) - endif (${PREFIX}_FOUND) - endif (NOT ${PREFIX}_FOUND) -endmacro (libfind_process) - -macro(libfind_library PREFIX basename) - set(TMP "") - if(MSVC80) - set(TMP -vc80) - endif(MSVC80) - if(MSVC90) - set(TMP -vc90) - endif(MSVC90) - set(${PREFIX}_LIBNAMES ${basename}${TMP}) - if(${ARGC} GREATER 2) - set(${PREFIX}_LIBNAMES ${basename}${TMP}-${ARGV2}) - string(REGEX REPLACE "\\." "_" TMP ${${PREFIX}_LIBNAMES}) - set(${PREFIX}_LIBNAMES ${${PREFIX}_LIBNAMES} ${TMP}) - endif(${ARGC} GREATER 2) - find_library(${PREFIX}_LIBRARY - NAMES ${${PREFIX}_LIBNAMES} - PATHS ${${PREFIX}_PKGCONF_LIBRARY_DIRS} - ) -endmacro(libfind_library) - diff --git a/rtt_rosclock/src/rtt_rosclock_service.cpp b/rtt_rosclock/src/rtt_rosclock_service.cpp index 2845b167..c8edb0f7 100644 --- a/rtt_rosclock/src/rtt_rosclock_service.cpp +++ b/rtt_rosclock/src/rtt_rosclock_service.cpp @@ -1,4 +1,5 @@ #include +#include #include #include @@ -56,15 +57,15 @@ void loadROSClockService(){ using namespace RTT; extern "C" { - bool loadRTTPlugin(RTT::TaskContext* c){ + RTT_EXPORT bool loadRTTPlugin(RTT::TaskContext* c){ if (c != 0) return false; loadROSClockService(); return true; } - std::string getRTTPluginName (){ + RTT_EXPORT std::string getRTTPluginName (){ return "rosclock"; } - std::string getRTTTargetName (){ + RTT_EXPORT std::string getRTTTargetName (){ return OROCOS_TARGET_NAME; } } diff --git a/rtt_roscomm/include/rtt_roscomm/rtt_rosservice_proxy.h b/rtt_roscomm/include/rtt_roscomm/rtt_rosservice_proxy.h index ee4d8fc3..a57ba2de 100644 --- a/rtt_roscomm/include/rtt_roscomm/rtt_rosservice_proxy.h +++ b/rtt_roscomm/include/rtt_roscomm/rtt_rosservice_proxy.h @@ -10,6 +10,8 @@ #include #include +namespace rtt_roscomm { + //! Abstract ROS Service Proxy class ROSServiceProxyBase { @@ -231,7 +233,7 @@ class ROSServiceProxyFactoryBase public: ROSServiceProxyFactoryBase(const std::string &service_type) : service_type_(service_type) { } - + virtual ~ROSServiceProxyFactoryBase() { } //! Get the ROS service type const std::string& getType() { return service_type_; } @@ -260,4 +262,6 @@ class ROSServiceProxyFactory : public ROSServiceProxyFactoryBase } }; +} // namespace rtt_roscomm + #endif // ifndef __RTT_ROSCOMM_RTT_ROSSERVICE_PROXY_H diff --git a/rtt_roscomm/include/rtt_roscomm/rtt_rosservice_registry_service.h b/rtt_roscomm/include/rtt_roscomm/rtt_rosservice_registry_service.h index cb9b4d0e..fad53a6a 100644 --- a/rtt_roscomm/include/rtt_roscomm/rtt_rosservice_registry_service.h +++ b/rtt_roscomm/include/rtt_roscomm/rtt_rosservice_registry_service.h @@ -4,6 +4,8 @@ #include #include +namespace rtt_roscomm { + class ROSServiceRegistryService; class ROSServiceProxyFactoryBase; typedef boost::shared_ptr ROSServiceRegistryServicePtr; @@ -42,4 +44,6 @@ class ROSServiceRegistryService : public RTT::Service static ROSServiceRegistryServicePtr s_instance_; }; +} // namespace rtt_roscomm + #endif // __RTT_ROSSERVICE_RTT_ROSSERVICE_REGISTRY_SERVICE_H diff --git a/rtt_roscomm/scripts/create_boost_header.py b/rtt_roscomm/scripts/create_boost_header.py index 80fb630b..a804e4aa 100755 --- a/rtt_roscomm/scripts/create_boost_header.py +++ b/rtt_roscomm/scripts/create_boost_header.py @@ -1,15 +1,14 @@ #!/usr/bin/env python -import sys - -import roslib +from __future__ import print_function +from __future__ import unicode_literals +import sys import gencpp import genmsg -from roslib import packages,msgs import os -from cStringIO import StringIO +from io import StringIO import argparse @@ -92,11 +91,11 @@ def generate_boost_serialization(package, msg_path, msg_type, boost_header_path) (output_dir,filename) = os.path.split(boost_header_path) try: os.makedirs(output_dir) - except OSError, e: + except OSError: pass - f = open(boost_header_path, 'w') - print >> f, s.getvalue() + with open(boost_header_path, mode='w') as f: + print(s.getvalue(), file=f) s.close() @@ -115,7 +114,7 @@ def create_boost_headers(argv, stdout, stderr): if __name__ == "__main__": try: create_boost_headers(sys.argv, sys.stdout, sys.stderr) - except Exception, e: + except Exception as e: sys.stderr.write("Failed to generate boost headers: " + str(e)) raise #sys.exit(1) diff --git a/rtt_roscomm/src/rtt_rosservice_registry_service.cpp b/rtt_roscomm/src/rtt_rosservice_registry_service.cpp index afe48de5..a55deb5d 100644 --- a/rtt_roscomm/src/rtt_rosservice_registry_service.cpp +++ b/rtt_roscomm/src/rtt_rosservice_registry_service.cpp @@ -6,6 +6,8 @@ #include #include +namespace rtt_roscomm { + ROSServiceRegistryServicePtr ROSServiceRegistryService::s_instance_; ROSServiceRegistryServicePtr ROSServiceRegistryService::Instance() @@ -101,17 +103,20 @@ static void loadROSServiceRegistryService() ROSServiceRegistryService::Instance(); } +} // namespace rtt_roscomm + using namespace RTT; +using namespace rtt_roscomm; extern "C" { - bool loadRTTPlugin(RTT::TaskContext* c){ + RTT_EXPORT bool loadRTTPlugin(RTT::TaskContext* c){ if (c != 0) return false; loadROSServiceRegistryService(); return true; } - std::string getRTTPluginName (){ + RTT_EXPORT std::string getRTTPluginName (){ return "rosservice_registry"; } - std::string getRTTTargetName (){ + RTT_EXPORT std::string getRTTTargetName (){ return OROCOS_TARGET_NAME; } } diff --git a/rtt_roscomm/src/rtt_rosservice_service.cpp b/rtt_roscomm/src/rtt_rosservice_service.cpp index e3efa986..0f07ae4b 100644 --- a/rtt_roscomm/src/rtt_rosservice_service.cpp +++ b/rtt_roscomm/src/rtt_rosservice_service.cpp @@ -9,6 +9,8 @@ using namespace RTT; using namespace std; +namespace rtt_roscomm { + /** * The globally loadable ROS service. */ @@ -215,4 +217,6 @@ class ROSServiceService : public RTT::Service std::map client_proxies_; }; -ORO_SERVICE_NAMED_PLUGIN(ROSServiceService, "rosservice") +} // namespace rtt_roscomm + +ORO_SERVICE_NAMED_PLUGIN(rtt_roscomm::ROSServiceService, "rosservice") diff --git a/rtt_roscomm/src/rtt_rostopic_service.cpp b/rtt_roscomm/src/rtt_rostopic_service.cpp index 80d4480d..659b3f0b 100644 --- a/rtt_roscomm/src/rtt_rostopic_service.cpp +++ b/rtt_roscomm/src/rtt_rostopic_service.cpp @@ -1,4 +1,5 @@ #include +#include #include #include @@ -49,15 +50,15 @@ void loadROSTopicService(){ using namespace RTT; extern "C" { - bool loadRTTPlugin(RTT::TaskContext* c){ + RTT_EXPORT bool loadRTTPlugin(RTT::TaskContext* c){ if (c != 0) return false; loadROSTopicService(); return true; } - std::string getRTTPluginName (){ + RTT_EXPORT std::string getRTTPluginName (){ return "rostopic"; } - std::string getRTTTargetName (){ + RTT_EXPORT std::string getRTTTargetName (){ return OROCOS_TARGET_NAME; } } diff --git a/rtt_roscomm/src/templates/service/rtt_rosservice_proxies.cpp.in b/rtt_roscomm/src/templates/service/rtt_rosservice_proxies.cpp.in index 2f8a7959..6206c34a 100644 --- a/rtt_roscomm/src/templates/service/rtt_rosservice_proxies.cpp.in +++ b/rtt_roscomm/src/templates/service/rtt_rosservice_proxies.cpp.in @@ -12,6 +12,8 @@ namespace rtt_@ROSPACKAGE@_ros_service_proxies { + using namespace rtt_roscomm; + bool registerROSServiceProxies() { // Get the ros service registry service ROSServiceRegistryServicePtr rosservice_registry = ROSServiceRegistryService::Instance(); diff --git a/typekits/rtt_std_srvs/include/rtt_std_srvs/Empty.h b/typekits/rtt_std_srvs/include/rtt_std_srvs/Empty.h index a985b3f6..2ceadde4 100644 --- a/typekits/rtt_std_srvs/include/rtt_std_srvs/Empty.h +++ b/typekits/rtt_std_srvs/include/rtt_std_srvs/Empty.h @@ -12,6 +12,8 @@ // - void empty() // +namespace rtt_roscomm { + template<> struct ROSServiceServerOperationCallerWrapper { typedef bool Signature(); typedef RTT::OperationCaller ProxyOperationCallerType; @@ -29,4 +31,6 @@ template<> struct ROSServiceServerOperationCallerWrapper { } }; +} // namespace rtt_roscomm + #endif // RTT_STD_SRVS_EMPTY_H diff --git a/typekits/rtt_std_srvs/include/rtt_std_srvs/SetBool.h b/typekits/rtt_std_srvs/include/rtt_std_srvs/SetBool.h index 8e075668..4c76a9a5 100644 --- a/typekits/rtt_std_srvs/include/rtt_std_srvs/SetBool.h +++ b/typekits/rtt_std_srvs/include/rtt_std_srvs/SetBool.h @@ -14,6 +14,8 @@ // - void setBool(bool) // response.success = true and response.message will be empty // +namespace rtt_roscomm { + template<> struct ROSServiceServerOperationCallerWrapper { typedef bool Signature(bool, std::string&); typedef RTT::OperationCaller ProxyOperationCallerType; @@ -52,4 +54,6 @@ template<> struct ROSServiceServerOperationCallerWrapper { } }; +} // namespace rtt_roscomm + #endif // RTT_STD_SRVS_SETBOOL_H diff --git a/typekits/rtt_std_srvs/include/rtt_std_srvs/Trigger.h b/typekits/rtt_std_srvs/include/rtt_std_srvs/Trigger.h index 6e1f4f49..5d140121 100644 --- a/typekits/rtt_std_srvs/include/rtt_std_srvs/Trigger.h +++ b/typekits/rtt_std_srvs/include/rtt_std_srvs/Trigger.h @@ -13,6 +13,8 @@ // - std::string trigger() // response.success = true // +namespace rtt_roscomm { + template<> struct ROSServiceServerOperationCallerWrapper { typedef bool Signature(std::string &message_out); typedef RTT::OperationCaller ProxyOperationCallerType; @@ -41,4 +43,6 @@ template<> struct ROSServiceServerOperationCallerWrapper { } }; +} // namespace rtt_roscomm + #endif // RTT_STD_SRVS_TRIGGER_H