diff options
author | Stelios Tsampas | 2023-10-23 13:57:32 +0300 |
---|---|---|
committer | Stelios Tsampas | 2023-10-23 13:57:32 +0300 |
commit | aa990422889b030b5b42afda1c6b3ca5450f41b4 (patch) | |
tree | b8bb6e9412d5888760f16b462af03d394df852d7 | |
parent | c341425623ae66e8807c6c2058317d872fb0bc82 (diff) | |
download | aur-aa990422889b030b5b42afda1c6b3ca5450f41b4.tar.gz |
[dxvk-mingw] Add setup_dxvk.sh to the repo instead of fetching it
-rw-r--r-- | .SRCINFO | 4 | ||||
-rw-r--r-- | PKGBUILD | 6 | ||||
-rw-r--r-- | PKGBUILD.testing | 6 | ||||
-rw-r--r-- | setup_dxvk.sh | 206 |
4 files changed, 214 insertions, 8 deletions
@@ -1,7 +1,7 @@ pkgbase = dxvk-mingw pkgdesc = Vulkan-based implementation of D3D9, D3D10 and D3D11 for Linux / Wine, MingW version pkgver = 2.3 - pkgrel = 1 + pkgrel = 2 url = https://github.com/doitsujin/dxvk arch = x86_64 license = zlib/libpng @@ -24,7 +24,7 @@ pkgbase = dxvk-mingw source = dxvk-async-2.2-3.patch::https://gitlab.com/Ph42oN/dxvk-gplasync/-/raw/main/patches/dxvk-gplasync-2.2-3.patch source = dxvk-async-conf.patch source = dxvk-extraopts.patch - source = setup_dxvk.sh::https://raw.githubusercontent.com/doitsujin/dxvk/4f90d7bf5f9ad785660507e0cb459a14dab5ac75/setup_dxvk.sh + source = setup_dxvk.sh source = setup_dxvk sha256sums = SKIP sha256sums = SKIP @@ -3,7 +3,7 @@ pkgname=dxvk-mingw pkgver=2.3 _asyncver=2.2-3 -pkgrel=1 +pkgrel=2 pkgdesc='Vulkan-based implementation of D3D9, D3D10 and D3D11 for Linux / Wine, MingW version' arch=('x86_64') url="https://github.com/doitsujin/dxvk" @@ -20,7 +20,7 @@ source=( "dxvk-async-$_asyncver.patch::https://gitlab.com/Ph42oN/dxvk-gplasync/-/raw/main/patches/dxvk-gplasync-$_asyncver.patch" "dxvk-async-conf.patch" "dxvk-extraopts.patch" - "setup_dxvk.sh::https://raw.githubusercontent.com/doitsujin/dxvk/4f90d7bf5f9ad785660507e0cb459a14dab5ac75/setup_dxvk.sh" + "setup_dxvk.sh" "setup_dxvk" ) @@ -112,7 +112,7 @@ package() { DESTDIR="$pkgdir" ninja -C "build/x32" install DESTDIR="$pkgdir" ninja -C "build/x64" install - install -Dm 755 -t "$pkgdir/usr/share/dxvk" "$srcdir"/setup_dxvk.sh + install -Dm 755 -t "$pkgdir/usr/share/dxvk" setup_dxvk.sh install -Dm 644 -t "$pkgdir/usr/share/dxvk" dxvk/dxvk.conf install -Dm 644 -t "$pkgdir/usr/share/doc/$pkgname" dxvk/README.md install -Dm 644 -t "$pkgdir/usr/share/licenses/$pkgname" dxvk/LICENSE diff --git a/PKGBUILD.testing b/PKGBUILD.testing index 27ab1e7095c8..a59bc767ff7b 100644 --- a/PKGBUILD.testing +++ b/PKGBUILD.testing @@ -3,7 +3,7 @@ pkgname=dxvk-mingw pkgver=2.3 _asyncver=2.2-3 -pkgrel=1 +pkgrel=2 pkgdesc='Vulkan-based implementation of D3D9, D3D10 and D3D11 for Linux / Wine, MingW version' arch=('x86_64') url="https://github.com/doitsujin/dxvk" @@ -20,7 +20,7 @@ source=( "dxvk-async-$_asyncver.patch::https://gitlab.com/Ph42oN/dxvk-gplasync/-/raw/main/patches/dxvk-gplasync-$_asyncver.patch" "dxvk-async-conf.patch" "dxvk-extraopts.patch" - "setup_dxvk.sh::https://raw.githubusercontent.com/doitsujin/dxvk/4f90d7bf5f9ad785660507e0cb459a14dab5ac75/setup_dxvk.sh" + "setup_dxvk.sh" "setup_dxvk" ) @@ -112,7 +112,7 @@ package() { DESTDIR="$pkgdir" ninja -C "build/x32" install DESTDIR="$pkgdir" ninja -C "build/x64" install - install -Dm 755 -t "$pkgdir/usr/share/dxvk" "$srcdir"/setup_dxvk.sh + install -Dm 755 -t "$pkgdir/usr/share/dxvk" setup_dxvk.sh install -Dm 644 -t "$pkgdir/usr/share/dxvk" dxvk/dxvk.conf install -Dm 644 -t "$pkgdir/usr/share/doc/$pkgname" dxvk/README.md install -Dm 644 -t "$pkgdir/usr/share/licenses/$pkgname" dxvk/LICENSE diff --git a/setup_dxvk.sh b/setup_dxvk.sh new file mode 100644 index 000000000000..0f1998f30d99 --- /dev/null +++ b/setup_dxvk.sh @@ -0,0 +1,206 @@ +#!/usr/bin/env bash + +# default directories +dxvk_lib32=${dxvk_lib32:-"x32"} +dxvk_lib64=${dxvk_lib64:-"x64"} + +# figure out where we are +basedir="$(dirname "$(readlink -f "$0")")" + +# figure out which action to perform +action="$1" + +case "$action" in +install) + ;; +uninstall) + ;; +*) + echo "Unrecognized action: $action" + echo "Usage: $0 [install|uninstall] [--without-dxgi] [--symlink]" + exit 1 +esac + +# process arguments +shift + +with_dxgi=true +file_cmd="cp -v --reflink=auto" + +while (($# > 0)); do + case "$1" in + "--without-dxgi") + with_dxgi=false + ;; + "--symlink") + file_cmd="ln -s -v" + ;; + esac + shift +done + +# check wine prefix before invoking wine, so that we +# don't accidentally create one if the user screws up +if [ -n "$WINEPREFIX" ] && ! [ -f "$WINEPREFIX/system.reg" ]; then + echo "$WINEPREFIX:"' Not a valid wine prefix.' >&2 + exit 1 +fi + +# find wine executable +export WINEDEBUG=-all +# disable mscoree and mshtml to avoid downloading +# wine gecko and mono +export WINEDLLOVERRIDES="mscoree,mshtml=" + +wine="wine" +wine64="wine64" +wineboot="wineboot" + +# $PATH is the way for user to control where wine is located (including custom Wine versions). +# Pure 64-bit Wine (non Wow64) requries skipping 32-bit steps. +# In such case, wine64 and winebooot will be present, but wine binary will be missing, +# however it can be present in other PATHs, so it shouldn't be used, to avoid versions mixing. +wine_path=$(dirname "$(which $wineboot)") +wow64=true +if ! [ -f "$wine_path/$wine" ]; then + wine=$wine64 + wow64=false +fi + +# resolve 32-bit and 64-bit system32 path +winever=$($wine --version | grep wine) +if [ -z "$winever" ]; then + echo "$wine:"' Not a wine executable. Check your $wine.' >&2 + exit 1 +fi + +# ensure wine placeholder dlls are recreated +# if they are missing +$wineboot -u + +win64_sys_path=$($wine64 winepath -u 'C:\windows\system32' 2> /dev/null) +win64_sys_path="${win64_sys_path/$'\r'/}" +if $wow64; then + win32_sys_path=$($wine winepath -u 'C:\windows\system32' 2> /dev/null) + win32_sys_path="${win32_sys_path/$'\r'/}" +fi + +if [ -z "$win32_sys_path" ] && [ -z "$win64_sys_path" ]; then + echo 'Failed to resolve C:\windows\system32.' >&2 + exit 1 +fi + +# create native dll override +overrideDll() { + $wine reg add 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v $1 /d native /f >/dev/null 2>&1 + if [ $? -ne 0 ]; then + echo -e "Failed to add override for $1" + exit 1 + fi +} + +# remove dll override +restoreDll() { + $wine reg delete 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v $1 /f > /dev/null 2>&1 + if [ $? -ne 0 ]; then + echo "Failed to remove override for $1" + fi +} + +# copy or link dxvk dll, back up original file +installFile() { + dstfile="${1}/${3}.dll" + srcfile="${basedir}/${2}/${3}.dll" + + if [ -f "${srcfile}.so" ]; then + srcfile="${srcfile}.so" + fi + + if ! [ -f "${srcfile}" ]; then + echo "${srcfile}: File not found. Skipping." >&2 + return 1 + fi + + if [ -n "$1" ]; then + if [ -f "${dstfile}" ] || [ -h "${dstfile}" ]; then + if ! [ -f "${dstfile}.old" ]; then + mv -v "${dstfile}" "${dstfile}.old" + else + rm -v "${dstfile}" + fi + $file_cmd "${srcfile}" "${dstfile}" + else + echo "${dstfile}: File not found in wine prefix" >&2 + return 1 + fi + fi + return 0 +} + +# remove dxvk dll, restore original file +uninstallFile() { + dstfile="${1}/${3}.dll" + srcfile="${basedir}/${2}/${3}.dll" + + if [ -f "${srcfile}.so" ]; then + srcfile="${srcfile}.so" + fi + + if ! [ -f "${srcfile}" ]; then + echo "${srcfile}: File not found. Skipping." >&2 + return 1 + fi + + if ! [ -f "${dstfile}" ] && ! [ -h "${dstfile}" ]; then + echo "${dstfile}: File not found. Skipping." >&2 + return 1 + fi + + if [ -f "${dstfile}.old" ]; then + rm -v "${dstfile}" + mv -v "${dstfile}.old" "${dstfile}" + return 0 + else + return 1 + fi +} + +install() { + installFile "$win64_sys_path" "$dxvk_lib64" "$1" + inst64_ret="$?" + + inst32_ret=-1 + if $wow64; then + installFile "$win32_sys_path" "$dxvk_lib32" "$1" + inst32_ret="$?" + fi + + if (( ($inst32_ret == 0) || ($inst64_ret == 0) )); then + overrideDll "$1" + fi +} + +uninstall() { + uninstallFile "$win64_sys_path" "$dxvk_lib64" "$1" + uninst64_ret="$?" + + uninst32_ret=-1 + if $wow64; then + uninstallFile "$win32_sys_path" "$dxvk_lib32" "$1" + uninst32_ret="$?" + fi + + if (( ($uninst32_ret == 0) || ($uninst64_ret == 0) )); then + restoreDll "$1" + fi +} + +# skip dxgi during install if not explicitly +# enabled, but always try to uninstall it +if $with_dxgi || [ "$action" == "uninstall" ]; then + $action dxgi +fi + +$action d3d9 +$action d3d10core +$action d3d11 |