Blob Blame History Raw
%global debug_package %{nil}

%ifarch x86_64
%global platform_identificator x86_64-redhat-linux-gnu
%global target_x86_type 64
%else
%global platform_identificator i686-redhat-linux-gnu
%global target_x86_type 32
%endif

Name:           wine-dxvk
Version:        1.3.2
Release:        1%{?dist}
Summary:        Vulkan-based D3D11 and D3D10 implementation for Linux / Wine

License:        zlib
URL:            https://github.com/doitsujin/dxvk
Source0:        %{url}/archive/v%{version}/dxvk-%{version}.tar.gz

BuildRequires:  gcc
BuildRequires:  gcc-c++
BuildRequires:  glslang
BuildRequires:  meson
BuildRequires:  wine-devel

%ifarch x86_64
BuildRequires:  mingw64-filesystem
BuildRequires:  mingw64-binutils
BuildRequires:  mingw64-headers
BuildRequires:  mingw64-cpp
BuildRequires:  mingw64-gcc
BuildRequires:  mingw64-gcc-c++
BuildRequires:  mingw64-winpthreads-static
%else
BuildRequires:  mingw32-filesystem
BuildRequires:  mingw32-binutils
BuildRequires:  mingw32-headers
BuildRequires:  mingw32-cpp
BuildRequires:  mingw32-gcc
BuildRequires:  mingw32-gcc-c++
BuildRequires:  mingw32-winpthreads-static
%endif

Requires:       wine >= 4.13
Requires:       wine-dxvk-dxgi%{?_isa} = %{version}-%{release}
Requires:       vulkan-loader%{?_isa}

# We want x86_64 users to alwyas have also 32 bit lib, it's the same what wine does
%ifarch x86_64
Requires:       wine-dxvk(x86-32) = %{version}-%{release}
%endif

Requires(posttrans):   %{_sbindir}/alternatives
Requires(preun):       %{_sbindir}/alternatives

ExclusiveArch:  %{ix86} x86_64

%description
%{summary}

%package dxgi
Summary:        DXVK DXGI implementation

%description dxgi
%{summary}

%prep
%setup -q -n dxvk-%{version}

%build
/usr/bin/meson --buildtype=plain --wrap-mode=nodownload --auto-features=enabled . %{platform_identificator} \
--cross-file build-wine%{target_x86_type}.txt --buildtype release --prefix /builddir/build/BUILD/dxvk-%{version}/build
%meson_build

# Copy compiled .so files aside before cleaning up the build directory
cp /builddir/build/BUILD/dxvk-%{version}/%{platform_identificator}/src/dxgi/dxgi.dll.so /builddir/build/BUILD/dxvk-%{version}/dxgi.dll.so
cp /builddir/build/BUILD/dxvk-%{version}/%{platform_identificator}/src/d3d11/d3d11.dll.so /builddir/build/BUILD/dxvk-%{version}/d3d11.dll.so
cp /builddir/build/BUILD/dxvk-%{version}/%{platform_identificator}/src/d3d10/d3d10.dll.so /builddir/build/BUILD/dxvk-%{version}/d3d10.dll.so
cp /builddir/build/BUILD/dxvk-%{version}/%{platform_identificator}/src/d3d10/d3d10_1.dll.so /builddir/build/BUILD/dxvk-%{version}/d3d10_1.dll.so
cp /builddir/build/BUILD/dxvk-%{version}/%{platform_identificator}/src/d3d10/d3d10core.dll.so /builddir/build/BUILD/dxvk-%{version}/d3d10core.dll.so

/usr/bin/meson --wipe --buildtype=plain --wrap-mode=nodownload --auto-features=enabled . %{platform_identificator} \
--cross-file build-win%{target_x86_type}.txt --buildtype release --prefix /builddir/build/BUILD/dxvk-%{version}/build
%meson_build

%install
%meson_install
mkdir -p %{buildroot}%{_libdir}/wine/
install -p -m 755 /builddir/build/BUILD/dxvk-%{version}/dxgi.dll.so %{buildroot}%{_libdir}/wine/
install -p -m 755 /builddir/build/BUILD/dxvk-%{version}/d3d11.dll.so %{buildroot}%{_libdir}/wine/
install -p -m 755 /builddir/build/BUILD/dxvk-%{version}/d3d10.dll.so %{buildroot}%{_libdir}/wine/
install -p -m 755 /builddir/build/BUILD/dxvk-%{version}/d3d10_1.dll.so %{buildroot}%{_libdir}/wine/
install -p -m 755 /builddir/build/BUILD/dxvk-%{version}/d3d10core.dll.so %{buildroot}%{_libdir}/wine/

install -p -m 755 %buildroot/builddir/build/BUILD/dxvk-%{version}/build/bin/d3d10.dll %{buildroot}%{_libdir}/wine/
install -p -m 755 %buildroot/builddir/build/BUILD/dxvk-%{version}/build/bin/d3d10core.dll %{buildroot}%{_libdir}/wine/
install -p -m 755 %buildroot/builddir/build/BUILD/dxvk-%{version}/build/bin/d3d10_1.dll %{buildroot}%{_libdir}/wine/
install -p -m 755 %buildroot/builddir/build/BUILD/dxvk-%{version}/build/bin/d3d11.dll %{buildroot}%{_libdir}/wine/
rm -rf %buildroot/builddir/build/BUILD/dxvk-%{version}/build

mv %{buildroot}%{_libdir}/wine/dxgi.dll.so %{buildroot}%{_libdir}/wine/dxvk-dxgi.dll.so
mv %{buildroot}%{_libdir}/wine/d3d10.dll %{buildroot}%{_libdir}/wine/dxvk-d3d10.dll
mv %{buildroot}%{_libdir}/wine/d3d10core.dll %{buildroot}%{_libdir}/wine/dxvk-d3d10core.dll
mv %{buildroot}%{_libdir}/wine/d3d10_1.dll %{buildroot}%{_libdir}/wine/dxvk-d3d10_1.dll
mv %{buildroot}%{_libdir}/wine/d3d11.dll %{buildroot}%{_libdir}/wine/dxvk-d3d11.dll

%posttrans
%{_sbindir}/alternatives --install %{_libdir}/wine/dxgi.dll.so 'wine-dxgi%{?_isa}' %{_libdir}/wine/dxvk-dxgi.dll.so 20
%{_sbindir}/alternatives --install %{_libdir}/wine/d3d10.dll 'wine-d3d10%{?_isa}' %{_libdir}/wine/dxvk-d3d10.dll 20 \
--slave %{_libdir}/wine/d3d10_1.dll 'wine-d3d10_1%{?_isa}' %{_libdir}/wine/dxvk-d3d10_1.dll \
--slave %{_libdir}/wine/d3d10core.dll 'wine-d3d10core%{?_isa}' %{_libdir}/wine/dxvk-d3d10core.dll
%{_sbindir}/alternatives --install %{_libdir}/wine/d3d11.dll 'wine-d3d11%{?_isa}' %{_libdir}/wine/dxvk-d3d11.dll 20

%postun
%{_sbindir}/alternatives --remove 'wine-dxgi%{?_isa}' %{_libdir}/wine/dxvk-dxgi.dll.so
%{_sbindir}/alternatives --remove 'wine-d3d10%{?_isa}' %{_libdir}/wine/dxvk-d3d10.dll
%{_sbindir}/alternatives --remove 'wine-d3d11%{?_isa}' %{_libdir}/wine/dxvk-d3d11.dll

%files
%license LICENSE
%doc README.md
%{_libdir}/wine/dxvk-d3d10.dll
%{_libdir}/wine/dxvk-d3d10_1.dll
%{_libdir}/wine/dxvk-d3d10core.dll
%{_libdir}/wine/dxvk-d3d11.dll
%{_libdir}/wine/d3d10.dll.so
%{_libdir}/wine/d3d10_1.dll.so
%{_libdir}/wine/d3d10core.dll.so
%{_libdir}/wine/d3d11.dll.so

%files dxgi
%license LICENSE
%{_libdir}/wine/dxvk-dxgi.dll.so


%changelog
* Sun Aug 11 2019 Frantisek Zatloukal <fzatlouk@redhat.com> - 1.3.2-1
- Release 1.3.2
- Use alternatives for .dll files and dxgi.dll.so

* Thu Jul 25 2019 Frantisek Zatloukal <fzatlouk@redhat.com> - 1.3.1-1
- Initial packaging