usd/usd.spec
2024-08-02 21:03:52 -04:00

552 lines
18 KiB
RPMSpec
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# We hard-code the ABI version here, even though it can be derived from the
# package version, as a reminder of the need to rebuild dependent packages on
# every update. See additional notes near the downstream ABI versioning patch.
# It should be 0.MAJOR.MINOR without leading zeros, e.g. 22.03 → 0.22.3.
%global downstream_so_version 0.23.11
%bcond alembic 1
%bcond draco 1
%bcond embree 1
%bcond jemalloc 0
# Not yet packaged: https://github.com/AcademySoftwareFoundation/MaterialX
%bcond materialx 0
# Default "UNIX Makefiles" backend for CMake would also work fine; ninja is a
# bit faster. We conditionalize it just in case there are backend-specific
# issues in the future.
%bcond ninja 1
%bcond openshading 1
%bcond openvdb 1
%bcond ocio 1
%bcond oiio 1
%bcond ptex 1
%bcond usdview 1
# TODO: Figure out how to re-enable the tests. Currently these want to install
# into /usr/tests and, and there are issues with the launchers finding the
# command-line tools in the buildroot.
%bcond test 0
Name: usd
Version: 23.11
Release: %autorelease
Summary: 3D VFX pipeline interchange file format
# The entire source is Pixar except:
#
# Apache-2.0:
# - pxr/imaging/hgiVulkan/spirv_reflect.{cpp,h}
# BSD-3-Clause:
# - pxr/base/gf/ilmbase_*
# - pxr/base/js/rapidjson/msinttypes/
# - pxr/base/tf/pxrCLI11/
# - pxr/base/tf/pxrDoubleConversion/
# - pxr/imaging/hio/OpenEXR/OpenEXRCore/
# BSD-2-Clause:
# - pxr/base/tf/pxrLZ4/
# MIT:
# - docs/doxygen/doxygen-awesome-css/ (removed in %%prep)
# - pxr/base/js/rapidjson/, except pxr/base/js/rapidjson/msinttypes/
# - pxr/base/tf/pxrPEGTL/
# - pxr/base/tf/pxrTslRobinMap/
# - pxr/imaging/garch/khrplatform.h
# - pxr/imaging/hgiVulkan/vk_mem_alloc.h
# - pxr/imaging/hio/EpenEXR/deflate/
# - pxr/usd/sdf/invoke.hpp
# - third_party/renderman-24/plugin/rmanArgsParser/pugixml/
# MIT OR Unlicense:
# - pxr/imaging/hio/stb/
# Pixar AND GPL-3.0-or-later WITH Bison-exception-2.2:
# - pxr/usd/sdf/path.tab.{cpp,h}
# - pxr/usd/sdf/textFileFormat.tab.{cpp,h}
# - third_party/renderman-24/plugin/hdPrman/virtualStructConditionalGrammar.tab.{cpp,h}
#
# Additionally, the following would be listed above but are removed in %%prep:
#
# Apache-2.0:
# - pxr/usdImaging/usdviewq/fonts/Roboto_Mono/
# - pxr/usdImaging/usdviewq/fonts/Roboto/
# MIT:
# - docs/doxygen/doxygen-awesome-css/ (except doxygen-awesome-darkmode-toggle.js)
# MIT AND Apache-2.0:
# - docs/doxygen/doxygen-awesome-css/doxygen-awesome-darkmode-toggle.js
#
# (Certain build system files are also under licenses other than Apache-2.0, but
# do not contribute their license terms to the built RPMs.)
License: %{shrink:
Pixar AND
Apache-2.0 AND
BSD-3-Clause AND
BSD-2-Clause AND
MIT AND
(MIT OR Unlicense) AND
(Pixar AND GPL-3.0-or-later WITH Bison-exception-2.2)
}
URL: http://www.openusd.org/
%global forgeurl https://github.com/PixarAnimationStudios/OpenUSD
Source0: %{forgeurl}/archive/v%{version}/OpenUSD-%{version}.tar.gz
Source1: org.openusd.usdview.desktop
# Latest stb_image.patch that applies cleanly against 2.27:
# %%{forgeurl}/raw/8f9bb9563980b41e7695148b63bf09f7abd38a41/pxr/imaging/hio/stb/stb_image.patch
# We treat this as a source file because it is applied separately during
# unbundling. It has been hand-edited to apply to 2.28, where
# stbi__unpremultiply_on_load_thread is already renamed to
# stbi_set_unpremultiply_on_load_thread.
Source2: stb_image.patch
# Downstream-only: add an SONAME version
#
# Upstream was asked about .so versioning and setting SONAME properly and
# seemed unprepared to handle the request:
# https://github.com/PixarAnimationStudios/USD/issues/1259#issuecomment-657120216
#
# A patch was offered:
# https://github.com/PixarAnimationStudios/USD/issues/1387
# but it was not sufficient for the general case, since (1) it only handled the
# monolithic build, and (2) it derived the .so version from PXR_MAJOR_VERSION,
# which is *not* reliably bumped on API or ABI changes, and currently is still
# zero.
#
# We will therefore probably need to keep doing downstream .so versioning for
# the foreseeable future. Currently we are assuming that the ABI is likely to
# change on every release (an appropriate assumption for a large C++ project
# with no ABI stability policy), so we build the .so version from the project
# version. Note that the “hidden” major version is zero, so this complies with
# the “0.” prefix recommended in the packaging guidelines.
#
# https://docs.fedoraproject.org/en-US/packaging-guidelines/#_downstream_so_name_versioning
#
# A known defect of this patch is that it causes the hdTiny.so example plugin
# to be versioned as well, which is undesired. This is not a serious problem
# because we do not want to package the built plugin anyway. (It should not be
# built with -DPXR_BUILD_EXAMPLES=OFF, but it is.)
Patch: 0001-Downstream-only-add-an-SONAME-version.patch
# Port to Embree 4.x
# https://github.com/PixarAnimationStudios/USD/pull/2266
Patch: %{forgeurl}/pull/2266.patch
Patch: USD-23.05-tbb2020.3.patch
# Base
BuildRequires: gcc-c++
BuildRequires: cmake
%if %{with ninja}
BuildRequires: ninja-build
%endif
BuildRequires: dos2unix
BuildRequires: help2man
BuildRequires: pkgconfig(blosc)
BuildRequires: boost-devel
BuildRequires: pkgconfig(dri)
BuildRequires: hdf5-devel
BuildRequires: opensubdiv-devel
BuildRequires: pkgconfig(tbb) = 2020.3
BuildRequires: cmake(Imath) >= 3.0
%if %{with alembic}
BuildRequires: cmake(Alembic)
%endif
%if %{with draco}
BuildRequires: draco-devel
%endif
%if %{with embree}
BuildRequires: embree-devel
%endif
%if %{with jemalloc}
BuildRequires: pkgconfig(jemalloc)
%endif
%if %{with ocio}
BuildRequires: cmake(OpenColorIO)
%endif
%if %{with oiio}
BuildRequires: cmake(OpenImageIO)
%endif
%if %{with openshading}
BuildRequires: openshadinglanguage
BuildRequires: pkgconfig(oslexec)
%endif
%if %{with openvdb}
BuildRequires: openvdb-devel
%endif
%if %{with ptex}
BuildRequires: pkgconfig(ptex)
%endif
# Header-only library: -static is for tracking per guidelines
#
# Enforce the the minimum EVR to contain fixes for all of:
# CVE-2021-28021
# CVE-2021-42715
# CVE-2021-42716
# CVE-2022-28041
# CVE-2023-43898
# CVE-2023-45661
# CVE-2023-45662
# CVE-2023-45663
# CVE-2023-45664
# CVE-2023-45666
# CVE-2023-45667
BuildRequires: stb_image-devel >= 2.28^20231011gitbeebb24-12
BuildRequires: stb_image-static
BuildRequires: stb_image_write-devel >= 1.16
BuildRequires: stb_image_write-static
BuildRequires: stb_image_resize-devel >= 0.97
BuildRequires: stb_image_resize-static
Requires: usd-libs%{?_isa} = %{version}-%{release}
Requires: python3-usd%{?_isa} = %{version}-%{release}
# This package is only available for x86_64 and aarch64
# Will fail to build on other architectures
# https://bugzilla.redhat.com/show_bug.cgi?id=1960848
#
# Note that pxr/base/arch/assumptions.cpp explicitly tests the machine is not
# big-endian, and pxr/base/arch/defines.h explicitly enforces x86_64 or ARM64.
ExclusiveArch: aarch64 x86_64
%description
Universal Scene Description (USD) is a time-sampled scene
description for interchange between graphics applications.
%package libs
Summary: Universal Scene Description library
# Filed ticket to convince upstream to use system libraries
# Use system libraries instead of bundling them when possible
# https://github.com/PixarAnimationStudios/USD/issues/1490
# See also:
# Path to using external/system copies of OpenEXRCore and libdeflate?
# https://github.com/PixarAnimationStudios/OpenUSD/issues/2619
# Version from: pxr/base/tf/pxrDoubleConversion/README
Provides: bundled(double-conversion) = 2.0.0
# Version from: pxr/base/gf/ilmbase_half.README
Provides: bundled(ilmbase) = 2.5.3
# Version from: pxr/base/tf/pxrLZ4/lz4.h (LZ4_VERSION_{MAJOR,MINOR_PATCH})
Provides: bundled(lz4) = 1.9.2
# Version from: pxr/base/tf/pxrCLI11/README.md
Provides: bundled(cli11) = 2.3.1
# Version from:
# third_party/renderman-24/plugin/rmanArgsParser/pugixml/pugiconfig.hpp
# (header comment)
Provides: bundled(pugixml) = 1.9
# Version from: pxr/base/js/rapidjson/rapidjson.h
# (RAPIDJSON_{MAJOR,MINOR,PATCH}_VERSION)
Provides: bundled(rapidjson) = 1.1.0
# Version from: pxr/imaging/hgiVulkan/spirv_reflect.h (header comment)
Provides: bundled(SPIRV-Reflect) = 1.0
# Version from: pxr/imaging/hgiVulkan/vk_mem_alloc.h (header comment)
Provides: bundled(VulkanMemoryAllocator) = 3.0.0~development
# Forked from an unknown version: pxr/base/tf/pxrTslRobinMap/
Provides: bundled(robin-map)
# Version from: pxr/base/tf/pxrPEGTL/pegtl.h (TAO_PEGTL_VERSION)
Provides: bundled(PEGTL) = 2.8.3
# Version from pxr/imaging/hio/OpenEXR/OpenEXRCore/openexr_version.h
Provides: bundled(openexr) = 3.2.0
# Version from pxr/imaging/hio/OpenEXR/deflate/libdeflate.h
Provides: bundled(libdeflate) = 1.18
# Forked from https://github.com/blackmatov/invoke.hpp, which upstream has
# never versioned; however, a copyright statement appears in the header comment
# in pxr/usd/sdf/invoke.hpp with a date of 2023, and the only upstream commit
# with the same date (as of this writing) is
# 2c1eabc2e20ab02961f95c704ff0c0818671ddd1, so we infer that the bundled copy
# was forked from that commit.
Provides: bundled(invoke-hpp) = 0^20230107git2c1eabc
%description libs
Universal Scene Description (USD) is an efficient, scalable system for
authoring, reading, and streaming time-sampled scene description for
interchange between graphics applications.
%package devel
Summary: Development files for USD
Requires: usd-libs%{?_isa} = %{version}-%{release}
%description devel
This package contains the C++ header files and symbolic links to the shared
libraries for usd. If you would like to develop programs using usd,
you will need to install usd-devel.
# For usdview, usdcompress
%package -n python3-usd
Summary: %{summary}
BuildRequires: pkgconfig(python3)
BuildRequires: python3dist(jinja2)
%if %{with usdview}
BuildRequires: desktop-file-utils
BuildRequires: python3dist(pyside6)
BuildRequires: pyside6-tools
%endif
BuildRequires: python3dist(pyopengl)
Requires: font(roboto)
Requires: font(robotoblack)
Requires: font(robotolight)
Requires: font(robotomono)
Requires: python3dist(jinja2)
%if %{with usdview}
Requires: python3dist(pyside6)
%endif
Requires: python3dist(pyopengl)
Requires: usd-libs%{?_isa} = %{version}-%{release}
%py_provides python3-pxr
%description -n python3-usd
Python language bindings for the Universal Scene Description (USD) C++ API
%prep
%autosetup -p1 -n OpenUSD-%{version}
# Convert NOTICE.txt from CRNL line encoding
dos2unix NOTICE.txt
# Fix all Python shebangs recursively in .
%py3_shebang_fix .
# Further drop shebangs line for some py files
sed -r -i '1{/^#!/d}' \
pxr/usd/sdr/shaderParserTestUtils.py \
pxr/usd/usdUtils/updateSchemaWithSdrNode.py \
pxr/usdImaging/usdviewq/usdviewApi.py
# Unbundle Google Roboto fonts
rm -rvf pxr/usdImaging/usdviewq/fonts/*
ln -s %{_datadir}/fonts/google-roboto pxr/usdImaging/usdviewq/fonts/Roboto
ln -s %{_datadir}/fonts/google-roboto-mono \
pxr/usdImaging/usdviewq/fonts/Roboto_Mono
# Unbundle stb_image, stb_image_write, stb_image_resize:
pushd pxr/imaging/hio/stb
cp -p %{_usr}/include/stb_image.h .
patch -p1 < '%{SOURCE2}'
ln -svf %{_usr}/include/stb_image_resize.h \
%{_usr}/include/stb_image_write.h ./
popd
# Remove bundled doxygen-awesome-css (CSS and JS files) since we are not
# building Doxygen-generated HTML documentation.
rm -rf docs/doxygen/doxygen-awesome-css/
# Use c++17 standard otherwise build fails
sed -i 's|set(CMAKE_CXX_STANDARD 14)|set(CMAKE_CXX_STANDARD 17)|g' \
cmake/defaults/CXXDefaults.cmake
# Fix libdir installation
sed -i 's|lib/usd|%{_libdir}/usd|g' \
cmake/macros/{Private,Public}.cmake
sed -i 's|plugin/usd|%{_libdir}/usd/plugin|g' \
cmake/macros/{Private,Public}.cmake
sed -i 's|"lib"|%{_libdir}|g' \
cmake/macros/{Private,Public}.cmake
sed -i 's|/python|/python%{python3_version}/site-packages|g' \
cmake/macros/{Private,Public}.cmake pxr/usdImaging/usdviewq/CMakeLists.txt
sed -i 's|/pxrConfig.cmake|%{_libdir}/cmake/pxr/pxrConfig.cmake|g' \
pxr/CMakeLists.txt
sed -i 's|"cmake"|"%{_libdir}/cmake/pxr"|g' \
pxr/CMakeLists.txt
sed -i 's|${PXR_CMAKE_DIR}/cmake|${PXR_CMAKE_DIR}|g' \
pxr/pxrConfig.cmake.in
sed -i 's|${PXR_CMAKE_DIR}/include|/usr/include|g' \
pxr/pxrConfig.cmake.in
sed -i 's|EXACT COMPONENTS|COMPONENTS|g' \
pxr/pxrConfig.cmake.in
# Fix cmake directory destination
sed -i 's|"${CMAKE_INSTALL_PREFIX}"|%{_libdir}/cmake/pxr|g' pxr/CMakeLists.txt
# Use Embree4 instead of Embree3. The find-then-modify pattern preserves mtimes
# on sources that did not need to be modified.
find . -type f -exec gawk '/embree3/ { print FILENAME }' '{}' '+' |
xargs -r sed -r -i 's/(embree)3/\14/'
%build
# The necessary include path for Imath is not set everywhere its needed. Its
# not immediately clear exactly why this is happening here or what should be
# changed upstream.
extra_flags="${extra_flags-} $(pkgconf --cflags Imath)"
# Suppress deprecation warnings from TBB; upstream should act on them
# eventually, but they just add noise here.
extra_flags="${extra_flags-} -DTBB_SUPPRESS_DEPRECATED_MESSAGES=1"
%cmake \
%if %{with ninja}
-GNinja \
%endif
%if %{with jemalloc}
-DPXR_MALLOC_LIBRARY="%{_libdir}/libjemalloc.so" \
%endif
\
-DCMAKE_CXX_FLAGS_RELEASE="${CXXFLAGS-} ${extra_flags}" \
-DCMAKE_CXX_STANDARD=17 \
-DCMAKE_C_FLAGS_RELEASE="${CFLAGS-} ${extra_flags}" \
-DCMAKE_EXE_LINKER_FLAGS="${LDFLAGS}" \
-DCMAKE_SHARED_LINKER_FLAGS="${LDFLAGS}" \
-DCMAKE_SKIP_INSTALL_RPATH=ON \
-DCMAKE_SKIP_RPATH=ON \
-DCMAKE_VERBOSE_MAKEFILE=ON \
\
-DPXR_BUILD_DOCUMENTATION=FALSE \
-DPXR_BUILD_EXAMPLES=OFF \
-DPXR_BUILD_IMAGING=ON \
-DPXR_BUILD_MONOLITHIC=ON \
-DPXR_BUILD_TESTS=%{expr:%{with test}?"ON":"OFF"} \
-DPXR_BUILD_TUTORIALS=OFF \
-DPXR_BUILD_USD_IMAGING=ON \
-DPXR_BUILD_USD_TOOLS=ON \
-DPXR_BUILD_USDVIEW=%{expr:%{with usdview}?"ON":"OFF"} \
\
-DPXR_BUILD_ALEMBIC_PLUGIN=%{expr:%{with alembic}?"ON":"OFF"} \
-DPXR_BUILD_DRACO_PLUGIN=%{expr:%{with draco}?"ON":"OFF"} \
-DPXR_BUILD_EMBREE_PLUGIN=%{expr:%{with embree}?"ON":"OFF"} \
-DPXR_BUILD_MATERIALX_PLUGIN=%{expr:%{with materialx}?"ON":"OFF"} \
-DPXR_BUILD_OPENCOLORIO_PLUGIN=%{expr:%{with ocio}?"ON":"OFF"} \
-DPXR_BUILD_OPENIMAGEIO_PLUGIN=%{expr:%{with oiio}?"ON":"OFF"} \
-DPXR_BUILD_PRMAN_PLUGIN=OFF \
\
-DPXR_ENABLE_OPENVDB_SUPPORT=%{expr:%{with openvdb}?"ON":"OFF"} \
-DPXR_ENABLE_HDF5_SUPPORT=ON \
-DPXR_ENABLE_PTEX_SUPPORT=%{expr:%{with ptex}?"ON":"OFF"} \
-DPXR_ENABLE_OSL_SUPPORT=%{expr:%{with openshading}?"ON":"OFF"} \
-DPXR_ENABLE_MALLOCHOOK_SUPPORT=OFF \
-DPXR_ENABLE_PYTHON_SUPPORT=ON \
\
-DPXR_INSTALL_LOCATION="%{_libdir}/usd/plugin" \
\
-DPXR_VALIDATE_GENERATED_CODE=OFF \
\
-DPYSIDEUICBINARY:PATH=pyside6-uic \
-DPYSIDE_AVAILABLE=ON \
-DPYTHON_EXECUTABLE=%{python3}
%cmake_build
%install
%cmake_install
# Fix python3 files installation
mkdir -p %{buildroot}%{python3_sitearch}
mv %{buildroot}%{python3_sitelib}/* %{buildroot}%{python3_sitearch}
%if %{with usdview}
# Install a desktop icon for usdview
desktop-file-install \
--dir=%{buildroot}%{_datadir}/applications \
%{SOURCE1}
%endif
# Remove examples that were built and installed even though we set
# -DPXR_BUILD_EXAMPLES=OFF.
rm -vrf '%{buildroot}%{_datadir}/usd/examples'
# Generate and install man pages. While generating the man pages might more
# properly go in %%build, it is generally much easier to do this here in a
# single step, using the entry points installed into the buildroot. This is
# especially true for the entry points that are Python scripts.
install -d '%{buildroot}%{_mandir}/man1'
for cmd in %{buildroot}%{_bindir}/*
do
PYTHONPATH='%{buildroot}%{python3_sitearch}' \
LD_LIBRARY_PATH='%{buildroot}%{_libdir}' \
help2man \
--no-info --no-discard-stderr --version-string='%{version}' \
--output="%{buildroot}%{_mandir}/man1/$(basename "${cmd}").1" \
"${cmd}"
done
%check
%if %{with usdview}
desktop-file-validate %{buildroot}%{_datadir}/applications/org.openusd.usdview.desktop
%endif
%{?with_test:%ctest}
%files
%doc NOTICE.txt README.md
%{_bindir}/sdfdump
%{_bindir}/sdffilter
%{_bindir}/usdGenSchema
%{_bindir}/usdcat
%{_bindir}/usdchecker
%if %{with draco}
%{_bindir}/usdcompress
%endif
%{_bindir}/usddiff
%{_bindir}/usddumpcrate
%{_bindir}/usdedit
%{_bindir}/usdfixbrokenpixarschemas
%{_bindir}/usdgenschemafromsdr
%{_bindir}/usdrecord
%{_bindir}/usdresolve
%{_bindir}/usdstitch
%{_bindir}/usdstitchclips
%{_bindir}/usdtree
%{_bindir}/usdzip
%if %{with usdview}
%{_datadir}/applications/org.openusd.usdview.desktop
%{_bindir}/testusdview
%{_bindir}/usdview
%endif
%{_mandir}/man1/sdfdump.1*
%{_mandir}/man1/sdffilter.1*
%{_mandir}/man1/usdGenSchema.1*
%{_mandir}/man1/usdcat.1*
%{_mandir}/man1/usdchecker.1*
%if %{with draco}
%{_mandir}/man1/usdcompress.1*
%endif
%{_mandir}/man1/usddiff.1*
%{_mandir}/man1/usddumpcrate.1*
%{_mandir}/man1/usdedit.1*
%{_mandir}/man1/usdfixbrokenpixarschemas.1*
%{_mandir}/man1/usdgenschemafromsdr.1*
%{_mandir}/man1/usdrecord.1*
%{_mandir}/man1/usdresolve.1*
%{_mandir}/man1/usdstitch.1*
%{_mandir}/man1/usdstitchclips.1*
%{_mandir}/man1/usdtree.1*
%{_mandir}/man1/usdzip.1*
%if %{with usdview}
%{_mandir}/man1/testusdview.1*
%{_mandir}/man1/usdview.1*
%endif
%files -n python3-usd
%{python3_sitearch}/pxr/
%files libs
%license LICENSE.txt
%doc NOTICE.txt README.md
%{_libdir}/libusd_ms.so.%{downstream_so_version}
# While headers normally go in -devel packages, those in
# %%{_libdir}/usd/usd/resources/codegenTemplates/ are used as data (templates
# for generated code), and it makes sense to package them with the rest of the
# library resources. (Technically, these are currently used only by the
# usdGenSchema command-line tool, so they could be moved to the base package,
# but this is probably too fussy.)
%{_libdir}/usd/
%files devel
%doc BUILDING.md CHANGELOG.md VERSIONS.md
%{_includedir}/pxr/
%{_libdir}/libusd_ms.so
%{_libdir}/cmake/pxr/pxrConfig.cmake
%{_libdir}/cmake/pxr/pxrTargets.cmake
%{_libdir}/cmake/pxr/pxrTargets-release.cmake
%changelog
%autochangelog