%global debug_package %{nil} %global _lto_cflags %{nil} # The release tarball ships the aurora, borealis, and mod submodules as # empty directories, so each pinned commit is fetched as an extra source # and unpacked into place in %%prep. Everything else CMake needs (Dawn, # nod, Tracy, ImGui, ...) is fetched at configure time with pinned tags. %global aurora_commit d0933b745abe0eb9815bedcea8047575da18698d %global borealis_commit 0bdba6c50a46409c4862474c72b4a3a631fbe0ec %global cosmetics_commit fd93491089fa95441789244f2b2fd22a451ecbcc %global randomizer_commit d0ceae8f18bbef4a40287a72a2791a3c06c9aca5 Name: dusklight Version: 2.0.3 Release: 1%{?dist} Summary: Native PC port of the Twilight Princess decompilation # Statically linked components (Dawn, ImGui, Tracy, Luau, ...) carry their # own permissive licenses. License: CC0-1.0 AND MIT AND BSD-3-Clause AND Apache-2.0 URL: https://github.com/TwilitRealm/dusklight Source0: %{url}/archive/refs/tags/v%{version}/%{name}-%{version}.tar.gz Source1: https://github.com/encounter/aurora/archive/%{aurora_commit}/aurora-%{aurora_commit}.tar.gz Source2: https://github.com/encounter/borealis/archive/%{borealis_commit}/borealis-%{borealis_commit}.tar.gz Source3: https://github.com/TwilitRealm/dusklight-cosmetics/archive/%{cosmetics_commit}/dusklight-cosmetics-%{cosmetics_commit}.tar.gz Source4: https://github.com/TwilitRealm/dusklight-randomizer/archive/%{randomizer_commit}/dusklight-randomizer-%{randomizer_commit}.tar.gz # With DUSK_PACKAGE_INSTALL the bundled mods (including the Luau runtime) # are installed under the asset dir, but the loader only looks next to the # executable, so every Luau mod fails with a missing runtime service. Patch0: package-install-mods-dir.patch # Upstream only ships prebuilt Dawn and nod for x86_64 Linux in the # configure-time downloads used here. ExclusiveArch: x86_64 BuildRequires: gcc-c++ BuildRequires: git-core BuildRequires: cmake >= 3.25 BuildRequires: ninja-build BuildRequires: python3 BuildRequires: python3-markupsafe BuildRequires: cxxopts-devel BuildRequires: fmt-devel >= 11 BuildRequires: json-devel BuildRequires: libzstd-devel BuildRequires: xxhash-devel BuildRequires: abseil-cpp-devel BuildRequires: pkgconfig(alsa) BuildRequires: pkgconfig(dbus-1) BuildRequires: pkgconfig(freetype2) BuildRequires: pkgconfig(gl) BuildRequires: pkgconfig(gtk+-3.0) BuildRequires: pkgconfig(libcurl) BuildRequires: pkgconfig(libdecor-0) BuildRequires: pkgconfig(libpng) BuildRequires: pkgconfig(libpulse) BuildRequires: pkgconfig(libudev) BuildRequires: pkgconfig(libusb-1.0) BuildRequires: pkgconfig(libunwind) BuildRequires: pkgconfig(openssl) BuildRequires: pkgconfig(sdl3) BuildRequires: pkgconfig(sqlite3) BuildRequires: pkgconfig(vulkan) BuildRequires: pkgconfig(wayland-client) BuildRequires: pkgconfig(x11) BuildRequires: pkgconfig(xcursor) BuildRequires: pkgconfig(xi) BuildRequires: pkgconfig(xkbcommon) BuildRequires: pkgconfig(xrandr) BuildRequires: pkgconfig(xscrnsaver) BuildRequires: pkgconfig(xtst) BuildRequires: desktop-file-utils BuildRequires: libappstream-glib Requires: hicolor-icon-theme Requires: vulkan-loader %description Dusklight is a reverse-engineered reimplementation of Twilight Princess for PC, built on the GameCube decompilation. It aims to be as accurate as possible to the original while adding options, enhancements, and tools to customize the experience. No game assets are included. A dump of your own copy of the game is required and is passed with --dvd. %prep %autosetup -p1 -n %{name}-%{version} for sub in extern/aurora:aurora-%{aurora_commit} \ extern/borealis:borealis-%{borealis_commit} \ mods/cosmetics:dusklight-cosmetics-%{cosmetics_commit} \ mods/randomizer:dusklight-randomizer-%{randomizer_commit}; do dir="${sub%%:*}" archive="${sub#*:}" rm -rf "${dir}" mkdir -p "${dir}" tar -xzf "%{_sourcedir}/${archive}.tar.gz" --strip-components=1 -C "${dir}" done %build %cmake -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DDUSK_PACKAGE_INSTALL=ON \ -DBOREALIS_APP_VERSION_OVERRIDE=%{version} \ -DAURORA_SDL3_PROVIDER=system \ -DBUILD_SHARED_LIBS=OFF %cmake_build %install %cmake_install # The randomizer mod's base64pp dependency installs its own headers and # static library, which nothing outside the mod uses. rm -f %{buildroot}%{_includedir}/base64pp*.h \ %{buildroot}%{_libdir}/libbase64pp.a \ %{buildroot}%{_libdir}/pkgconfig/base64pp.pc for size in 16 32 48 64 128 256 512 1024; do install -Dpm 0644 platforms/freedesktop/${size}x${size}/apps/dev.twilitrealm.dusk.png \ %{buildroot}%{_datadir}/icons/hicolor/${size}x${size}/apps/dev.twilitrealm.dusk.png done install -Dpm 0644 platforms/freedesktop/dev.twilitrealm.dusk.desktop \ %{buildroot}%{_datadir}/applications/dev.twilitrealm.dusk.desktop install -Dpm 0644 platforms/freedesktop/dev.twilitrealm.dusk.metainfo.xml \ %{buildroot}%{_metainfodir}/dev.twilitrealm.dusk.metainfo.xml %check desktop-file-validate %{buildroot}%{_datadir}/applications/dev.twilitrealm.dusk.desktop appstream-util validate-relax --nonet %{buildroot}%{_metainfodir}/dev.twilitrealm.dusk.metainfo.xml test -x %{buildroot}%{_bindir}/dusklight %files %license LICENSE.md %doc README.md %{_bindir}/dusklight %{_datadir}/dusklight/ %{_datadir}/applications/dev.twilitrealm.dusk.desktop %{_datadir}/icons/hicolor/*/apps/dev.twilitrealm.dusk.png %{_metainfodir}/dev.twilitrealm.dusk.metainfo.xml %changelog * Sat Oct 03 2026 sachesi - 2.0.3-1 - Update to 2.0.3. * Mon Sep 21 2026 sachesi - 2.0.1-2 - Load bundled mods from /usr/share/dusklight/mods so the Luau runtime is found * Mon Sep 21 2026 sachesi - 2.0.1-1 - Initial package for Copr.