summaryrefslogtreecommitdiff
path: root/openni2-camera.spec
blob: 7c08d23dff21cfe39325570372492af35dd9dd17 (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
%define ros_distro humble
%define RosPkgName openni2-camera
%define src_version 2.0.3-1
%define openni2_version 2.2.0.33

Name:           ros-%{ros_distro}-%{RosPkgName}
Version:        2.0.3
Release:        2%{?dist}
Summary:        Drivers for the Asus Xtion and Primesense Devices
License:        BSD
URL:            https://github.com/ros-drivers/openni2_camera/tree/iron
Source0:        %{RosPkgName}-%{src_version}.tar.gz
Source1:        OpenNI2-%{openni2_version}.tar.gz
Patch0:         openni2-aarch64-support.patch

%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:  libusbx-devel
BuildRequires:  systemd-devel
BuildRequires:  ros-%{ros_distro}-ament-cmake
BuildRequires:  ros-%{ros_distro}-builtin-interfaces
BuildRequires:  ros-%{ros_distro}-camera-info-manager
BuildRequires:  ros-%{ros_distro}-depth-image-proc
BuildRequires:  ros-%{ros_distro}-image-transport
BuildRequires:  ros-%{ros_distro}-rclcpp
BuildRequires:  ros-%{ros_distro}-rclcpp-components
BuildRequires:  ros-%{ros_distro}-rosidl-default-generators
BuildRequires:  ros-%{ros_distro}-rosidl-default-runtime
BuildRequires:  ros-%{ros_distro}-sensor-msgs
BuildRequires:  pkgconfig

Requires:       ros-%{ros_distro}-ros-workspace
Requires:       ros-%{ros_distro}-ament-cmake
Requires:       ros-%{ros_distro}-builtin-interfaces
Requires:       ros-%{ros_distro}-camera-info-manager
Requires:       ros-%{ros_distro}-depth-image-proc
Requires:       ros-%{ros_distro}-image-transport
Requires:       ros-%{ros_distro}-rclcpp
Requires:       ros-%{ros_distro}-rclcpp-components
Requires:       ros-%{ros_distro}-rosidl-default-runtime
Requires:       ros-%{ros_distro}-sensor-msgs
Requires:       libusbx
Requires:       systemd-libs

Provides:       libopenni2-devel = %{openni2_version}
Provides:       libopenni2-dev = %{openni2_version}

%description
Drivers for the Asus Xtion and Primesense Devices. For using a kinect
  with ROS, try the

%prep
%setup -q -n %{RosPkgName}-%{src_version} -a1
cd OpenNI2-%{openni2_version}
patch -p1 < %{_sourcedir}/openni2-aarch64-support.patch
cd ..

%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 vendored OpenNI2 SDK (libopenni2 not available in openEuler repos)
cd OpenNI2-%{openni2_version}
make Source/Core %{?_smp_mflags}
OPENNI2_PREFIX=%{_builddir}/openni2_install
mkdir -p $OPENNI2_PREFIX/lib $OPENNI2_PREFIX/include/openni2 $OPENNI2_PREFIX/lib/pkgconfig
cp Bin/*/Release/libOpenNI2.so $OPENNI2_PREFIX/lib/
cp Include/*.h $OPENNI2_PREFIX/include/openni2/
cat > $OPENNI2_PREFIX/lib/pkgconfig/libopenni2.pc << PCEOF
prefix=$OPENNI2_PREFIX
exec_prefix=\${prefix}
libdir=\${exec_prefix}/lib
includedir=\${prefix}/include/openni2

Name: libopenni2
Description: OpenNI2 framework
Version: %{openni2_version}
Libs: -L\${libdir} -lOpenNI2
Cflags: -I\${includedir}
PCEOF
cp $OPENNI2_PREFIX/lib/pkgconfig/libopenni2.pc $OPENNI2_PREFIX/lib/pkgconfig/openni2.pc
export PKG_CONFIG_PATH=$OPENNI2_PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH
export LD_LIBRARY_PATH=$OPENNI2_PREFIX/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
cd ..

# Build openni2_camera ROS package
cd openni2_camera
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 openni2_camera
cd .obj
make install DESTDIR=%{buildroot}

# Install vendored OpenNI2 library and headers
cd ../..
mkdir -p %{buildroot}/%{_libdir}
mkdir -p %{buildroot}/%{_includedir}/openni2
cp OpenNI2-%{openni2_version}/Bin/*/Release/libOpenNI2.so %{buildroot}/%{_libdir}/
cp OpenNI2-%{openni2_version}/Include/*.h %{buildroot}/%{_includedir}/openni2/

# Install OpenNI2 drivers if available
mkdir -p %{buildroot}/%{_libdir}/OpenNI2/Drivers
for drv in OpenNI2-%{openni2_version}/Bin/*/Release/libPS*.so \
           OpenNI2-%{openni2_version}/Bin/*/Release/libOniFile.so \
           OpenNI2-%{openni2_version}/Bin/*/Release/libDummyDevice.so; do
    [ -f "$drv" ] && cp "$drv" %{buildroot}/%{_libdir}/OpenNI2/Drivers/ || true
done

%files
/opt/ros/%{ros_distro}
%{_libdir}/libOpenNI2.so
%{_libdir}/OpenNI2
%{_includedir}/openni2

%changelog
* Thu Oct 22 2026 ai-importer <ai-importer@openeuler.org> - 2.0.3-2
- Vendor OpenNI2 SDK (libopenni2 not available in openEuler)
- Add aarch64 platform support to OpenNI2 build system
- Replace libopenni2-dev BuildRequires/Requires with vendored library

* Thu Oct 22 2026 ai-importer <ai-importer@openeuler.org> - 2.0.3-1
- Initial import (ROS batch)