# Generated by rust2rpm 27 %bcond check 0 %global debug_package %{nil} %define __brp_mangle_shebangs %{nil} %define __brp_strip %{nil} %define __brp_strip_comment_note %{nil} %define __brp_strip_static_archive %{nil} %define __brp_strip_lto %{nil} %global crate iceoryx2 %global crate_instdir %{_datadir}/cargo/registry/%{crate}-%{version} Name: rust-iceoryx2 Version: 0.7.0 Release: 9%{?dist} Summary: Iceoryx2: Lock-Free Zero-Copy Interprocess Communication License: MIT OR Apache-2.0 URL: https://crates.io/crates/iceoryx2 Source0: iceoryx2-%{version}-vendor.tar.gz # iceoryx dependency required for C++ bindings Source1: https://github.com/eclipse-iceoryx/iceoryx/archive/refs/tags/v2.95.7.tar.gz BuildRequires: cargo-rpm-macros >= 24 BuildRequires: clang-devel BuildRequires: python3-devel BuildRequires: cbindgen BuildRequires: cmake >= 3.22 BuildRequires: gcc-c++ BuildRequires: libacl-devel BuildRequires: libatomic %global _description %{expand: Iceoryx2: Lock-Free Zero-Copy Interprocess Communication.} %description %{_description} %package devel Summary: %{summary} %description devel %{_description} This package contains library source intended for building other packages which use the "%{crate}" crate. %files devel %license LICENSE-APACHE LICENSE-MIT %doc README.md %{crate_instdir}/ %package -n %{name}+default-devel Summary: %{summary} %description -n %{name}+default-devel %{_description} This package contains library source intended for building other packages which use the "default" feature of the "%{crate}" crate. %files -n %{name}+default-devel %ghost %{crate_instdir}/Cargo.toml %package -n %{name}+dev_permissions-devel Summary: %{summary} %description -n %{name}+dev_permissions-devel %{_description} This package contains library source intended for building other packages which use the "dev_permissions" feature of the "%{crate}" crate. %files -n %{name}+dev_permissions-devel %ghost %{crate_instdir}/Cargo.toml %package -n %{name}+libc_platform-devel Summary: %{summary} %description -n %{name}+libc_platform-devel %{_description} This package contains library source intended for building other packages which use the "libc_platform" feature of the "%{crate}" crate. %files -n %{name}+libc_platform-devel %ghost %{crate_instdir}/Cargo.toml %package -n %{name}+logger_log-devel Summary: %{summary} %description -n %{name}+logger_log-devel %{_description} This package contains library source intended for building other packages which use the "logger_log" feature of the "%{crate}" crate. %files -n %{name}+logger_log-devel %ghost %{crate_instdir}/Cargo.toml %package -n %{name}+logger_tracing-devel Summary: %{summary} %description -n %{name}+logger_tracing-devel %{_description} This package contains library source intended for building other packages which use the "logger_tracing" feature of the "%{crate}" crate. %files -n %{name}+logger_tracing-devel %ghost %{crate_instdir}/Cargo.toml %package -n iceoryx2-c-devel Summary: Development files for iceoryx2 C bindings %description -n iceoryx2-c-devel Development headers and libraries for iceoryx2 C bindings. Provides C API for zero-copy inter-process communication. %files -n iceoryx2-c-devel %{_includedir}/iox2/ %{_libdir}/libiceoryx2_ffi_c.a %{_libdir}/libiceoryx2_ffi_c.so %{_libdir}/cmake/iceoryx2-c/ %{_datadir}/doc/iceoryx2-c/ %package -n iceoryx2-c Summary: Iceoryx2 C shared library Provides: libiceoryx2_ffi_c.so()(64bit) %description -n iceoryx2-c Shared library for iceoryx2 C bindings. Provides C API for zero-copy inter-process communication. %files -n iceoryx2-c %{_libdir}/libiceoryx2_ffi_c.so %package -n iceoryx2-cxx-devel Summary: Development files for iceoryx2 C++ bindings Requires: iceoryx2-c-devel = %{version}-%{release} Requires: iceoryx-hoofs-devel = %{version}-%{release} %description -n iceoryx2-cxx-devel Development headers and libraries for iceoryx2 C++ bindings. Provides modern C++17 API for zero-copy inter-process communication. %files -n iceoryx2-cxx-devel %{_includedir}/iceoryx2/ %{_libdir}/libiceoryx2_cxx.a %{_libdir}/libiceoryx2_cxx.so %{_libdir}/cmake/iceoryx2-cxx/ %{_libdir}/cmake/iceoryx2-bb-cxx/ %{_libdir}/cmake/iceoryx2-cmake-modules/ %{_datadir}/doc/iceoryx2-bb-cxx/ %{_datadir}/doc/iceoryx2-cmake-modules/ %{_datadir}/doc/iceoryx2-cxx/ %package -n iceoryx2-cxx Summary: Iceoryx2 C++ shared library Requires: iceoryx2-c = %{version}-%{release} Requires: iceoryx-hoofs = %{version}-%{release} %description -n iceoryx2-cxx Shared library for iceoryx2 C++ bindings. Provides modern C++17 API for zero-copy inter-process communication. %files -n iceoryx2-cxx %{_libdir}/libiceoryx2_cxx.so %package -n iceoryx-hoofs Summary: Iceoryx hoofs base library License: Apache-2.0 %description -n iceoryx-hoofs Base library for iceoryx providing fundamental building blocks. Required runtime dependency for iceoryx2 C++ bindings. %files -n iceoryx-hoofs %{_libdir}/libiceoryx_hoofs.so* %{_libdir}/libiceoryx_platform.so* %package -n iceoryx-hoofs-devel Summary: Development files for iceoryx hoofs Requires: iceoryx-hoofs = %{version}-%{release} %description -n iceoryx-hoofs-devel Development headers and libraries for iceoryx hoofs. %files -n iceoryx-hoofs-devel %{_includedir}/iceoryx_hoofs/ %{_includedir}/iceoryx_platform/ %{_libdir}/libiceoryx_hoofs.a %{_libdir}/libiceoryx_platform.a %{_libdir}/cmake/iceoryx_hoofs/ %{_libdir}/cmake/iceoryx_platform/ %package -n iceoryx2-cli Summary: Command-line tools for iceoryx2 Requires: iceoryx2-c = %{version}-%{release} %description -n iceoryx2-cli Command-line interface tools for iceoryx2 providing utilities for node management, service discovery, data recording/replay, and tunneling. %files -n iceoryx2-cli %{_bindir}/iox2 %{_bindir}/iox2-node %{_bindir}/iox2-service %{_bindir}/iox2-config %{_bindir}/iox2-tunnel %prep %autosetup -n %{crate}-%{version} -p1 # Fix problematic shebang that causes dependency on /usr/local/bin/python sed -i 's|#!/usr/local/bin/python|#!/usr/bin/python3|' vendor/pyo3/emscripten/runner.py # Calculate and update the checksum dynamically for the modified file NEW_CHECKSUM=$(sha256sum vendor/pyo3/emscripten/runner.py | cut -d' ' -f1) sed -i "s/\"emscripten\/runner\.py\":\"[^\"]*\"/\"emscripten\/runner.py\":\"$NEW_CHECKSUM\"/" vendor/pyo3/.cargo-checksum.json # Extract iceoryx source for C++ bindings tar -xf %{SOURCE1} mv iceoryx-2.95.7 iceoryx # Remove workspace members that have external dependencies or complex build requirements # Keep iceoryx2-cli, iceoryx2-tunnels-zenoh, and record-and-replay since dependencies are vendored sed -i '/iceoryx2-tunnels\/end-to-end-testing/d' Cargo.toml sed -i '/iceoryx2-ffi\/python/d' Cargo.toml sed -i '/examples/d' Cargo.toml sed -i '/benchmarks\//d' Cargo.toml # Comment out entire windows-sys workspace dependency block to avoid resolution on non-Windows sed -i '/^windows-sys = /,/^]/s/^/#/' Cargo.toml # Also comment out workspace references to windows-sys in individual crates find . -name "Cargo.toml" -exec sed -i 's/^windows-sys = { workspace = true }/#&/' {} \; # Update cbindgen version to accept system versions 0.28 and 0.29 sed -i 's/cbindgen = { version = "0\.27\.0" }/cbindgen = { version = ">=0.27, <0.30" }/' Cargo.toml %cargo_prep mkdir -p .cargo cat > .cargo/config.toml << 'EOF' [source.crates-io] replace-with = "vendored-sources" [source.vendored-sources] directory = "vendor" EOF cat >> Cargo.toml << 'EOF' [profile.rpm] inherits = "release" EOF %generate_buildrequires # Skip automatic cargo buildrequires generation since we have vendored sources # and will manually specify BuildRequires echo "cargo-rpm-macros >= 24" %build %cargo_build -f libc_platform # Build CLI tools directly with cargo cargo build --profile rpm --package iceoryx2-cli # Build iceoryx_platform and iceoryx_hoofs first # Install to temporary staging area so hoofs can find platform mkdir -p iceoryx-staging mkdir -p build-iceoryx-platform cd iceoryx/iceoryx_platform cmake -B ../../build-iceoryx-platform \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=../../iceoryx-staging \ -DBUILD_SHARED_LIBS=ON cmake --build ../../build-iceoryx-platform cmake --install ../../build-iceoryx-platform cd ../.. # Build static libraries separately mkdir -p build-iceoryx-platform-static cd iceoryx/iceoryx_platform cmake -B ../../build-iceoryx-platform-static \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=../../iceoryx-staging \ -DBUILD_SHARED_LIBS=OFF cmake --build ../../build-iceoryx-platform-static cmake --install ../../build-iceoryx-platform-static cd ../.. mkdir -p build-iceoryx-hoofs cd iceoryx/iceoryx_hoofs cmake -B ../../build-iceoryx-hoofs \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=../../iceoryx-staging \ -DCMAKE_PREFIX_PATH=../../iceoryx-staging \ -DBUILD_SHARED_LIBS=ON cmake --build ../../build-iceoryx-hoofs cmake --install ../../build-iceoryx-hoofs cd ../.. # Build static libraries separately mkdir -p build-iceoryx-hoofs-static cd iceoryx/iceoryx_hoofs cmake -B ../../build-iceoryx-hoofs-static \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=../../iceoryx-staging \ -DCMAKE_PREFIX_PATH=../../iceoryx-staging \ -DBUILD_SHARED_LIBS=OFF cmake --build ../../build-iceoryx-hoofs-static cmake --install ../../build-iceoryx-hoofs-static cd ../.. # Build C and C++ libraries using CMake mkdir -p build-cmake cd build-cmake %cmake .. \ -DBUILD_CXX=ON \ -DBUILD_EXAMPLES=OFF \ -DBUILD_TESTING=OFF \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_PREFIX_PATH=$PWD/../iceoryx-staging %cmake_build cd .. %install # Install library files manually since this is a library crate mkdir -p %{buildroot}%{crate_instdir} # Create a standalone Cargo.toml without workspace inheritance cat > %{buildroot}%{crate_instdir}/Cargo.toml << 'EOF' [package] name = "iceoryx2" description = "iceoryx2: Lock-Free Zero-Copy Interprocess Communication" categories = ["network-programming"] edition = "2021" homepage = "https://iceoryx.io" keywords = ["zero-copy", "communication", "ipc", "publish-subscribe", "request-response"] license = "MIT OR Apache-2.0" readme = "README.md" repository = "https://github.com/eclipse-iceoryx/iceoryx2" rust-version = "1.81" version = "0.7.0" [features] # Enables https://crates.io/crates/log as default logger logger_log = ["iceoryx2-bb-log/logger_log"] # Enables https://crates.io/crates/tracing as default logger logger_tracing = ["iceoryx2-bb-log/logger_tracing"] # The permissions of all resources will be set to read, write, execute for everyone. # This shall not be used in production and is meant to be enabled in a docker environment # with inconsistent user configuration. dev_permissions = ["iceoryx2-cal/dev_permissions"] # Use https://crates.io/crates/libc for the platform abstraction. This simplifies # cross-compilation since bindgen is not required anymore. Unfortunately, the libc crate # does not offer all the functionality iceoryx2 requires on all of the supported # platforms. Therefore, only a subset of the supported platforms will work with this # feature flag. libc_platform = ["iceoryx2-bb-posix/libc_platform"] [dependencies] iceoryx2-bb-container = "0.7.0" iceoryx2-bb-derive-macros = "0.7.0" iceoryx2-bb-system-types = "0.7.0" iceoryx2-bb-lock-free = "0.7.0" iceoryx2-bb-log = "0.7.0" iceoryx2-bb-memory = "0.7.0" iceoryx2-bb-posix = "0.7.0" iceoryx2-bb-elementary = "0.7.0" iceoryx2-bb-elementary-traits = "0.7.0" iceoryx2-cal = "0.7.0" iceoryx2-pal-concurrency-sync = "0.7.0" iceoryx2-pal-configuration = "0.7.0" serde = { version = "1.0.203", features = ["derive"] } toml = "0.8.13" tiny-fn = "0.1.6" EOF cp -a iceoryx2/src %{buildroot}%{crate_instdir}/ # Copy other potentially useful files for dir in iceoryx2/benches iceoryx2/tests; do if [ -d "$dir" ]; then cp -a "$dir" %{buildroot}%{crate_instdir}/ fi done # Generate .cargo-checksum.json for the installed crate echo '{"files":{},"package":null}' > %{buildroot}%{crate_instdir}/.cargo-checksum.json # Debug: list what was actually installed to staging echo "=== Contents of iceoryx-staging: ===" find iceoryx-staging -type f -name "*.so*" | sort echo "=== Library structure: ===" find iceoryx-staging -type f -name "lib*.a" | sort echo "=== Include structure: ===" find iceoryx-staging -type f -name "*.h" -o -name "*.hpp" | head -10 echo "=== CMake structure: ===" find iceoryx-staging -type f -name "*.cmake" | head -5 echo "=== Complete lib directory: ===" ls -la iceoryx-staging/lib* 2>/dev/null || true # Copy iceoryx libraries from staging to final buildroot # Ensure the target directory exists mkdir -p %{buildroot}%{_libdir} # Copy all libraries (shared and static) if [ -d "iceoryx-staging/lib" ]; then cp -a iceoryx-staging/lib/* %{buildroot}%{_libdir}/ elif [ -d "iceoryx-staging/lib64" ]; then cp -a iceoryx-staging/lib64/* %{buildroot}%{_libdir}/ fi # Check if static libraries were built echo "=== Checking for static libraries: ===" find iceoryx-staging -name "*.a" | head -10 # Copy iceoryx headers from staging with proper structure # Ensure the target directories exist mkdir -p %{buildroot}%{_includedir}/iceoryx_hoofs mkdir -p %{buildroot}%{_includedir}/iceoryx_platform # Copy headers to correct locations if [ -d "iceoryx-staging/include/iceoryx" ]; then # Find and copy iceoryx_hoofs headers if [ -d "iceoryx-staging/include/iceoryx"/*/iceoryx_hoofs ]; then cp -a iceoryx-staging/include/iceoryx/*/iceoryx_hoofs/* %{buildroot}%{_includedir}/iceoryx_hoofs/ fi # Find and copy iceoryx_platform headers if [ -d "iceoryx-staging/include/iceoryx"/*/iceoryx_platform ]; then cp -a iceoryx-staging/include/iceoryx/*/iceoryx_platform/* %{buildroot}%{_includedir}/iceoryx_platform/ fi elif [ -d "iceoryx-staging/include/iceoryx_hoofs" ]; then # Direct structure cp -a iceoryx-staging/include/iceoryx_hoofs/* %{buildroot}%{_includedir}/iceoryx_hoofs/ fi if [ -d "iceoryx-staging/include/iceoryx_platform" ]; then cp -a iceoryx-staging/include/iceoryx_platform/* %{buildroot}%{_includedir}/iceoryx_platform/ fi # Ensure required directories exist mkdir -p %{buildroot}%{_includedir}/iox mkdir -p %{buildroot}%{_includedir}/iox2 # Install C and C++ libraries and headers using CMake cd build-cmake %cmake_install cd .. # Install C FFI libraries and headers generated by Rust build echo "=== Debugging FFI files after cargo build ===" echo "Looking for iceoryx2.h files:" find . -name "iceoryx2.h" -path "*/target/*" | head -10 echo "Looking for libiceoryx2_ffi_c.so files:" find . -name "libiceoryx2_ffi_c.so" -path "*/target/*" | head -10 echo "Looking for libiceoryx2_ffi_c.a files:" find . -name "libiceoryx2_ffi_c.a" -path "*/target/*" | head -10 echo "Complete target/release directory listing:" find . -path "*/target/release/*" -name "lib*" | head -20 # Install C headers generated by cbindgen find . -name "iceoryx2.h" -path "*/target/release/*" -exec cp {} %{buildroot}%{_includedir}/iox2/ \; # Install C FFI libraries generated by cargo build echo "=== Installing FFI libraries ===" FFI_SO_FILES=$(find . -name "libiceoryx2_ffi_c.so" -path "*/target/release/*") FFI_A_FILES=$(find . -name "libiceoryx2_ffi_c.a" -path "*/target/release/*") echo "Found .so files: $FFI_SO_FILES" echo "Found .a files: $FFI_A_FILES" if [ -n "$FFI_SO_FILES" ]; then for file in $FFI_SO_FILES; do echo "Copying $file to %{buildroot}%{_libdir}/" cp "$file" %{buildroot}%{_libdir}/ done else echo "WARNING: No libiceoryx2_ffi_c.so found!" fi if [ -n "$FFI_A_FILES" ]; then for file in $FFI_A_FILES; do echo "Copying $file to %{buildroot}%{_libdir}/" cp "$file" %{buildroot}%{_libdir}/ done else echo "WARNING: No libiceoryx2_ffi_c.a found!" fi echo "=== Files actually installed to buildroot lib dir ===" ls -la %{buildroot}%{_libdir}/ | grep iceoryx2_ffi || echo "No iceoryx2_ffi files found in buildroot" # Copy iceoryx headers to expected locations if they exist elsewhere if [ -d "%{buildroot}/include/iceoryx_hoofs" ]; then cp -a %{buildroot}/include/iceoryx_hoofs/* %{buildroot}%{_includedir}/iox/ 2>/dev/null || true fi if [ -d "%{buildroot}/include" ] && [ ! -d "%{buildroot}%{_includedir}/iox" ]; then # Find and copy any iox-related headers find %{buildroot}/include -name "*.hpp" -path "*iox*" -exec dirname {} \; | sort -u | while read dir; do mkdir -p %{buildroot}%{_includedir}/iox/$(basename $dir) cp -a $dir/* %{buildroot}%{_includedir}/iox/$(basename $dir)/ 2>/dev/null || true done fi # Install CLI binaries mkdir -p %{buildroot}%{_bindir} echo "=== Installing CLI binaries ===" # Install specific CLI binaries by exact name to avoid hash-suffixed versions CLI_NAMES="iox2 iox2-node iox2-service iox2-config iox2-tunnel" for binary_name in $CLI_NAMES; do # Look for the exact binary name in the target/rpm directory BINARY_PATH=$(find . -path "*/target/rpm/*" -name "$binary_name" -type f -executable | head -1) if [ -n "$BINARY_PATH" ] && [ -f "$BINARY_PATH" ]; then echo "Installing $BINARY_PATH as $binary_name to %{buildroot}%{_bindir}/" cp "$BINARY_PATH" %{buildroot}%{_bindir}/$binary_name else echo "WARNING: Binary $binary_name not found in target/rpm/" fi done echo "=== CLI binaries installed to buildroot ===" ls -la %{buildroot}%{_bindir}/ | grep iox2 || echo "No iox2 binaries found in buildroot" # Note: iceoryx_platform and iceoryx_hoofs libraries and headers are now installed # The iceoryx2-cxx library depends on these at runtime %if %{with check} %check %cargo_test %endif %changelog * Wed Nov 20 2024 Assistant - 0.7.0-9 - Add iceoryx2-cli package with CLI tools - Build and ship CLI binaries: iox2, iox2-node, iox2-service, iox2-config, iox2-tunnel - Include iceoryx2-cli, iceoryx2-tunnels-zenoh, and iceoryx2-userland-record-and-replay in build - All dependencies are vendored and available for CLI functionality * Sun Nov 17 2024 Assistant - 0.7.0-8 - Add iceoryx2-cxx and iceoryx2-cxx-devel packages - Build and ship C++ library (libiceoryx2_cxx.so and libiceoryx2_cxx.a) - Include C++ header files for iceoryx2 C++ API - Add CMake and g++ build requirements - Bundle iceoryx v2.95.7 source to build iceoryx_platform and iceoryx_hoofs locally - Use CMake to build C and C++ libraries without requiring network access - Add rust-cbindgen BuildRequires for C header generation * Sun Nov 17 2024 Assistant - 0.7.0-7 - Add iceoryx2-c and iceoryx2-c-devel packages - Build and ship C FFI library (libiceoryx2_ffi_c.so and libiceoryx2_ffi_c.a) - Include C header files for iceoryx2 C API - Add rust-cbindgen build requirement for header generation * Wed Oct 02 2024 Assistant - 0.7.0-6 - Add .cargo-checksum.json file for proper cargo registry integration * Tue Oct 01 2024 Assistant - 0.7.0-5 - Fix RPM provides generation by using standard cargo_install macro - Properly install workspace crates to generate correct crate() provides * Mon Sep 30 2024 Assistant - 0.7.0-4 - Use standard %%cargo_install macro instead of manual installation - Fix RPM crate provides generation for proper dependency resolution * Mon Sep 30 2024 Assistant - 0.7.0-3 - Fix feature package file paths using undefined %%{crate_instdir} macro * Mon Sep 30 2024 Assistant - 0.7.0-2 - Fix problematic shebang in vendored pyo3 causing /usr/local/bin/python dependency - Use dynamic checksum calculation to handle vendored source modifications * Thu Sep 26 2024 Pierre-Yves Chibon - 0.7.0-1 - Initial package