From 827b8623bcdfdd62f2866f6fadef2db8c71823c5 Mon Sep 17 00:00:00 2001 From: duongtd Date: Thu, 30 Oct 2025 11:30:16 +0700 Subject: [PATCH] first commit --- geometry_msgs/CMakeLists.txt | 20 + geometry_msgs/include/geometry_msgs/Point.h | 26 + geometry_msgs/include/geometry_msgs/Point32.h | 14 + .../include/geometry_msgs/PointStamped.h | 21 + geometry_msgs/include/geometry_msgs/Polygon.h | 16 + .../include/geometry_msgs/PolygonStamped.h | 21 + geometry_msgs/include/geometry_msgs/Pose.h | 20 + .../include/geometry_msgs/Quaternion.h | 24 + .../include/geometry_msgs/Transform.h | 18 + .../include/geometry_msgs/TransformStamped.h | 20 + geometry_msgs/include/geometry_msgs/Vector3.h | 23 + .../include/geometry_msgs/Vector3Stamped.msg | 3 + nav_msgs/CMakeLists.txt | 26 + nav_msgs/include/nav_msgs/MapMetaData.h | 23 + nav_msgs/include/nav_msgs/OccupancyGrid.h | 24 + sensor_msgs/CMakeLists.txt | 25 + sensor_msgs/cfg/config.yaml | 7 + .../include/sensor_msgs/BatteryState.h | 63 ++ sensor_msgs/include/sensor_msgs/CameraInfo.h | 54 ++ .../include/sensor_msgs/ChannelFloat32.h | 12 + .../include/sensor_msgs/CompressedImage.h | 18 + .../include/sensor_msgs/FluidPressure.h | 17 + sensor_msgs/include/sensor_msgs/Illuminance.h | 17 + sensor_msgs/include/sensor_msgs/Image.h | 26 + sensor_msgs/include/sensor_msgs/Imu.h | 31 + sensor_msgs/include/sensor_msgs/JointState.h | 21 + sensor_msgs/include/sensor_msgs/Joy.h | 17 + sensor_msgs/include/sensor_msgs/JoyFeedback.h | 24 + .../include/sensor_msgs/JoyFeedbackArray.h | 16 + sensor_msgs/include/sensor_msgs/LaserEcho.h | 16 + sensor_msgs/include/sensor_msgs/LaserScan.h | 34 + .../include/sensor_msgs/MultiEchoLaserScan.h | 32 + sensor_msgs/include/sensor_msgs/PointCloud.h | 24 + sensor_msgs/include/sensor_msgs/PointCloud2.h | 34 + sensor_msgs/include/sensor_msgs/PointField.h | 31 + sensor_msgs/include/sensor_msgs/Range.h | 28 + .../include/sensor_msgs/RegionOfInterest.h | 21 + .../include/sensor_msgs/RelativeHumidity.h | 19 + sensor_msgs/include/sensor_msgs/Temperature.h | 19 + .../include/sensor_msgs/TimeReference.h | 20 + .../include/sensor_msgs/distortion_models.h | 51 ++ sensor_msgs/include/sensor_msgs/fill_image.h | 70 ++ .../include/sensor_msgs/image_encodings.h | 233 ++++++ .../sensor_msgs/impl/point_cloud2_iterator.h | 417 +++++++++++ .../sensor_msgs/point_cloud2_iterator.h | 302 ++++++++ .../sensor_msgs/point_cloud_conversion.h | 169 +++++ .../sensor_msgs/point_field_conversion.h | 180 +++++ sensor_msgs/test/CMakeCache.txt | 372 ++++++++++ .../CMakeFiles/3.16.3/CMakeCCompiler.cmake | 76 ++ .../CMakeFiles/3.16.3/CMakeCXXCompiler.cmake | 88 +++ .../3.16.3/CMakeDetermineCompilerABI_C.bin | Bin 0 -> 16552 bytes .../3.16.3/CMakeDetermineCompilerABI_CXX.bin | Bin 0 -> 16560 bytes .../test/CMakeFiles/3.16.3/CMakeSystem.cmake | 15 + .../3.16.3/CompilerIdC/CMakeCCompilerId.c | 671 ++++++++++++++++++ .../test/CMakeFiles/3.16.3/CompilerIdC/a.out | Bin 0 -> 16712 bytes .../CompilerIdCXX/CMakeCXXCompilerId.cpp | 660 +++++++++++++++++ .../CMakeFiles/3.16.3/CompilerIdCXX/a.out | Bin 0 -> 16720 bytes .../CMakeDirectoryInformation.cmake | 16 + sensor_msgs/test/CMakeFiles/CMakeOutput.log | 461 ++++++++++++ sensor_msgs/test/CMakeFiles/Makefile.cmake | 51 ++ sensor_msgs/test/CMakeFiles/Makefile2 | 126 ++++ .../test/CMakeFiles/TargetDirectories.txt | 5 + sensor_msgs/test/CMakeFiles/cmake.check_cache | 1 + sensor_msgs/test/CMakeFiles/progress.marks | 1 + .../test_battery_state.dir/CXX.includecache | 68 ++ .../test_battery_state.dir/DependInfo.cmake | 22 + .../test_battery_state.dir/build.make | 98 +++ .../test_battery_state.dir/cmake_clean.cmake | 10 + .../test_battery_state.dir/depend.internal | 11 + .../test_battery_state.dir/depend.make | 11 + .../test_battery_state.dir/flags.make | 10 + .../test_battery_state.dir/link.txt | 1 + .../test_battery_state.dir/main.cpp.o | Bin 0 -> 315280 bytes .../test_battery_state.dir/progress.make | 3 + sensor_msgs/test/Makefile | 178 +++++ sensor_msgs/test/cmake_install.cmake | 55 ++ sensor_msgs/test/main.cpp | 75 ++ .../CMakeDirectoryInformation.cmake | 16 + .../std_msgs_build/CMakeFiles/progress.marks | 1 + sensor_msgs/test/std_msgs_build/Makefile | 134 ++++ .../test/std_msgs_build/cmake_install.cmake | 39 + sensor_msgs/test/test_battery_state | Bin 0 -> 153088 bytes std_msgs/CMakeLists.txt | 7 + std_msgs/include/std_msgs/Header.h | 33 + 84 files changed, 5662 insertions(+) create mode 100644 geometry_msgs/CMakeLists.txt create mode 100644 geometry_msgs/include/geometry_msgs/Point.h create mode 100644 geometry_msgs/include/geometry_msgs/Point32.h create mode 100644 geometry_msgs/include/geometry_msgs/PointStamped.h create mode 100644 geometry_msgs/include/geometry_msgs/Polygon.h create mode 100644 geometry_msgs/include/geometry_msgs/PolygonStamped.h create mode 100644 geometry_msgs/include/geometry_msgs/Pose.h create mode 100644 geometry_msgs/include/geometry_msgs/Quaternion.h create mode 100644 geometry_msgs/include/geometry_msgs/Transform.h create mode 100644 geometry_msgs/include/geometry_msgs/TransformStamped.h create mode 100644 geometry_msgs/include/geometry_msgs/Vector3.h create mode 100644 geometry_msgs/include/geometry_msgs/Vector3Stamped.msg create mode 100644 nav_msgs/CMakeLists.txt create mode 100644 nav_msgs/include/nav_msgs/MapMetaData.h create mode 100644 nav_msgs/include/nav_msgs/OccupancyGrid.h create mode 100644 sensor_msgs/CMakeLists.txt create mode 100644 sensor_msgs/cfg/config.yaml create mode 100644 sensor_msgs/include/sensor_msgs/BatteryState.h create mode 100644 sensor_msgs/include/sensor_msgs/CameraInfo.h create mode 100644 sensor_msgs/include/sensor_msgs/ChannelFloat32.h create mode 100644 sensor_msgs/include/sensor_msgs/CompressedImage.h create mode 100644 sensor_msgs/include/sensor_msgs/FluidPressure.h create mode 100644 sensor_msgs/include/sensor_msgs/Illuminance.h create mode 100644 sensor_msgs/include/sensor_msgs/Image.h create mode 100644 sensor_msgs/include/sensor_msgs/Imu.h create mode 100644 sensor_msgs/include/sensor_msgs/JointState.h create mode 100644 sensor_msgs/include/sensor_msgs/Joy.h create mode 100644 sensor_msgs/include/sensor_msgs/JoyFeedback.h create mode 100644 sensor_msgs/include/sensor_msgs/JoyFeedbackArray.h create mode 100644 sensor_msgs/include/sensor_msgs/LaserEcho.h create mode 100644 sensor_msgs/include/sensor_msgs/LaserScan.h create mode 100644 sensor_msgs/include/sensor_msgs/MultiEchoLaserScan.h create mode 100644 sensor_msgs/include/sensor_msgs/PointCloud.h create mode 100644 sensor_msgs/include/sensor_msgs/PointCloud2.h create mode 100644 sensor_msgs/include/sensor_msgs/PointField.h create mode 100644 sensor_msgs/include/sensor_msgs/Range.h create mode 100644 sensor_msgs/include/sensor_msgs/RegionOfInterest.h create mode 100644 sensor_msgs/include/sensor_msgs/RelativeHumidity.h create mode 100644 sensor_msgs/include/sensor_msgs/Temperature.h create mode 100644 sensor_msgs/include/sensor_msgs/TimeReference.h create mode 100644 sensor_msgs/include/sensor_msgs/distortion_models.h create mode 100644 sensor_msgs/include/sensor_msgs/fill_image.h create mode 100644 sensor_msgs/include/sensor_msgs/image_encodings.h create mode 100644 sensor_msgs/include/sensor_msgs/impl/point_cloud2_iterator.h create mode 100644 sensor_msgs/include/sensor_msgs/point_cloud2_iterator.h create mode 100644 sensor_msgs/include/sensor_msgs/point_cloud_conversion.h create mode 100644 sensor_msgs/include/sensor_msgs/point_field_conversion.h create mode 100644 sensor_msgs/test/CMakeCache.txt create mode 100644 sensor_msgs/test/CMakeFiles/3.16.3/CMakeCCompiler.cmake create mode 100644 sensor_msgs/test/CMakeFiles/3.16.3/CMakeCXXCompiler.cmake create mode 100755 sensor_msgs/test/CMakeFiles/3.16.3/CMakeDetermineCompilerABI_C.bin create mode 100755 sensor_msgs/test/CMakeFiles/3.16.3/CMakeDetermineCompilerABI_CXX.bin create mode 100644 sensor_msgs/test/CMakeFiles/3.16.3/CMakeSystem.cmake create mode 100644 sensor_msgs/test/CMakeFiles/3.16.3/CompilerIdC/CMakeCCompilerId.c create mode 100755 sensor_msgs/test/CMakeFiles/3.16.3/CompilerIdC/a.out create mode 100644 sensor_msgs/test/CMakeFiles/3.16.3/CompilerIdCXX/CMakeCXXCompilerId.cpp create mode 100755 sensor_msgs/test/CMakeFiles/3.16.3/CompilerIdCXX/a.out create mode 100644 sensor_msgs/test/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 sensor_msgs/test/CMakeFiles/CMakeOutput.log create mode 100644 sensor_msgs/test/CMakeFiles/Makefile.cmake create mode 100644 sensor_msgs/test/CMakeFiles/Makefile2 create mode 100644 sensor_msgs/test/CMakeFiles/TargetDirectories.txt create mode 100644 sensor_msgs/test/CMakeFiles/cmake.check_cache create mode 100644 sensor_msgs/test/CMakeFiles/progress.marks create mode 100644 sensor_msgs/test/CMakeFiles/test_battery_state.dir/CXX.includecache create mode 100644 sensor_msgs/test/CMakeFiles/test_battery_state.dir/DependInfo.cmake create mode 100644 sensor_msgs/test/CMakeFiles/test_battery_state.dir/build.make create mode 100644 sensor_msgs/test/CMakeFiles/test_battery_state.dir/cmake_clean.cmake create mode 100644 sensor_msgs/test/CMakeFiles/test_battery_state.dir/depend.internal create mode 100644 sensor_msgs/test/CMakeFiles/test_battery_state.dir/depend.make create mode 100644 sensor_msgs/test/CMakeFiles/test_battery_state.dir/flags.make create mode 100644 sensor_msgs/test/CMakeFiles/test_battery_state.dir/link.txt create mode 100644 sensor_msgs/test/CMakeFiles/test_battery_state.dir/main.cpp.o create mode 100644 sensor_msgs/test/CMakeFiles/test_battery_state.dir/progress.make create mode 100644 sensor_msgs/test/Makefile create mode 100644 sensor_msgs/test/cmake_install.cmake create mode 100644 sensor_msgs/test/main.cpp create mode 100644 sensor_msgs/test/std_msgs_build/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 sensor_msgs/test/std_msgs_build/CMakeFiles/progress.marks create mode 100644 sensor_msgs/test/std_msgs_build/Makefile create mode 100644 sensor_msgs/test/std_msgs_build/cmake_install.cmake create mode 100755 sensor_msgs/test/test_battery_state create mode 100644 std_msgs/CMakeLists.txt create mode 100644 std_msgs/include/std_msgs/Header.h diff --git a/geometry_msgs/CMakeLists.txt b/geometry_msgs/CMakeLists.txt new file mode 100644 index 0000000..fa2f7e5 --- /dev/null +++ b/geometry_msgs/CMakeLists.txt @@ -0,0 +1,20 @@ +cmake_minimum_required(VERSION 3.10) +project(geometry_msgs) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +if (NOT TARGET std_msgs) + add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../std_msgs ${CMAKE_BINARY_DIR}/std_msgs_build) +endif() + +# Thư viện header-only +add_library(geometry_msgs INTERFACE) + +# Include path tới thư mục chứa file header +target_include_directories(geometry_msgs INTERFACE + ${CMAKE_CURRENT_SOURCE_DIR}/include +) + +# Liên kết với std_msgs nếu bạn có file Header.h trong include/std_msgs/ +target_link_libraries(geometry_msgs INTERFACE std_msgs) diff --git a/geometry_msgs/include/geometry_msgs/Point.h b/geometry_msgs/include/geometry_msgs/Point.h new file mode 100644 index 0000000..3088843 --- /dev/null +++ b/geometry_msgs/include/geometry_msgs/Point.h @@ -0,0 +1,26 @@ +#ifndef POINT_H +#define POINT_H + +#include +#include + +namespace geometry_msgs +{ + +struct Point +{ + double x; + double y; + double z; + + // Constructor mặc định + Point() : x(0.0), y(0.0), z(0.0) {} + + // Constructor khởi tạo nhanh + Point(double x_, double y_, double z_ = 0.0) + : x(x_), y(y_), z(z_) {} +}; + +} // namespace geometry_msgs + +#endif // POINT_H \ No newline at end of file diff --git a/geometry_msgs/include/geometry_msgs/Point32.h b/geometry_msgs/include/geometry_msgs/Point32.h new file mode 100644 index 0000000..12d8ae4 --- /dev/null +++ b/geometry_msgs/include/geometry_msgs/Point32.h @@ -0,0 +1,14 @@ +#ifndef POINT_32_H +#define POINT_32_H + +namespace geometry_msgs +{ +struct Point32 +{ + float x; + float y; + float z; +}; +} // namespace geometry_msgs + +#endif //POINT_32_H \ No newline at end of file diff --git a/geometry_msgs/include/geometry_msgs/PointStamped.h b/geometry_msgs/include/geometry_msgs/PointStamped.h new file mode 100644 index 0000000..cece302 --- /dev/null +++ b/geometry_msgs/include/geometry_msgs/PointStamped.h @@ -0,0 +1,21 @@ +// # This represents a Point with reference coordinate frame and timestamp +// Header header +// Point point +#ifndef POINT_STAMPED_H +#define POINT_STAMPED_H +#include "std_msgs/Header.h" +#include "geometry_msgs/Point.h" + +namespace geometry_msgs +{ + +struct PointStamped +{ + std_msgs::Header header; + geometry_msgs::Point point; + PointStamped() = default; +}; + +} // namespace geometry_msgs + +#endif //POINT_STAMPED_H \ No newline at end of file diff --git a/geometry_msgs/include/geometry_msgs/Polygon.h b/geometry_msgs/include/geometry_msgs/Polygon.h new file mode 100644 index 0000000..fbf0209 --- /dev/null +++ b/geometry_msgs/include/geometry_msgs/Polygon.h @@ -0,0 +1,16 @@ +#ifndef POLYGON_H +#define POLYGON_H +#include +#include + +namespace geometry_msgs +{ + +struct Polygon +{ + std::vector points; +}; + +} // namespace geometry_msgs + +#endif //POLYGON_H diff --git a/geometry_msgs/include/geometry_msgs/PolygonStamped.h b/geometry_msgs/include/geometry_msgs/PolygonStamped.h new file mode 100644 index 0000000..41a58f0 --- /dev/null +++ b/geometry_msgs/include/geometry_msgs/PolygonStamped.h @@ -0,0 +1,21 @@ +// # This represents a Polygon with reference coordinate frame and timestamp +// Header header +// Polygon polygon +#ifndef POLYGON_STAMPED_H +#define POLYGON_STAMPED_H + +#include +#include + +namespace geometry_msgs +{ + +struct PolygonStamped +{ + std_msgs::Header header; + Polygon polygon; +}; + +} // namespace geometry_msgs + +#endif //POLYGON_STAMPED_H diff --git a/geometry_msgs/include/geometry_msgs/Pose.h b/geometry_msgs/include/geometry_msgs/Pose.h new file mode 100644 index 0000000..8d19312 --- /dev/null +++ b/geometry_msgs/include/geometry_msgs/Pose.h @@ -0,0 +1,20 @@ +#ifndef POSE_H +#define POSE_H + +#include +#include +#include +#include + +namespace geometry_msgs +{ + +struct Pose +{ + Point position; + Quaternion orientation; +}; + +} // namespace geometry_msgs + +#endif // POSE_H \ No newline at end of file diff --git a/geometry_msgs/include/geometry_msgs/Quaternion.h b/geometry_msgs/include/geometry_msgs/Quaternion.h new file mode 100644 index 0000000..a11290e --- /dev/null +++ b/geometry_msgs/include/geometry_msgs/Quaternion.h @@ -0,0 +1,24 @@ +#ifndef QUATERNION_H +#define QUATERNION_H + +namespace geometry_msgs +{ + +struct Quaternion +{ + double x; + double y; + double z; + double w; + + // Constructor mặc định + Quaternion() : x(0.0), y(0.0), z(0.0), w(0.0) {} + + // Constructor khởi tạo nhanh + Quaternion(double x_, double y_, double z_, double w_) + : x(x_), y(y_), z(z_), w(w_) {} +}; + +} // namespace geometry_msgs + +#endif // QUATERNION_H \ No newline at end of file diff --git a/geometry_msgs/include/geometry_msgs/Transform.h b/geometry_msgs/include/geometry_msgs/Transform.h new file mode 100644 index 0000000..9dd7c63 --- /dev/null +++ b/geometry_msgs/include/geometry_msgs/Transform.h @@ -0,0 +1,18 @@ +#ifndef TRANSFORM_H +#define TRANSFORM_H + +#include "geometry_msgs/Vector3.h" +#include "geometry_msgs/Quaternion.h" + +namespace geometry_msgs +{ + +struct Transform +{ + Vector3 translation; + Quaternion rotation; +}; + +} // namespace geometry_msgs + +#endif // TRANSFORM_H \ No newline at end of file diff --git a/geometry_msgs/include/geometry_msgs/TransformStamped.h b/geometry_msgs/include/geometry_msgs/TransformStamped.h new file mode 100644 index 0000000..ebc26c9 --- /dev/null +++ b/geometry_msgs/include/geometry_msgs/TransformStamped.h @@ -0,0 +1,20 @@ +#ifndef TRANSFORM_STAMPED_H +#define TRANSFORM_STAMPED_H + +#include "std_msgs/Header.h" +#include "geometry_msgs/Transform.h" +#include + +namespace geometry_msgs +{ + +struct TransformStamped +{ + std_msgs::Header header; + std::string child_frame_id; + Transform transform; +}; + +} // namespace geometry_msgs + +#endif // TRANSFORM_STAMPED_H \ No newline at end of file diff --git a/geometry_msgs/include/geometry_msgs/Vector3.h b/geometry_msgs/include/geometry_msgs/Vector3.h new file mode 100644 index 0000000..df95c81 --- /dev/null +++ b/geometry_msgs/include/geometry_msgs/Vector3.h @@ -0,0 +1,23 @@ +#ifndef VECTOR_3_H +#define VECTOR_3_H + +namespace geometry_msgs +{ + +struct Vector3 +{ + double x; + double y; + double z; + + // Constructor mặc định + Vector3() : x(0.0), y(0.0), z(0.0) {} + + // Constructor khởi tạo nhanh + Vector3(double x_, double y_, double z_) + : x(x_), y(y_), z(z_) {} +}; + +} // namespace geometry_msgs + +#endif // VECTOR_3_H \ No newline at end of file diff --git a/geometry_msgs/include/geometry_msgs/Vector3Stamped.msg b/geometry_msgs/include/geometry_msgs/Vector3Stamped.msg new file mode 100644 index 0000000..e68eb06 --- /dev/null +++ b/geometry_msgs/include/geometry_msgs/Vector3Stamped.msg @@ -0,0 +1,3 @@ +# This represents a Vector3 with reference coordinate frame and timestamp +Header header +Vector3 vector diff --git a/nav_msgs/CMakeLists.txt b/nav_msgs/CMakeLists.txt new file mode 100644 index 0000000..77de9ac --- /dev/null +++ b/nav_msgs/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.10) +project(nav_msgs) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +if (NOT TARGET std_msgs) + add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../std_msgs ${CMAKE_BINARY_DIR}/std_msgs_build) +endif() +if (NOT TARGET geometry_msgs) + add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../geometry_msgs ${CMAKE_BINARY_DIR}/geometry_msgs_build) +endif() + +# Thư viện header-only +add_library(nav_msgs INTERFACE) + +# Include path tới thư mục chứa file header +target_include_directories(nav_msgs INTERFACE + ${CMAKE_CURRENT_SOURCE_DIR}/include +) + +# Liên kết với std_msgs nếu bạn có file Header.h trong include/std_msgs/ +target_link_libraries(nav_msgs INTERFACE + std_msgs + geometry_msgs + ) diff --git a/nav_msgs/include/nav_msgs/MapMetaData.h b/nav_msgs/include/nav_msgs/MapMetaData.h new file mode 100644 index 0000000..7504af4 --- /dev/null +++ b/nav_msgs/include/nav_msgs/MapMetaData.h @@ -0,0 +1,23 @@ +#ifndef MAP_META_DATA_H +#define MAP_META_DATA_H + +#include +#include +#include +#include "geometry_msgs/Pose.h" + +namespace nav_msgs +{ + +struct MapMetaData +{ +double map_load_time; +float resolution; +uint32_t width; +uint32_t height; +geometry_msgs::Pose origin; +}; + +} + +#endif //MAP_META_DATA_H \ No newline at end of file diff --git a/nav_msgs/include/nav_msgs/OccupancyGrid.h b/nav_msgs/include/nav_msgs/OccupancyGrid.h new file mode 100644 index 0000000..cb5f8fe --- /dev/null +++ b/nav_msgs/include/nav_msgs/OccupancyGrid.h @@ -0,0 +1,24 @@ +#ifndef OCCUPANCY_GRID_H +#define OCCUPANCY_GRID_H + +#include +#include +#include +#include "std_msgs/Header.h" +#include + +namespace nav_msgs +{ + +struct OccupancyGrid +{ +std_msgs::Header header; + +MapMetaData info; + +std::vector data; +}; + +} + +#endif //OCCUPANCY_GRID_H diff --git a/sensor_msgs/CMakeLists.txt b/sensor_msgs/CMakeLists.txt new file mode 100644 index 0000000..c716115 --- /dev/null +++ b/sensor_msgs/CMakeLists.txt @@ -0,0 +1,25 @@ +cmake_minimum_required(VERSION 3.10) +project(sensor_msgs) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +if (NOT TARGET std_msgs) + add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../std_msgs ${CMAKE_BINARY_DIR}/std_msgs_build) +endif() + +# Thư viện header-only +add_library(sensor_msgs INTERFACE) + +# Include path tới thư mục chứa file header +target_include_directories(sensor_msgs INTERFACE + ${CMAKE_CURRENT_SOURCE_DIR}/include +) + +# Liên kết với std_msgs nếu bạn có file Header.h trong include/std_msgs/ +target_link_libraries(sensor_msgs INTERFACE std_msgs yaml-cpp) +# target_link_libraries(sensor_msgs yaml-cpp) + +# Tạo file test ví dụ +add_executable(test_battery_state test/main.cpp) +target_link_libraries(test_battery_state PRIVATE sensor_msgs) diff --git a/sensor_msgs/cfg/config.yaml b/sensor_msgs/cfg/config.yaml new file mode 100644 index 0000000..fea614d --- /dev/null +++ b/sensor_msgs/cfg/config.yaml @@ -0,0 +1,7 @@ +inflation_layer: + enabled: true + inflate_unknown: false + cost_scaling_factor: 15.0 + inflation_radius: 0.55 +obstacle_layer: + distance: 0.15 \ No newline at end of file diff --git a/sensor_msgs/include/sensor_msgs/BatteryState.h b/sensor_msgs/include/sensor_msgs/BatteryState.h new file mode 100644 index 0000000..033db21 --- /dev/null +++ b/sensor_msgs/include/sensor_msgs/BatteryState.h @@ -0,0 +1,63 @@ +#pragma once +#include "std_msgs/Header.h" +#include +#include +#include +#include + +namespace sensor_msgs +{ + +struct BatteryState +{ + // ===== Power supply status constants ===== + static constexpr uint8_t POWER_SUPPLY_STATUS_UNKNOWN = 0; + static constexpr uint8_t POWER_SUPPLY_STATUS_CHARGING = 1; + static constexpr uint8_t POWER_SUPPLY_STATUS_DISCHARGING = 2; + static constexpr uint8_t POWER_SUPPLY_STATUS_NOT_CHARGING = 3; + static constexpr uint8_t POWER_SUPPLY_STATUS_FULL = 4; + + // ===== Power supply health constants ===== + static constexpr uint8_t POWER_SUPPLY_HEALTH_UNKNOWN = 0; + static constexpr uint8_t POWER_SUPPLY_HEALTH_GOOD = 1; + static constexpr uint8_t POWER_SUPPLY_HEALTH_OVERHEAT = 2; + static constexpr uint8_t POWER_SUPPLY_HEALTH_DEAD = 3; + static constexpr uint8_t POWER_SUPPLY_HEALTH_OVERVOLTAGE = 4; + static constexpr uint8_t POWER_SUPPLY_HEALTH_UNSPEC_FAILURE = 5; + static constexpr uint8_t POWER_SUPPLY_HEALTH_COLD = 6; + static constexpr uint8_t POWER_SUPPLY_HEALTH_WATCHDOG_TIMER_EXPIRE = 7; + static constexpr uint8_t POWER_SUPPLY_HEALTH_SAFETY_TIMER_EXPIRE = 8; + + // ===== Power supply technology (chemistry) constants ===== + static constexpr uint8_t POWER_SUPPLY_TECHNOLOGY_UNKNOWN = 0; + static constexpr uint8_t POWER_SUPPLY_TECHNOLOGY_NIMH = 1; + static constexpr uint8_t POWER_SUPPLY_TECHNOLOGY_LION = 2; + static constexpr uint8_t POWER_SUPPLY_TECHNOLOGY_LIPO = 3; + static constexpr uint8_t POWER_SUPPLY_TECHNOLOGY_LIFE = 4; + static constexpr uint8_t POWER_SUPPLY_TECHNOLOGY_NICD = 5; + static constexpr uint8_t POWER_SUPPLY_TECHNOLOGY_LIMN = 6; + + // ===== Data fields ===== + std_msgs::Header header; + + float voltage = std::numeric_limits::quiet_NaN(); // [V] + float temperature = std::numeric_limits::quiet_NaN(); // [°C] + float current = std::numeric_limits::quiet_NaN(); // [A] + float charge = std::numeric_limits::quiet_NaN(); // [Ah] + float capacity = std::numeric_limits::quiet_NaN(); // [Ah] + float design_capacity = std::numeric_limits::quiet_NaN(); // [Ah] + float percentage = std::numeric_limits::quiet_NaN(); // 0..1 + + uint8_t power_supply_status = POWER_SUPPLY_STATUS_UNKNOWN; + uint8_t power_supply_health = POWER_SUPPLY_HEALTH_UNKNOWN; + uint8_t power_supply_technology = POWER_SUPPLY_TECHNOLOGY_UNKNOWN; + bool present = false; + + std::vector cell_voltage; + std::vector cell_temperature; + + std::string location; + std::string serial_number; +}; + +} // namespace sensor_msgs diff --git a/sensor_msgs/include/sensor_msgs/CameraInfo.h b/sensor_msgs/include/sensor_msgs/CameraInfo.h new file mode 100644 index 0000000..0146477 --- /dev/null +++ b/sensor_msgs/include/sensor_msgs/CameraInfo.h @@ -0,0 +1,54 @@ + + +# Time of image acquisition, camera coordinate frame ID +Header header # Header timestamp should be acquisition time of image + + +uint32 height +uint32 width + +string distortion_model + +float64[] D + +float64[9] K # 3x3 row-major matrix + + +float64[9] R # 3x3 row-major matrix + +float64[12] P # 3x4 row-major matrix + +uint32 binning_x +uint32 binning_y + +RegionOfInterest roi + +#pragma once +#include +#include +#include "msg/Header.h" +#include "msg/RegionOfInterest.h" + +namespace sensor_msgs +{ +struct CameraInfo +{ + std_msgs::Header header; // thời gian và frame_id + + // Calibration parameters + uint32_t height = 0; + uint32_t width = 0; + std::string distortion_model; + + std::vector D; // distortion coefficients + double K[9] = {0.0}; // intrinsic matrix + double R[9] = {0.0}; // rectification matrix + double P[12] = {0.0}; // projection matrix + + // Operational parameters + uint32_t binning_x = 0; + uint32_t binning_y = 0; + sensor_msgs::RegionOfInterest roi; +}; +} // namespace sensor_msgs + diff --git a/sensor_msgs/include/sensor_msgs/ChannelFloat32.h b/sensor_msgs/include/sensor_msgs/ChannelFloat32.h new file mode 100644 index 0000000..49ab8ee --- /dev/null +++ b/sensor_msgs/include/sensor_msgs/ChannelFloat32.h @@ -0,0 +1,12 @@ +#pragma once +#include +#include + +namespace sensor_msgs +{ +struct ChannelFloat32 +{ + std::string name; // Tên của channel (vd: "intensity", "rgb", "u", "v") + std::vector values; // Dữ liệu float32 ứng với từng điểm trong PointCloud +}; +} // namespace sensor_msgs diff --git a/sensor_msgs/include/sensor_msgs/CompressedImage.h b/sensor_msgs/include/sensor_msgs/CompressedImage.h new file mode 100644 index 0000000..923bd22 --- /dev/null +++ b/sensor_msgs/include/sensor_msgs/CompressedImage.h @@ -0,0 +1,18 @@ +#pragma once +#include +#include +#include "msg/Header.h" + +namespace sensor_msgs +{ + +struct CompressedImage +{ + std_msgs::Header header; // Thông tin thời gian & frame_id + std::string format; // Định dạng nén (jpeg, png, ...) + + // Dữ liệu ảnh nén (binary buffer) + std::vector data; +}; + +} // namespace sensor_msgs diff --git a/sensor_msgs/include/sensor_msgs/FluidPressure.h b/sensor_msgs/include/sensor_msgs/FluidPressure.h new file mode 100644 index 0000000..1b3296c --- /dev/null +++ b/sensor_msgs/include/sensor_msgs/FluidPressure.h @@ -0,0 +1,17 @@ +#pragma once +#include "msg/Header.h" + +namespace sensor_msgs +{ + +struct FluidPressure +{ + std_msgs::Header header; // Thông tin thời gian và khung tọa độ + double fluid_pressure; // Áp suất tuyệt đối (đơn vị: Pascal) + double variance; // Phương sai (0 = không xác định) + + FluidPressure() + : fluid_pressure(0.0), variance(0.0) {} +}; + +} // namespace sensor_msgs diff --git a/sensor_msgs/include/sensor_msgs/Illuminance.h b/sensor_msgs/include/sensor_msgs/Illuminance.h new file mode 100644 index 0000000..9b40761 --- /dev/null +++ b/sensor_msgs/include/sensor_msgs/Illuminance.h @@ -0,0 +1,17 @@ +#pragma once +#include "msg/Header.h" + +namespace sensor_msgs +{ + +struct Illuminance +{ + std_msgs::Header header; // Thông tin thời gian và khung tọa độ + double illuminance; // Độ rọi đo được (đơn vị: Lux) + double variance; // Phương sai (0 = không xác định) + + Illuminance() + : illuminance(0.0), variance(0.0) {} +}; + +} // namespace sensor_msgs diff --git a/sensor_msgs/include/sensor_msgs/Image.h b/sensor_msgs/include/sensor_msgs/Image.h new file mode 100644 index 0000000..d5bba9c --- /dev/null +++ b/sensor_msgs/include/sensor_msgs/Image.h @@ -0,0 +1,26 @@ +#pragma once +#include +#include +#include +#include "msg/Header.h" + +namespace sensor_msgs +{ +struct Image +{ + std_msgs::Header header; // Thông tin thời gian và frame + uint32_t height = 0; // Số hàng (pixels theo chiều dọc) + uint32_t width = 0; // Số cột (pixels theo chiều ngang) + std::string encoding; // Kiểu mã hóa (vd: "rgb8", "mono8") + uint8_t is_bigendian = 0; // 0 = little endian + uint32_t step = 0; // Số byte mỗi dòng ảnh + std::vector data; // Mảng dữ liệu ảnh (kích thước step * height) + + Image() = default; + + inline size_t size() const { return data.size(); } + + inline bool empty() const { return data.empty(); } +}; + +} // namespace sensor_msgs diff --git a/sensor_msgs/include/sensor_msgs/Imu.h b/sensor_msgs/include/sensor_msgs/Imu.h new file mode 100644 index 0000000..c92dd81 --- /dev/null +++ b/sensor_msgs/include/sensor_msgs/Imu.h @@ -0,0 +1,31 @@ +#pragma once +#include +#include "msg/Header.h" +#include "geometry_msgs/Quaternion.h" +#include "geometry_msgs/Vector3.h" + +namespace sensor_msgs +{ + +struct Imu +{ + std_msgs::Header header; // Thời gian và frame gốc + + geometry_msgs::Quaternion orientation; // Góc quay (đơn vị: quaternion) + std::array orientation_covariance; // Ma trận hiệp phương sai (row-major) + + geometry_msgs::Vector3 angular_velocity; // Tốc độ góc (rad/s) + std::array angular_velocity_covariance; // Ma trận hiệp phương sai + + geometry_msgs::Vector3 linear_acceleration; // Gia tốc tuyến tính (m/s^2) + std::array linear_acceleration_covariance; // Ma trận hiệp phương sai + + Imu() + { + orientation_covariance.fill(0.0); + angular_velocity_covariance.fill(0.0); + linear_acceleration_covariance.fill(0.0); + } +}; + +} // namespace sensor_msgs diff --git a/sensor_msgs/include/sensor_msgs/JointState.h b/sensor_msgs/include/sensor_msgs/JointState.h new file mode 100644 index 0000000..c1df5cf --- /dev/null +++ b/sensor_msgs/include/sensor_msgs/JointState.h @@ -0,0 +1,21 @@ +#pragma once +#include +#include +#include "msg/Header.h" + +namespace sensor_msgs +{ + +struct JointState +{ + std_msgs::Header header; // Thời điểm và frame ghi nhận trạng thái khớp + + std::vector name; // Tên từng khớp + std::vector position; // Vị trí (rad hoặc m) + std::vector velocity; // Vận tốc (rad/s hoặc m/s) + std::vector effort; // Mô-men hoặc lực (Nm hoặc N) + + JointState() = default; +}; + +} // namespace sensor_msgs diff --git a/sensor_msgs/include/sensor_msgs/Joy.h b/sensor_msgs/include/sensor_msgs/Joy.h new file mode 100644 index 0000000..e26c632 --- /dev/null +++ b/sensor_msgs/include/sensor_msgs/Joy.h @@ -0,0 +1,17 @@ +#pragma once +#include +#include "msg/Header.h" + +namespace sensor_msgs +{ + +struct Joy +{ + std_msgs::Header header; // Thời điểm nhận dữ liệu từ joystick + std::vector axes; // Các giá trị trục analog (ví dụ: X, Y, Z, throttle, ...) + std::vector buttons; // Trạng thái nút bấm (0 = nhả, 1 = nhấn) + + Joy() = default; +}; + +} // namespace sensor_msgs diff --git a/sensor_msgs/include/sensor_msgs/JoyFeedback.h b/sensor_msgs/include/sensor_msgs/JoyFeedback.h new file mode 100644 index 0000000..9c64159 --- /dev/null +++ b/sensor_msgs/include/sensor_msgs/JoyFeedback.h @@ -0,0 +1,24 @@ +#ifndef JOY_FEEDBACK_H +#define JOY_FEEDBACK_H + +#include + +namespace sensor_msgs +{ + +struct JoyFeedback +{ + // Declare of the type of feedback + static constexpr uint8_t TYPE_LED = 0; + static constexpr uint8_t TYPE_RUMBLE = 1; + static constexpr uint8_t TYPE_BUZZER = 2; + + uint8_t type; // Loại feedback + uint8_t id; // ID của từng loại feedback + float intensity; // Cường độ (0.0 - 1.0) +}; + +} +#endif // JOY_FEEDBACK_H + + diff --git a/sensor_msgs/include/sensor_msgs/JoyFeedbackArray.h b/sensor_msgs/include/sensor_msgs/JoyFeedbackArray.h new file mode 100644 index 0000000..e5d82b1 --- /dev/null +++ b/sensor_msgs/include/sensor_msgs/JoyFeedbackArray.h @@ -0,0 +1,16 @@ +#ifndef JOY_FEEDBACK_ARRAY_H +#define JOY_FEEDBACK_ARRAY_H + +#include +#include "sensor_msgs/JoyFeedback.h" + +namespace sensor_msgs +{ + +struct JoyFeedbackArray +{ + std::vector array; // Danh sách các feedback +}; + +} // namespace sensor_msgs +#endif // JOY_FEEDBACK_ARRAY_H diff --git a/sensor_msgs/include/sensor_msgs/LaserEcho.h b/sensor_msgs/include/sensor_msgs/LaserEcho.h new file mode 100644 index 0000000..1148b89 --- /dev/null +++ b/sensor_msgs/include/sensor_msgs/LaserEcho.h @@ -0,0 +1,16 @@ +#ifndef LASER_ECHO_H +#define LASER_ECHO_H + +#include +namespace sensor_msgs +{ + +struct LaserEcho +{ + // Mảng chứa nhiều giá trị đo (range hoặc intensity) + // Tất cả đều thuộc cùng một góc quét + std::vector echoes; +}; + +} +#endif // LASER_ECHO_H diff --git a/sensor_msgs/include/sensor_msgs/LaserScan.h b/sensor_msgs/include/sensor_msgs/LaserScan.h new file mode 100644 index 0000000..18bdf12 --- /dev/null +++ b/sensor_msgs/include/sensor_msgs/LaserScan.h @@ -0,0 +1,34 @@ +#ifndef LASER_SCAN_H +#define LASER_SCAN_H + +#include +#include "std_msgs/Header.h" +namespace sensor_msgs +{ + +struct LaserScan +{ + std_msgs::Header header; // Thời gian và frame của phép đo + + // Góc bắt đầu và kết thúc của tia quét [rad] + float angle_min = 0.0f; + float angle_max = 0.0f; + float angle_increment = 0.0f; // Khoảng cách góc giữa hai tia quét liên tiếp [rad] + + // Thông tin về thời gian quét + float time_increment = 0.0f; // Thời gian giữa hai phép đo liên tiếp [s] + float scan_time = 0.0f; // Thời gian hoàn tất một lần quét [s] + + // Giới hạn khoảng đo + float range_min = 0.0f; // Giá trị khoảng cách nhỏ nhất [m] + float range_max = 0.0f; // Giá trị khoảng cách lớn nhất [m] + + // Dữ liệu chính của laser + std::vector ranges; // Dữ liệu khoảng cách [m] + std::vector intensities; // Cường độ phản xạ (đơn vị phụ thuộc thiết bị) + + LaserScan() = default; +}; + +} +#endif // LASER_SCAN_H diff --git a/sensor_msgs/include/sensor_msgs/MultiEchoLaserScan.h b/sensor_msgs/include/sensor_msgs/MultiEchoLaserScan.h new file mode 100644 index 0000000..8a25151 --- /dev/null +++ b/sensor_msgs/include/sensor_msgs/MultiEchoLaserScan.h @@ -0,0 +1,32 @@ +#ifndef MULTI_ECHO_LASER_SCAN_H +#define MULTI_ECHO_LASER_SCAN_H + +#include +#include "msg/Header.h" +#include "msg/LaserEcho.h" // Định nghĩa struct LaserEcho (float32[] echoes) + +namespace sensor_msgs +{ + +struct MultiEchoLaserScan +{ + std_msgs::Header header; // Thông tin thời gian & frame của phép đo + + float angle_min = 0.0f; // Góc bắt đầu quét (radians) + float angle_max = 0.0f; // Góc kết thúc quét (radians) + float angle_increment = 0.0f; // Độ tăng góc giữa 2 tia liên tiếp (radians) + + float time_increment = 0.0f; // Thời gian giữa 2 phép đo (seconds) + float scan_time = 0.0f; // Thời gian quét toàn bộ (seconds) + + float range_min = 0.0f; // Khoảng cách đo nhỏ nhất (m) + float range_max = 0.0f; // Khoảng cách đo lớn nhất (m) + + std::vector ranges; // Dữ liệu khoảng cách (m) + std::vector intensities; // Dữ liệu cường độ (tùy chọn) + + MultiEchoLaserScan() = default; +}; + +} +#endif // MULTI_ECHO_LASER_SCAN_H diff --git a/sensor_msgs/include/sensor_msgs/PointCloud.h b/sensor_msgs/include/sensor_msgs/PointCloud.h new file mode 100644 index 0000000..541bdd9 --- /dev/null +++ b/sensor_msgs/include/sensor_msgs/PointCloud.h @@ -0,0 +1,24 @@ +#ifndef POINTCLOUD_H +#define POINTCLOUD_H + +#include +#include +#include "std_msgs/Header.h" +#include "geometry_msgs/Point32.h" +#include "sensor_msgs/ChannelFloat32.h" + +namespace sensor_msgs +{ + +struct PointCloud +{ + std_msgs::Header header; // Thông tin thời gian & frame của dữ liệu + + std::vector points; // Danh sách các điểm 3D (x, y, z) + std::vector channels; // Dữ liệu phụ đi kèm (vd: "intensity", "rgb") + + PointCloud() = default; +}; + +} +#endif // POINTCLOUD_H diff --git a/sensor_msgs/include/sensor_msgs/PointCloud2.h b/sensor_msgs/include/sensor_msgs/PointCloud2.h new file mode 100644 index 0000000..57eb83c --- /dev/null +++ b/sensor_msgs/include/sensor_msgs/PointCloud2.h @@ -0,0 +1,34 @@ +#ifndef POINTCLOUD2_H +#define POINTCLOUD2_H + +#include +#include +#include +#include "std_msgs/Header.h" +#include "sensor_msgs/PointField.h" + +namespace sensor_msgs +{ + +struct PointCloud2 +{ + std_msgs::Header header; // Thời gian và frame của dữ liệu + + uint32_t height = 1; // Số hàng (1 nếu là point cloud 1D) + uint32_t width = 0; // Số lượng điểm trên mỗi hàng (tổng điểm = height * width) + + std::vector fields; // Thông tin layout của từng trường trong dữ liệu (vd: x, y, z, intensity,...) + + bool is_bigendian = false; // true nếu dữ liệu lưu ở dạng big-endian + uint32_t point_step = 0; // Số byte cho mỗi điểm + uint32_t row_step = 0; // Số byte cho mỗi hàng + + std::vector data; // Dữ liệu nhị phân (raw bytes), kích thước = row_step * height + + bool is_dense = false; // true nếu không có điểm NaN hoặc vô hiệu + + PointCloud2() = default; +}; + +} +#endif // POINTCLOUD2_H diff --git a/sensor_msgs/include/sensor_msgs/PointField.h b/sensor_msgs/include/sensor_msgs/PointField.h new file mode 100644 index 0000000..e4de848 --- /dev/null +++ b/sensor_msgs/include/sensor_msgs/PointField.h @@ -0,0 +1,31 @@ +#ifndef POINTFIELD_H +#define POINTFIELD_H + +#include +#include + +namespace sensor_msgs +{ + +struct PointField +{ + // Các hằng số kiểu dữ liệu (theo chuẩn ROS) + static constexpr uint8_t INT8 = 1; + static constexpr uint8_t UINT8 = 2; + static constexpr uint8_t INT16 = 3; + static constexpr uint8_t UINT16 = 4; + static constexpr uint8_t INT32 = 5; + static constexpr uint8_t UINT32 = 6; + static constexpr uint8_t FLOAT32 = 7; + static constexpr uint8_t FLOAT64 = 8; + + std::string name; // Tên trường (vd: "x", "y", "z", "intensity") + uint32_t offset = 0; // Vị trí byte bắt đầu trong cấu trúc mỗi điểm + uint8_t datatype = 0; // Kiểu dữ liệu (sử dụng các hằng ở trên) + uint32_t count = 0; // Số phần tử trong trường (vd: 3 cho vector3) + + PointField() = default; +}; + +} +#endif // POINTFIELD_H diff --git a/sensor_msgs/include/sensor_msgs/Range.h b/sensor_msgs/include/sensor_msgs/Range.h new file mode 100644 index 0000000..e539556 --- /dev/null +++ b/sensor_msgs/include/sensor_msgs/Range.h @@ -0,0 +1,28 @@ +#ifndef RANGE_H +#define RANGE_H + +#include +#include "Header.h" // Header tương tự std_msgs/Header + +namespace sensor_msgs +{ + +struct Range +{ + // Các hằng số loại bức xạ (radiation type) + static constexpr uint8_t ULTRASOUND = 0; + static constexpr uint8_t INFRARED = 1; + + Header header; // Thời gian đo và frame_id + + uint8_t radiation_type = ULTRASOUND; // Loại cảm biến (âm thanh, IR, v.v.) + float field_of_view = 0.0f; // Góc mở của cảm biến [rad] + float min_range = 0.0f; // Khoảng cách nhỏ nhất [m] + float max_range = 0.0f; // Khoảng cách lớn nhất [m] + float range = 0.0f; // Khoảng cách đo được [m] + + Range() = default; +}; + +} +#endif // RANGE_H diff --git a/sensor_msgs/include/sensor_msgs/RegionOfInterest.h b/sensor_msgs/include/sensor_msgs/RegionOfInterest.h new file mode 100644 index 0000000..c4d9e6c --- /dev/null +++ b/sensor_msgs/include/sensor_msgs/RegionOfInterest.h @@ -0,0 +1,21 @@ +#ifndef REGION_OF_INTEREST_H +#define REGION_OF_INTEREST_H + +#include +namespace sensor_msgs +{ + +struct RegionOfInterest +{ + uint32_t x_offset = 0; // Pixel ngoài cùng bên trái của ROI + uint32_t y_offset = 0; // Pixel ngoài cùng bên trên của ROI + uint32_t height = 0; // Chiều cao vùng ROI + uint32_t width = 0; // Chiều rộng vùng ROI + + bool do_rectify = false; // Có cần tính toán lại ROI sau khi hiệu chỉnh ảnh không + + RegionOfInterest() = default; +}; + +} +#endif // REGION_OF_INTEREST_H diff --git a/sensor_msgs/include/sensor_msgs/RelativeHumidity.h b/sensor_msgs/include/sensor_msgs/RelativeHumidity.h new file mode 100644 index 0000000..f2e1392 --- /dev/null +++ b/sensor_msgs/include/sensor_msgs/RelativeHumidity.h @@ -0,0 +1,19 @@ +#ifndef RELATIVE_HUMIDITY_H +#define RELATIVE_HUMIDITY_H + +#include +#include "msg/Header.h" // Giả định bạn đã có struct Header tương tự ROS std_msgs/Header +namespace sensor_msgs +{ + +struct RelativeHumidity +{ + Header header; // Thời điểm đo và khung tọa độ cảm biến + double relative_humidity = 0.0; // Độ ẩm tương đối (0.0 - 1.0) + double variance = 0.0; // Phương sai, 0 nghĩa là "không biết" + + RelativeHumidity() = default; +}; + +} +#endif // RELATIVE_HUMIDITY_H diff --git a/sensor_msgs/include/sensor_msgs/Temperature.h b/sensor_msgs/include/sensor_msgs/Temperature.h new file mode 100644 index 0000000..59e4ba6 --- /dev/null +++ b/sensor_msgs/include/sensor_msgs/Temperature.h @@ -0,0 +1,19 @@ +#ifndef TEMPERATURE_H +#define TEMPERATURE_H + +#include +#include "msg/Header.h" // Định nghĩa struct Header tương tự std_msgs/Header +namespace sensor_msgs +{ + +struct Temperature +{ + Header header; // Thông tin thời gian và vị trí cảm biến + double temperature = 0.0; // Nhiệt độ đo được (°C) + double variance = 0.0; // Phương sai, 0 nghĩa là "không biết" + + Temperature() = default; +}; + +} +#endif // TEMPERATURE_H diff --git a/sensor_msgs/include/sensor_msgs/TimeReference.h b/sensor_msgs/include/sensor_msgs/TimeReference.h new file mode 100644 index 0000000..6890a73 --- /dev/null +++ b/sensor_msgs/include/sensor_msgs/TimeReference.h @@ -0,0 +1,20 @@ +#ifndef TIMEREFERENCE_H +#define TIMEREFERENCE_H + +#include +#include "msg/Header.h" // Định nghĩa struct Header tương tự std_msgs/Header +namespace sensor_msgs +{ + +struct TimeReference +{ + Header header; // stamp: thời điểm đo (theo đồng hồ hệ thống) + // frame_id: không sử dụng trong message này + double time_ref = 0.0; // Thời gian từ nguồn thời gian bên ngoài (giây) + std::string source; // Tên của nguồn thời gian (tùy chọn) + + TimeReference() = default; +}; + +} +#endif // TIMEREFERENCE_H diff --git a/sensor_msgs/include/sensor_msgs/distortion_models.h b/sensor_msgs/include/sensor_msgs/distortion_models.h new file mode 100644 index 0000000..a4c6c90 --- /dev/null +++ b/sensor_msgs/include/sensor_msgs/distortion_models.h @@ -0,0 +1,51 @@ + +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2010, Willow Garage, Inc. +* 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 the Willow Garage 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. +*********************************************************************/ + +#ifndef SENSOR_MSGS_DISTORTION_MODELS_H +#define SENSOR_MSGS_DISTORTION_MODELS_H + +#include + +namespace sensor_msgs +{ + namespace distortion_models + { + const std::string PLUMB_BOB = "plumb_bob"; + const std::string RATIONAL_POLYNOMIAL = "rational_polynomial"; + const std::string EQUIDISTANT = "equidistant"; + } +} + +#endif diff --git a/sensor_msgs/include/sensor_msgs/fill_image.h b/sensor_msgs/include/sensor_msgs/fill_image.h new file mode 100644 index 0000000..8795d2f --- /dev/null +++ b/sensor_msgs/include/sensor_msgs/fill_image.h @@ -0,0 +1,70 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2008, Willow Garage, Inc. +* 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 the Willow Garage 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. +*********************************************************************/ + +#ifndef FILLIMAGE_HH +#define FILLIMAGE_HH + +#include "sensor_msgs/Image.h" +#include "sensor_msgs/image_encodings.h" + +namespace sensor_msgs +{ + + static inline bool fillImage(Image& image, + const std::string& encoding_arg, + uint32_t rows_arg, + uint32_t cols_arg, + uint32_t step_arg, + const void* data_arg) + { + image.encoding = encoding_arg; + image.height = rows_arg; + image.width = cols_arg; + image.step = step_arg; + size_t st0 = (step_arg * rows_arg); + image.data.resize(st0); + memcpy(&image.data[0], data_arg, st0); + + image.is_bigendian = 0; + return true; + } + + static inline void clearImage(Image& image) + { + image.data.resize(0); + } +} + + +#endif diff --git a/sensor_msgs/include/sensor_msgs/image_encodings.h b/sensor_msgs/include/sensor_msgs/image_encodings.h new file mode 100644 index 0000000..e872bba --- /dev/null +++ b/sensor_msgs/include/sensor_msgs/image_encodings.h @@ -0,0 +1,233 @@ + +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2009, Willow Garage, Inc. +* 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 the Willow Garage 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. +*********************************************************************/ + +#ifndef SENSOR_MSGS_IMAGE_ENCODINGS_H +#define SENSOR_MSGS_IMAGE_ENCODINGS_H + +#include +#include +#include + +namespace sensor_msgs +{ + namespace image_encodings + { + const std::string RGB8 = "rgb8"; + const std::string RGBA8 = "rgba8"; + const std::string RGB16 = "rgb16"; + const std::string RGBA16 = "rgba16"; + const std::string BGR8 = "bgr8"; + const std::string BGRA8 = "bgra8"; + const std::string BGR16 = "bgr16"; + const std::string BGRA16 = "bgra16"; + const std::string MONO8="mono8"; + const std::string MONO16="mono16"; + + // OpenCV CvMat types + const std::string TYPE_8UC1="8UC1"; + const std::string TYPE_8UC2="8UC2"; + const std::string TYPE_8UC3="8UC3"; + const std::string TYPE_8UC4="8UC4"; + const std::string TYPE_8SC1="8SC1"; + const std::string TYPE_8SC2="8SC2"; + const std::string TYPE_8SC3="8SC3"; + const std::string TYPE_8SC4="8SC4"; + const std::string TYPE_16UC1="16UC1"; + const std::string TYPE_16UC2="16UC2"; + const std::string TYPE_16UC3="16UC3"; + const std::string TYPE_16UC4="16UC4"; + const std::string TYPE_16SC1="16SC1"; + const std::string TYPE_16SC2="16SC2"; + const std::string TYPE_16SC3="16SC3"; + const std::string TYPE_16SC4="16SC4"; + const std::string TYPE_32SC1="32SC1"; + const std::string TYPE_32SC2="32SC2"; + const std::string TYPE_32SC3="32SC3"; + const std::string TYPE_32SC4="32SC4"; + const std::string TYPE_32FC1="32FC1"; + const std::string TYPE_32FC2="32FC2"; + const std::string TYPE_32FC3="32FC3"; + const std::string TYPE_32FC4="32FC4"; + const std::string TYPE_64FC1="64FC1"; + const std::string TYPE_64FC2="64FC2"; + const std::string TYPE_64FC3="64FC3"; + const std::string TYPE_64FC4="64FC4"; + + // Bayer encodings + const std::string BAYER_RGGB8="bayer_rggb8"; + const std::string BAYER_BGGR8="bayer_bggr8"; + const std::string BAYER_GBRG8="bayer_gbrg8"; + const std::string BAYER_GRBG8="bayer_grbg8"; + const std::string BAYER_RGGB16="bayer_rggb16"; + const std::string BAYER_BGGR16="bayer_bggr16"; + const std::string BAYER_GBRG16="bayer_gbrg16"; + const std::string BAYER_GRBG16="bayer_grbg16"; + + // Miscellaneous + // This is the UYVY version of YUV422 codec http://www.fourcc.org/yuv.php#UYVY + // with an 8-bit depth + const std::string YUV422="yuv422"; + + // Prefixes for abstract image encodings + const std::string ABSTRACT_ENCODING_PREFIXES[] = { + "8UC", "8SC", "16UC", "16SC", "32SC", "32FC", "64FC"}; + + // Utility functions for inspecting an encoding string + static inline bool isColor(const std::string& encoding) + { + return encoding == RGB8 || encoding == BGR8 || + encoding == RGBA8 || encoding == BGRA8 || + encoding == RGB16 || encoding == BGR16 || + encoding == RGBA16 || encoding == BGRA16; + } + + static inline bool isMono(const std::string& encoding) + { + return encoding == MONO8 || encoding == MONO16; + } + + static inline bool isBayer(const std::string& encoding) + { + return encoding == BAYER_RGGB8 || encoding == BAYER_BGGR8 || + encoding == BAYER_GBRG8 || encoding == BAYER_GRBG8 || + encoding == BAYER_RGGB16 || encoding == BAYER_BGGR16 || + encoding == BAYER_GBRG16 || encoding == BAYER_GRBG16; + } + + static inline bool hasAlpha(const std::string& encoding) + { + return encoding == RGBA8 || encoding == BGRA8 || + encoding == RGBA16 || encoding == BGRA16; + } + + static inline int numChannels(const std::string& encoding) + { + // First do the common-case encodings + if (encoding == MONO8 || + encoding == MONO16) + return 1; + if (encoding == BGR8 || + encoding == RGB8 || + encoding == BGR16 || + encoding == RGB16) + return 3; + if (encoding == BGRA8 || + encoding == RGBA8 || + encoding == BGRA16 || + encoding == RGBA16) + return 4; + if (encoding == BAYER_RGGB8 || + encoding == BAYER_BGGR8 || + encoding == BAYER_GBRG8 || + encoding == BAYER_GRBG8 || + encoding == BAYER_RGGB16 || + encoding == BAYER_BGGR16 || + encoding == BAYER_GBRG16 || + encoding == BAYER_GRBG16) + return 1; + + // Now all the generic content encodings + // TODO: Rewrite with regex when ROS supports C++11 + for (size_t i=0; i < sizeof(ABSTRACT_ENCODING_PREFIXES) / sizeof(*ABSTRACT_ENCODING_PREFIXES); i++) + { + std::string prefix = ABSTRACT_ENCODING_PREFIXES[i]; + if (encoding.substr(0, prefix.size()) != prefix) + continue; + if (encoding.size() == prefix.size()) + return 1; // ex. 8UC -> 1 + int n_channel = atoi(encoding.substr(prefix.size(), + encoding.size() - prefix.size()).c_str()); // ex. 8UC5 -> 5 + if (n_channel != 0) + return n_channel; // valid encoding string + } + + if (encoding == YUV422) + return 2; + + throw std::runtime_error("Unknown encoding " + encoding); + return -1; + } + + static inline int bitDepth(const std::string& encoding) + { + if (encoding == MONO16) + return 16; + if (encoding == MONO8 || + encoding == BGR8 || + encoding == RGB8 || + encoding == BGRA8 || + encoding == RGBA8 || + encoding == BAYER_RGGB8 || + encoding == BAYER_BGGR8 || + encoding == BAYER_GBRG8 || + encoding == BAYER_GRBG8) + return 8; + + if (encoding == MONO16 || + encoding == BGR16 || + encoding == RGB16 || + encoding == BGRA16 || + encoding == RGBA16 || + encoding == BAYER_RGGB16 || + encoding == BAYER_BGGR16 || + encoding == BAYER_GBRG16 || + encoding == BAYER_GRBG16) + return 16; + + // Now all the generic content encodings + // TODO: Rewrite with regex when ROS supports C++11 + for (size_t i=0; i < sizeof(ABSTRACT_ENCODING_PREFIXES) / sizeof(*ABSTRACT_ENCODING_PREFIXES); i++) + { + std::string prefix = ABSTRACT_ENCODING_PREFIXES[i]; + if (encoding.substr(0, prefix.size()) != prefix) + continue; + if (encoding.size() == prefix.size()) + return atoi(prefix.c_str()); // ex. 8UC -> 8 + int n_channel = atoi(encoding.substr(prefix.size(), + encoding.size() - prefix.size()).c_str()); // ex. 8UC10 -> 10 + if (n_channel != 0) + return atoi(prefix.c_str()); // valid encoding string + } + + if (encoding == YUV422) + return 8; + + throw std::runtime_error("Unknown encoding " + encoding); + return -1; + } + } +} + +#endif diff --git a/sensor_msgs/include/sensor_msgs/impl/point_cloud2_iterator.h b/sensor_msgs/include/sensor_msgs/impl/point_cloud2_iterator.h new file mode 100644 index 0000000..8d69213 --- /dev/null +++ b/sensor_msgs/include/sensor_msgs/impl/point_cloud2_iterator.h @@ -0,0 +1,417 @@ +/* + * Software License Agreement (BSD License) + * + * Copyright (c) 2013, Open Source Robotics Foundation + * 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 Open Source Robotics Foundation 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. + */ + +#ifndef SENSOR_MSGS_IMPL_POINT_CLOUD_ITERATOR_H +#define SENSOR_MSGS_IMPL_POINT_CLOUD_ITERATOR_H + +#include +#include +#include +#include +#include + +/** + * \brief Private implementation used by PointCloud2Iterator + * \author Vincent Rabaud + */ + +namespace +{ +/** Return the size of a datatype (which is an enum of sensor_msgs::PointField::) in bytes + * @param datatype one of the enums of sensor_msgs::PointField:: + */ +inline int sizeOfPointField(int datatype) +{ + if ((datatype == sensor_msgs::PointField::INT8) || (datatype == sensor_msgs::PointField::UINT8)) + return 1; + else if ((datatype == sensor_msgs::PointField::INT16) || (datatype == sensor_msgs::PointField::UINT16)) + return 2; + else if ((datatype == sensor_msgs::PointField::INT32) || (datatype == sensor_msgs::PointField::UINT32) || + (datatype == sensor_msgs::PointField::FLOAT32)) + return 4; + else if (datatype == sensor_msgs::PointField::FLOAT64) + return 8; + else + { + std::stringstream err; + err << "PointField of type " << datatype << " does not exist"; + throw std::runtime_error(err.str()); + } + return -1; +} + +/** Private function that adds a PointField to the "fields" member of a PointCloud2 + * @param cloud_msg the PointCloud2 to add a field to + * @param name the name of the field + * @param count the number of elements in the PointField + * @param datatype the datatype of the elements + * @param offset the offset of that element + * @return the offset of the next PointField that will be added to the PointCLoud2 + */ +inline int addPointField(sensor_msgs::PointCloud2 &cloud_msg, const std::string &name, int count, int datatype, + int offset) +{ + sensor_msgs::PointField point_field; + point_field.name = name; + point_field.count = count; + point_field.datatype = datatype; + point_field.offset = offset; + cloud_msg.fields.push_back(point_field); + + // Update the offset + return offset + point_field.count * sizeOfPointField(datatype); +} +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +namespace sensor_msgs +{ + +inline PointCloud2Modifier::PointCloud2Modifier(PointCloud2& cloud_msg) : cloud_msg_(cloud_msg) +{ +} + +inline size_t PointCloud2Modifier::size() const +{ + return cloud_msg_.data.size() / cloud_msg_.point_step; +} + +inline void PointCloud2Modifier::reserve(size_t size) +{ + cloud_msg_.data.reserve(size * cloud_msg_.point_step); +} + +inline void PointCloud2Modifier::resize(size_t size) +{ + cloud_msg_.data.resize(size * cloud_msg_.point_step); + + // Update height/width + if (cloud_msg_.height == 1) { + cloud_msg_.width = size; + cloud_msg_.row_step = size * cloud_msg_.point_step; + } else + if (cloud_msg_.width == 1) + cloud_msg_.height = size; + else { + cloud_msg_.height = 1; + cloud_msg_.width = size; + cloud_msg_.row_step = size * cloud_msg_.point_step; + } +} + +inline void PointCloud2Modifier::clear() +{ + cloud_msg_.data.clear(); + + // Update height/width + if (cloud_msg_.height == 1) + cloud_msg_.row_step = cloud_msg_.width = 0; + else + if (cloud_msg_.width == 1) + cloud_msg_.height = 0; + else + cloud_msg_.row_step = cloud_msg_.width = cloud_msg_.height = 0; +} + + +/** + * @brief Function setting some fields in a PointCloud and adjusting the + * internals of the PointCloud2 + * @param n_fields the number of fields to add. The fields are given as + * triplets: name of the field as char*, number of elements in the + * field, the datatype of the elements in the field + * + * E.g, you create your PointCloud2 message with XYZ/RGB as follows: + *
+ *   setPointCloud2FieldsByString(cloud_msg, 4, "x", 1, sensor_msgs::PointField::FLOAT32,
+ *                                              "y", 1, sensor_msgs::PointField::FLOAT32,
+ *                                              "z", 1, sensor_msgs::PointField::FLOAT32,
+ *                                              "rgb", 1, sensor_msgs::PointField::FLOAT32);
+ * 
+ * WARNING: THIS DOES NOT TAKE INTO ACCOUNT ANY PADDING AS DONE UNTIL HYDRO + * For simple usual cases, the overloaded setPointCloud2FieldsByString is what you want. + */ +inline void PointCloud2Modifier::setPointCloud2Fields(int n_fields, ...) +{ + cloud_msg_.fields.clear(); + cloud_msg_.fields.reserve(n_fields); + va_list vl; + va_start(vl, n_fields); + int offset = 0; + for (int i = 0; i < n_fields; ++i) { + // Create the corresponding PointField + std::string name(va_arg(vl, char*)); + int count(va_arg(vl, int)); + int datatype(va_arg(vl, int)); + offset = addPointField(cloud_msg_, name, count, datatype, offset); + } + va_end(vl); + + // Resize the point cloud accordingly + cloud_msg_.point_step = offset; + cloud_msg_.row_step = cloud_msg_.width * cloud_msg_.point_step; + cloud_msg_.data.resize(cloud_msg_.height * cloud_msg_.row_step); +} + +/** + * @brief Function setting some fields in a PointCloud and adjusting the + * internals of the PointCloud2 + * @param n_fields the number of fields to add. The fields are given as + * strings: "xyz" (3 floats), "rgb" (3 uchar stacked in a float), + * "rgba" (4 uchar stacked in a float) + * @return void + * + * WARNING: THIS FUNCTION DOES ADD ANY NECESSARY PADDING TRANSPARENTLY + */ +inline void PointCloud2Modifier::setPointCloud2FieldsByString(int n_fields, ...) +{ + cloud_msg_.fields.clear(); + cloud_msg_.fields.reserve(n_fields); + va_list vl; + va_start(vl, n_fields); + int offset = 0; + for (int i = 0; i < n_fields; ++i) { + // Create the corresponding PointFields + std::string + field_name = std::string(va_arg(vl, char*)); + if (field_name == "xyz") { + sensor_msgs::PointField point_field; + // Do x, y and z + offset = addPointField(cloud_msg_, "x", 1, sensor_msgs::PointField::FLOAT32, offset); + offset = addPointField(cloud_msg_, "y", 1, sensor_msgs::PointField::FLOAT32, offset); + offset = addPointField(cloud_msg_, "z", 1, sensor_msgs::PointField::FLOAT32, offset); + offset += sizeOfPointField(sensor_msgs::PointField::FLOAT32); + } else + if ((field_name == "rgb") || (field_name == "rgba")) { + offset = addPointField(cloud_msg_, field_name, 1, sensor_msgs::PointField::FLOAT32, offset); + offset += 3 * sizeOfPointField(sensor_msgs::PointField::FLOAT32); + } else + throw std::runtime_error("Field " + field_name + " does not exist"); + } + va_end(vl); + + // Resize the point cloud accordingly + cloud_msg_.point_step = offset; + cloud_msg_.row_step = cloud_msg_.width * cloud_msg_.point_step; + cloud_msg_.data.resize(cloud_msg_.height * cloud_msg_.row_step); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +namespace impl +{ + +/** + */ +template class V> +PointCloud2IteratorBase::PointCloud2IteratorBase() : data_char_(0), data_(0), data_end_(0) +{ +} + +/** + * @param cloud_msg_ The PointCloud2 to iterate upon + * @param field_name The field to iterate upon + */ +template class V> +PointCloud2IteratorBase::PointCloud2IteratorBase(C &cloud_msg, const std::string &field_name) +{ + int offset = set_field(cloud_msg, field_name); + + data_char_ = cloud_msg.data.data() + offset; + data_ = reinterpret_cast(data_char_); + data_end_ = reinterpret_cast(data_char_ + cloud_msg.data.size()); +} + +/** Assignment operator + * @param iter the iterator to copy data from + * @return a reference to *this + */ +template class V> +V& PointCloud2IteratorBase::operator =(const V &iter) +{ + if (this != &iter) + { + point_step_ = iter.point_step_; + data_char_ = iter.data_char_; + data_ = iter.data_; + data_end_ = iter.data_end_; + is_bigendian_ = iter.is_bigendian_; + } + + return *this; +} + +/** Access the i th element starting at the current pointer (useful when a field has several elements of the same + * type) + * @param i + * @return a reference to the i^th value from the current position + */ +template class V> +TT& PointCloud2IteratorBase::operator [](size_t i) const +{ + return *(data_ + i); +} + +/** Dereference the iterator. Equivalent to accessing it through [0] + * @return the value to which the iterator is pointing + */ +template class V> +TT& PointCloud2IteratorBase::operator *() const +{ + return *data_; +} + +/** Increase the iterator to the next element + * @return a reference to the updated iterator + */ +template class V> +V& PointCloud2IteratorBase::operator ++() +{ + data_char_ += point_step_; + data_ = reinterpret_cast(data_char_); + return *static_cast*>(this); +} + +/** Basic pointer addition + * @param i the amount to increase the iterator by + * @return an iterator with an increased position + */ +template class V> +V PointCloud2IteratorBase::operator +(int i) +{ + V res = *static_cast*>(this); + + res.data_char_ += i*point_step_; + res.data_ = reinterpret_cast(res.data_char_); + + return res; +} + +/** Increase the iterator by a certain amount + * @return a reference to the updated iterator + */ +template class V> +V& PointCloud2IteratorBase::operator +=(int i) +{ + data_char_ += i*point_step_; + data_ = reinterpret_cast(data_char_); + return *static_cast*>(this); +} + +/** Compare to another iterator + * @return whether the current iterator points to a different address than the other one + */ +template class V> +bool PointCloud2IteratorBase::operator !=(const V& iter) const +{ + return iter.data_ != data_; +} + +/** Return the end iterator + * @return the end iterator (useful when performing normal iterator processing with ++) + */ +template class V> +V PointCloud2IteratorBase::end() const +{ + V res = *static_cast*>(this); + res.data_ = data_end_; + return res; +} + +/** Common code to set the field of the PointCloud2 + * @param cloud_msg the PointCloud2 to modify + * @param field_name the name of the field to iterate upon + * @return the offset at which the field is found + */ +template class V> +int PointCloud2IteratorBase::set_field(const sensor_msgs::PointCloud2 &cloud_msg, const std::string &field_name) +{ + is_bigendian_ = cloud_msg.is_bigendian; + point_step_ = cloud_msg.point_step; + // make sure the channel is valid + std::vector::const_iterator field_iter = cloud_msg.fields.begin(), field_end = + cloud_msg.fields.end(); + while ((field_iter != field_end) && (field_iter->name != field_name)) + ++field_iter; + + if (field_iter == field_end) { + // Handle the special case of r,g,b,a (we assume they are understood as the channels of an rgb or rgba field) + if ((field_name == "r") || (field_name == "g") || (field_name == "b") || (field_name == "a")) + { + // Check that rgb or rgba is present + field_iter = cloud_msg.fields.begin(); + while ((field_iter != field_end) && (field_iter->name != "rgb") && (field_iter->name != "rgba")) + ++field_iter; + if (field_iter == field_end) + throw std::runtime_error("Field " + field_name + " does not exist"); + if (field_name == "r") + { + if (is_bigendian_) + return field_iter->offset + 1; + else + return field_iter->offset + 2; + } + if (field_name == "g") + { + if (is_bigendian_) + return field_iter->offset + 2; + else + return field_iter->offset + 1; + } + if (field_name == "b") + { + if (is_bigendian_) + return field_iter->offset + 3; + else + return field_iter->offset + 0; + } + if (field_name == "a") + { + if (is_bigendian_) + return field_iter->offset + 0; + else + return field_iter->offset + 3; + } + } else + throw std::runtime_error("Field " + field_name + " does not exist"); + } + + return field_iter->offset; +} + +} +} + +#endif// SENSOR_MSGS_IMPL_POINT_CLOUD_ITERATOR_H diff --git a/sensor_msgs/include/sensor_msgs/point_cloud2_iterator.h b/sensor_msgs/include/sensor_msgs/point_cloud2_iterator.h new file mode 100644 index 0000000..5b9c7a1 --- /dev/null +++ b/sensor_msgs/include/sensor_msgs/point_cloud2_iterator.h @@ -0,0 +1,302 @@ +/* + * Software License Agreement (BSD License) + * + * Copyright (c) 2013, Open Source Robotics Foundation + * 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 Open Source Robotics Foundation 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. + */ + +#ifndef SENSOR_MSGS_POINT_CLOUD2_ITERATOR_H +#define SENSOR_MSGS_POINT_CLOUD2_ITERATOR_H + +#include +#include +#include +#include + +/** + * \brief Tools for manipulating sensor_msgs + * + * This file provides two sets of utilities to modify and parse PointCloud2 + * The first set allows you to conveniently set the fields by hand: + *
+ *   #include 
+ *   // Create a PointCloud2
+ *   sensor_msgs::PointCloud2 cloud_msg;
+ *   // Fill some internals of the PoinCloud2 like the header/width/height ...
+ *   cloud_msgs.height = 1;  cloud_msgs.width = 4;
+ *   // Set the point fields to xyzrgb and resize the vector with the following command
+ *   // 4 is for the number of added fields. Each come in triplet: the name of the PointField,
+ *   // the number of occurrences of the type in the PointField, the type of the PointField
+ *   sensor_msgs::PointCloud2Modifier modifier(cloud_msg);
+ *   modifier.setPointCloud2Fields(4, "x", 1, sensor_msgs::PointField::FLOAT32,
+ *                                            "y", 1, sensor_msgs::PointField::FLOAT32,
+ *                                            "z", 1, sensor_msgs::PointField::FLOAT32,
+ *                                            "rgb", 1, sensor_msgs::PointField::FLOAT32);
+ *   // For convenience and the xyz, rgb, rgba fields, you can also use the following overloaded function.
+ *   // You have to be aware that the following function does add extra padding for backward compatibility though
+ *   // so it is definitely the solution of choice for PointXYZ and PointXYZRGB
+ *   // 2 is for the number of fields to add
+ *   modifier.setPointCloud2FieldsByString(2, "xyz", "rgb");
+ *   // You can then reserve / resize as usual
+ *   modifier.resize(100);
+ * 
+ * + * The second set allow you to traverse your PointCloud using an iterator: + *
+ *   // Define some raw data we'll put in the PointCloud2
+ *   float point_data[] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0};
+ *   uint8_t color_data[] = {40, 80, 120, 160, 200, 240, 20, 40, 60, 80, 100, 120};
+ *   // Define the iterators. When doing so, you define the Field you would like to iterate upon and
+ *   // the type of you would like returned: it is not necessary the type of the PointField as sometimes
+ *   // you pack data in another type (e.g. 3 uchar + 1 uchar for RGB are packed in a float)
+ *   sensor_msgs::PointCloud2Iterator iter_x(cloud_msg, "x");
+ *   sensor_msgs::PointCloud2Iterator iter_y(cloud_msg, "y");
+ *   sensor_msgs::PointCloud2Iterator iter_z(cloud_msg, "z");
+ *   // Even though the r,g,b,a fields do not exist (it's usually rgb, rgba), you can create iterators for
+ *   // those: they will handle data packing for you (in little endian RGB is packed as *,R,G,B in a float
+ *   // and RGBA as A,R,G,B)
+ *   sensor_msgs::PointCloud2Iterator iter_r(cloud_msg, "r");
+ *   sensor_msgs::PointCloud2Iterator iter_g(cloud_msg, "g");
+ *   sensor_msgs::PointCloud2Iterator iter_b(cloud_msg, "b");
+ *   // Fill the PointCloud2
+ *   for(size_t i=0; i
+ */
+
+namespace sensor_msgs
+{
+/**
+ * @brief Enables modifying a sensor_msgs::PointCloud2 like a container
+ */
+class PointCloud2Modifier
+{
+public:
+  /**
+   * @brief Default constructor
+   * @param cloud_msg The sensor_msgs::PointCloud2 to modify
+   */
+  PointCloud2Modifier(PointCloud2& cloud_msg);
+
+  /**
+   * @return the number of T's in the original sensor_msgs::PointCloud2
+   */
+  size_t size() const;
+
+  /**
+   * @param size The number of T's to reserve in the original sensor_msgs::PointCloud2 for
+   */
+  void reserve(size_t size);
+
+  /**
+   * @param size The number of T's to change the size of the original sensor_msgs::PointCloud2 by
+   */
+  void resize(size_t size);
+
+  /**
+   * @brief remove all T's from the original sensor_msgs::PointCloud2
+   */
+  void clear();
+
+  /**
+   * @brief Function setting some fields in a PointCloud and adjusting the
+   *        internals of the PointCloud2
+   * @param n_fields the number of fields to add. The fields are given as
+   *        triplets: name of the field as char*, number of elements in the
+   *        field, the datatype of the elements in the field
+   *
+   * E.g, you create your PointCloud2 message with XYZ/RGB as follows:
+   * 
+   *   setPointCloud2Fields(cloud_msg, 4, "x", 1, sensor_msgs::PointField::FLOAT32,
+   *                                              "y", 1, sensor_msgs::PointField::FLOAT32,
+   *                                              "z", 1, sensor_msgs::PointField::FLOAT32,
+   *                                              "rgb", 1, sensor_msgs::PointField::FLOAT32);
+   * 
+ * WARNING: THIS DOES NOT TAKE INTO ACCOUNT ANY PADDING AS DONE UNTIL HYDRO + * For simple usual cases, the overloaded setPointCloud2FieldsByString is what you want. + */ + void setPointCloud2Fields(int n_fields, ...); + + /** + * @brief Function setting some fields in a PointCloud and adjusting the + * internals of the PointCloud2 + * @param n_fields the number of fields to add. The fields are given as + * strings: "xyz" (3 floats), "rgb" (3 uchar stacked in a float), + * "rgba" (4 uchar stacked in a float) + * @return void + * + * WARNING: THIS FUNCTION DOES ADD ANY NECESSARY PADDING TRANSPARENTLY + */ + void setPointCloud2FieldsByString(int n_fields, ...); +protected: + /** A reference to the original sensor_msgs::PointCloud2 that we read */ + PointCloud2& cloud_msg_; +}; + +namespace impl +{ +/** Private base class for PointCloud2Iterator and PointCloud2ConstIterator + * T is the type of the value on which the child class will be templated + * TT is the type of the value to be retrieved (same as T except for constness) + * U is the type of the raw data in PointCloud2 (only uchar and const uchar are supported) + * C is the type of the pointcloud to intialize from (const or not) + * V is the derived class (yop, curiously recurring template pattern) + */ +template class V> +class PointCloud2IteratorBase +{ +public: + /** + */ + PointCloud2IteratorBase(); + + /** + * @param cloud_msg The PointCloud2 to iterate upon + * @param field_name The field to iterate upon + */ + PointCloud2IteratorBase(C &cloud_msg, const std::string &field_name); + + /** Assignment operator + * @param iter the iterator to copy data from + * @return a reference to *this + */ + V& operator =(const V& iter); + + /** Access the i th element starting at the current pointer (useful when a field has several elements of the same + * type) + * @param i + * @return a reference to the i^th value from the current position + */ + TT& operator [](size_t i) const; + + /** Dereference the iterator. Equivalent to accessing it through [0] + * @return the value to which the iterator is pointing + */ + TT& operator *() const; + + /** Increase the iterator to the next element + * @return a reference to the updated iterator + */ + V& operator ++(); + + /** Basic pointer addition + * @param i the amount to increase the iterator by + * @return an iterator with an increased position + */ + V operator +(int i); + + /** Increase the iterator by a certain amount + * @return a reference to the updated iterator + */ + V& operator +=(int i); + + /** Compare to another iterator + * @return whether the current iterator points to a different address than the other one + */ + bool operator !=(const V& iter) const; + + /** Return the end iterator + * @return the end iterator (useful when performing normal iterator processing with ++) + */ + V end() const; + +private: + /** Common code to set the field of the PointCloud2 + * @param cloud_msg the PointCloud2 to modify + * @param field_name the name of the field to iterate upon + * @return the offset at which the field is found + */ + int set_field(const sensor_msgs::PointCloud2 &cloud_msg, const std::string &field_name); + + /** The "point_step" of the original cloud */ + int point_step_; + /** The raw data in uchar* where the iterator is */ + U* data_char_; + /** The cast data where the iterator is */ + TT* data_; + /** The end() pointer of the iterator */ + TT* data_end_; + /** Whether the fields are stored as bigendian */ + bool is_bigendian_; +}; +} + +/** + * \brief Class that can iterate over a PointCloud2 + * + * T type of the element being iterated upon + * E.g, you create your PointClou2 message as follows: + *
+ *   setPointCloud2FieldsByString(cloud_msg, 2, "xyz", "rgb");
+ * 
+ * + * For iterating over XYZ, you do : + *
+ *   sensor_msgs::PointCloud2Iterator iter_x(cloud_msg, "x");
+ * 
+ * and then access X through iter_x[0] or *iter_x + * You could create an iterator for Y and Z too but as they are consecutive, + * you can just use iter_x[1] and iter_x[2] + * + * For iterating over RGB, you do: + *
+ * sensor_msgs::PointCloud2Iterator iter_rgb(cloud_msg, "rgb");
+ * 
+ * and then access R,G,B through iter_rgb[0], iter_rgb[1], iter_rgb[2] + */ +template +class PointCloud2Iterator : public impl::PointCloud2IteratorBase +{ +public: + PointCloud2Iterator(sensor_msgs::PointCloud2 &cloud_msg, const std::string &field_name) : + impl::PointCloud2IteratorBase::PointCloud2IteratorBase(cloud_msg, field_name) {} +}; + +/** + * \brief Same as a PointCloud2Iterator but for const data + */ +template +class PointCloud2ConstIterator : public impl::PointCloud2IteratorBase +{ +public: + PointCloud2ConstIterator(const sensor_msgs::PointCloud2 &cloud_msg, const std::string &field_name) : + impl::PointCloud2IteratorBase::PointCloud2IteratorBase(cloud_msg, field_name) {} +}; +} + +#include + +#endif// SENSOR_MSGS_POINT_CLOUD2_ITERATOR_H diff --git a/sensor_msgs/include/sensor_msgs/point_cloud_conversion.h b/sensor_msgs/include/sensor_msgs/point_cloud_conversion.h new file mode 100644 index 0000000..439145d --- /dev/null +++ b/sensor_msgs/include/sensor_msgs/point_cloud_conversion.h @@ -0,0 +1,169 @@ +/* + * Software License Agreement (BSD License) + * + * Copyright (c) 2010, Willow Garage, Inc. + * 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 Willow Garage, Inc. 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. + * + * $Id$ + * + */ + +#ifndef SENSOR_MSGS_POINT_CLOUD_CONVERSION_H +#define SENSOR_MSGS_POINT_CLOUD_CONVERSION_H + +#include +#include +#include + +/** + * \brief Convert between the old (sensor_msgs::PointCloud) and the new (sensor_msgs::PointCloud2) format. + * \author Radu Bogdan Rusu + */ +namespace sensor_msgs +{ + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /** \brief Get the index of a specified field (i.e., dimension/channel) + * \param points the the point cloud message + * \param field_name the string defining the field name + */ +static inline int getPointCloud2FieldIndex (const sensor_msgs::PointCloud2 &cloud, const std::string &field_name) +{ + // Get the index we need + for (size_t d = 0; d < cloud.fields.size (); ++d) + if (cloud.fields[d].name == field_name) + return (d); + return (-1); +} + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /** \brief Convert a sensor_msgs::PointCloud message to a sensor_msgs::PointCloud2 message. + * \param input the message in the sensor_msgs::PointCloud format + * \param output the resultant message in the sensor_msgs::PointCloud2 format + */ +static inline bool convertPointCloudToPointCloud2 (const sensor_msgs::PointCloud &input, sensor_msgs::PointCloud2 &output) +{ + output.header = input.header; + output.width = input.points.size (); + output.height = 1; + output.fields.resize (3 + input.channels.size ()); + // Convert x/y/z to fields + output.fields[0].name = "x"; output.fields[1].name = "y"; output.fields[2].name = "z"; + int offset = 0; + // All offsets are *4, as all field data types are float32 + for (size_t d = 0; d < output.fields.size (); ++d, offset += 4) + { + output.fields[d].offset = offset; + output.fields[d].datatype = sensor_msgs::PointField::FLOAT32; + output.fields[d].count = 1; + } + output.point_step = offset; + output.row_step = output.point_step * output.width; + // Convert the remaining of the channels to fields + for (size_t d = 0; d < input.channels.size (); ++d) + output.fields[3 + d].name = input.channels[d].name; + output.data.resize (input.points.size () * output.point_step); + output.is_bigendian = false; // @todo ? + output.is_dense = false; + + // Copy the data points + for (size_t cp = 0; cp < input.points.size (); ++cp) + { + memcpy (&output.data[cp * output.point_step + output.fields[0].offset], &input.points[cp].x, sizeof (float)); + memcpy (&output.data[cp * output.point_step + output.fields[1].offset], &input.points[cp].y, sizeof (float)); + memcpy (&output.data[cp * output.point_step + output.fields[2].offset], &input.points[cp].z, sizeof (float)); + for (size_t d = 0; d < input.channels.size (); ++d) + { + if (input.channels[d].values.size() == input.points.size()) + { + memcpy (&output.data[cp * output.point_step + output.fields[3 + d].offset], &input.channels[d].values[cp], sizeof (float)); + } + } + } + return (true); +} + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /** \brief Convert a sensor_msgs::PointCloud2 message to a sensor_msgs::PointCloud message. + * \param input the message in the sensor_msgs::PointCloud2 format + * \param output the resultant message in the sensor_msgs::PointCloud format + */ +static inline bool convertPointCloud2ToPointCloud (const sensor_msgs::PointCloud2 &input, sensor_msgs::PointCloud &output) +{ + + output.header = input.header; + output.points.resize (input.width * input.height); + output.channels.resize (input.fields.size () - 3); + // Get the x/y/z field offsets + int x_idx = getPointCloud2FieldIndex (input, "x"); + int y_idx = getPointCloud2FieldIndex (input, "y"); + int z_idx = getPointCloud2FieldIndex (input, "z"); + if (x_idx == -1 || y_idx == -1 || z_idx == -1) + { + std::cerr << "x/y/z coordinates not found! Cannot convert to sensor_msgs::PointCloud!" << std::endl; + return (false); + } + int x_offset = input.fields[x_idx].offset; + int y_offset = input.fields[y_idx].offset; + int z_offset = input.fields[z_idx].offset; + uint8_t x_datatype = input.fields[x_idx].datatype; + uint8_t y_datatype = input.fields[y_idx].datatype; + uint8_t z_datatype = input.fields[z_idx].datatype; + + // Convert the fields to channels + int cur_c = 0; + for (size_t d = 0; d < input.fields.size (); ++d) + { + if ((int)input.fields[d].offset == x_offset || (int)input.fields[d].offset == y_offset || (int)input.fields[d].offset == z_offset) + continue; + output.channels[cur_c].name = input.fields[d].name; + output.channels[cur_c].values.resize (output.points.size ()); + cur_c++; + } + + // Copy the data points + for (size_t cp = 0; cp < output.points.size (); ++cp) + { + // Copy x/y/z + output.points[cp].x = sensor_msgs::readPointCloud2BufferValue(&input.data[cp * input.point_step + x_offset], x_datatype); + output.points[cp].y = sensor_msgs::readPointCloud2BufferValue(&input.data[cp * input.point_step + y_offset], y_datatype); + output.points[cp].z = sensor_msgs::readPointCloud2BufferValue(&input.data[cp * input.point_step + z_offset], z_datatype); + // Copy the rest of the data + int cur_c = 0; + for (size_t d = 0; d < input.fields.size (); ++d) + { + if ((int)input.fields[d].offset == x_offset || (int)input.fields[d].offset == y_offset || (int)input.fields[d].offset == z_offset) + continue; + output.channels[cur_c++].values[cp] = sensor_msgs::readPointCloud2BufferValue(&input.data[cp * input.point_step + input.fields[d].offset], input.fields[d].datatype); + } + } + return (true); +} +} +#endif// SENSOR_MSGS_POINT_CLOUD_CONVERSION_H diff --git a/sensor_msgs/include/sensor_msgs/point_field_conversion.h b/sensor_msgs/include/sensor_msgs/point_field_conversion.h new file mode 100644 index 0000000..0fe59e1 --- /dev/null +++ b/sensor_msgs/include/sensor_msgs/point_field_conversion.h @@ -0,0 +1,180 @@ +/* + * Software License Agreement (BSD License) + * + * Robot Operating System code by the University of Osnabrück + * Copyright (c) 2015, University of Osnabrück + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above + * copyright notice, this list of conditions and the following + * disclaimer. + * + * 2. 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. + * + * 3. Neither the name of the copyright holder 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 HOLDER 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. + * + * + * + * point_field_conversion.h + * + * Created on: 16.07.2015 + * Authors: Sebastian Pütz + */ + +#ifndef SENSOR_MSGS_POINT_FIELD_CONVERSION_H +#define SENSOR_MSGS_POINT_FIELD_CONVERSION_H + +/** + * \brief This file provides a type to enum mapping for the different + * PointField types and methods to read and write in + * a PointCloud2 buffer for the different PointField types. + * \author Sebastian Pütz + */ +namespace sensor_msgs{ + /*! + * \Enum to type mapping. + */ + template struct pointFieldTypeAsType {}; + template<> struct pointFieldTypeAsType { typedef int8_t type; }; + template<> struct pointFieldTypeAsType { typedef uint8_t type; }; + template<> struct pointFieldTypeAsType { typedef int16_t type; }; + template<> struct pointFieldTypeAsType { typedef uint16_t type; }; + template<> struct pointFieldTypeAsType { typedef int32_t type; }; + template<> struct pointFieldTypeAsType { typedef uint32_t type; }; + template<> struct pointFieldTypeAsType { typedef float type; }; + template<> struct pointFieldTypeAsType { typedef double type; }; + + /*! + * \Type to enum mapping. + */ + template struct typeAsPointFieldType {}; + template<> struct typeAsPointFieldType { static const uint8_t value = sensor_msgs::PointField::INT8; }; + template<> struct typeAsPointFieldType { static const uint8_t value = sensor_msgs::PointField::UINT8; }; + template<> struct typeAsPointFieldType { static const uint8_t value = sensor_msgs::PointField::INT16; }; + template<> struct typeAsPointFieldType { static const uint8_t value = sensor_msgs::PointField::UINT16; }; + template<> struct typeAsPointFieldType { static const uint8_t value = sensor_msgs::PointField::INT32; }; + template<> struct typeAsPointFieldType { static const uint8_t value = sensor_msgs::PointField::UINT32; }; + template<> struct typeAsPointFieldType { static const uint8_t value = sensor_msgs::PointField::FLOAT32; }; + template<> struct typeAsPointFieldType { static const uint8_t value = sensor_msgs::PointField::FLOAT64; }; + + /*! + * \Converts a value at the given pointer position, interpreted as the datatype + * specified by the given template argument point_field_type, to the given + * template type T and returns it. + * \param data_ptr pointer into the point cloud 2 buffer + * \tparam point_field_type sensor_msgs::PointField datatype value + * \tparam T return type + */ + template + inline T readPointCloud2BufferValue(const unsigned char* data_ptr){ + typedef typename pointFieldTypeAsType::type type; + return static_cast(*(reinterpret_cast(data_ptr))); + } + + /*! + * \Converts a value at the given pointer position interpreted as the datatype + * specified by the given datatype parameter to the given template type and returns it. + * \param data_ptr pointer into the point cloud 2 buffer + * \param datatype sensor_msgs::PointField datatype value + * \tparam T return type + */ + template + inline T readPointCloud2BufferValue(const unsigned char* data_ptr, const unsigned char datatype){ + switch(datatype){ + case sensor_msgs::PointField::INT8: + return readPointCloud2BufferValue(data_ptr); + case sensor_msgs::PointField::UINT8: + return readPointCloud2BufferValue(data_ptr); + case sensor_msgs::PointField::INT16: + return readPointCloud2BufferValue(data_ptr); + case sensor_msgs::PointField::UINT16: + return readPointCloud2BufferValue(data_ptr); + case sensor_msgs::PointField::INT32: + return readPointCloud2BufferValue(data_ptr); + case sensor_msgs::PointField::UINT32: + return readPointCloud2BufferValue(data_ptr); + case sensor_msgs::PointField::FLOAT32: + return readPointCloud2BufferValue(data_ptr); + case sensor_msgs::PointField::FLOAT64: + return readPointCloud2BufferValue(data_ptr); + } + // This should never be reached, but return statement added to avoid compiler warning. (#84) + return T(); + } + + /*! + * \Inserts a given value at the given point position interpreted as the datatype + * specified by the template argument point_field_type. + * \param data_ptr pointer into the point cloud 2 buffer + * \param value the value to insert + * \tparam point_field_type sensor_msgs::PointField datatype value + * \tparam T type of the value to insert + */ + template + inline void writePointCloud2BufferValue(unsigned char* data_ptr, T value){ + typedef typename pointFieldTypeAsType::type type; + *(reinterpret_cast(data_ptr)) = static_cast(value); + } + + /*! + * \Inserts a given value at the given point position interpreted as the datatype + * specified by the given datatype parameter. + * \param data_ptr pointer into the point cloud 2 buffer + * \param datatype sensor_msgs::PointField datatype value + * \param value the value to insert + * \tparam T type of the value to insert + */ + template + inline void writePointCloud2BufferValue(unsigned char* data_ptr, const unsigned char datatype, T value){ + switch(datatype){ + case sensor_msgs::PointField::INT8: + writePointCloud2BufferValue(data_ptr, value); + break; + case sensor_msgs::PointField::UINT8: + writePointCloud2BufferValue(data_ptr, value); + break; + case sensor_msgs::PointField::INT16: + writePointCloud2BufferValue(data_ptr, value); + break; + case sensor_msgs::PointField::UINT16: + writePointCloud2BufferValue(data_ptr, value); + break; + case sensor_msgs::PointField::INT32: + writePointCloud2BufferValue(data_ptr, value); + break; + case sensor_msgs::PointField::UINT32: + writePointCloud2BufferValue(data_ptr, value); + break; + case sensor_msgs::PointField::FLOAT32: + writePointCloud2BufferValue(data_ptr, value); + break; + case sensor_msgs::PointField::FLOAT64: + writePointCloud2BufferValue(data_ptr, value); + break; + } + } +} + +#endif /* point_field_conversion.h */ diff --git a/sensor_msgs/test/CMakeCache.txt b/sensor_msgs/test/CMakeCache.txt new file mode 100644 index 0000000..69637f2 --- /dev/null +++ b/sensor_msgs/test/CMakeCache.txt @@ -0,0 +1,372 @@ +# This is the CMakeCache file. +# For build in directory: /home/duongtd/robotics_core/common_msgs/sensor_msgs/test +# It was generated by CMake: /usr/bin/cmake +# You can edit this file to change values found and used by cmake. +# If you do not want to change any of the values, simply exit the editor. +# If you do want to change a value, simply edit, save, and exit the editor. +# The syntax for the file is as follows: +# KEY:TYPE=VALUE +# KEY is the name of a variable in the cache. +# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!. +# VALUE is the current value for the KEY. + +######################## +# EXTERNAL cache entries +######################## + +//Path to a program. +CMAKE_ADDR2LINE:FILEPATH=/usr/bin/addr2line + +//Path to a program. +CMAKE_AR:FILEPATH=/usr/bin/ar + +//Choose the type of build, options are: None Debug Release RelWithDebInfo +// MinSizeRel ... +CMAKE_BUILD_TYPE:STRING= + +//Enable/Disable color output during build. +CMAKE_COLOR_MAKEFILE:BOOL=ON + +//CXX compiler +CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/c++ + +//A wrapper around 'ar' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_CXX_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar-9 + +//A wrapper around 'ranlib' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_CXX_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib-9 + +//Flags used by the CXX compiler during all build types. +CMAKE_CXX_FLAGS:STRING= + +//Flags used by the CXX compiler during DEBUG builds. +CMAKE_CXX_FLAGS_DEBUG:STRING=-g + +//Flags used by the CXX compiler during MINSIZEREL builds. +CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the CXX compiler during RELEASE builds. +CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG + +//Flags used by the CXX compiler during RELWITHDEBINFO builds. +CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//C compiler +CMAKE_C_COMPILER:FILEPATH=/usr/bin/cc + +//A wrapper around 'ar' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_C_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar-9 + +//A wrapper around 'ranlib' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_C_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib-9 + +//Flags used by the C compiler during all build types. +CMAKE_C_FLAGS:STRING= + +//Flags used by the C compiler during DEBUG builds. +CMAKE_C_FLAGS_DEBUG:STRING=-g + +//Flags used by the C compiler during MINSIZEREL builds. +CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the C compiler during RELEASE builds. +CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUG + +//Flags used by the C compiler during RELWITHDEBINFO builds. +CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//Path to a program. +CMAKE_DLLTOOL:FILEPATH=CMAKE_DLLTOOL-NOTFOUND + +//Flags used by the linker during all build types. +CMAKE_EXE_LINKER_FLAGS:STRING= + +//Flags used by the linker during DEBUG builds. +CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during MINSIZEREL builds. +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during RELEASE builds. +CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during RELWITHDEBINFO builds. +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Enable/Disable output of compile commands during generation. +CMAKE_EXPORT_COMPILE_COMMANDS:BOOL=OFF + +//Install path prefix, prepended onto install directories. +CMAKE_INSTALL_PREFIX:PATH=/usr/local + +//Path to a program. +CMAKE_LINKER:FILEPATH=/usr/bin/ld + +//Path to a program. +CMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/make + +//Flags used by the linker during the creation of modules during +// all build types. +CMAKE_MODULE_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of modules during +// DEBUG builds. +CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of modules during +// MINSIZEREL builds. +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of modules during +// RELEASE builds. +CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of modules during +// RELWITHDEBINFO builds. +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_NM:FILEPATH=/usr/bin/nm + +//Path to a program. +CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy + +//Path to a program. +CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump + +//Value Computed by CMake +CMAKE_PROJECT_DESCRIPTION:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_HOMEPAGE_URL:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_NAME:STATIC=sensor_msgs + +//Path to a program. +CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib + +//Path to a program. +CMAKE_READELF:FILEPATH=/usr/bin/readelf + +//Flags used by the linker during the creation of shared libraries +// during all build types. +CMAKE_SHARED_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of shared libraries +// during DEBUG builds. +CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of shared libraries +// during MINSIZEREL builds. +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of shared libraries +// during RELEASE builds. +CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of shared libraries +// during RELWITHDEBINFO builds. +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//If set, runtime paths are not added when installing shared libraries, +// but are added when building. +CMAKE_SKIP_INSTALL_RPATH:BOOL=NO + +//If set, runtime paths are not added when using shared libraries. +CMAKE_SKIP_RPATH:BOOL=NO + +//Flags used by the linker during the creation of static libraries +// during all build types. +CMAKE_STATIC_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of static libraries +// during DEBUG builds. +CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of static libraries +// during MINSIZEREL builds. +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of static libraries +// during RELEASE builds. +CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of static libraries +// during RELWITHDEBINFO builds. +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_STRIP:FILEPATH=/usr/bin/strip + +//If this value is on, makefiles will be generated without the +// .SILENT directive, and all commands will be echoed to the console +// during the make. This is useful for debugging only. With Visual +// Studio IDE projects all commands are done without /nologo. +CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE + +//Value Computed by CMake +sensor_msgs_BINARY_DIR:STATIC=/home/duongtd/robotics_core/common_msgs/sensor_msgs/test + +//Value Computed by CMake +sensor_msgs_SOURCE_DIR:STATIC=/home/duongtd/robotics_core/common_msgs/sensor_msgs + +//Value Computed by CMake +std_msgs_BINARY_DIR:STATIC=/home/duongtd/robotics_core/common_msgs/sensor_msgs/test/std_msgs_build + +//Value Computed by CMake +std_msgs_SOURCE_DIR:STATIC=/home/duongtd/robotics_core/common_msgs/std_msgs + + +######################## +# INTERNAL cache entries +######################## + +//ADVANCED property for variable: CMAKE_ADDR2LINE +CMAKE_ADDR2LINE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_AR +CMAKE_AR-ADVANCED:INTERNAL=1 +//This is the directory where this CMakeCache.txt was created +CMAKE_CACHEFILE_DIR:INTERNAL=/home/duongtd/robotics_core/common_msgs/sensor_msgs/test +//Major version of cmake used to create the current loaded cache +CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3 +//Minor version of cmake used to create the current loaded cache +CMAKE_CACHE_MINOR_VERSION:INTERNAL=16 +//Patch version of cmake used to create the current loaded cache +CMAKE_CACHE_PATCH_VERSION:INTERNAL=3 +//ADVANCED property for variable: CMAKE_COLOR_MAKEFILE +CMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL=1 +//Path to CMake executable. +CMAKE_COMMAND:INTERNAL=/usr/bin/cmake +//Path to cpack program executable. +CMAKE_CPACK_COMMAND:INTERNAL=/usr/bin/cpack +//Path to ctest program executable. +CMAKE_CTEST_COMMAND:INTERNAL=/usr/bin/ctest +//ADVANCED property for variable: CMAKE_CXX_COMPILER +CMAKE_CXX_COMPILER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_COMPILER_AR +CMAKE_CXX_COMPILER_AR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_COMPILER_RANLIB +CMAKE_CXX_COMPILER_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS +CMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_DEBUG +CMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_MINSIZEREL +CMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELEASE +CMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO +CMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_COMPILER +CMAKE_C_COMPILER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_COMPILER_AR +CMAKE_C_COMPILER_AR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_COMPILER_RANLIB +CMAKE_C_COMPILER_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS +CMAKE_C_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_DEBUG +CMAKE_C_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_MINSIZEREL +CMAKE_C_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_RELEASE +CMAKE_C_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_RELWITHDEBINFO +CMAKE_C_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_DLLTOOL +CMAKE_DLLTOOL-ADVANCED:INTERNAL=1 +//Executable file format +CMAKE_EXECUTABLE_FORMAT:INTERNAL=ELF +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS +CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG +CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE +CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS +CMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1 +//Name of external makefile project generator. +CMAKE_EXTRA_GENERATOR:INTERNAL= +//Name of generator. +CMAKE_GENERATOR:INTERNAL=Unix Makefiles +//Generator instance identifier. +CMAKE_GENERATOR_INSTANCE:INTERNAL= +//Name of generator platform. +CMAKE_GENERATOR_PLATFORM:INTERNAL= +//Name of generator toolset. +CMAKE_GENERATOR_TOOLSET:INTERNAL= +//Source directory with the top level CMakeLists.txt file for this +// project +CMAKE_HOME_DIRECTORY:INTERNAL=/home/duongtd/robotics_core/common_msgs/sensor_msgs +//Install .so files without execute permission. +CMAKE_INSTALL_SO_NO_EXE:INTERNAL=1 +//ADVANCED property for variable: CMAKE_LINKER +CMAKE_LINKER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MAKE_PROGRAM +CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS +CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG +CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE +CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_NM +CMAKE_NM-ADVANCED:INTERNAL=1 +//number of local generators +CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=2 +//ADVANCED property for variable: CMAKE_OBJCOPY +CMAKE_OBJCOPY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_OBJDUMP +CMAKE_OBJDUMP-ADVANCED:INTERNAL=1 +//Platform information initialized +CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_RANLIB +CMAKE_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_READELF +CMAKE_READELF-ADVANCED:INTERNAL=1 +//Path to CMake installation. +CMAKE_ROOT:INTERNAL=/usr/share/cmake-3.16 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS +CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG +CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE +CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH +CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_RPATH +CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS +CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG +CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE +CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STRIP +CMAKE_STRIP-ADVANCED:INTERNAL=1 +//uname command +CMAKE_UNAME:INTERNAL=/usr/bin/uname +//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE +CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1 + diff --git a/sensor_msgs/test/CMakeFiles/3.16.3/CMakeCCompiler.cmake b/sensor_msgs/test/CMakeFiles/3.16.3/CMakeCCompiler.cmake new file mode 100644 index 0000000..c5ece7b --- /dev/null +++ b/sensor_msgs/test/CMakeFiles/3.16.3/CMakeCCompiler.cmake @@ -0,0 +1,76 @@ +set(CMAKE_C_COMPILER "/usr/bin/cc") +set(CMAKE_C_COMPILER_ARG1 "") +set(CMAKE_C_COMPILER_ID "GNU") +set(CMAKE_C_COMPILER_VERSION "9.4.0") +set(CMAKE_C_COMPILER_VERSION_INTERNAL "") +set(CMAKE_C_COMPILER_WRAPPER "") +set(CMAKE_C_STANDARD_COMPUTED_DEFAULT "11") +set(CMAKE_C_COMPILE_FEATURES "c_std_90;c_function_prototypes;c_std_99;c_restrict;c_variadic_macros;c_std_11;c_static_assert") +set(CMAKE_C90_COMPILE_FEATURES "c_std_90;c_function_prototypes") +set(CMAKE_C99_COMPILE_FEATURES "c_std_99;c_restrict;c_variadic_macros") +set(CMAKE_C11_COMPILE_FEATURES "c_std_11;c_static_assert") + +set(CMAKE_C_PLATFORM_ID "Linux") +set(CMAKE_C_SIMULATE_ID "") +set(CMAKE_C_COMPILER_FRONTEND_VARIANT "") +set(CMAKE_C_SIMULATE_VERSION "") + + + +set(CMAKE_AR "/usr/bin/ar") +set(CMAKE_C_COMPILER_AR "/usr/bin/gcc-ar-9") +set(CMAKE_RANLIB "/usr/bin/ranlib") +set(CMAKE_C_COMPILER_RANLIB "/usr/bin/gcc-ranlib-9") +set(CMAKE_LINKER "/usr/bin/ld") +set(CMAKE_MT "") +set(CMAKE_COMPILER_IS_GNUCC 1) +set(CMAKE_C_COMPILER_LOADED 1) +set(CMAKE_C_COMPILER_WORKS TRUE) +set(CMAKE_C_ABI_COMPILED TRUE) +set(CMAKE_COMPILER_IS_MINGW ) +set(CMAKE_COMPILER_IS_CYGWIN ) +if(CMAKE_COMPILER_IS_CYGWIN) + set(CYGWIN 1) + set(UNIX 1) +endif() + +set(CMAKE_C_COMPILER_ENV_VAR "CC") + +if(CMAKE_COMPILER_IS_MINGW) + set(MINGW 1) +endif() +set(CMAKE_C_COMPILER_ID_RUN 1) +set(CMAKE_C_SOURCE_FILE_EXTENSIONS c;m) +set(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC) +set(CMAKE_C_LINKER_PREFERENCE 10) + +# Save compiler ABI information. +set(CMAKE_C_SIZEOF_DATA_PTR "8") +set(CMAKE_C_COMPILER_ABI "ELF") +set(CMAKE_C_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") + +if(CMAKE_C_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_C_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_C_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}") +endif() + +if(CMAKE_C_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") +endif() + +set(CMAKE_C_CL_SHOWINCLUDES_PREFIX "") +if(CMAKE_C_CL_SHOWINCLUDES_PREFIX) + set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_C_CL_SHOWINCLUDES_PREFIX}") +endif() + + + + + +set(CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/9/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include") +set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "gcc;gcc_s;c;gcc;gcc_s") +set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/9;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib") +set(CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/sensor_msgs/test/CMakeFiles/3.16.3/CMakeCXXCompiler.cmake b/sensor_msgs/test/CMakeFiles/3.16.3/CMakeCXXCompiler.cmake new file mode 100644 index 0000000..278ef39 --- /dev/null +++ b/sensor_msgs/test/CMakeFiles/3.16.3/CMakeCXXCompiler.cmake @@ -0,0 +1,88 @@ +set(CMAKE_CXX_COMPILER "/usr/bin/c++") +set(CMAKE_CXX_COMPILER_ARG1 "") +set(CMAKE_CXX_COMPILER_ID "GNU") +set(CMAKE_CXX_COMPILER_VERSION "9.4.0") +set(CMAKE_CXX_COMPILER_VERSION_INTERNAL "") +set(CMAKE_CXX_COMPILER_WRAPPER "") +set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "14") +set(CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17;cxx_std_20") +set(CMAKE_CXX98_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters") +set(CMAKE_CXX11_COMPILE_FEATURES "cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates") +set(CMAKE_CXX14_COMPILE_FEATURES "cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates") +set(CMAKE_CXX17_COMPILE_FEATURES "cxx_std_17") +set(CMAKE_CXX20_COMPILE_FEATURES "cxx_std_20") + +set(CMAKE_CXX_PLATFORM_ID "Linux") +set(CMAKE_CXX_SIMULATE_ID "") +set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "") +set(CMAKE_CXX_SIMULATE_VERSION "") + + + +set(CMAKE_AR "/usr/bin/ar") +set(CMAKE_CXX_COMPILER_AR "/usr/bin/gcc-ar-9") +set(CMAKE_RANLIB "/usr/bin/ranlib") +set(CMAKE_CXX_COMPILER_RANLIB "/usr/bin/gcc-ranlib-9") +set(CMAKE_LINKER "/usr/bin/ld") +set(CMAKE_MT "") +set(CMAKE_COMPILER_IS_GNUCXX 1) +set(CMAKE_CXX_COMPILER_LOADED 1) +set(CMAKE_CXX_COMPILER_WORKS TRUE) +set(CMAKE_CXX_ABI_COMPILED TRUE) +set(CMAKE_COMPILER_IS_MINGW ) +set(CMAKE_COMPILER_IS_CYGWIN ) +if(CMAKE_COMPILER_IS_CYGWIN) + set(CYGWIN 1) + set(UNIX 1) +endif() + +set(CMAKE_CXX_COMPILER_ENV_VAR "CXX") + +if(CMAKE_COMPILER_IS_MINGW) + set(MINGW 1) +endif() +set(CMAKE_CXX_COMPILER_ID_RUN 1) +set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;m;mm;CPP) +set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC) + +foreach (lang C OBJC OBJCXX) + if (CMAKE_${lang}_COMPILER_ID_RUN) + foreach(extension IN LISTS CMAKE_${lang}_SOURCE_FILE_EXTENSIONS) + list(REMOVE_ITEM CMAKE_CXX_SOURCE_FILE_EXTENSIONS ${extension}) + endforeach() + endif() +endforeach() + +set(CMAKE_CXX_LINKER_PREFERENCE 30) +set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1) + +# Save compiler ABI information. +set(CMAKE_CXX_SIZEOF_DATA_PTR "8") +set(CMAKE_CXX_COMPILER_ABI "ELF") +set(CMAKE_CXX_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") + +if(CMAKE_CXX_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_CXX_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}") +endif() + +if(CMAKE_CXX_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") +endif() + +set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "") +if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX) + set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}") +endif() + + + + + +set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "/usr/include/c++/9;/usr/include/x86_64-linux-gnu/c++/9;/usr/include/c++/9/backward;/usr/lib/gcc/x86_64-linux-gnu/9/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include") +set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "stdc++;m;gcc_s;gcc;c;gcc_s;gcc") +set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/9;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib") +set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/sensor_msgs/test/CMakeFiles/3.16.3/CMakeDetermineCompilerABI_C.bin b/sensor_msgs/test/CMakeFiles/3.16.3/CMakeDetermineCompilerABI_C.bin new file mode 100755 index 0000000000000000000000000000000000000000..b7a0b099a8541ad05f2c95de959aebbb88a8d67c GIT binary patch literal 16552 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 YyNq+WEQ{06YWl~+N@A@`!Ic#M1cl@}X8-^I literal 0 HcmV?d00001 diff --git a/sensor_msgs/test/CMakeFiles/3.16.3/CMakeDetermineCompilerABI_CXX.bin b/sensor_msgs/test/CMakeFiles/3.16.3/CMakeDetermineCompilerABI_CXX.bin new file mode 100755 index 0000000000000000000000000000000000000000..a9f2f4fcd2212c7a691a5f97281887e6d1b41c2a GIT binary patch literal 16560 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 hhyRyw+g>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_C) +# define COMPILER_ID "SunPro" +# if __SUNPRO_C >= 0x5100 + /* __SUNPRO_C = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# endif + +#elif defined(__HP_cc) +# define COMPILER_ID "HP" + /* __HP_cc = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100) + +#elif defined(__DECC) +# define COMPILER_ID "Compaq" + /* __DECC_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECC_VER % 10000) + +#elif defined(__IBMC__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__ibmxl__) && defined(__clang__) +# define COMPILER_ID "XLClang" +# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) +# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) +# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) + + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800 +# define COMPILER_ID "XL" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version) +# define COMPILER_ID "Fujitsu" + +#elif defined(__ghs__) +# define COMPILER_ID "GHS" +/* __GHS_VERSION_NUMBER = VVVVRP */ +# ifdef __GHS_VERSION_NUMBER +# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) +# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) +# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) +# endif + +#elif defined(__TINYC__) +# define COMPILER_ID "TinyCC" + +#elif defined(__BCC__) +# define COMPILER_ID "Bruce" + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__ARMCC_VERSION) && !defined(__clang__) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) +# define COMPILER_ID "ARMClang" + # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION % 10000) +# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__GNUC__) +# define COMPILER_ID "GNU" +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__) +# define COMPILER_ID "ADSP" +#if defined(__VISUALDSPVERSION__) + /* __VISUALDSPVERSION__ = 0xVVRRPP00 */ +# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24) +# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" +# if defined(__VER__) && defined(__ICCARM__) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) +# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) +# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__)) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) +# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) +# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# endif + +#elif defined(__SDCC_VERSION_MAJOR) || defined(SDCC) +# define COMPILER_ID "SDCC" +# if defined(__SDCC_VERSION_MAJOR) +# define COMPILER_VERSION_MAJOR DEC(__SDCC_VERSION_MAJOR) +# define COMPILER_VERSION_MINOR DEC(__SDCC_VERSION_MINOR) +# define COMPILER_VERSION_PATCH DEC(__SDCC_VERSION_PATCH) +# else + /* SDCC = VRP */ +# define COMPILER_VERSION_MAJOR DEC(SDCC/100) +# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10) +# define COMPILER_VERSION_PATCH DEC(SDCC % 10) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXE) || defined(__CRAYXC) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# else /* unknown platform */ +# define PLATFORM_ID +# endif + +#elif defined(__INTEGRITY) +# if defined(INT_178B) +# define PLATFORM_ID "Integrity178" + +# else /* regular Integrity */ +# define PLATFORM_ID "Integrity" +# endif + +#else /* unknown platform */ +# define PLATFORM_ID + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM64) +# define ARCHITECTURE_ID "ARM64" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# if defined(__ICCARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__ICCRX__) +# define ARCHITECTURE_ID "RX" + +# elif defined(__ICCRH850__) +# define ARCHITECTURE_ID "RH850" + +# elif defined(__ICCRL78__) +# define ARCHITECTURE_ID "RL78" + +# elif defined(__ICCRISCV__) +# define ARCHITECTURE_ID "RISCV" + +# elif defined(__ICCAVR__) +# define ARCHITECTURE_ID "AVR" + +# elif defined(__ICC430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__ICCV850__) +# define ARCHITECTURE_ID "V850" + +# elif defined(__ICC8051__) +# define ARCHITECTURE_ID "8051" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__ghs__) +# if defined(__PPC64__) +# define ARCHITECTURE_ID "PPC64" + +# elif defined(__ppc__) +# define ARCHITECTURE_ID "PPC" + +# elif defined(__ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__x86_64__) +# define ARCHITECTURE_ID "x64" + +# elif defined(__i386__) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif +#else +# define ARCHITECTURE_ID +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number components. */ +#ifdef COMPILER_VERSION_MAJOR +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the internal version number. */ +#ifdef COMPILER_VERSION_INTERNAL +char const info_version_internal[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', + 'i','n','t','e','r','n','a','l','[', + COMPILER_VERSION_INTERNAL,']','\0'}; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + + +#if !defined(__STDC__) +# if (defined(_MSC_VER) && !defined(__clang__)) \ + || (defined(__ibmxl__) || defined(__IBMC__)) +# define C_DIALECT "90" +# else +# define C_DIALECT +# endif +#elif __STDC_VERSION__ >= 201000L +# define C_DIALECT "11" +#elif __STDC_VERSION__ >= 199901L +# define C_DIALECT "99" +#else +# define C_DIALECT "90" +#endif +const char* info_language_dialect_default = + "INFO" ":" "dialect_default[" C_DIALECT "]"; + +/*--------------------------------------------------------------------------*/ + +#ifdef ID_VOID_MAIN +void main() {} +#else +# if defined(__CLASSIC_C__) +int main(argc, argv) int argc; char *argv[]; +# else +int main(int argc, char* argv[]) +# endif +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; + require += info_arch[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef COMPILER_VERSION_INTERNAL + require += info_version_internal[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXE) || defined(__CRAYXC) + require += info_cray[argc]; +#endif + require += info_language_dialect_default[argc]; + (void)argv; + return require; +} +#endif diff --git a/sensor_msgs/test/CMakeFiles/3.16.3/CompilerIdC/a.out b/sensor_msgs/test/CMakeFiles/3.16.3/CompilerIdC/a.out new file mode 100755 index 0000000000000000000000000000000000000000..b5c91a373fc518990e2aec59df62ee3a3ddb612a GIT binary patch literal 16712 zcmeHOeQX>@6`%9jiPI)$Cv}LMwDpn?$)WY-Y!c(7HNCTa&K|OpHnC}t>n>~G**>@r zbGJwBij+Xo!VwGsB2oT8ii!jX!XM?2ejovkLJO?`H3Eg8f=GcDgF@<-2Dy;tcyH#t z^X~dwB+4HM?MSz8=J!7L&FtRJ?##!deZ5sapWxyb?-kez*DEAUjM_a^0TLD+VhtQ` z7B`6%(5{x4;)fLht|}L*oV1p3KTy!ESR#tyFrh- zmL%Sqa5o{P%rC01oB}dwK?nuR3QprqVs%5I9y`_C;FrN*!Nyiu$`oJ-@ zci*4@GqZ?M8f9NJP#gI#?vB2&W!v2^9*Cd%;uyqyi0l>5h_~4OYn4tZP@HYQhLc5kED`TFGRLR+gC3v}Hwevu5+ zh83T2Zr8hTO;d7>E<8uL=E6Tkc(V)t65$u_6tdu0!1Lj9(T4LmBX7=z^Vmdu-iGrv zhWLUFm-kBqz2arS%Yc^wF9Ti%ybO35@G|g!lYzh0-SQ9p=%rfyc+IbO2%$eTYgLt= z*N^_F_N+X|(ym7Veyz0aYe4Fn1j<9}`?A#|WV`jRvEsS=^y2UJqko*gYoKqY<~%%_ z>N9H$NjlGfrPBHwsJwncpXq!GD*8;#caiK~u-1d?eOL$At4bH^nvS63vqV9@DCKv3 z63O;!dU0MqbNNpF%z|I{J)@tyW;K9;ZDgRfbaAY%3F2aXjQ2=q6xgD0>!5zLvkI$v z@g-}ue!O!9H0HLKN~O6t9G!cp+V3q9=@a(3m1PJy^3M#$Jajx zGxg)qOZp?a@A&H)6xL&!M^QpVjs`dT`QIJGjIB>rq&lIzkS8m z`ihr(ihqif8h)oAJ?qnV|F-ZK?Ej(R$i0!_$bAvx?ATbauIU(_uk3Fe8R%DzoAOAJ zZ13P@z{`M_0WSky2D}V-8SpaTWx&gTmjN#W|Dzf3IleY74KlW`cmJNzYmBgqeM;wPnCk%@~Wnp`_usqR!mQ=hTE>+;v94Tb1 zg0?#d6Z@9df^4-u*cJ+gb_UzFEBxOF5J?OZ>s44D0PrrCa`TBIq zZ-5sfc0|?vaJ7dj;(Rw+)WPepTD)3XL{ts$YgHm3CSCc2^%fF8<-*@dINv9g6(QaO z6&SVUc+ek~UikUoZ4lr0BnSswoR5C_zRUPDRD5D-J|6+RQvA!E*SDpeb>f#8u&Y$E z^OTgiVM(0N0q(=QsjI(!LGpaRXBRKa%F^-khP1P^e;;FyP5+INs3Lr(*(hw;`CX3L6>lYE%Q?G9o;LH6rO zp8xNj1|03UucLEhXFK_o?<&C-uHae=`D}LCc^z>$U$-6TT%m!UyKDq}vm1nVJK&g~ zu%?)8B-1VN4MGbmfa4dVIV*1!U?tM1Slk|BSZQMvH;Ck6b4WaEjHj|AX3B_L*<9W* z3sVB$T&EINA|C7rwYOFl!mTMu!_4K(X(N%ba?@fgXQmTIypT>$gNm(XfTZOR?d~@} zoapYR7v!-xgl8DN2O|AZBf780fL$t1owzW1KCmy+AM18<CYsTFK}P@9+h!7R(=u6Qao~q% z7tC=;xbvMqh{N_DP9yFMs<_$5xxL7FQqn$slu)tYHwGbs`RTM}jsUfCicWAXnSpIb zlOmYOT8ZFzrVyOWWhWCkYuW~l6q2wpEEy*#(iLm5%yA*bC(QhW2*#%~;6hO=r#Kvk z6r+X#yj&t>qJjv@lm#bKmcT=BJPQ>oF$G5)q9B=-JsC_)(4d@%gFd&Ez8alMgX>`2 zOeaSn92^Ki=mZgjPD#UPr_1hb6PyRYtpRTXvhZ^qQ=SJ9Tgq}B=@$6mGcxP*^B+?U zc=l4hFA&%c)UJPso(Gw3wJSrN@5cAVx$y8%OqHg_r0RKBY>vQ}(zhTP$@!J&^ zcl;(`IJaSap8qgCfl5&D95K(V&-0cfV0g-`&(E<;dHw_Dy(m(Ja+7&A0&f1UD$XX-v&R9hwp!@0OQ#0`rpJq1}Ob5>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_CC) +# define COMPILER_ID "SunPro" +# if __SUNPRO_CC >= 0x5100 + /* __SUNPRO_CC = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# endif + +#elif defined(__HP_aCC) +# define COMPILER_ID "HP" + /* __HP_aCC = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100) + +#elif defined(__DECCXX) +# define COMPILER_ID "Compaq" + /* __DECCXX_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000) + +#elif defined(__IBMCPP__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__ibmxl__) && defined(__clang__) +# define COMPILER_ID "XLClang" +# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) +# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) +# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) + + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800 +# define COMPILER_ID "XL" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version) +# define COMPILER_ID "Fujitsu" + +#elif defined(__ghs__) +# define COMPILER_ID "GHS" +/* __GHS_VERSION_NUMBER = VVVVRP */ +# ifdef __GHS_VERSION_NUMBER +# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) +# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) +# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) +# endif + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__ARMCC_VERSION) && !defined(__clang__) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) +# define COMPILER_ID "ARMClang" + # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION % 10000) +# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__GNUC__) || defined(__GNUG__) +# define COMPILER_ID "GNU" +# if defined(__GNUC__) +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# else +# define COMPILER_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__) +# define COMPILER_ID "ADSP" +#if defined(__VISUALDSPVERSION__) + /* __VISUALDSPVERSION__ = 0xVVRRPP00 */ +# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24) +# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" +# if defined(__VER__) && defined(__ICCARM__) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) +# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) +# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__)) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) +# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) +# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXE) || defined(__CRAYXC) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# else /* unknown platform */ +# define PLATFORM_ID +# endif + +#elif defined(__INTEGRITY) +# if defined(INT_178B) +# define PLATFORM_ID "Integrity178" + +# else /* regular Integrity */ +# define PLATFORM_ID "Integrity" +# endif + +#else /* unknown platform */ +# define PLATFORM_ID + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM64) +# define ARCHITECTURE_ID "ARM64" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# if defined(__ICCARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__ICCRX__) +# define ARCHITECTURE_ID "RX" + +# elif defined(__ICCRH850__) +# define ARCHITECTURE_ID "RH850" + +# elif defined(__ICCRL78__) +# define ARCHITECTURE_ID "RL78" + +# elif defined(__ICCRISCV__) +# define ARCHITECTURE_ID "RISCV" + +# elif defined(__ICCAVR__) +# define ARCHITECTURE_ID "AVR" + +# elif defined(__ICC430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__ICCV850__) +# define ARCHITECTURE_ID "V850" + +# elif defined(__ICC8051__) +# define ARCHITECTURE_ID "8051" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__ghs__) +# if defined(__PPC64__) +# define ARCHITECTURE_ID "PPC64" + +# elif defined(__ppc__) +# define ARCHITECTURE_ID "PPC" + +# elif defined(__ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__x86_64__) +# define ARCHITECTURE_ID "x64" + +# elif defined(__i386__) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif +#else +# define ARCHITECTURE_ID +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number components. */ +#ifdef COMPILER_VERSION_MAJOR +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the internal version number. */ +#ifdef COMPILER_VERSION_INTERNAL +char const info_version_internal[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', + 'i','n','t','e','r','n','a','l','[', + COMPILER_VERSION_INTERNAL,']','\0'}; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + + +#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && _MSVC_LANG < 201403L +# if defined(__INTEL_CXX11_MODE__) +# if defined(__cpp_aggregate_nsdmi) +# define CXX_STD 201402L +# else +# define CXX_STD 201103L +# endif +# else +# define CXX_STD 199711L +# endif +#elif defined(_MSC_VER) && defined(_MSVC_LANG) +# define CXX_STD _MSVC_LANG +#else +# define CXX_STD __cplusplus +#endif + +const char* info_language_dialect_default = "INFO" ":" "dialect_default[" +#if CXX_STD > 201703L + "20" +#elif CXX_STD >= 201703L + "17" +#elif CXX_STD >= 201402L + "14" +#elif CXX_STD >= 201103L + "11" +#else + "98" +#endif +"]"; + +/*--------------------------------------------------------------------------*/ + +int main(int argc, char* argv[]) +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef COMPILER_VERSION_INTERNAL + require += info_version_internal[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXE) || defined(__CRAYXC) + require += info_cray[argc]; +#endif + require += info_language_dialect_default[argc]; + (void)argv; + return require; +} diff --git a/sensor_msgs/test/CMakeFiles/3.16.3/CompilerIdCXX/a.out b/sensor_msgs/test/CMakeFiles/3.16.3/CompilerIdCXX/a.out new file mode 100755 index 0000000000000000000000000000000000000000..2881803fe1c1315653cec8eead6766e2c9b69693 GIT binary patch literal 16720 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 e4*oGfdcfhF>oukL>{;1 search starts here: + /usr/lib/gcc/x86_64-linux-gnu/9/include + /usr/local/include + /usr/include/x86_64-linux-gnu + /usr/include +End of search list. +GNU C17 (Ubuntu 9.4.0-1ubuntu1~20.04.2) version 9.4.0 (x86_64-linux-gnu) + compiled by GNU C version 9.4.0, GMP version 6.2.0, MPFR version 4.0.2, MPC version 1.1.0, isl version isl-0.22.1-GMP + +GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 +Compiler executable checksum: 01da938ff5dc2163489aa33cb3b747a7 +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_2948f.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' + as -v --64 -o CMakeFiles/cmTC_2948f.dir/CMakeCCompilerABI.c.o /tmp/ccknjpVA.s +GNU assembler version 2.34 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.34 +COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/ +LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/ +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_2948f.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' +Linking C executable cmTC_2948f +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_2948f.dir/link.txt --verbose=1 +/usr/bin/cc -v CMakeFiles/cmTC_2948f.dir/CMakeCCompilerABI.c.o -o cmTC_2948f +Using built-in specs. +COLLECT_GCC=/usr/bin/cc +COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper +OFFLOAD_TARGET_NAMES=nvptx-none:hsa +OFFLOAD_TARGET_DEFAULT=1 +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.4.0-1ubuntu1~20.04.2' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-9QDOt0/gcc-9-9.4.0/debian/tmp-nvptx/usr,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu +Thread model: posix +gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2) +COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/ +LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/ +COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_2948f' '-mtune=generic' '-march=x86-64' + /usr/lib/gcc/x86_64-linux-gnu/9/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/9/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper -plugin-opt=-fresolution=/tmp/ccfspTO5.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_2948f /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/9 -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/9/../../.. CMakeFiles/cmTC_2948f.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/9/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crtn.o +COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_2948f' '-mtune=generic' '-march=x86-64' +make[1]: Leaving directory '/home/duongtd/robotics_core/common_msgs/sensor_msgs/test/CMakeFiles/CMakeTmp' + + + +Parsed C implicit include dir info from above output: rv=done + found start of include info + found start of implicit include info + add: [/usr/lib/gcc/x86_64-linux-gnu/9/include] + add: [/usr/local/include] + add: [/usr/include/x86_64-linux-gnu] + add: [/usr/include] + end of search list found + collapse include dir [/usr/lib/gcc/x86_64-linux-gnu/9/include] ==> [/usr/lib/gcc/x86_64-linux-gnu/9/include] + collapse include dir [/usr/local/include] ==> [/usr/local/include] + collapse include dir [/usr/include/x86_64-linux-gnu] ==> [/usr/include/x86_64-linux-gnu] + collapse include dir [/usr/include] ==> [/usr/include] + implicit include dirs: [/usr/lib/gcc/x86_64-linux-gnu/9/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include] + + +Parsed C implicit link information from above output: + link line regex: [^( *|.*[/\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\]+-)?ld|collect2)[^/\]*( |$)] + ignore line: [Change Dir: /home/duongtd/robotics_core/common_msgs/sensor_msgs/test/CMakeFiles/CMakeTmp] + ignore line: [] + ignore line: [Run Build Command(s):/usr/bin/make cmTC_2948f/fast && /usr/bin/make -f CMakeFiles/cmTC_2948f.dir/build.make CMakeFiles/cmTC_2948f.dir/build] + ignore line: [make[1]: Entering directory '/home/duongtd/robotics_core/common_msgs/sensor_msgs/test/CMakeFiles/CMakeTmp'] + ignore line: [Building C object CMakeFiles/cmTC_2948f.dir/CMakeCCompilerABI.c.o] + ignore line: [/usr/bin/cc -v -o CMakeFiles/cmTC_2948f.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake-3.16/Modules/CMakeCCompilerABI.c] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/cc] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:hsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.4.0-1ubuntu1~20.04.2' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-9QDOt0/gcc-9-9.4.0/debian/tmp-nvptx/usr hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu] + ignore line: [Thread model: posix] + ignore line: [gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2) ] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_2948f.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64'] + ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/9/cc1 -quiet -v -imultiarch x86_64-linux-gnu /usr/share/cmake-3.16/Modules/CMakeCCompilerABI.c -quiet -dumpbase CMakeCCompilerABI.c -mtune=generic -march=x86-64 -auxbase-strip CMakeFiles/cmTC_2948f.dir/CMakeCCompilerABI.c.o -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccknjpVA.s] + ignore line: [GNU C17 (Ubuntu 9.4.0-1ubuntu1~20.04.2) version 9.4.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 9.4.0 GMP version 6.2.0 MPFR version 4.0.2 MPC version 1.1.0 isl version isl-0.22.1-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/include-fixed"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/../../../../x86_64-linux-gnu/include"] + ignore line: [#include "..." search starts here:] + ignore line: [#include <...> search starts here:] + ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/9/include] + ignore line: [ /usr/local/include] + ignore line: [ /usr/include/x86_64-linux-gnu] + ignore line: [ /usr/include] + ignore line: [End of search list.] + ignore line: [GNU C17 (Ubuntu 9.4.0-1ubuntu1~20.04.2) version 9.4.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 9.4.0 GMP version 6.2.0 MPFR version 4.0.2 MPC version 1.1.0 isl version isl-0.22.1-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [Compiler executable checksum: 01da938ff5dc2163489aa33cb3b747a7] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_2948f.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64'] + ignore line: [ as -v --64 -o CMakeFiles/cmTC_2948f.dir/CMakeCCompilerABI.c.o /tmp/ccknjpVA.s] + ignore line: [GNU assembler version 2.34 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.34] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_2948f.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64'] + ignore line: [Linking C executable cmTC_2948f] + ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_2948f.dir/link.txt --verbose=1] + ignore line: [/usr/bin/cc -v CMakeFiles/cmTC_2948f.dir/CMakeCCompilerABI.c.o -o cmTC_2948f ] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/cc] + ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:hsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.4.0-1ubuntu1~20.04.2' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-9QDOt0/gcc-9-9.4.0/debian/tmp-nvptx/usr hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu] + ignore line: [Thread model: posix] + ignore line: [gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2) ] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_2948f' '-mtune=generic' '-march=x86-64'] + link line: [ /usr/lib/gcc/x86_64-linux-gnu/9/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/9/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper -plugin-opt=-fresolution=/tmp/ccfspTO5.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_2948f /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/9 -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/9/../../.. CMakeFiles/cmTC_2948f.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/9/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crtn.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/9/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/ccfspTO5.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [--build-id] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [--as-needed] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-pie] ==> ignore + arg [-znow] ==> ignore + arg [-zrelro] ==> ignore + arg [-o] ==> ignore + arg [cmTC_2948f] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o] ==> ignore + arg [-L/usr/lib/gcc/x86_64-linux-gnu/9] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib] + arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu] + arg [-L/lib/../lib] ==> dir [/lib/../lib] + arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu] + arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/9/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../..] + arg [CMakeFiles/cmTC_2948f.dir/CMakeCCompilerABI.c.o] ==> ignore + arg [-lgcc] ==> lib [gcc] + arg [--push-state] ==> ignore + arg [--as-needed] ==> ignore + arg [-lgcc_s] ==> lib [gcc_s] + arg [--pop-state] ==> ignore + arg [-lc] ==> lib [c] + arg [-lgcc] ==> lib [gcc] + arg [--push-state] ==> ignore + arg [--as-needed] ==> ignore + arg [-lgcc_s] ==> lib [gcc_s] + arg [--pop-state] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/crtendS.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crtn.o] ==> ignore + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9] ==> [/usr/lib/gcc/x86_64-linux-gnu/9] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib] ==> [/usr/lib] + collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu] + collapse library dir [/lib/../lib] ==> [/lib] + collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/../lib] ==> [/usr/lib] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../..] ==> [/usr/lib] + implicit libs: [gcc;gcc_s;c;gcc;gcc_s] + implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/9;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib] + implicit fwks: [] + + +Determining if the CXX compiler works passed with the following output: +Change Dir: /home/duongtd/robotics_core/common_msgs/sensor_msgs/test/CMakeFiles/CMakeTmp + +Run Build Command(s):/usr/bin/make cmTC_7b06d/fast && /usr/bin/make -f CMakeFiles/cmTC_7b06d.dir/build.make CMakeFiles/cmTC_7b06d.dir/build +make[1]: Entering directory '/home/duongtd/robotics_core/common_msgs/sensor_msgs/test/CMakeFiles/CMakeTmp' +Building CXX object CMakeFiles/cmTC_7b06d.dir/testCXXCompiler.cxx.o +/usr/bin/c++ -o CMakeFiles/cmTC_7b06d.dir/testCXXCompiler.cxx.o -c /home/duongtd/robotics_core/common_msgs/sensor_msgs/test/CMakeFiles/CMakeTmp/testCXXCompiler.cxx +Linking CXX executable cmTC_7b06d +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_7b06d.dir/link.txt --verbose=1 +/usr/bin/c++ CMakeFiles/cmTC_7b06d.dir/testCXXCompiler.cxx.o -o cmTC_7b06d +make[1]: Leaving directory '/home/duongtd/robotics_core/common_msgs/sensor_msgs/test/CMakeFiles/CMakeTmp' + + + +Detecting CXX compiler ABI info compiled with the following output: +Change Dir: /home/duongtd/robotics_core/common_msgs/sensor_msgs/test/CMakeFiles/CMakeTmp + +Run Build Command(s):/usr/bin/make cmTC_479df/fast && /usr/bin/make -f CMakeFiles/cmTC_479df.dir/build.make CMakeFiles/cmTC_479df.dir/build +make[1]: Entering directory '/home/duongtd/robotics_core/common_msgs/sensor_msgs/test/CMakeFiles/CMakeTmp' +Building CXX object CMakeFiles/cmTC_479df.dir/CMakeCXXCompilerABI.cpp.o +/usr/bin/c++ -v -o CMakeFiles/cmTC_479df.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake-3.16/Modules/CMakeCXXCompilerABI.cpp +Using built-in specs. +COLLECT_GCC=/usr/bin/c++ +OFFLOAD_TARGET_NAMES=nvptx-none:hsa +OFFLOAD_TARGET_DEFAULT=1 +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.4.0-1ubuntu1~20.04.2' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-9QDOt0/gcc-9-9.4.0/debian/tmp-nvptx/usr,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu +Thread model: posix +gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2) +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_479df.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' + /usr/lib/gcc/x86_64-linux-gnu/9/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE /usr/share/cmake-3.16/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpbase CMakeCXXCompilerABI.cpp -mtune=generic -march=x86-64 -auxbase-strip CMakeFiles/cmTC_479df.dir/CMakeCXXCompilerABI.cpp.o -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccqwJhLz.s +GNU C++14 (Ubuntu 9.4.0-1ubuntu1~20.04.2) version 9.4.0 (x86_64-linux-gnu) + compiled by GNU C version 9.4.0, GMP version 6.2.0, MPFR version 4.0.2, MPC version 1.1.0, isl version isl-0.22.1-GMP + +GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 +ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/9" +ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" +ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/include-fixed" +ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/../../../../x86_64-linux-gnu/include" +#include "..." search starts here: +#include <...> search starts here: + /usr/include/c++/9 + /usr/include/x86_64-linux-gnu/c++/9 + /usr/include/c++/9/backward + /usr/lib/gcc/x86_64-linux-gnu/9/include + /usr/local/include + /usr/include/x86_64-linux-gnu + /usr/include +End of search list. +GNU C++14 (Ubuntu 9.4.0-1ubuntu1~20.04.2) version 9.4.0 (x86_64-linux-gnu) + compiled by GNU C version 9.4.0, GMP version 6.2.0, MPFR version 4.0.2, MPC version 1.1.0, isl version isl-0.22.1-GMP + +GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 +Compiler executable checksum: 3d1eba838554fa2348dba760e4770469 +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_479df.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' + as -v --64 -o CMakeFiles/cmTC_479df.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccqwJhLz.s +GNU assembler version 2.34 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.34 +COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/ +LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/ +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_479df.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' +Linking CXX executable cmTC_479df +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_479df.dir/link.txt --verbose=1 +/usr/bin/c++ -v CMakeFiles/cmTC_479df.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_479df +Using built-in specs. +COLLECT_GCC=/usr/bin/c++ +COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper +OFFLOAD_TARGET_NAMES=nvptx-none:hsa +OFFLOAD_TARGET_DEFAULT=1 +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.4.0-1ubuntu1~20.04.2' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-9QDOt0/gcc-9-9.4.0/debian/tmp-nvptx/usr,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu +Thread model: posix +gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2) +COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/ +LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/ +COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_479df' '-shared-libgcc' '-mtune=generic' '-march=x86-64' + /usr/lib/gcc/x86_64-linux-gnu/9/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/9/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper -plugin-opt=-fresolution=/tmp/ccFTkvC3.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_479df /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/9 -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/9/../../.. CMakeFiles/cmTC_479df.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/9/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crtn.o +COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_479df' '-shared-libgcc' '-mtune=generic' '-march=x86-64' +make[1]: Leaving directory '/home/duongtd/robotics_core/common_msgs/sensor_msgs/test/CMakeFiles/CMakeTmp' + + + +Parsed CXX implicit include dir info from above output: rv=done + found start of include info + found start of implicit include info + add: [/usr/include/c++/9] + add: [/usr/include/x86_64-linux-gnu/c++/9] + add: [/usr/include/c++/9/backward] + add: [/usr/lib/gcc/x86_64-linux-gnu/9/include] + add: [/usr/local/include] + add: [/usr/include/x86_64-linux-gnu] + add: [/usr/include] + end of search list found + collapse include dir [/usr/include/c++/9] ==> [/usr/include/c++/9] + collapse include dir [/usr/include/x86_64-linux-gnu/c++/9] ==> [/usr/include/x86_64-linux-gnu/c++/9] + collapse include dir [/usr/include/c++/9/backward] ==> [/usr/include/c++/9/backward] + collapse include dir [/usr/lib/gcc/x86_64-linux-gnu/9/include] ==> [/usr/lib/gcc/x86_64-linux-gnu/9/include] + collapse include dir [/usr/local/include] ==> [/usr/local/include] + collapse include dir [/usr/include/x86_64-linux-gnu] ==> [/usr/include/x86_64-linux-gnu] + collapse include dir [/usr/include] ==> [/usr/include] + implicit include dirs: [/usr/include/c++/9;/usr/include/x86_64-linux-gnu/c++/9;/usr/include/c++/9/backward;/usr/lib/gcc/x86_64-linux-gnu/9/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include] + + +Parsed CXX implicit link information from above output: + link line regex: [^( *|.*[/\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\]+-)?ld|collect2)[^/\]*( |$)] + ignore line: [Change Dir: /home/duongtd/robotics_core/common_msgs/sensor_msgs/test/CMakeFiles/CMakeTmp] + ignore line: [] + ignore line: [Run Build Command(s):/usr/bin/make cmTC_479df/fast && /usr/bin/make -f CMakeFiles/cmTC_479df.dir/build.make CMakeFiles/cmTC_479df.dir/build] + ignore line: [make[1]: Entering directory '/home/duongtd/robotics_core/common_msgs/sensor_msgs/test/CMakeFiles/CMakeTmp'] + ignore line: [Building CXX object CMakeFiles/cmTC_479df.dir/CMakeCXXCompilerABI.cpp.o] + ignore line: [/usr/bin/c++ -v -o CMakeFiles/cmTC_479df.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake-3.16/Modules/CMakeCXXCompilerABI.cpp] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/c++] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:hsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.4.0-1ubuntu1~20.04.2' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-9QDOt0/gcc-9-9.4.0/debian/tmp-nvptx/usr hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu] + ignore line: [Thread model: posix] + ignore line: [gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2) ] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_479df.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64'] + ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/9/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE /usr/share/cmake-3.16/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpbase CMakeCXXCompilerABI.cpp -mtune=generic -march=x86-64 -auxbase-strip CMakeFiles/cmTC_479df.dir/CMakeCXXCompilerABI.cpp.o -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccqwJhLz.s] + ignore line: [GNU C++14 (Ubuntu 9.4.0-1ubuntu1~20.04.2) version 9.4.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 9.4.0 GMP version 6.2.0 MPFR version 4.0.2 MPC version 1.1.0 isl version isl-0.22.1-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/9"] + ignore line: [ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/include-fixed"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/../../../../x86_64-linux-gnu/include"] + ignore line: [#include "..." search starts here:] + ignore line: [#include <...> search starts here:] + ignore line: [ /usr/include/c++/9] + ignore line: [ /usr/include/x86_64-linux-gnu/c++/9] + ignore line: [ /usr/include/c++/9/backward] + ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/9/include] + ignore line: [ /usr/local/include] + ignore line: [ /usr/include/x86_64-linux-gnu] + ignore line: [ /usr/include] + ignore line: [End of search list.] + ignore line: [GNU C++14 (Ubuntu 9.4.0-1ubuntu1~20.04.2) version 9.4.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 9.4.0 GMP version 6.2.0 MPFR version 4.0.2 MPC version 1.1.0 isl version isl-0.22.1-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [Compiler executable checksum: 3d1eba838554fa2348dba760e4770469] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_479df.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64'] + ignore line: [ as -v --64 -o CMakeFiles/cmTC_479df.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccqwJhLz.s] + ignore line: [GNU assembler version 2.34 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.34] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_479df.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64'] + ignore line: [Linking CXX executable cmTC_479df] + ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_479df.dir/link.txt --verbose=1] + ignore line: [/usr/bin/c++ -v CMakeFiles/cmTC_479df.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_479df ] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/c++] + ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:hsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.4.0-1ubuntu1~20.04.2' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-9QDOt0/gcc-9-9.4.0/debian/tmp-nvptx/usr hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu] + ignore line: [Thread model: posix] + ignore line: [gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2) ] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_479df' '-shared-libgcc' '-mtune=generic' '-march=x86-64'] + link line: [ /usr/lib/gcc/x86_64-linux-gnu/9/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/9/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper -plugin-opt=-fresolution=/tmp/ccFTkvC3.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_479df /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/9 -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/9/../../.. CMakeFiles/cmTC_479df.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/9/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crtn.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/9/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/ccFTkvC3.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [--build-id] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [--as-needed] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-pie] ==> ignore + arg [-znow] ==> ignore + arg [-zrelro] ==> ignore + arg [-o] ==> ignore + arg [cmTC_479df] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o] ==> ignore + arg [-L/usr/lib/gcc/x86_64-linux-gnu/9] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib] + arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu] + arg [-L/lib/../lib] ==> dir [/lib/../lib] + arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu] + arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/9/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../..] + arg [CMakeFiles/cmTC_479df.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore + arg [-lstdc++] ==> lib [stdc++] + arg [-lm] ==> lib [m] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [-lc] ==> lib [c] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [/usr/lib/gcc/x86_64-linux-gnu/9/crtendS.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crtn.o] ==> ignore + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9] ==> [/usr/lib/gcc/x86_64-linux-gnu/9] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib] ==> [/usr/lib] + collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu] + collapse library dir [/lib/../lib] ==> [/lib] + collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/../lib] ==> [/usr/lib] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../..] ==> [/usr/lib] + implicit libs: [stdc++;m;gcc_s;gcc;c;gcc_s;gcc] + implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/9;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib] + implicit fwks: [] + + diff --git a/sensor_msgs/test/CMakeFiles/Makefile.cmake b/sensor_msgs/test/CMakeFiles/Makefile.cmake new file mode 100644 index 0000000..ac92d1d --- /dev/null +++ b/sensor_msgs/test/CMakeFiles/Makefile.cmake @@ -0,0 +1,51 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +# The generator used is: +set(CMAKE_DEPENDS_GENERATOR "Unix Makefiles") + +# The top level Makefile was generated from the following files: +set(CMAKE_MAKEFILE_DEPENDS + "CMakeCache.txt" + "../CMakeLists.txt" + "CMakeFiles/3.16.3/CMakeCCompiler.cmake" + "CMakeFiles/3.16.3/CMakeCXXCompiler.cmake" + "CMakeFiles/3.16.3/CMakeSystem.cmake" + "/home/duongtd/robotics_core/common_msgs/std_msgs/CMakeLists.txt" + "/usr/share/cmake-3.16/Modules/CMakeCInformation.cmake" + "/usr/share/cmake-3.16/Modules/CMakeCXXInformation.cmake" + "/usr/share/cmake-3.16/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake" + "/usr/share/cmake-3.16/Modules/CMakeCommonLanguageInclude.cmake" + "/usr/share/cmake-3.16/Modules/CMakeGenericSystem.cmake" + "/usr/share/cmake-3.16/Modules/CMakeInitializeConfigs.cmake" + "/usr/share/cmake-3.16/Modules/CMakeLanguageInformation.cmake" + "/usr/share/cmake-3.16/Modules/CMakeSystemSpecificInformation.cmake" + "/usr/share/cmake-3.16/Modules/CMakeSystemSpecificInitialize.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/CMakeCommonCompilerMacros.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/GNU-C.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/GNU-CXX.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/GNU.cmake" + "/usr/share/cmake-3.16/Modules/Internal/CMakeCheckCompilerFlag.cmake" + "/usr/share/cmake-3.16/Modules/Platform/Linux-GNU-C.cmake" + "/usr/share/cmake-3.16/Modules/Platform/Linux-GNU-CXX.cmake" + "/usr/share/cmake-3.16/Modules/Platform/Linux-GNU.cmake" + "/usr/share/cmake-3.16/Modules/Platform/Linux.cmake" + "/usr/share/cmake-3.16/Modules/Platform/UnixPaths.cmake" + ) + +# The corresponding makefile is: +set(CMAKE_MAKEFILE_OUTPUTS + "Makefile" + "CMakeFiles/cmake.check_cache" + ) + +# Byproducts of CMake generate step: +set(CMAKE_MAKEFILE_PRODUCTS + "CMakeFiles/CMakeDirectoryInformation.cmake" + "std_msgs_build/CMakeFiles/CMakeDirectoryInformation.cmake" + ) + +# Dependency information for all targets: +set(CMAKE_DEPEND_INFO_FILES + "CMakeFiles/test_battery_state.dir/DependInfo.cmake" + ) diff --git a/sensor_msgs/test/CMakeFiles/Makefile2 b/sensor_msgs/test/CMakeFiles/Makefile2 new file mode 100644 index 0000000..f834c1e --- /dev/null +++ b/sensor_msgs/test/CMakeFiles/Makefile2 @@ -0,0 +1,126 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/duongtd/robotics_core/common_msgs/sensor_msgs + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/duongtd/robotics_core/common_msgs/sensor_msgs/test + +#============================================================================= +# Directory level rules for the build root directory + +# The main recursive "all" target. +all: CMakeFiles/test_battery_state.dir/all +all: std_msgs_build/all + +.PHONY : all + +# The main recursive "preinstall" target. +preinstall: std_msgs_build/preinstall + +.PHONY : preinstall + +# The main recursive "clean" target. +clean: CMakeFiles/test_battery_state.dir/clean +clean: std_msgs_build/clean + +.PHONY : clean + +#============================================================================= +# Directory level rules for directory std_msgs_build + +# Recursive "all" directory target. +std_msgs_build/all: + +.PHONY : std_msgs_build/all + +# Recursive "preinstall" directory target. +std_msgs_build/preinstall: + +.PHONY : std_msgs_build/preinstall + +# Recursive "clean" directory target. +std_msgs_build/clean: + +.PHONY : std_msgs_build/clean + +#============================================================================= +# Target rules for target CMakeFiles/test_battery_state.dir + +# All Build rule for target. +CMakeFiles/test_battery_state.dir/all: + $(MAKE) -f CMakeFiles/test_battery_state.dir/build.make CMakeFiles/test_battery_state.dir/depend + $(MAKE) -f CMakeFiles/test_battery_state.dir/build.make CMakeFiles/test_battery_state.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/duongtd/robotics_core/common_msgs/sensor_msgs/test/CMakeFiles --progress-num=1,2 "Built target test_battery_state" +.PHONY : CMakeFiles/test_battery_state.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/test_battery_state.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/duongtd/robotics_core/common_msgs/sensor_msgs/test/CMakeFiles 2 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/test_battery_state.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/duongtd/robotics_core/common_msgs/sensor_msgs/test/CMakeFiles 0 +.PHONY : CMakeFiles/test_battery_state.dir/rule + +# Convenience name for target. +test_battery_state: CMakeFiles/test_battery_state.dir/rule + +.PHONY : test_battery_state + +# clean rule for target. +CMakeFiles/test_battery_state.dir/clean: + $(MAKE) -f CMakeFiles/test_battery_state.dir/build.make CMakeFiles/test_battery_state.dir/clean +.PHONY : CMakeFiles/test_battery_state.dir/clean + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/sensor_msgs/test/CMakeFiles/TargetDirectories.txt b/sensor_msgs/test/CMakeFiles/TargetDirectories.txt new file mode 100644 index 0000000..24e7dea --- /dev/null +++ b/sensor_msgs/test/CMakeFiles/TargetDirectories.txt @@ -0,0 +1,5 @@ +/home/duongtd/robotics_core/common_msgs/sensor_msgs/test/CMakeFiles/rebuild_cache.dir +/home/duongtd/robotics_core/common_msgs/sensor_msgs/test/CMakeFiles/edit_cache.dir +/home/duongtd/robotics_core/common_msgs/sensor_msgs/test/CMakeFiles/test_battery_state.dir +/home/duongtd/robotics_core/common_msgs/sensor_msgs/test/std_msgs_build/CMakeFiles/rebuild_cache.dir +/home/duongtd/robotics_core/common_msgs/sensor_msgs/test/std_msgs_build/CMakeFiles/edit_cache.dir diff --git a/sensor_msgs/test/CMakeFiles/cmake.check_cache b/sensor_msgs/test/CMakeFiles/cmake.check_cache new file mode 100644 index 0000000..3dccd73 --- /dev/null +++ b/sensor_msgs/test/CMakeFiles/cmake.check_cache @@ -0,0 +1 @@ +# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/sensor_msgs/test/CMakeFiles/progress.marks b/sensor_msgs/test/CMakeFiles/progress.marks new file mode 100644 index 0000000..0cfbf08 --- /dev/null +++ b/sensor_msgs/test/CMakeFiles/progress.marks @@ -0,0 +1 @@ +2 diff --git a/sensor_msgs/test/CMakeFiles/test_battery_state.dir/CXX.includecache b/sensor_msgs/test/CMakeFiles/test_battery_state.dir/CXX.includecache new file mode 100644 index 0000000..d8f9ea5 --- /dev/null +++ b/sensor_msgs/test/CMakeFiles/test_battery_state.dir/CXX.includecache @@ -0,0 +1,68 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +../include/sensor_msgs/BatteryState.h +std_msgs/Header.h +../include/sensor_msgs/std_msgs/Header.h +cstdint +- +string +- +vector +- +limits +- + +../include/sensor_msgs/JoyFeedback.h +cstdint +- + +../include/sensor_msgs/JoyFeedbackArray.h +vector +- +sensor_msgs/JoyFeedback.h +../include/sensor_msgs/sensor_msgs/JoyFeedback.h + +../include/sensor_msgs/PointCloud2.h +cstdint +- +string +- +vector +- +std_msgs/Header.h +../include/sensor_msgs/std_msgs/Header.h +sensor_msgs/PointField.h +../include/sensor_msgs/sensor_msgs/PointField.h + +../include/sensor_msgs/PointField.h +cstdint +- +string +- + +/home/duongtd/robotics_core/common_msgs/sensor_msgs/test/main.cpp +sensor_msgs/BatteryState.h +/home/duongtd/robotics_core/common_msgs/sensor_msgs/test/sensor_msgs/BatteryState.h +sensor_msgs/JoyFeedbackArray.h +/home/duongtd/robotics_core/common_msgs/sensor_msgs/test/sensor_msgs/JoyFeedbackArray.h +sensor_msgs/PointCloud2.h +/home/duongtd/robotics_core/common_msgs/sensor_msgs/test/sensor_msgs/PointCloud2.h +iostream +- +yaml-cpp/yaml.h +- + +/home/duongtd/robotics_core/common_msgs/std_msgs/include/std_msgs/Header.h +string +- +chrono +- +cstdint +- + diff --git a/sensor_msgs/test/CMakeFiles/test_battery_state.dir/DependInfo.cmake b/sensor_msgs/test/CMakeFiles/test_battery_state.dir/DependInfo.cmake new file mode 100644 index 0000000..76d1cc5 --- /dev/null +++ b/sensor_msgs/test/CMakeFiles/test_battery_state.dir/DependInfo.cmake @@ -0,0 +1,22 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "CXX" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_CXX + "/home/duongtd/robotics_core/common_msgs/sensor_msgs/test/main.cpp" "/home/duongtd/robotics_core/common_msgs/sensor_msgs/test/CMakeFiles/test_battery_state.dir/main.cpp.o" + ) +set(CMAKE_CXX_COMPILER_ID "GNU") + +# The include file search paths: +set(CMAKE_CXX_TARGET_INCLUDE_PATH + "../include" + "/home/duongtd/robotics_core/common_msgs/std_msgs/include" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/sensor_msgs/test/CMakeFiles/test_battery_state.dir/build.make b/sensor_msgs/test/CMakeFiles/test_battery_state.dir/build.make new file mode 100644 index 0000000..203a44c --- /dev/null +++ b/sensor_msgs/test/CMakeFiles/test_battery_state.dir/build.make @@ -0,0 +1,98 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/duongtd/robotics_core/common_msgs/sensor_msgs + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/duongtd/robotics_core/common_msgs/sensor_msgs/test + +# Include any dependencies generated for this target. +include CMakeFiles/test_battery_state.dir/depend.make + +# Include the progress variables for this target. +include CMakeFiles/test_battery_state.dir/progress.make + +# Include the compile flags for this target's objects. +include CMakeFiles/test_battery_state.dir/flags.make + +CMakeFiles/test_battery_state.dir/main.cpp.o: CMakeFiles/test_battery_state.dir/flags.make +CMakeFiles/test_battery_state.dir/main.cpp.o: main.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/duongtd/robotics_core/common_msgs/sensor_msgs/test/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/test_battery_state.dir/main.cpp.o" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/test_battery_state.dir/main.cpp.o -c /home/duongtd/robotics_core/common_msgs/sensor_msgs/test/main.cpp + +CMakeFiles/test_battery_state.dir/main.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/test_battery_state.dir/main.cpp.i" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/duongtd/robotics_core/common_msgs/sensor_msgs/test/main.cpp > CMakeFiles/test_battery_state.dir/main.cpp.i + +CMakeFiles/test_battery_state.dir/main.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/test_battery_state.dir/main.cpp.s" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/duongtd/robotics_core/common_msgs/sensor_msgs/test/main.cpp -o CMakeFiles/test_battery_state.dir/main.cpp.s + +# Object files for target test_battery_state +test_battery_state_OBJECTS = \ +"CMakeFiles/test_battery_state.dir/main.cpp.o" + +# External object files for target test_battery_state +test_battery_state_EXTERNAL_OBJECTS = + +test_battery_state: CMakeFiles/test_battery_state.dir/main.cpp.o +test_battery_state: CMakeFiles/test_battery_state.dir/build.make +test_battery_state: CMakeFiles/test_battery_state.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/duongtd/robotics_core/common_msgs/sensor_msgs/test/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX executable test_battery_state" + $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/test_battery_state.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +CMakeFiles/test_battery_state.dir/build: test_battery_state + +.PHONY : CMakeFiles/test_battery_state.dir/build + +CMakeFiles/test_battery_state.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/test_battery_state.dir/cmake_clean.cmake +.PHONY : CMakeFiles/test_battery_state.dir/clean + +CMakeFiles/test_battery_state.dir/depend: + cd /home/duongtd/robotics_core/common_msgs/sensor_msgs/test && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/duongtd/robotics_core/common_msgs/sensor_msgs /home/duongtd/robotics_core/common_msgs/sensor_msgs /home/duongtd/robotics_core/common_msgs/sensor_msgs/test /home/duongtd/robotics_core/common_msgs/sensor_msgs/test /home/duongtd/robotics_core/common_msgs/sensor_msgs/test/CMakeFiles/test_battery_state.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/test_battery_state.dir/depend + diff --git a/sensor_msgs/test/CMakeFiles/test_battery_state.dir/cmake_clean.cmake b/sensor_msgs/test/CMakeFiles/test_battery_state.dir/cmake_clean.cmake new file mode 100644 index 0000000..0dd2f32 --- /dev/null +++ b/sensor_msgs/test/CMakeFiles/test_battery_state.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/test_battery_state.dir/main.cpp.o" + "test_battery_state" + "test_battery_state.pdb" +) + +# Per-language clean rules from dependency scanning. +foreach(lang CXX) + include(CMakeFiles/test_battery_state.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/sensor_msgs/test/CMakeFiles/test_battery_state.dir/depend.internal b/sensor_msgs/test/CMakeFiles/test_battery_state.dir/depend.internal new file mode 100644 index 0000000..ca851ef --- /dev/null +++ b/sensor_msgs/test/CMakeFiles/test_battery_state.dir/depend.internal @@ -0,0 +1,11 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +CMakeFiles/test_battery_state.dir/main.cpp.o + ../include/sensor_msgs/BatteryState.h + ../include/sensor_msgs/JoyFeedback.h + ../include/sensor_msgs/JoyFeedbackArray.h + ../include/sensor_msgs/PointCloud2.h + ../include/sensor_msgs/PointField.h + /home/duongtd/robotics_core/common_msgs/sensor_msgs/test/main.cpp + /home/duongtd/robotics_core/common_msgs/std_msgs/include/std_msgs/Header.h diff --git a/sensor_msgs/test/CMakeFiles/test_battery_state.dir/depend.make b/sensor_msgs/test/CMakeFiles/test_battery_state.dir/depend.make new file mode 100644 index 0000000..f4112bd --- /dev/null +++ b/sensor_msgs/test/CMakeFiles/test_battery_state.dir/depend.make @@ -0,0 +1,11 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +CMakeFiles/test_battery_state.dir/main.cpp.o: ../include/sensor_msgs/BatteryState.h +CMakeFiles/test_battery_state.dir/main.cpp.o: ../include/sensor_msgs/JoyFeedback.h +CMakeFiles/test_battery_state.dir/main.cpp.o: ../include/sensor_msgs/JoyFeedbackArray.h +CMakeFiles/test_battery_state.dir/main.cpp.o: ../include/sensor_msgs/PointCloud2.h +CMakeFiles/test_battery_state.dir/main.cpp.o: ../include/sensor_msgs/PointField.h +CMakeFiles/test_battery_state.dir/main.cpp.o: main.cpp +CMakeFiles/test_battery_state.dir/main.cpp.o: /home/duongtd/robotics_core/common_msgs/std_msgs/include/std_msgs/Header.h + diff --git a/sensor_msgs/test/CMakeFiles/test_battery_state.dir/flags.make b/sensor_msgs/test/CMakeFiles/test_battery_state.dir/flags.make new file mode 100644 index 0000000..79e9652 --- /dev/null +++ b/sensor_msgs/test/CMakeFiles/test_battery_state.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +# compile CXX with /usr/bin/c++ +CXX_FLAGS = -std=gnu++17 + +CXX_DEFINES = + +CXX_INCLUDES = -I/home/duongtd/robotics_core/common_msgs/sensor_msgs/include -I/home/duongtd/robotics_core/common_msgs/std_msgs/include + diff --git a/sensor_msgs/test/CMakeFiles/test_battery_state.dir/link.txt b/sensor_msgs/test/CMakeFiles/test_battery_state.dir/link.txt new file mode 100644 index 0000000..2533e51 --- /dev/null +++ b/sensor_msgs/test/CMakeFiles/test_battery_state.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/c++ CMakeFiles/test_battery_state.dir/main.cpp.o -o test_battery_state -lyaml-cpp diff --git a/sensor_msgs/test/CMakeFiles/test_battery_state.dir/main.cpp.o b/sensor_msgs/test/CMakeFiles/test_battery_state.dir/main.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..5af4ddb5f7c8f9f5da6978f16cf8797a51a7ab42 GIT binary patch literal 315280 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 Kruf_@_5TllZ6T=u literal 0 HcmV?d00001 diff --git a/sensor_msgs/test/CMakeFiles/test_battery_state.dir/progress.make b/sensor_msgs/test/CMakeFiles/test_battery_state.dir/progress.make new file mode 100644 index 0000000..abadeb0 --- /dev/null +++ b/sensor_msgs/test/CMakeFiles/test_battery_state.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 1 +CMAKE_PROGRESS_2 = 2 + diff --git a/sensor_msgs/test/Makefile b/sensor_msgs/test/Makefile new file mode 100644 index 0000000..b394698 --- /dev/null +++ b/sensor_msgs/test/Makefile @@ -0,0 +1,178 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/duongtd/robotics_core/common_msgs/sensor_msgs + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/duongtd/robotics_core/common_msgs/sensor_msgs/test + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache + +.PHONY : rebuild_cache/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache + +.PHONY : edit_cache/fast + +# The main all target +all: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/duongtd/robotics_core/common_msgs/sensor_msgs/test/CMakeFiles /home/duongtd/robotics_core/common_msgs/sensor_msgs/test/CMakeFiles/progress.marks + $(MAKE) -f CMakeFiles/Makefile2 all + $(CMAKE_COMMAND) -E cmake_progress_start /home/duongtd/robotics_core/common_msgs/sensor_msgs/test/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + $(MAKE) -f CMakeFiles/Makefile2 clean +.PHONY : clean + +# The main clean target +clean/fast: clean + +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + $(MAKE) -f CMakeFiles/Makefile2 preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + $(MAKE) -f CMakeFiles/Makefile2 preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +#============================================================================= +# Target rules for targets named test_battery_state + +# Build rule for target. +test_battery_state: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 test_battery_state +.PHONY : test_battery_state + +# fast build rule for target. +test_battery_state/fast: + $(MAKE) -f CMakeFiles/test_battery_state.dir/build.make CMakeFiles/test_battery_state.dir/build +.PHONY : test_battery_state/fast + +main.o: main.cpp.o + +.PHONY : main.o + +# target to build an object file +main.cpp.o: + $(MAKE) -f CMakeFiles/test_battery_state.dir/build.make CMakeFiles/test_battery_state.dir/main.cpp.o +.PHONY : main.cpp.o + +main.i: main.cpp.i + +.PHONY : main.i + +# target to preprocess a source file +main.cpp.i: + $(MAKE) -f CMakeFiles/test_battery_state.dir/build.make CMakeFiles/test_battery_state.dir/main.cpp.i +.PHONY : main.cpp.i + +main.s: main.cpp.s + +.PHONY : main.s + +# target to generate assembly for a file +main.cpp.s: + $(MAKE) -f CMakeFiles/test_battery_state.dir/build.make CMakeFiles/test_battery_state.dir/main.cpp.s +.PHONY : main.cpp.s + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... rebuild_cache" + @echo "... edit_cache" + @echo "... test_battery_state" + @echo "... main.o" + @echo "... main.i" + @echo "... main.s" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/sensor_msgs/test/cmake_install.cmake b/sensor_msgs/test/cmake_install.cmake new file mode 100644 index 0000000..2469a43 --- /dev/null +++ b/sensor_msgs/test/cmake_install.cmake @@ -0,0 +1,55 @@ +# Install script for directory: /home/duongtd/robotics_core/common_msgs/sensor_msgs + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + +# Is this installation the result of a crosscompile? +if(NOT DEFINED CMAKE_CROSSCOMPILING) + set(CMAKE_CROSSCOMPILING "FALSE") +endif() + +if(NOT CMAKE_INSTALL_LOCAL_ONLY) + # Include the install script for each subdirectory. + include("/home/duongtd/robotics_core/common_msgs/sensor_msgs/test/std_msgs_build/cmake_install.cmake") + +endif() + +if(CMAKE_INSTALL_COMPONENT) + set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt") +else() + set(CMAKE_INSTALL_MANIFEST "install_manifest.txt") +endif() + +string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT + "${CMAKE_INSTALL_MANIFEST_FILES}") +file(WRITE "/home/duongtd/robotics_core/common_msgs/sensor_msgs/test/${CMAKE_INSTALL_MANIFEST}" + "${CMAKE_INSTALL_MANIFEST_CONTENT}") diff --git a/sensor_msgs/test/main.cpp b/sensor_msgs/test/main.cpp new file mode 100644 index 0000000..b2ee40f --- /dev/null +++ b/sensor_msgs/test/main.cpp @@ -0,0 +1,75 @@ +#include "sensor_msgs/BatteryState.h" +#include "sensor_msgs/JoyFeedbackArray.h" +#include "sensor_msgs/PointCloud2.h" +#include +#include + +bool getParams() +{ + try { + YAML::Node config = YAML::LoadFile("../cfg/config.yaml"); + + double cost_scaling_factor = config["inflation_layer"]["cost_scaling_factor"].as(); + double inflation_radius = config["inflation_layer"]["inflation_radius"].as(); + + bool enabled = config["inflation_layer"]["enabled"].as(); + bool inflate_unknown = config["inflation_layer"]["inflate_unknown"].as(); + + double distance = config["obstacle_layer"]["distance"].as(); + + std::cout << "Inflation Layer Parameters:" << std::endl; + std::cout << " Cost Scaling Factor: " << cost_scaling_factor << std::endl; + std::cout << " Inflation Radius: " << inflation_radius << std::endl; + std::cout << " Enabled: " << (enabled ? "true" : "false") << std::endl; + std::cout << " Inflate Unknown: " << (inflate_unknown ? "true" : "false") << std::endl; + std::cout << "Obstacle Layer Parameters:" << std::endl; + std::cout << " Distance: " << distance << std::endl; + + } + catch (const YAML::BadFile& e) { + std::cerr << "Cannot open YAML file: " << e.what() << std::endl; + return false; + } + + return true; + +} + +int main() +{ + getParams(); + sensor_msgs::BatteryState battery; + + battery.header = std_msgs::Header::now("battery_frame"); + battery.voltage = 12.5f; + battery.current = -1.2f; + battery.percentage = 0.85f; + battery.power_supply_status = sensor_msgs::BatteryState::POWER_SUPPLY_STATUS_DISCHARGING; + + battery.cell_voltage = {4.15f, 4.18f, 4.12f}; + battery.location = "slot_1"; + battery.serial_number = "SN12345"; + + std::cout << "Battery header timestamp: " << battery.header.stamp << "\n"; + std::cout << "Battery voltage: " << battery.voltage << " V\n"; + std::cout << "Status: " << static_cast(battery.power_supply_status) << "\n"; + std::cout << "Serial Number: " << battery.serial_number << "\n"; + + sensor_msgs::JoyFeedbackArray feedback_array; + feedback_array.array.push_back(sensor_msgs::JoyFeedback{sensor_msgs::JoyFeedback::TYPE_BUZZER, 0, 5000.0f}); + + std::cout << "First feedback type: " << static_cast(feedback_array.array[0].type) << "\n"; + std::cout << "First feedback intensity: " << feedback_array.array[0].intensity << "\n"; + + sensor_msgs::PointCloud2 cloud; + cloud.header = std_msgs::Header::now("pointcloud_frame"); + cloud.width = 100; + cloud.height = 1; + + std::cout << "PointCloud2 header frame_id: " << cloud.header.frame_id << "\n"; + std::cout << "PointCloud2 header timestamp: " << cloud.header.stamp << "\n"; + std::cout << "PointCloud2 width: " << cloud.width << "\n"; + std::cout << "PointCloud2 height: " << cloud.height << "\n"; + + return 0; +} diff --git a/sensor_msgs/test/std_msgs_build/CMakeFiles/CMakeDirectoryInformation.cmake b/sensor_msgs/test/std_msgs_build/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 0000000..cd3fcc7 --- /dev/null +++ b/sensor_msgs/test/std_msgs_build/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/duongtd/robotics_core/common_msgs/std_msgs") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/duongtd/robotics_core/common_msgs/sensor_msgs/test") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/sensor_msgs/test/std_msgs_build/CMakeFiles/progress.marks b/sensor_msgs/test/std_msgs_build/CMakeFiles/progress.marks new file mode 100644 index 0000000..573541a --- /dev/null +++ b/sensor_msgs/test/std_msgs_build/CMakeFiles/progress.marks @@ -0,0 +1 @@ +0 diff --git a/sensor_msgs/test/std_msgs_build/Makefile b/sensor_msgs/test/std_msgs_build/Makefile new file mode 100644 index 0000000..8fb495c --- /dev/null +++ b/sensor_msgs/test/std_msgs_build/Makefile @@ -0,0 +1,134 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/duongtd/robotics_core/common_msgs/sensor_msgs + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/duongtd/robotics_core/common_msgs/sensor_msgs/test + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache + +.PHONY : rebuild_cache/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache + +.PHONY : edit_cache/fast + +# The main all target +all: cmake_check_build_system + cd /home/duongtd/robotics_core/common_msgs/sensor_msgs/test && $(CMAKE_COMMAND) -E cmake_progress_start /home/duongtd/robotics_core/common_msgs/sensor_msgs/test/CMakeFiles /home/duongtd/robotics_core/common_msgs/sensor_msgs/test/std_msgs_build/CMakeFiles/progress.marks + cd /home/duongtd/robotics_core/common_msgs/sensor_msgs/test && $(MAKE) -f CMakeFiles/Makefile2 std_msgs_build/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/duongtd/robotics_core/common_msgs/sensor_msgs/test/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /home/duongtd/robotics_core/common_msgs/sensor_msgs/test && $(MAKE) -f CMakeFiles/Makefile2 std_msgs_build/clean +.PHONY : clean + +# The main clean target +clean/fast: clean + +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd /home/duongtd/robotics_core/common_msgs/sensor_msgs/test && $(MAKE) -f CMakeFiles/Makefile2 std_msgs_build/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /home/duongtd/robotics_core/common_msgs/sensor_msgs/test && $(MAKE) -f CMakeFiles/Makefile2 std_msgs_build/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /home/duongtd/robotics_core/common_msgs/sensor_msgs/test && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... rebuild_cache" + @echo "... edit_cache" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd /home/duongtd/robotics_core/common_msgs/sensor_msgs/test && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/sensor_msgs/test/std_msgs_build/cmake_install.cmake b/sensor_msgs/test/std_msgs_build/cmake_install.cmake new file mode 100644 index 0000000..da51daa --- /dev/null +++ b/sensor_msgs/test/std_msgs_build/cmake_install.cmake @@ -0,0 +1,39 @@ +# Install script for directory: /home/duongtd/robotics_core/common_msgs/std_msgs + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + +# Is this installation the result of a crosscompile? +if(NOT DEFINED CMAKE_CROSSCOMPILING) + set(CMAKE_CROSSCOMPILING "FALSE") +endif() + diff --git a/sensor_msgs/test/test_battery_state b/sensor_msgs/test/test_battery_state new file mode 100755 index 0000000000000000000000000000000000000000..530077a23a6116b697903391e14cc4324232bf74 GIT binary patch literal 153088 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

LB`Q1~Tmr8Fh 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 aqW*I=O2b9i{TD6dS~cnl%MI2~=l=qN*FE(B literal 0 HcmV?d00001 diff --git a/std_msgs/CMakeLists.txt b/std_msgs/CMakeLists.txt new file mode 100644 index 0000000..4438738 --- /dev/null +++ b/std_msgs/CMakeLists.txt @@ -0,0 +1,7 @@ +cmake_minimum_required(VERSION 3.10) +project(std_msgs) + +set(CMAKE_CXX_STANDARD 17) + +add_library(std_msgs INTERFACE) +target_include_directories(std_msgs INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/include) diff --git a/std_msgs/include/std_msgs/Header.h b/std_msgs/include/std_msgs/Header.h new file mode 100644 index 0000000..c276a41 --- /dev/null +++ b/std_msgs/include/std_msgs/Header.h @@ -0,0 +1,33 @@ +#ifndef STD_MSGS_HEADER_H +#define STD_MSGS_HEADER_H + +#include +#include +#include + +namespace std_msgs { + +struct Header +{ + uint32_t seq = 0; // số thứ tự message + double stamp = 0.0; // thời gian theo giây (Unix time) + std::string frame_id; + + Header() = default; + + // Hàm tạo nhanh header với timestamp hiện tại + static Header now(const std::string& frame = "") + { + using namespace std::chrono; + double time_now = duration_cast>(system_clock::now().time_since_epoch()).count(); + Header h; + h.seq = 0; + h.stamp = time_now; + h.frame_id = frame; + return h; + } +}; + +} // namespace std_msgs + +#endif