summaryrefslogtreecommitdiff
path: root/plansys2-domain-expert.spec
blob: 831779a285dc957d00250da9861a7812a3a23f76 (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
%define ros_distro humble
%define RosPkgName plansys2-domain-expert
%define src_version 2.0.9-1

Name:           ros-%{ros_distro}-%{RosPkgName}
Version:        2.0.9
Release:        3%{?dist}
Summary:        This package contains the Domain Expert module for the ROS2 Planning System
License:        Apache License, Version 2.0
URL:            https://github.com/IntelligentRoboticsLabs/ros2_planning_system/tree/humble-devel
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}-ament-index-cpp
BuildRequires:  ros-%{ros_distro}-lifecycle-msgs
BuildRequires:  ros-%{ros_distro}-pluginlib
BuildRequires:  ros-%{ros_distro}-plansys2-core
BuildRequires:  ros-%{ros_distro}-plansys2-msgs
BuildRequires:  ros-%{ros_distro}-plansys2-pddl-parser
BuildRequires:  ros-%{ros_distro}-rclcpp
BuildRequires:  ros-%{ros_distro}-rclcpp-action
BuildRequires:  ros-%{ros_distro}-rclcpp-lifecycle
BuildRequires:  ros-%{ros_distro}-std-msgs

Requires:       ros-%{ros_distro}-ros-workspace
Requires:       ros-%{ros_distro}-ament-cmake
Requires:       ros-%{ros_distro}-ament-index-cpp
Requires:       ros-%{ros_distro}-lifecycle-msgs
Requires:       ros-%{ros_distro}-pluginlib
Requires:       ros-%{ros_distro}-plansys2-core
Requires:       ros-%{ros_distro}-plansys2-msgs
Requires:       ros-%{ros_distro}-plansys2-pddl-parser
Requires:       ros-%{ros_distro}-rclcpp
Requires:       ros-%{ros_distro}-rclcpp-action
Requires:       ros-%{ros_distro}-rclcpp-lifecycle
Requires:       ros-%{ros_distro}-std-msgs

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

%description
This package contains the Domain Expert module for the ROS2 Planning System.
The plansys2-popf-plan-solver plugin is bundled from the same source tree to
avoid the broken ros-humble-popf transitive dependency in the additional repo
(the repo's plansys2-popf-plan-solver RPM requires unavailable ros-humble-popf;
popf is only an exec_depend of popf_plan_solver, not a build dependency).

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

%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}

# Build plansys2_popf_plan_solver first (popf is only a runtime exec_depend,
# not a build dependency — the source invokes "ros2 run popf popf" as a subprocess)
cd plansys2_popf_plan_solver
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}
make install DESTDIR=%{_builddir}/popf_stage
cd ../..

# Build plansys2_domain_expert with popf_plan_solver available from stage
# ament_cmake 在 find_package(ament_cmake) 时会从 AMENT_PREFIX_PATH 重建
# CMAKE_PREFIX_PATH,但 stage 目录里的 popf_plan_solver ament-index 注册未被
# 识别,导致 stage 路径被丢弃、find_package(plansys2_popf_plan_solver) 找不到
# Config 文件。用 <pkg>_DIR cache 变量直接指向 Config 目录绕过该机制(优先级最高)。
export POPF_PREFIX=%{_builddir}/popf_stage/opt/ros/%{ros_distro}
export AMENT_PREFIX_PATH="$POPF_PREFIX:/opt/ros/%{ros_distro}"
export plansys2_popf_plan_solver_DIR="$POPF_PREFIX/share/plansys2_popf_plan_solver/cmake"
cd plansys2_domain_expert
mkdir -p .obj && cd .obj
%cmake3 \
    -DCMAKE_INSTALL_PREFIX="/opt/ros/%{ros_distro}" \
    -DAMENT_PREFIX_PATH="$POPF_PREFIX:/opt/ros/%{ros_distro}" \
    -DCMAKE_PREFIX_PATH="$POPF_PREFIX:/opt/ros/%{ros_distro}" \
    -Dplansys2_popf_plan_solver_DIR="$POPF_PREFIX/share/plansys2_popf_plan_solver/cmake" \
    -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}

# Install plansys2_popf_plan_solver
cd plansys2_popf_plan_solver/.obj
make install DESTDIR=%{buildroot}

# Install plansys2_domain_expert
cd ../../plansys2_domain_expert/.obj
make install DESTDIR=%{buildroot}

%files
/opt/ros/%{ros_distro}

%changelog
* Thu Sep 24 2026 ai-importer <ai-importer@openeuler.org> - 2.0.9-3
- Pass -Dplansys2_popf_plan_solver_DIR to domain_expert cmake so it
  locates the staged popf_plan_solver Config.cmake (ament_cmake rebuilds
  CMAKE_PREFIX_PATH from AMENT_PREFIX_PATH at find_package(ament_cmake)
  time and drops the build-tree stage prefix)

* Thu Sep 24 2026 ai-importer <ai-importer@openeuler.org> - 2.0.9-2
- Bundle plansys2-popf-plan-solver from the same source tree instead of
  depending on the broken additional-repo RPM (requires unavailable
  ros-humble-popf; popf is exec_depend only, not a build dep)
- Add ros-humble-pluginlib BuildRequires/Requires for popf_plan_solver
- Remove ros-humble-plansys2-popf-plan-solver from BuildRequires/Requires

* Thu Sep 24 2026 ai-importer <ai-importer@openeuler.org> - 2.0.9-1
- Initial import (ROS batch)