# ---------------------------------------------------------------------------
# Open3D 0.19.0 — packaged as "libopen3d-dev".
#
# The rpm name is dictated by the consumer that pulls it in: the ROS package
# open3d-conversions declares libopen3d-dev in package.xml and
# cmake `find_package(Open3D REQUIRED)`. The build-time requirement is spelled
# literally as "libopen3d-dev" in the generated ros spec, so this package keeps
# that name and ships the full development surface (headers, CMake package
# config, pkgconfig and the shared library) in a single binary package.
#
# The COPR project runs builds with networking disabled (enable_net=false), so
# every ExternalProject dependency of Open3D is pre-fetched into the bundled
# 3rdparty_downloads/ cache directory (inside the source tarball). CMake's
# ExternalProject skips the download when the archive is already present in
# DOWNLOAD_DIR and the hash matches. A handful of upstream URLs cannot be
# reached (gitlab.com archive endpoints are behind a Cloudflare challenge,
# github.com release assets and plain git clones need live network access), so
# those are repointed at the bundled archives in %prep.
# ---------------------------------------------------------------------------
%global debug_package %{nil}
Name: libopen3d-dev
Version: 0.19.0
Release: 1%{?dist}
Summary: Development files for Open3D, a modern 3D data processing library
License: MIT
URL: https://github.com/isl-org/Open3D
Source0: https://github.com/isl-org/Open3D/archive/refs/tags/v%{version}.tar.gz#/%{name}-%{version}.tar.gz
Group: Development/Libraries
Packager: openEuler Builder
BuildRequires: cmake
BuildRequires: gcc
BuildRequires: gcc-c++
BuildRequires: make
BuildRequires: pkgconfig
BuildRequires: assimp-devel
BuildRequires: cppzmq-devel
BuildRequires: jsoncpp-devel
BuildRequires: lapack-devel
BuildRequires: libcurl-devel
BuildRequires: libjpeg-turbo-devel
BuildRequires: libpng-devel
BuildRequires: tbb-devel
BuildRequires: zeromq-devel
BuildRequires: zlib-devel
BuildRequires: mesa-libGL-devel
BuildRequires: libX11-devel
BuildRequires: libXcursor-devel
BuildRequires: libXext-devel
BuildRequires: libXi-devel
BuildRequires: libXinerama-devel
BuildRequires: libXrandr-devel
BuildRequires: libXxf86vm-devel
BuildRequires: xorg-x11-proto-devel
%description
Open3D is an open-source library that supports rapid development of software
that deals with 3D data. The Open3D frontend exposes a set of carefully
selected data structures and algorithms in both C++ and Python.
This package contains the shared library together with the C++ development
files: headers, the Open3D CMake package configuration and the pkgconfig file.
%prep
%autosetup -n %{name}-%{version}
# ---------------------------------------------------------------------------
# Repoint the third-party sources that cannot be fetched offline in the COPR
# build environment at the archives shipped in 3rdparty_downloads/.
# ---------------------------------------------------------------------------
# eigen: upstream pins a gitlab.com commit archive (unreachable here); use the
# equivalent 3.4.0 release tarball that is bundled instead.
sed -i \
-e 's#https://gitlab.com/libeigen/eigen/-/archive/da7909592376c893dabbc4b6453a8ffe46b1eb8e/eigen-da7909592376c893dabbc4b6453a8ffe46b1eb8e.tar.gz#"${OPEN3D_THIRD_PARTY_DOWNLOAD_DIR}/eigen/eigen-3.4.0.tar.gz"#' \
-e 's#SHA256=37f71e1d7c408e2cc29ef90dcda265e2de0ad5ed6249d7552f6c33897eafd674#SHA256=8586084f71f9bde545ee7fa6d00288b264a2b7ac3607b974e54d13e7162c1c72#' \
3rdparty/eigen/eigen.cmake
# msgpack-c: upstream URL is a GitHub release asset (github.com is not
# reachable); the bundled archive is the tag archive of the same release.
sed -i \
-e 's#https://github.com/msgpack/msgpack-c/releases/download/cpp-3.3.0/msgpack-3.3.0.tar.gz#"${OPEN3D_THIRD_PARTY_DOWNLOAD_DIR}/msgpack/msgpack-3.3.0.tar.gz"#' \
-e 's#SHA256=6e114d12a5ddb8cb11f669f83f32246e484a8addd0ce93f274996f1941c1f07b#SHA256=754c3ace499a63e45b77ef4bcab4ee602c2c414f58403bce826b76ffc2f77d0b#' \
3rdparty/msgpack/msgpack_build.cmake
# uvatlas: DirectX-Headers/DirectXMath are git clones, which ExternalProject
# cannot serve from DOWNLOAD_DIR. Use the equivalent bundled tag archives.
sed -i \
-e 's#GIT_REPOSITORY https://github.com/microsoft/DirectX-Headers.git#URL "${OPEN3D_THIRD_PARTY_DOWNLOAD_DIR}/uvatlas/DirectX-Headers.tar.gz"\n URL_HASH SHA256=bf0183981e505336e918609374907c934b99eb61c0826d75a5649f41568abc4b#' \
-e 's#GIT_REPOSITORY https://github.com/microsoft/DirectXMath.git#URL "${OPEN3D_THIRD_PARTY_DOWNLOAD_DIR}/uvatlas/DirectXMath.tar.gz"\n URL_HASH SHA256=b2c5b419ca2c567860f7c204c9c0890573e8a58c8d877473e4f3ba6b851ca4ce#' \
-e '/GIT_TAG v1\.606\.3/d' \
-e '/GIT_TAG may2022/d' \
-e '/GIT_SHALLOW TRUE/d' \
3rdparty/uvatlas/uvatlas.cmake
# glfw: only the X11 backend is used on openEuler; wayland support would pull
# in a further set of build requirements for no benefit.
sed -i 's#-DGLFW_BUILD_DOCS=OFF#-DGLFW_BUILD_DOCS=OFF\n -DGLFW_BUILD_WAYLAND=OFF#' \
3rdparty/glfw/glfw.cmake
%build
%cmake \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=ON \
-DDEVELOPER_BUILD=OFF \
-DBUILD_CUDA_MODULE=OFF \
-DBUILD_SYCL_MODULE=OFF \
-DBUILD_ISPC_MODULE=OFF \
-DBUILD_GUI=OFF \
-DBUILD_PYTHON_MODULE=OFF \
-DBUILD_UNIT_TESTS=OFF \
-DBUILD_BENCHMARKS=OFF \
-DBUILD_EXAMPLES=OFF \
-DBUILD_WEBRTC=OFF \
-DBUILD_JUPYTER_EXTENSION=OFF \
-DBUILD_LIBREALSENSE=OFF \
-DBUILD_AZURE_KINECT=OFF \
-DBUILD_TENSORFLOW_OPS=OFF \
-DBUILD_PYTORCH_OPS=OFF \
-DWITH_OPENMP=ON \
-DWITH_IPP=OFF \
-DENABLE_HEADLESS_RENDERING=OFF \
-DUSE_BLAS=ON \
-DUSE_SYSTEM_BLAS=ON \
-DLAPACKE_DIR=%{_prefix} \
-DUSE_SYSTEM_ASSIMP=ON \
-DUSE_SYSTEM_JSONCPP=ON \
-DUSE_SYSTEM_TBB=ON \
-DUSE_SYSTEM_ZEROMQ=ON \
-DUSE_SYSTEM_CURL=ON \
-DUSE_SYSTEM_PNG=ON \
-DUSE_SYSTEM_JPEG=ON \
-DUSE_SYSTEM_EIGEN3=OFF \
-DUSE_SYSTEM_FMT=OFF \
-DUSE_SYSTEM_MSGPACK=OFF \
-DUSE_SYSTEM_NANOFLANN=OFF \
-DUSE_SYSTEM_QHULLCPP=OFF \
-DUSE_SYSTEM_TINYGLTF=OFF \
-DUSE_SYSTEM_TINYOBJLOADER=OFF \
-DUSE_SYSTEM_LIBLZF=OFF \
-DUSE_SYSTEM_GLFW=OFF \
-DUSE_SYSTEM_GLEW=OFF \
-DUSE_SYSTEM_EMBREE=OFF \
-DUSE_SYSTEM_VTK=OFF \
-DBUILD_VTK_FROM_SOURCE=ON
# openEuler's cmake configure macro configures IN-SOURCE: it does not pass
# -S/-B, so the cache lands in the unpacked source directory
# (BUILD/libopen3d-dev-0.19.0). The cmake_build / cmake_install macros from
# the same macro set, however, always use the out-of-source vpath directory
# (the _vpath_builddir value, i.e. aarch64-openEuler-linux-gnu), which the
# configure step never created -- hence "is not a directory". Drive the
# already-configured in-source tree explicitly instead.
%{__cmake} --build . %{?_smp_mflags} --verbose
%install
DESTDIR=%{buildroot} %{__cmake} --install .
%files
%license LICENSE
%doc README.md
%{_libdir}/libOpen3D.so*
%{_includedir}/open3d/
%{_libdir}/cmake/Open3D/
%{_libdir}/pkgconfig/Open3D.pc
%changelog
* Tue Sep 22 2026 ai-importer - 0.19.0-1
- Initial import (ROS batch, dependency of open3d-conversions)