blob: 91497016d9f78eb412e2bc0d9f87c57484b1fc73 (
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
|
%define ros_distro humble
%define RosPkgName kuka-iiqka-eac-driver
%define src_version 1.1.0
Name: ros-%{ros_distro}-%{RosPkgName}
Version: 1.1.0
Release: 4%{?dist}
Summary: A ROS2 hardware interface for use with KUKA iiQKA OS
License: Apache-2.0
URL: https://github.com/kroshu/kuka_drivers.git
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}-controller-manager-msgs
BuildRequires: ros-%{ros_distro}-hardware-interface
BuildRequires: ros-%{ros_distro}-pluginlib
BuildRequires: ros-%{ros_distro}-std-msgs
BuildRequires: ros-%{ros_distro}-kuka-drivers-core
BuildRequires: ros-%{ros_distro}-kuka-external-control-sdk
BuildRequires: grpc-devel
BuildRequires: protobuf-devel
Requires: ros-%{ros_distro}-ros-workspace
Requires: ros-%{ros_distro}-ament-cmake
Requires: ros-%{ros_distro}-controller-manager
Requires: ros-%{ros_distro}-controller-manager-msgs
Requires: ros-%{ros_distro}-effort-controllers
Requires: ros-%{ros_distro}-hardware-interface
Requires: ros-%{ros_distro}-joint-state-broadcaster
Requires: ros-%{ros_distro}-joint-trajectory-controller
Requires: ros-%{ros_distro}-pluginlib
Requires: ros-%{ros_distro}-std-msgs
Requires: ros-%{ros_distro}-joint-group-impedance-controller
Requires: ros-%{ros_distro}-kuka-control-mode-handler
Requires: ros-%{ros_distro}-kuka-drivers-core
Requires: ros-%{ros_distro}-kuka-event-broadcaster
Requires: ros-%{ros_distro}-kuka-external-control-sdk
Requires: ros-%{ros_distro}-kuka-lbr-iisy-support
Requires: grpc
Requires: protobuf
Provides: %{name}-devel = %{version}-%{release}
Provides: %{name}-doc = %{version}-%{release}
Provides: %{name}-runtime = %{version}-%{release}
%description
A ROS2 hardware interface for use with KUKA iiQKA OS
%prep
%autosetup -n %{RosPkgName}-%{src_version}
# kuka-external-control-sdk 静态库 (libkuka-external-control-sdk.a) 内部使用
# abseil CHECK/LOG 宏,其导出的 CMake config 漏列 absl_log_internal_check_op
# 和 absl_log_internal_message 传递依赖,链接时报 "DSO missing from command
# line"(LogMessageFatal→message、MakeCheckOpString→check_op)。显式追加到每个
# target_link_libraries,absl_log_internal_format 作保险。对齐兄弟包
# kuka-external-control-sdk-examples spec(该包已用同法构建成功)。
sed -i 's/Kuka::kuka-external-control-sdk/Kuka::kuka-external-control-sdk -labsl_log_internal_check_op -labsl_log_internal_message -labsl_log_internal_format/g' \
kuka_iiqka_eac_driver/CMakeLists.txt
%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}
# 源码 tarball 含完整 kuka_drivers.git 单体仓库。eulermaker 源中
# ros-humble-kuka-drivers-core 仅 1.0.0,缺 1.1.0 新增的
# joint_interface_validator.hpp 头文件及对应库符号
# (ValidateJointCommandInterfaces / ValidateJointStateInterfaces),
# 导致 hardware_interface.cpp 编译期 fatal error。先从源码编译安装
# kuka_drivers_core 1.1.0 到临时前缀,再让 find_package 优先命中 1.1.0。
cd kuka_drivers_core
mkdir -p .obj && cd .obj
%cmake3 \
-DCMAKE_INSTALL_PREFIX="/tmp/kdc_install" \
-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}
make install
cd ../..
export AMENT_PREFIX_PATH="/tmp/kdc_install:/opt/ros/%{ros_distro}"
export LD_LIBRARY_PATH="/tmp/kdc_install/lib:/opt/ros/%{ros_distro}/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
cd kuka_iiqka_eac_driver
mkdir -p .obj && cd .obj
%cmake3 \
-DCMAKE_INSTALL_PREFIX="/opt/ros/%{ros_distro}" \
-DAMENT_PREFIX_PATH="/tmp/kdc_install;/opt/ros/%{ros_distro}" \
-DCMAKE_PREFIX_PATH="/tmp/kdc_install;/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 kuka_iiqka_eac_driver
cd .obj
make install DESTDIR=%{buildroot}
%files
/opt/ros/%{ros_distro}
%changelog
* Wed Sep 23 2026 ai-importer <ai-importer@openeuler.org> - 1.1.0-4
- %build 先从源码编译安装 kuka_drivers_core 1.1.0 到临时前缀
/tmp/kdc_install:eulermaker 源中 ros-humble-kuka-drivers-core 仅
1.0.0,缺 1.1.0 新增的 joint_interface_validator.hpp 头文件及对应库
符号 (ValidateJointCommandInterfaces / ValidateJointStateInterfaces),
导致 hardware_interface.cpp 编译期 fatal error。源码 tarball 含完整
kuka_drivers.git 单体仓库,kuka_drivers_core 子目录即为 1.1.0 源码。
编译安装到临时前缀后,通过 CMAKE_PREFIX_PATH / AMENT_PREFIX_PATH
让 find_package(kuka_drivers_core) 优先命中 1.1.0 版本。
* Wed Sep 23 2026 ai-importer <ai-importer@openeuler.org> - 1.1.0-3
- 增加 grpc-devel BuildRequires:源码 hardware_interface.cpp / robot_manager_node.cpp
直接 #include <grpcpp/create_channel.h>,编译期找不到该头文件(对齐兄弟包
kuka-external-control-sdk / examples 已验证可用的 grpc-devel)
- 增加 protobuf-devel BuildRequires 与 grpc/protobuf Requires:driver 链接
libkuka-external-control-sdk.a 静态库,其内部引用 grpc/protobuf 符号,
链接期需 -lgrpc++/-lprotobuf,运行时需 grpc/protobuf
- %prep 注入 -labsl_log_internal_* 到 CMake link:SDK 静态库的 CMake config
漏列 abseil 传递依赖,会导致链接报 "DSO missing from command line",
对齐 kuka-external-control-sdk-examples spec 已验证的修复法
* Wed Sep 23 2026 ai-importer <ai-importer@openeuler.org> - 1.1.0-2
- Move exec_depend packages from BuildRequires to Requires-only
(kuka-lbr-iisy-support pulls kuka-gazebo transitively at builddep;
these packages have no find_package() in CMakeLists.txt)
* Wed Sep 23 2026 ai-importer <ai-importer@openeuler.org> - 1.1.0-1
- Initial import (ROS batch)
|