summaryrefslogtreecommitdiff
path: root/cartographer-ros.spec
blob: 0439a4c6ee02ff11916c2a65e900c45827bf45c7 (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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
%define ros_distro humble
%define RosPkgName cartographer-ros
%define src_version 2.0.9002-1

Name:           ros-%{ros_distro}-%{RosPkgName}
Version:        2.0.9002
Release:        4%{?dist}
Summary:        Cartographer is a system that provides real-time simultaneous localization and 
License:        Apache 2.0
URL:            https://github.com/ros2/cartographer_ros/tree/ros2
Source0:        %{RosPkgName}-%{src_version}.tar.gz

%global debug_package %{nil}
%global __os_install_post %(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
%global __provides_exclude_from ^/opt/ros/%{ros_distro}/.*$
%global __requires_exclude_from ^/opt/ros/%{ros_distro}/.*$

BuildRequires:  cmake
BuildRequires:  ros-%{ros_distro}-ament-cmake
BuildRequires:  ros-%{ros_distro}-builtin-interfaces
BuildRequires:  ros-%{ros_distro}-cartographer
BuildRequires:  ros-%{ros_distro}-cartographer-ros-msgs
BuildRequires:  ros-%{ros_distro}-geometry-msgs
BuildRequires:  ros-%{ros_distro}-launch
BuildRequires:  ros-%{ros_distro}-nav-msgs
BuildRequires:  ros-%{ros_distro}-pcl-conversions
BuildRequires:  ros-%{ros_distro}-rclcpp
BuildRequires:  ros-%{ros_distro}-robot-state-publisher
BuildRequires:  ros-%{ros_distro}-ros-environment
BuildRequires:  ros-%{ros_distro}-rosbag2-cpp
BuildRequires:  ros-%{ros_distro}-rosbag2-storage
BuildRequires:  ros-%{ros_distro}-sensor-msgs
BuildRequires:  ros-%{ros_distro}-std-msgs
BuildRequires:  ros-%{ros_distro}-tf2
BuildRequires:  ros-%{ros_distro}-tf2-eigen
BuildRequires:  ros-%{ros_distro}-tf2-msgs
BuildRequires:  ros-%{ros_distro}-tf2-ros
BuildRequires:  ros-%{ros_distro}-urdf
BuildRequires:  ros-%{ros_distro}-visualization-msgs
BuildRequires:  abseil-cpp-devel
BuildRequires:  cairo-devel
BuildRequires:  eigen3-devel
BuildRequires:  gflags-devel
BuildRequires:  glog-devel
BuildRequires:  gmock-devel
BuildRequires:  pcl-devel
BuildRequires:  python3-sphinx

Requires:       ros-%{ros_distro}-ros-workspace
Requires:       ros-%{ros_distro}-ament-cmake
Requires:       ros-%{ros_distro}-builtin-interfaces
Requires:       ros-%{ros_distro}-cartographer
Requires:       ros-%{ros_distro}-cartographer-ros-msgs
Requires:       ros-%{ros_distro}-geometry-msgs
Requires:       ros-%{ros_distro}-launch
Requires:       ros-%{ros_distro}-nav-msgs
Requires:       ros-%{ros_distro}-pcl-conversions
Requires:       ros-%{ros_distro}-rclcpp
Requires:       ros-%{ros_distro}-robot-state-publisher
Requires:       ros-%{ros_distro}-rosbag2-cpp
Requires:       ros-%{ros_distro}-rosbag2-storage
Requires:       ros-%{ros_distro}-sensor-msgs
Requires:       ros-%{ros_distro}-std-msgs
Requires:       ros-%{ros_distro}-tf2
Requires:       ros-%{ros_distro}-tf2-eigen
Requires:       ros-%{ros_distro}-tf2-msgs
Requires:       ros-%{ros_distro}-tf2-ros
Requires:       ros-%{ros_distro}-urdf
Requires:       ros-%{ros_distro}-visualization-msgs
Requires:       abseil-cpp-devel
Requires:       cairo-devel
Requires:       eigen3-devel
Requires:       gflags-devel
Requires:       glog-devel
Requires:       pcl-devel

Provides:       %{name}-devel = %{version}-%{release}
Provides:       %{name}-doc = %{version}-%{release}
Provides:       %{name}-runtime = %{version}-%{release}

%description
Cartographer is a system that provides real-time simultaneous localization
    and mapping (SLAM) in 2D and 3D across multiple platforms and sensor
    configurations. This package provides Cartographer's ROS integration.

%prep
%autosetup -n %{RosPkgName}-%{src_version}

cat > cartographer_ros/include/cartographer_ros/thread_safety_shim.h << 'SHIM'
#ifndef THREAD_SAFETY_SHIM_H
#define THREAD_SAFETY_SHIM_H
#ifndef GUARDED_BY
#define GUARDED_BY(x)
#endif
#ifndef EXCLUSIVE_LOCKS_REQUIRED
#define EXCLUSIVE_LOCKS_REQUIRED(x)
#endif
#ifndef LOCKS_EXCLUDED
#define LOCKS_EXCLUDED(x)
#endif
#ifndef EXCLUSIVE_LOCK_FUNCTION
#define EXCLUSIVE_LOCK_FUNCTION(x)
#endif
#ifndef UNLOCK_FUNCTION
#define UNLOCK_FUNCTION(x)
#endif
#ifndef SHARED_LOCKS_REQUIRED
#define SHARED_LOCKS_REQUIRED(x)
#endif
#ifndef ASSERT_EXCLUSIVE_LOCK
#define ASSERT_EXCLUSIVE_LOCK(x)
#endif
#ifndef NO_THREAD_SAFETY_ANALYSIS
#define NO_THREAD_SAFETY_ANALYSIS
#endif
#endif
SHIM

for f in cartographer_ros/include/cartographer_ros/node.h \
         cartographer_ros/include/cartographer_ros/map_builder_bridge.h \
         cartographer_ros/include/cartographer_ros/metrics/internal/histogram.h \
         cartographer_ros/include/cartographer_ros/metrics/internal/gauge.h; do
    sed -i '1i#include "cartographer_ros/thread_safety_shim.h"' "$f"
done

%build
[ -f /opt/ros/%{ros_distro}/setup.sh ] && source /opt/ros/%{ros_distro}/setup.sh || true
export PYTHONPATH=/opt/ros/%{ros_distro}/lib/python%{python3_version}/site-packages${PYTHONPATH:+:$PYTHONPATH}
export PKG_CONFIG_PATH=/opt/ros/%{ros_distro}/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}
cd cartographer_ros
mkdir -p .obj && cd .obj
%cmake3 \
    -DCMAKE_INSTALL_PREFIX="/opt/ros/%{ros_distro}" \
    -DAMENT_PREFIX_PATH="/opt/ros/%{ros_distro}" \
    -DCMAKE_PREFIX_PATH="/opt/ros/%{ros_distro}" \
    -UINCLUDE_INSTALL_DIR -ULIB_INSTALL_DIR -USYSCONF_INSTALL_DIR -USHARE_INSTALL_PREFIX -ULIB_SUFFIX \
    -DSETUPTOOLS_DEB_LAYOUT=OFF \
    -DBUILD_TESTING=OFF -DTESTING=OFF -DCMAKE_SUPPRESS_REGENERATION=ON \
    ..
make %{?_smp_mflags}

%install
[ -f /opt/ros/%{ros_distro}/setup.sh ] && source /opt/ros/%{ros_distro}/setup.sh || true
export PYTHONPATH=/opt/ros/%{ros_distro}/lib/python%{python3_version}/site-packages${PYTHONPATH:+:$PYTHONPATH}
export PKG_CONFIG_PATH=/opt/ros/%{ros_distro}/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}
cd cartographer_ros
cd .obj
make install DESTDIR=%{buildroot}

%files
/opt/ros/%{ros_distro}

%changelog
* Tue Sep 29 2026 ai-importer <ai-importer@openeuler.org> - 2.0.9002-4
- Define thread safety annotation macros via shim header (GUARDED_BY etc.)

* Tue Sep 29 2026 ai-importer <ai-importer@openeuler.org> - 2.0.9002-3
- Force-include absl/base/thread_annotations.h for GUARDED_BY macro definition

* Tue Sep 29 2026 ai-importer <ai-importer@openeuler.org> - 2.0.9002-2
- Remove obsolete fix-multiple-definition-error patch (already applied upstream)
- Bump Release to avoid NVR conflict with failed EUR SRPM rebuild

* Sun Sep 20 2026 ai-importer <ai-importer@openeuler.org> - 2.0.9002-1
- Initial import (ROS batch)