Name: shader-slang Version: 2026.4.2 Release: 1%{?dist} Summary: Shader language compiler and tooling for modular GPU shader development License: Apache-2.0 WITH LLVM-exception URL: https://github.com/shader-slang/slang Source0: https://github.com/shader-slang/slang/releases/download/v%{version}/slang-%{version}-linux-x86_64.tar.gz Source1: https://raw.githubusercontent.com/shader-slang/slang/v%{version}/LICENSE ExclusiveArch: x86_64 BuildRequires: patchelf # COPR/private-use binary repack of upstream release artifacts. # This is not suitable for Fedora proper without building from source. # # Verified upstream archive layout for this release: # - executables are at archive root: # slangc, slangd, slangi # - public headers are at archive root: # slang.h, slang-gfx.h, slang-llvm.h, etc. # - shared libraries are at archive root: # libslang*.so*, libgfx.so* # - runtime .slang files are at archive root: # slang.slang, gfx.slang # - standard module directory is at archive root: # slang-standard-module-/ # - CMake package files are under: # cmake/slang/ # - binary archive does not include LICENSE/COPYING, # so Source1 is installed as the package license text. %global unpackdir %{name}-%{version} %global module_dir %{_libdir}/%{name} %description Slang is a shader language and compiler system designed to support large, modular, high-performance shader development across modern graphics APIs and GPU targets. %package libs Summary: Shared libraries and runtime modules for Shader Slang %description libs Shared runtime libraries and standard runtime shader modules for Shader Slang. %package devel Summary: Development files for Shader Slang Requires: %{name}-libs%{?_isa} = %{version}-%{release} %description devel Header files and CMake package configuration files for developing software against Shader Slang. %prep rm -rf %{unpackdir} mkdir -p %{unpackdir} tar -xzf %{SOURCE0} -C %{unpackdir} --strip-components=1 %build # No build step. Upstream prebuilt binaries are repackaged for COPR/private use. %install rm -rf %{buildroot} srcroot="%{_builddir}/%{unpackdir}" main_manifest="%{_builddir}/%{name}.files" libs_manifest="%{_builddir}/%{name}-libs.files" devel_manifest="%{_builddir}/%{name}-devel.files" : > "${main_manifest}" : > "${libs_manifest}" : > "${devel_manifest}" #------------------------------------------------------------------------------ # Executables #------------------------------------------------------------------------------ install -d %{buildroot}%{_bindir} for f in slangc slangd slangi; do if [ -f "${srcroot}/${f}" ]; then install -m 0755 "${srcroot}/${f}" %{buildroot}%{_bindir}/${f} patchelf --remove-rpath %{buildroot}%{_bindir}/${f} || : echo "%{_bindir}/${f}" >> "${main_manifest}" fi done #------------------------------------------------------------------------------ # Shared libraries # Preserve upstream symlinks; do not dereference them with install(1). #------------------------------------------------------------------------------ install -d %{buildroot}%{_libdir} for f in "${srcroot}"/lib*.so*; do [ -e "$f" ] || continue base="$(basename "$f")" cp -a "$f" %{buildroot}%{_libdir}/ echo "%{_libdir}/${base}" >> "${libs_manifest}" done # Ensure actual shared-library files are executable, but do not touch symlinks. find %{buildroot}%{_libdir} -maxdepth 1 -type f -name 'lib*.so*' -exec chmod 0755 {} + #------------------------------------------------------------------------------ # Runtime module/data files #------------------------------------------------------------------------------ install -d %{buildroot}%{module_dir} for f in slang.slang gfx.slang; do if [ -f "${srcroot}/${f}" ]; then install -m 0644 "${srcroot}/${f}" %{buildroot}%{module_dir}/${f} echo "%{module_dir}/${f}" >> "${main_manifest}" fi done for f in "${srcroot}"/slang-standard-module-*; do [ -e "$f" ] || continue base="$(basename "$f")" cp -a "$f" %{buildroot}%{module_dir}/ if [ -d "%{buildroot}%{module_dir}/${base}" ]; then echo "%dir %{module_dir}/${base}" >> "${libs_manifest}" find "%{buildroot}%{module_dir}/${base}" -type f | sed "s#%{buildroot}##" | sort >> "${libs_manifest}" else echo "%{module_dir}/${base}" >> "${libs_manifest}" fi done #------------------------------------------------------------------------------ # Development headers #------------------------------------------------------------------------------ install -d %{buildroot}%{_includedir}/%{name} for f in \ slang.h \ slang-gfx.h \ slang-llvm.h \ slang-com-helper.h \ slang-com-ptr.h \ slang-cpp-host-prelude.h \ slang-cpp-prelude.h \ slang-cpp-scalar-intrinsics.h \ slang-cpp-types-core.h \ slang-cpp-types.h \ slang-cuda-prelude.h \ slang-deprecated.h \ slang-hlsl-prelude.h \ slang-image-format-defs.h \ slang-tag-version.h \ slang-torch-prelude.h do if [ -f "${srcroot}/${f}" ]; then install -m 0644 "${srcroot}/${f}" %{buildroot}%{_includedir}/%{name}/${f} fi done if [ -n "$(find %{buildroot}%{_includedir}/%{name} -maxdepth 1 -type f -print -quit)" ]; then echo "%dir %{_includedir}/%{name}" >> "${devel_manifest}" find %{buildroot}%{_includedir}/%{name} -maxdepth 1 -type f | sed "s#%{buildroot}##" | sort >> "${devel_manifest}" fi #------------------------------------------------------------------------------ # CMake package config #------------------------------------------------------------------------------ if [ -d "${srcroot}/cmake/slang" ]; then install -d %{buildroot}%{_libdir}/cmake/%{name} cp -a "${srcroot}/cmake/slang/." %{buildroot}%{_libdir}/cmake/%{name}/ echo "%dir %{_libdir}/cmake/%{name}" >> "${devel_manifest}" find %{buildroot}%{_libdir}/cmake/%{name} -type f | sed "s#%{buildroot}##" | sort >> "${devel_manifest}" fi #------------------------------------------------------------------------------ # License #------------------------------------------------------------------------------ install -d %{buildroot}%{_licensedir}/%{name} install -m 0644 %{SOURCE1} %{buildroot}%{_licensedir}/%{name}/LICENSE #------------------------------------------------------------------------------ # Normalize manifests #------------------------------------------------------------------------------ sort -u -o "${main_manifest}" "${main_manifest}" sort -u -o "${libs_manifest}" "${libs_manifest}" sort -u -o "${devel_manifest}" "${devel_manifest}" %check if [ -x "%{buildroot}%{_bindir}/slangc" ]; then "%{buildroot}%{_bindir}/slangc" --help >/dev/null 2>&1 || : fi %post libs -p /sbin/ldconfig %postun libs -p /sbin/ldconfig %files -f %{_builddir}/%{name}.files %license %{_licensedir}/%{name}/LICENSE %files libs -f %{_builddir}/%{name}-libs.files %files devel -f %{_builddir}/%{name}-devel.files %changelog * Wed Mar 18 2026 Derek Douglas - 2026.4.2-1 - Preserve upstream shared-library symlinks during install - Remove RUNPATH from packaged binaries - Set executable permissions on real shared-library files - Use ExclusiveArch instead of BuildArch - Rename package to shader-slang to avoid conflict with Fedora slang package - Install executables, shared libraries, headers, and runtime files from archive root - Generate file manifests dynamically for installed payload - Pull upstream LICENSE separately