From d31d2b6f8da86a41acaaccc7263d9311bd92f27e Mon Sep 17 00:00:00 2001 From: "David V. Lu" Date: Mon, 21 Oct 2024 22:46:44 -0400 Subject: [PATCH] List plugins script Signed-off-by: David V. Lu --- pluginlib/CMakeLists.txt | 18 +++++++++++ pluginlib/src/list_plugins.cpp | 57 ++++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 pluginlib/src/list_plugins.cpp diff --git a/pluginlib/CMakeLists.txt b/pluginlib/CMakeLists.txt index c3216ca..f25a30a 100644 --- a/pluginlib/CMakeLists.txt +++ b/pluginlib/CMakeLists.txt @@ -30,6 +30,24 @@ target_link_libraries(${PROJECT_NAME} INTERFACE rcpputils::rcpputils tinyxml2::tinyxml2) +add_executable(list_plugins src/list_plugins.cpp) +target_include_directories(list_plugins PUBLIC + $ + $ +) +target_link_libraries(list_plugins + ${PROJECT_NAME} +) +ament_target_dependencies(list_plugins + ament_index_cpp + class_loader + rcpputils + rcutils +) +install(TARGETS list_plugins + DESTINATION lib/${PROJECT_NAME} +) + ament_export_dependencies(ament_index_cpp class_loader rcutils rcpputils tinyxml2_vendor TinyXML2) ament_export_targets(export_${PROJECT_NAME}) diff --git a/pluginlib/src/list_plugins.cpp b/pluginlib/src/list_plugins.cpp new file mode 100644 index 0000000..5371917 --- /dev/null +++ b/pluginlib/src/list_plugins.cpp @@ -0,0 +1,57 @@ +/********************************************************************* + * Software License Agreement (BSD License) + * + * Copyright (c) 2024, Metro Robots + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of Metro Robots nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + *********************************************************************/ + +/* Author: David V. Lu!! */ + +#include +#include + +int main(int argc, char** argv) +{ + if (argc != 3) + { + std::cerr << "Requires two arguments!" << std::endl; + std::cerr << "Usage: " << argv[0]; + std::cerr << " [package] [base_class]" << std::endl; + return -1; + } + + // Note: You cannot use void if you want to use the templated createSharedInstance methods + pluginlib::ClassLoader cl(argv[1], argv[2]); + for (const auto& declared : cl.getDeclaredClasses()) + { + std::cout << declared << std::endl; + } + return 0; +}