summaryrefslogtreecommitdiff
path: root/rclcpp.spec
blob: 4da7e9af348f2c592125f25db2c44265cde52568 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# rclcpp: ROS 2 C++ client library (multi-package repository)
# Bundles: rclcpp, rclcpp_action, rclcpp_components, rclcpp_lifecycle
# topdir: rclcpp-16.0.21
# Installs to /opt/ros/humble (ROS standard prefix)

%global debug_package %{nil}
%global __provides_exclude_from ^/opt/ros/humble/.*$
%global __requires_exclude_from ^/opt/ros/humble/.*$
# Strip brp-python-bytecompile (ROS Python files under /opt are not standard sitelib)
%global __os_install_post %(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')

Name:           rclcpp
Version:        16.0.21
Release:        1%{?dist}
Summary:        The ROS client library in C++

License:        Apache-2.0
URL:            https://github.com/ros2/rclcpp
Source0:        https://github.com/ros2/rclcpp/archive/16.0.21.tar.gz#/rclcpp-16.0.21.tar.gz

# System build tools
BuildRequires:  cmake
BuildRequires:  gcc-c++
BuildRequires:  make
BuildRequires:  python3-devel

# ROS buildtool dependencies (from ROS SIG repo)
BuildRequires:  ros-humble-ament-cmake-ros
BuildRequires:  ros-humble-ament-cmake-gen-version-h
BuildRequires:  ros-humble-ament-cmake

# ROS runtime base
BuildRequires:  ros-humble-ros-workspace

# ROS library dependencies — rclcpp sub-package
BuildRequires:  ros-humble-ament-index-cpp
BuildRequires:  ros-humble-builtin-interfaces
BuildRequires:  ros-humble-libstatistics-collector
BuildRequires:  ros-humble-rcl
BuildRequires:  ros-humble-rcl-interfaces
BuildRequires:  ros-humble-rcl-yaml-param-parser
BuildRequires:  ros-humble-rcpputils
BuildRequires:  ros-humble-rcutils
BuildRequires:  ros-humble-rmw
BuildRequires:  ros-humble-rosgraph-msgs
BuildRequires:  ros-humble-rosidl-runtime-cpp
BuildRequires:  ros-humble-rosidl-typesupport-c
BuildRequires:  ros-humble-rosidl-typesupport-cpp
BuildRequires:  ros-humble-statistics-msgs
BuildRequires:  ros-humble-tracetools

# ROS library dependencies — rclcpp_action sub-package
BuildRequires:  ros-humble-action-msgs
BuildRequires:  ros-humble-rcl-action
BuildRequires:  ros-humble-rosidl-runtime-c

# ROS library dependencies — rclcpp_components sub-package
BuildRequires:  ros-humble-class-loader
BuildRequires:  ros-humble-composition-interfaces

# ROS library dependencies — rclcpp_lifecycle sub-package
BuildRequires:  ros-humble-lifecycle-msgs
BuildRequires:  ros-humble-rcl-lifecycle

# Runtime Requires (ROS /opt auto-deps disabled, must be explicit)
Requires:       ros-humble-ros-workspace
Requires:       ros-humble-ament-cmake

# Virtual provides for compatibility with -devel/-doc/-runtime naming
Provides:       %{name}-devel = %{version}-%{release}
Provides:       %{name}-doc = %{version}-%{release}
Provides:       %{name}-runtime = %{version}-%{release}

%description
The ROS client library in C++.
This package bundles the rclcpp, rclcpp_action, rclcpp_components,
and rclcpp_lifecycle sub-packages from the rclcpp repository,
providing the C++ client library for ROS 2.

%prep
%autosetup -n %{name}-%{version}

%build
# Source ROS environment if available (provides PYTHONPATH, AMENT_PREFIX_PATH)
[ -f /opt/ros/humble/setup.sh ] && source /opt/ros/humble/setup.sh || true
export PYTHONPATH=/opt/ros/humble/lib/python%{python3_version}/site-packages${PYTHONPATH:+:$PYTHONPATH}
export PKG_CONFIG_PATH=/opt/ros/humble/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}

ROSPREFIX=/opt/ros/humble
BROSEROOT=%{buildroot}/opt/ros/humble
export AMENT_PREFIX_PATH=${BROSEROOT}:${ROSPREFIX}
export CMAKE_PREFIX_PATH=${BROSEROOT}:${ROSPREFIX}

CMAKE_FLAGS="\
  -DCMAKE_INSTALL_PREFIX=${ROSPREFIX} \
  -DAMENT_PREFIX_PATH=${ROSPREFIX} \
  -DCMAKE_PREFIX_PATH=${ROSPREFIX} \
  -DSETUPTOOLS_DEB_LAYOUT=OFF \
  -DBUILD_TESTING=OFF \
  -UINCLUDE_INSTALL_DIR \
  -ULIB_INSTALL_DIR \
  -USYSCONF_INSTALL_DIR \
  -USHARE_INSTALL_PREFIX \
  -ULIB_SUFFIX"

# Build and install a single sub-package to buildroot
build_one() {
  pkg=$1
  echo "=== Building ${pkg} ==="
  cd "${pkg}"
  mkdir -p build
  cd build
  cmake ${CMAKE_FLAGS} ..
  cmake --build .
  DESTDIR=%{buildroot} cmake --install .
  cd ../..
}

# Layer 0: rclcpp (base library, all others depend on it)
build_one rclcpp

# Layer 1: packages depending on rclcpp (independent of each other)
build_one rclcpp_action
build_one rclcpp_lifecycle
build_one rclcpp_components

%install
# All sub-packages already installed to buildroot/opt/ros/humble during build phase

%files
/opt/ros/humble/

%changelog
* Thu Oct 08 2026 openEuler Builder <builder@openeuler.org> - 16.0.21-1
- Initial package