Browse Source

D9VK support: update scripts

master
Pekka Helenius 5 years ago
parent
commit
e05324d781
12 changed files with 596 additions and 312 deletions
  1. +42
    -26
      README.md
  2. +90
    -0
      arch/0-d9vk-git/PKGBUILD
  3. +40
    -8
      arch/updatewine_arch.sh
  4. +10
    -0
      d9vk_custom_patches/patch_remove_d3d10-11.patch
  5. +4
    -0
      d9vk_custom_patches/put_your_d9vk_patches_here
  6. +175
    -0
      debian/dxvkroot/d9vk.debdata
  7. +14
    -7
      debian/dxvkroot/dxvk.debdata
  8. +188
    -52
      debian/dxvkroot/dxvkbuild.sh
  9. +1
    -1
      debian/dxvkroot/glslang.debdata
  10. +1
    -1
      debian/dxvkroot/meson.debdata
  11. +12
    -202
      debian/updatewine_debian.sh
  12. +19
    -15
      updatewine.sh

+ 42
- 26
README.md View File

@ -1,30 +1,30 @@
# Wine/Wine Staging + DXVK package builder & auto-installer
# Wine/Wine Staging + DXVK & D9VK package builder & auto-installer
![](https://i.imgur.com/5WCPioZ.png) ![](https://i.imgur.com/5WCPioZ.png)
Boost up your Wine experience with a taste of DXVK and automate installation of [DXVK](https://github.com/doitsujin/dxvk) + [Wine](https://www.winehq.org/)/[Wine Staging](https://github.com/wine-staging/wine-staging/) on Debian/Ubuntu/Mint/Arch Linux/Manjaro. Additionally, update your GPU drivers + PlayonLinux wineprefixes to use the latest Wine & DXVK combination available.
Boost up your Wine experience with a taste of DXVK + D9VK and automate installation of [DXVK](https://github.com/doitsujin/dxvk), [D9VK](https://github.com/Joshua-Ashton/d9vk) + [Wine](https://www.winehq.org/)/[Wine Staging](https://github.com/wine-staging/wine-staging/) on Debian/Ubuntu/Mint/Arch Linux/Manjaro. Additionally, update your GPU drivers + PlayonLinux wineprefixes to use the latest Wine & DXVK + D9VK combination available.
## About ## About
One-click solution for accessing bleeding-edge Wine/Wine Staging & DXVK packages _system-widely_ on Debian/Ubuntu/Mint and on Arch Linux/Manjaro. Alternatively, you can pick any version of Wine/Wine Staging & DXVK to be used.
One-click solution for accessing bleeding-edge Wine/Wine Staging, DXVK & D9VK packages _system-widely_ on Debian/Ubuntu/Mint and on Arch Linux/Manjaro. Alternatively, you can pick any version of Wine/Wine Staging, DXVK & D9VK to be used.
![](https://i.imgur.com/Tqqi7pm.png) ![](https://i.imgur.com/Tqqi7pm.png)
_Wine Staging 3.20, DXVK and winetricks on Debian 9. Normally, winetricks & DXVK are not available, and Wine is set to very old version 1.8.7 on Debian - leaving all the sweet candies out. Not anymore - let's end this misery and give user finally a choice._
_Wine Staging 3.20, DXVK and winetricks on Debian 9. Normally, no winetricks, DXVK or D9VK are available, and Wine is set to very old version 1.8.7 on Debian - leaving all the sweet candies out. Not anymore - let's end this misery and give user finally a choice._
## Motivation ## Motivation
**Accessibility, lower the barrier.** Help people to get their hands on the latest (bleeding-edge) Wine/Wine Staging & DXVK software on major Linux distribution platforms without hassle or headaches.
**Accessibility, lower the barrier.** Help people to get their hands on the latest (bleeding-edge) Wine/Wine Staging, DXVK & D9VK software on major Linux distribution platforms without hassle or headaches.
There is not an easy way to auto-install the latest Wine/Wine Staging & DXVK, especially on Debian/Ubuntu/Mint. The newest Wine/Wine Staging is not easily accessible on Debian-based Linux distributions, and DXVK is practically bundled to Lutris or Steam gaming platform as a form of Proton. However, not all Windows programs, like MS Office or Adobe Photoshop, could run under Linux Steam client: Many Windows programs actually rely on system-wide Wine installation which is why system-wide Wine/Wine Staging & DXVK auto-installation this script offers becomes quite handy.
There is not an easy way to auto-install the latest Wine/Wine Staging, DXVK & D9VK, especially on Debian/Ubuntu/Mint. The newest Wine/Wine Staging is not easily accessible on Debian-based Linux distributions, and DXVK/D9VK is practically bundled to Lutris or Steam gaming platform as a form of Proton. However, not all Windows programs, like MS Office or Adobe Photoshop, could run under Linux Steam client: Many Windows programs actually rely on system-wide Wine installation which is why system-wide Wine/Wine Staging, DXVK & D9VK auto-installation this script offers becomes quite handy.
The solution provided here _is independent from Steam client or any other Wine management platform_. The latest Wine/Wine Staging & DXVK bundle will be accessible system-widely, not just via Steam, Lutris or PlayOnLinux. Provided PlayOnLinux prefix update is optional, as well.
The solution provided here _is independent from Steam client or any other Wine management platform_. The latest Wine/Wine Staging, DXVK & D9VK bundle will be accessible system-widely, not just via Steam, Lutris or PlayOnLinux. Provided PlayOnLinux prefix update is optional, as well.
---------------- ----------------
## Adapt system-wide Wine/DXVK to your Steam Windows games ## Adapt system-wide Wine/DXVK to your Steam Windows games
If you want to easily use Wine/Wine Staging and DXVK with your Steam Windows games on Linux, you may want to check out my helper script [steam-launchoptions](https://github.com/Fincer/steam-launchoptions).
If you want to easily use Wine/Wine Staging and DXVK + D9VK with your Steam Windows games on Linux, you may want to check out my helper script [steam-launchoptions](https://github.com/Fincer/steam-launchoptions).
With the helper script, you can set launch options for a single game/selected group of games/all games you have on your Steam account. You can customize the launch options for both Windows and Linux games and clean all existing launch options, too. With the helper script, you can set launch options for a single game/selected group of games/all games you have on your Steam account. You can customize the launch options for both Windows and Linux games and clean all existing launch options, too.
@ -32,13 +32,13 @@ With the helper script, you can set launch options for a single game/selected gr
## Contents ## Contents
- **Wine/Wine Staging & DXVK:** Installation script for supported Linux distributions
- **Wine/Wine Staging, DXVK & D9VK:** Installation script for supported Linux distributions
- **Nvidia drivers:** Installation script for supported Debian-based distributions. Independent script. - **Nvidia drivers:** Installation script for supported Debian-based distributions. Independent script.
- **Winetricks install** Installation script for supported Debian-based distributions. Can be run independently. - **Winetricks install** Installation script for supported Debian-based distributions. Can be run independently.
- **Patches:** Possibility to use your custom patches with Wine & DXVK
- **Patches:** Possibility to use your custom patches with Wine, DXVK & D9VK
---------------- ----------------
@ -48,7 +48,7 @@ With the helper script, you can set launch options for a single game/selected gr
- **RAM:** 4096 MB (DXVK build process may fail with less RAM available) - **RAM:** 4096 MB (DXVK build process may fail with less RAM available)
- **Not listed as a hard dependency, but recommended for DXVK**: The latest Nvidia or AMD GPU drivers (Nvidia proprietary drivers // AMDGPU)
- **Not listed as a hard dependency, but recommended for DXVK & D9VK**: The latest Nvidia or AMD GPU drivers (Nvidia proprietary drivers // AMDGPU)
- **Time:** it can take between 0.5-2 hours for the script to run. Compiling Wine takes _a lot of time_. You have been warned. - **Time:** it can take between 0.5-2 hours for the script to run. Compiling Wine takes _a lot of time_. You have been warned.
@ -56,7 +56,7 @@ With the helper script, you can set launch options for a single game/selected gr
## Why to compile from source? ## Why to compile from source?
Latest version of Wine/Wine Staging & DXVK are only available via git as source code which must be compiled before usage. Note that compiling Wine takes a lot of time. Compiling from source has its advantages and disadvantages, some of them listed below.
Latest version of Wine/Wine Staging, DXVK & D9VK are only available via git as source code which must be compiled before usage. Note that compiling Wine takes a lot of time. Compiling from source has its advantages and disadvantages, some of them listed below.
**Advantages:** **Advantages:**
@ -72,7 +72,7 @@ Latest version of Wine/Wine Staging & DXVK are only available via git as source
- is unreliable in some cases, the script may break easily due to rapid DXVK development or distro changes - is unreliable in some cases, the script may break easily due to rapid DXVK development or distro changes
- may break working already-working versions of the packages (use `--no-install` parameter to avoid installation of DXVK & Wine, just as precaution)
- may break working already-working versions of the packages (use `--no-install` parameter to avoid installation of DXVK/D9VK & Wine, just as precaution)
---------------- ----------------
@ -102,11 +102,13 @@ All supported arguments are:
- `--no-dxvk` = Do not compile or install DXVK - `--no-dxvk` = Do not compile or install DXVK
- `--no-d9vk` = Do not compile or install D9VK
- `--no-pol` = Do not update current user's PlayOnLinux Wine prefixes - `--no-pol` = Do not update current user's PlayOnLinux Wine prefixes
### Force/Lock package versions ### Force/Lock package versions
You can force/lock specific Wine, Wine Staging, DXVK, meson & glslang versions.
You can force/lock specific Wine, Wine Staging, DXVK, D9VK, meson & glslang versions.
There are two switches for that: Set a specific **1)** _commit_ **2)** _git branch_ you want to use There are two switches for that: Set a specific **1)** _commit_ **2)** _git branch_ you want to use
@ -114,11 +116,11 @@ This is handy if you encounter issues during package compilation (DXVK/glslang o
- Git commit: - Git commit:
- `git_commithash_dxvk`, `git_commithash_wine`, `git_commithash_glslang`, `git_commithash_meson`
- `git_commithash_dxvk`, `git_commithash_d9vk`, `git_commithash_wine`, `git_commithash_glslang`, `git_commithash_meson`
- Git branch: - Git branch:
- `git_branch_dxvk`, `git_branch_wine`, `git_branch_glslang`, `git_branch_meson`
- `git_branch_dxvk`, `git_branch_d9vk`, `git_branch_wine`, `git_branch_glslang`, `git_branch_meson`
**These settings apply only on Debian/Ubuntu/Mint:** **These settings apply only on Debian/Ubuntu/Mint:**
@ -138,7 +140,7 @@ Each variable applies values which must be match package git commit tree. The va
- **A)** 40 characters long commit hash. Use this if you want this commit to be the latest to be used in package compilation, not anything after it. - **A)** 40 characters long commit hash. Use this if you want this commit to be the latest to be used in package compilation, not anything after it.
- defined in git commit tree: [DXVK commit tree](https://github.com/doitsujin/dxvk/commits/master), [Wine commit tree](https://source.winehq.org/git/wine.git/) (or [GitHub mirror](https://github.com/wine-mirror/wine)), [glslang commit tree](https://github.com/KhronosGroup/glslang/commits/master), [meson commit tree](https://github.com/mesonbuild/meson/commits/master)
- defined in git commit tree: [DXVK commit tree](https://github.com/doitsujin/dxvk/commits/master), D9VK commit tree](https://github.com/Joshua-Ashton/d9vk/commits/master), [Wine commit tree](https://source.winehq.org/git/wine.git/) (or [GitHub mirror](https://github.com/wine-mirror/wine)), [glslang commit tree](https://github.com/KhronosGroup/glslang/commits/master), [meson commit tree](https://github.com/mesonbuild/meson/commits/master)
- You can obtain proper hash by opening the commit. Hash syntax is: `654544e96bfcd1bbaf4a0fc639ef655299276a39` etc... - You can obtain proper hash by opening the commit. Hash syntax is: `654544e96bfcd1bbaf4a0fc639ef655299276a39` etc...
@ -168,13 +170,13 @@ Any other vanilla Wine git branch setting than _master_ will be ignored if Wine
**NOTE:** This section doesn't concern Ubuntu or Mint users. **NOTE:** This section doesn't concern Ubuntu or Mint users.
Since Debian doesn't provide winetricks package on official repositories, it is strongly recommended that you use provided `debian_install_winetricks.sh` to install Winetricks.
Since Debian doesn't provide winetricks package on official repositories, it is strongly recommended that you use provided `debian_install_winetricks.sh` to install Winetricks if needed.
---------------- ----------------
## Custom patches for Wine & DXVK
## Custom patches for Wine, DXVK & D9VK
You can apply your own patches for DXVK & Wine by dropping valid `.patch` or `.diff` files into `dxvk_custom_patches` (DXVK) or `wine_custom_patches` (Wine) folder.
You can apply your own patches for DXVK, D9VK & Wine by dropping valid `.patch` or `.diff` files into `dxvk_custom_patches` (DXVK), `d9vk_custom_patches` (D9VK) or `wine_custom_patches` (Wine) folder.
Folders `dxvk_disabled_patches` and `wine_disabled_patches` are just for management purposes, they do not have a role in script logic at all. Folders `dxvk_disabled_patches` and `wine_disabled_patches` are just for management purposes, they do not have a role in script logic at all.
@ -188,7 +190,7 @@ By using keywords `_staging` or `_nostaging` in your patch filename, you can qui
## Compiled packages are stored for later usage ## Compiled packages are stored for later usage
Successfully compiled Wine & DXVK packages are stored in separate subfolders. Their locations are as follows.
Successfully compiled Wine, DXVK & D9VK packages are stored in separate subfolders. Their locations are as follows.
On Debian/Ubuntu/Mint: On Debian/Ubuntu/Mint:
@ -210,12 +212,24 @@ To enable DXVK on existing wineprefixes, just run
WINEPREFIX=/path/to/my/wineprefix setup_dxvk WINEPREFIX=/path/to/my/wineprefix setup_dxvk
``` ```
## Add DXVK to PlayOnLinux Wine prefixes
## D9VK usage
**NOTE:** D9VK must be installed before applying these steps.
To install DXVK on specific PlayOnLinux wineprefix which uses a different than `system` version of Wine, apply the following command syntax:
To enable D9VK on existing wineprefixes, just run
```
WINEPREFIX=/path/to/my/wineprefix setup_d9vk
```
## Add DXVK/D9VK to PlayOnLinux Wine prefixes
To install DXVK or D9VK on specific PlayOnLinux wineprefix which uses a different than `system` version of Wine, apply the following command syntax:
``` ```
WINEPREFIX="$HOME/.PlayOnLinux/wineprefix/myprefix" WINEPATH=$HOME/.PlayOnLinux/wine/{linux-amd64,linux-x86}/wineversion/bin" setup_dxvk WINEPREFIX="$HOME/.PlayOnLinux/wineprefix/myprefix" WINEPATH=$HOME/.PlayOnLinux/wine/{linux-amd64,linux-x86}/wineversion/bin" setup_dxvk
WINEPREFIX="$HOME/.PlayOnLinux/wineprefix/myprefix" WINEPATH=$HOME/.PlayOnLinux/wine/{linux-amd64,linux-x86}/wineversion/bin" setup_d9vk
``` ```
where you need to set either `linux-amd64` or `linux-x86`, and `wineversion` + `myprefix` to match real ones, obviously. where you need to set either `linux-amd64` or `linux-x86`, and `wineversion` + `myprefix` to match real ones, obviously.
@ -270,6 +284,10 @@ bash debian_cleanup_devpkgs.sh
`bash updatewine.sh --no-staging --no-dxvk --no-pol` `bash updatewine.sh --no-staging --no-dxvk --no-pol`
**8)** Compile D9VK, and make an installable package for it. Install the package, do not check PlayOnLinux wineprefixes:
`bash updatewine.sh --no-wine --no-dxvk --no-pol`
---------------- ----------------
## GPU drivers ## GPU drivers
@ -302,7 +320,7 @@ The following section contains important notes about the script usage.
### Script runtime test ### Script runtime test
Runtime test done for the script to ensure it works as expected. Occasional test-runs are mandatory due to rapid development of the packages (Wine/DXVK) it handles.
Runtime test done for the script to ensure it works as expected. Occasional test-runs are mandatory due to rapid development of the packages (Wine/DXVK/D9VK) it handles.
**Latest test-run:** 23th November, 2018 **Latest test-run:** 23th November, 2018
@ -334,8 +352,6 @@ Git commit freezing used for DXVK & meson. Reasons:
- Add compilation/installation script for the latest AMDGPU on Debian/Ubuntu/Mint - Add compilation/installation script for the latest AMDGPU on Debian/Ubuntu/Mint
- Add compilation/installation script for the latest MinGW on Debian/Ubuntu/Mint
- Add info about selected commits and branches (if they have not been set to default) - Add info about selected commits and branches (if they have not been set to default)
- Remove temp folders in case of failure (meson/glslang/dxvk-git/wine... temp build folders) - Remove temp folders in case of failure (meson/glslang/dxvk-git/wine... temp build folders)


+ 90
- 0
arch/0-d9vk-git/PKGBUILD View File

@ -0,0 +1,90 @@
# Maintainer: Pekka Helenius <fincer89 [at] hotmail [dot] com>
# Contributor: Adrià Cereto i Massagué <ssorgatem at gmail.com>
pkgname=d9vk-git
pkgver=6125834
pkgrel=1
pkgdesc="A Vulkan-based compatibility layer for Direct3D 9 which allows running 3D applications on Linux using Wine"
arch=('x86_64')
url="https://github.com/Joshua-Ashton/d9vk"
license=('zlib/libpng')
makedepends=('ninja' 'meson>=0.43' 'glslang' 'git' 'wine')
source=(
${pkgname}::"git+https://github.com/Joshua-Ashton/d9vk.git#commit=HEAD"
)
sha256sums=('SKIP'
'SKIP'
'b67f3a88115b1d048fb373ff6df2140c3027fe9edecccf58c1a88efce01fb738')
_git_branch_d9vk=master
_d9vk_commit=HEAD
##############################
# Copy custom patches to correct location
if [[ $(find "${startdir}/d9vk-patches" -mindepth 1 -maxdepth 1 -regex ".*\.\(patch\|diff\)$") ]]; then
cp -r "${startdir}/d9vk-patches/"*.{patch,diff} "${startdir}"/
p=0
for patch in $(find . -mindepth 1 -maxdepth 1 -regex ".*\.\(patch\|diff\)$"); do
patches[$p]="$(basename ${patch})"
let p++
done
unset p
source+=(${source[@]} ${patches[@]})
fi
# Reset git tree and apply custom patches
prepare() {
cd "${srcdir}/${pkgname}"
git checkout ${_git_branch_d9vk}
git reset --hard ${_d9vk_commit} # Restore tracked files
git clean -d -x -f # Delete untracked files
# Apply patches, if present
if [[ $(ls "${srcdir}"/*.{patch,diff} 2>/dev/null | wc -w) -ne 0 ]]; then
# Apply all custom patches
msg2 "Applying custom patches..."
for i in "${srcdir}"/*.{patch,diff}; do
if [[ -f ${i} ]]; then
patch -Np1 < ${i}
fi
done
fi
}
##############################
pkgver() {
cd "$srcdir/${pkgname}"
git describe --long --tags --always | sed 's/\([^-]*-g\)/r\1/;s/-/./g;s/v//g'
}
prepare() {
cd "$srcdir/${pkgname}"
patch -Np1 < "$srcdir"/patch_remove_d3d10-11.patch
}
build() {
cd "$srcdir/${pkgname}"
./package-release.sh ${pkgver} build --no-package
}
package_d9vk-git() {
depends=('vulkan-icd-loader' 'wine' 'lib32-vulkan-icd-loader')
mkdir -p "$pkgdir"/usr/share/dxvk/{x32,x64}
cd "$srcdir/${pkgname}"
install -m0644 build/dxvk-${pkgver}/x32/d3d9.dll "$pkgdir"/usr/share/dxvk/x32/d3d9.dll
install -m0644 build/dxvk-${pkgver}/x64/d3d9.dll "$pkgdir"/usr/share/dxvk/x64/d3d9.dll
install -m0755 build/dxvk-${pkgver}/setup_dxvk.sh "$pkgdir"/usr/share/dxvk/setup_d9vk.sh
mkdir "$pkgdir"/usr/bin
cd "$pkgdir"/usr/bin
ln -s /usr/share/dxvk/setup_d9vk.sh setup_d9vk
}

+ 40
- 8
arch/updatewine_arch.sh View File

@ -1,6 +1,6 @@
#!/bin/env bash #!/bin/env bash
# Set up Wine Staging + DXVK on Arch Linux & Variants
# Set up Wine Staging + DXVK & D9VK on Arch Linux & Variants
# Copyright (C) 2018 Pekka Helenius # Copyright (C) 2018 Pekka Helenius
# #
# This program is free software: you can redistribute it and/or modify # This program is free software: you can redistribute it and/or modify
@ -46,10 +46,12 @@ done
# variables! # variables!
# #
git_commithash_dxvk=${params[0]} git_commithash_dxvk=${params[0]}
git_commithash_wine=${params[3]}
git_commithash_d9vk=${params[1]}
git_commithash_wine=${params[4]}
git_branch_dxvk=${params[4]}
git_branch_wine=${params[7]}
git_branch_dxvk=${params[5]}
git_branch_d9vk=${params[6]}
git_branch_wine=${params[9]}
######################################################## ########################################################
@ -83,6 +85,9 @@ for check in ${args[@]}; do
--no-dxvk) --no-dxvk)
NO_DXVK= NO_DXVK=
;; ;;
--no-d9vk)
NO_D9VK=
;;
--no-pol) --no-pol)
NO_POL= NO_POL=
;; ;;
@ -100,7 +105,7 @@ function INFO_SEP() { printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' - ;
# If the script is interrupted (Ctrl+C/SIGINT), do the following # If the script is interrupted (Ctrl+C/SIGINT), do the following
function Arch_intCleanup() { function Arch_intCleanup() {
rm -rf ${ARCH_BUILDROOT}/{0-wine-staging-git/{wine-patches,*.tar.xz},0-dxvk-git/{dxvk-git,*.tar.xz}}
rm -rf ${ARCH_BUILDROOT}/{0-wine-staging-git/{wine-patches,*.tar.xz},0-dxvk-git/{dxvk-git,*.tar.xz},0-d9vk-git/{d9vk-git,*.tar.xz}}
exit 0 exit 0
} }
@ -125,6 +130,7 @@ function checkFiles() {
local wine_files=('30-win32-aliases.conf' 'PKGBUILD') local wine_files=('30-win32-aliases.conf' 'PKGBUILD')
local dxvk_files=('PKGBUILD') local dxvk_files=('PKGBUILD')
local d9vk_files=('PKGBUILD')
function validatefiles() { function validatefiles() {
@ -149,6 +155,10 @@ function checkFiles() {
validatefiles "${dxvk_files[*]}" DXVK "${ARCH_BUILDROOT}/0-dxvk-git" validatefiles "${dxvk_files[*]}" DXVK "${ARCH_BUILDROOT}/0-dxvk-git"
fi fi
if [[ ! -v NO_D9VK ]]; then
validatefiles "${d9vk_files[*]}" D9VK "${ARCH_BUILDROOT}/0-d9vk-git"
fi
} }
########################################################### ###########################################################
@ -243,9 +253,10 @@ $(for o in ${ERRPKGS[@]}; do printf '%s\n' ${o}; done)\
function prepare_env() { function prepare_env() {
# Copy Wine & DXVK patch files
# Copy Wine, DXVK & D9VK patch files
cp -rf ${ARCH_BUILDROOT}/../wine_custom_patches ${ARCH_BUILDROOT}/0-wine-staging-git/wine-patches cp -rf ${ARCH_BUILDROOT}/../wine_custom_patches ${ARCH_BUILDROOT}/0-wine-staging-git/wine-patches
cp -rf ${ARCH_BUILDROOT}/../dxvk_custom_patches ${ARCH_BUILDROOT}/0-dxvk-git/dxvk-patches cp -rf ${ARCH_BUILDROOT}/../dxvk_custom_patches ${ARCH_BUILDROOT}/0-dxvk-git/dxvk-patches
cp -rf ${ARCH_BUILDROOT}/../d9vk_custom_patches ${ARCH_BUILDROOT}/0-d9vk-git/d9vk-patches
# Create identifiable directory for this build # Create identifiable directory for this build
mkdir -p ${ARCH_BUILDROOT}/compiled_pkg/"${datedir}" mkdir -p ${ARCH_BUILDROOT}/compiled_pkg/"${datedir}"
@ -420,6 +431,12 @@ function build_pkg() {
set_gitOverride "dxvk.git" "${git_commithash_dxvk}" ${pkgbuild_file} set_gitOverride "dxvk.git" "${git_commithash_dxvk}" ${pkgbuild_file}
sed -i "s/\(^_git_branch_dxvk=\).*/\1${git_branch_dxvk}/" ${pkgbuild_file} sed -i "s/\(^_git_branch_dxvk=\).*/\1${git_branch_dxvk}/" ${pkgbuild_file}
sed -i "s/\(^_dxvk_commit=\).*/\1${git_commithash_dxvk}/" ${pkgbuild_file} sed -i "s/\(^_dxvk_commit=\).*/\1${git_commithash_dxvk}/" ${pkgbuild_file}
elif [[ ${pkgname} == d9vk ]]; then
local pkgbuild_file="${ARCH_BUILDROOT}/${pkgdir}/PKGBUILD"
set_gitOverride "d9vk.git" "${git_commithash_d9vk}" ${pkgbuild_file}
sed -i "s/\(^_git_branch_d9vk=\).*/\1${git_branch_d9vk}/" ${pkgbuild_file}
sed -i "s/\(^_d9vk_commit=\).*/\1${git_commithash_d9vk}/" ${pkgbuild_file}
fi fi
fi fi
@ -481,6 +498,7 @@ function updatePOL() {
done done
fi fi
# TODO remove duplicate functionality
if [[ ! -v NO_DXVK ]]; then if [[ ! -v NO_DXVK ]]; then
for wineprefix in $(find $HOME/.PlayOnLinux/wineprefix -mindepth 1 -maxdepth 1 -type d); do for wineprefix in $(find $HOME/.PlayOnLinux/wineprefix -mindepth 1 -maxdepth 1 -type d); do
if [[ -d ${wineprefix}/dosdevices ]]; then if [[ -d ${wineprefix}/dosdevices ]]; then
@ -488,7 +506,13 @@ function updatePOL() {
fi fi
done done
fi fi
if [[ ! -v NO_D9VK ]]; then
for wineprefix in $(find $HOME/.PlayOnLinux/wineprefix -mindepth 1 -maxdepth 1 -type d); do
if [[ -d ${wineprefix}/dosdevices ]]; then
WINEPREFIX=${wineprefix} setup_d9vk
fi
done
fi
} }
########################################################## ##########################################################
@ -496,7 +520,7 @@ function updatePOL() {
# Clean these temporary folders & files # Clean these temporary folders & files
# TODO Shall we remove git folders or keep them? # TODO Shall we remove git folders or keep them?
dxvk_wine_cleanlist=('*.patch' '*.diff' 'pkg' 'src' '*-patches' '*.tar.xz') # dxvk-git wine-*git
dxvk_wine_cleanlist=('*.patch' '*.diff' 'pkg' 'src' '*-patches' '*.tar.xz')
########################################################## ##########################################################
@ -530,6 +554,10 @@ if [[ ! -v NO_DXVK ]]; then
checkDepends "0-dxvk-git" "dxvk-git" depends makedepends checkDepends "0-dxvk-git" "dxvk-git" depends makedepends
fi fi
if [[ ! -v NO_D9VK ]]; then
checkDepends "0-d9vk-git" "d9vk-git" depends makedepends
fi
check_alldeps check_alldeps
######################### #########################
@ -546,6 +574,10 @@ if [[ ! -v NO_DXVK ]]; then
build_pkg dxvk DXVK "0-dxvk-git" "${dxvk_wine_cleanlist[*]}" gitcheck build_pkg dxvk DXVK "0-dxvk-git" "${dxvk_wine_cleanlist[*]}" gitcheck
fi fi
if [[ ! -v NO_D9VK ]]; then
build_pkg d9vk D9VK "0-d9vk-git" "${dxvk_wine_cleanlist[*]}" gitcheck
fi
######################### #########################
# Update user's PlayonLinux wine prefixes if needed # Update user's PlayonLinux wine prefixes if needed


+ 10
- 0
d9vk_custom_patches/patch_remove_d3d10-11.patch View File

@ -0,0 +1,10 @@
--- a/setup_dxvk.sh
+++ b/setup_dxvk.sh
@@ -173,7 +173,3 @@
fi
$action d3d9
-$action d3d10
-$action d3d10_1
-$action d3d10core
-$action d3d11

+ 4
- 0
d9vk_custom_patches/put_your_d9vk_patches_here View File

@ -0,0 +1,4 @@
Put your custom D9VK patches here.
Valid file suffix formats are: .diff and .patch
These patches are applied during D9VK compilation

+ 175
- 0
debian/dxvkroot/d9vk.debdata View File

@ -0,0 +1,175 @@
########################################################
# Common properties
pkg_name="d9vk-git"
pkg_license="custom --copyrightfile ../LICENSE"
pkg_maintainer="${USER} <${USER}@unknown>"
pkg_section="otherosfs"
pkg_priority="optional"
pkg_arch="all"
d9vk_relative_builddir="debian/source/dxvk-master"
pkg_commondesc="Vulkan-based D3D9 implementation for Linux / Wine"
pkg_longdesc="
A Vulkan-based translation layer for Direct3D 9 which
allows running 3D applications on Linux using Wine.
"
pkg_giturl="https://github.com/Joshua-Ashton/d9vk"
pkg_homeurl="https://github.com/Joshua-Ashton/d9vk"
pkg_gitbranch=${git_branch_d9vk}
git_commithash=${git_commithash_d9vk}
pkg_gitver="git describe --long --always | sed 's/\-[a-z].*//; s/\-/\./; s/[a-z]//g'"
pkg_installfile="./debian/install"
pkg_controlfile="./debian/control"
pkg_rulesfile="./debian/rules"
########################################################
# Debian rules file section
pkg_debrules="\
#!/usr/bin/make -f
%:
dh \$@
override_dh_auto_configure:
override_dh_usrlocal:
override_dh_install:
# Compile D9VK
bash ./package-release.sh master debian/source/ --no-package
# Tell deb builder to create D9VK x32 & x64 subfolders
for arch in 32 64; do mkdir -p ${d9vk_relative_builddir}/x${arch}; done
# Make a proper executable script folder for setup_d9vk.sh file
mkdir -p ${d9vk_relative_builddir}/bin
printf '%s\n%s' \"#!/bin/sh\" \"/usr/share/dxvk/setup_d9vk.sh\" > \"${d9vk_relative_builddir}/bin/setup_d9vk\"
chmod +x "${d9vk_relative_builddir}/bin/setup_d9vk"
mv ${d9vk_relative_builddir}/setup_dxvk.sh ${d9vk_relative_builddir}/setup_d9vk.sh
dh_install
"
########################################################
# Debian install file section
pkg_debinstall="\
${d9vk_relative_builddir}/setup_d9vk.sh usr/share/dxvk/
${d9vk_relative_builddir}/bin/* usr/bin/
$(for arch in 32 64; do echo -e ${d9vk_relative_builddir}/x${arch}/d3d9.dll usr/share/dxvk/x${arch}/; done)
"
########################################################
# Debian control file subfields
# Debian control file Overrides section
pkg_overrides=(
empty
)
# Debian control file Suggests section
pkg_suggests=(
empty
)
# Debian control file Conflicts section
pkg_conflicts=(
empty
)
# Debian control file Breaks section
pkg_breaks=(
empty
)
# Debian control file Replaces section
pkg_replaces=(
empty
)
# Debian control file Provides section
pkg_provides=(
empty
)
############################
# Build time dependencies
pkg_deps_build=(
#${_coredeps[*]}
'meson'
'glslang'
'gcc-mingw-w64-base'
#'binutils-common'
'mingw-w64-common'
'binutils-mingw-w64-x86-64'
'binutils-mingw-w64-i686'
'mingw-w64-x86-64-dev'
'gcc-mingw-w64-x86-64'
'g++-mingw-w64-x86-64'
'mingw-w64-i686-dev'
'gcc-mingw-w64-i686'
'g++-mingw-w64-i686'
)
# Runtime dependencies
pkg_deps_runtime=(
'wine'
)
# Extra fields for Debian control file Source section
pkg_extra_1=(
empty
)
# Extra fields for Debian control file Package section
pkg_extra_2=(
empty
)
############################
# Deb builder execution field
# Do not build either debug symbols or doc files
pkg_debbuilder="DEB_BUILD_OPTIONS=\"strip nodocs noddebs\" dpkg-buildpackage -us -uc -b -d --source-option=--include-binaries"
########################################################
# Contents of Debian control file
# This is a necessary variable setting for array loops below
IFS=$'\n'
pkg_debcontrol="\
Source: ${pkg_name}
Section: ${pkg_section}
Priority: ${pkg_priority}
Maintainer: ${pkg_maintainer}
Build-Depends: debhelper (>=9), $(if [[ ${pkg_deps_build[0]} != "empty" ]]; then \
for w in ${pkg_deps_build[@]}; do printf '%s, ' ${w}; done; fi)
Standards-Version: 4.1.3
Homepage: ${pkg_homeurl}
$(if [[ ${pkg_extra_1[0]} != "empty" ]]; then for w in ${pkg_extra_1[@]}; do echo ${w}; done ; fi)
Package: ${pkg_name}
Architecture: ${pkg_arch}
Depends: \${shlibs:Depends}, \${misc:Depends}, $(if [[ ${pkg_deps_runtime[0]} != "empty" ]]; then \
for w in ${pkg_deps_runtime[@]}; do printf '%s, ' ${w}; done; fi)
Description: ${pkg_commondesc}
$(echo -e ${pkg_longdesc} | sed 's/^/ /g; s/\n/\n /g')
$(if [[ ${pkg_extra_2[0]} != "empty" ]]; then for w in ${pkg_extra_2[@]}; do echo ${w}; done ; fi)
$(if [[ ${pkg_suggests[0]} != "empty" ]]; then echo "Suggests: $(echo ${_kg_suggests[*]} | sed 's/\s/, /g')"; fi)
$(if [[ ${pkg_conflicts[0]} != "empty" ]]; then echo "Conflicts: $(echo ${pkg_overrides[*]} | sed 's/\s/, /g')"; fi)
$(if [[ ${pkg_breaks[0]} != "empty" ]]; then echo "Breaks: $(echo ${pkg_overrides[*]} | sed 's/\s/, /g')"; fi)
$(if [[ ${pkg_replaces[0]} != "empty" ]]; then echo "Replaces: $(echo ${pkg_overrides[*]} | sed 's/\s/, /g')"; fi)
$(if [[ ${pkg_provides[0]} != "empty" ]]; then echo "Provides: $(echo ${pkg_overrides[*]} | sed 's/\s/, /g')"; fi)
"
unset IFS

+ 14
- 7
debian/dxvkroot/dxvk.debdata View File

@ -48,10 +48,10 @@ override_dh_install:
# Tell deb builder to create DXVK x32 & x64 subfolders # Tell deb builder to create DXVK x32 & x64 subfolders
for arch in 32 64; do mkdir -p ${dxvk_relative_builddir}/x${arch}; done for arch in 32 64; do mkdir -p ${dxvk_relative_builddir}/x${arch}; done
# Make a proper executable script folder for setup_dxvk.verb file
# Make a proper executable script folder for setup_dxvk.sh file
mkdir -p ${dxvk_relative_builddir}/bin mkdir -p ${dxvk_relative_builddir}/bin
echo -e \"#!/bin/sh\n/usr/share/dxvk/setup_dxvk.sh\" > \"${dxvk_relative_builddir}/bin/setup_dxvk\"
printf '%s\n%s' \"#!/bin/sh\" \"/usr/share/dxvk/setup_dxvk.sh\" > \"${dxvk_relative_builddir}/bin/setup_dxvk\"
chmod +x "${dxvk_relative_builddir}/bin/setup_dxvk" chmod +x "${dxvk_relative_builddir}/bin/setup_dxvk"
dh_install dh_install
" "
@ -60,7 +60,7 @@ override_dh_install:
# Debian install file section # Debian install file section
pkg_debinstall="\ pkg_debinstall="\
${dxvk_relative_builddir}/setup_dxvk.verb usr/share/dxvk/
${dxvk_relative_builddir}/setup_dxvk.sh usr/share/dxvk/
${dxvk_relative_builddir}/bin/* usr/bin/ ${dxvk_relative_builddir}/bin/* usr/bin/
$(for arch in 32 64; do echo -e ${dxvk_relative_builddir}/x${arch}/* usr/share/dxvk/x${arch}/; done) $(for arch in 32 64; do echo -e ${dxvk_relative_builddir}/x${arch}/* usr/share/dxvk/x${arch}/; done)
" "
@ -105,12 +105,19 @@ pkg_deps_build=(
#${_coredeps[*]} #${_coredeps[*]}
'meson' 'meson'
'glslang' 'glslang'
'gcc-mingw-w64-base'
#'binutils-common'
'mingw-w64-common'
'binutils-mingw-w64-x86-64'
'binutils-mingw-w64-i686'
'mingw-w64-x86-64-dev'
'gcc-mingw-w64-x86-64' 'gcc-mingw-w64-x86-64'
'gcc-mingw-w64-i686'
'g++-mingw-w64-x86-64' 'g++-mingw-w64-x86-64'
'g++-mingw-w64-i686'
'mingw-w64-x86-64-dev'
'mingw-w64-i686-dev' 'mingw-w64-i686-dev'
'gcc-mingw-w64-i686'
'g++-mingw-w64-i686'
) )
# Runtime dependencies # Runtime dependencies
@ -132,7 +139,7 @@ empty
# Deb builder execution field # Deb builder execution field
# Do not build either debug symbols or doc files # Do not build either debug symbols or doc files
pkg_debbuilder="DEB_BUILD_OPTIONS=\"strip nodocs noddebs\" dpkg-buildpackage -us -uc -b --source-option=--include-binaries"
pkg_debbuilder="DEB_BUILD_OPTIONS=\"strip nodocs noddebs\" dpkg-buildpackage -us -uc -b -d --source-option=--include-binaries"
######################################################## ########################################################
# Contents of Debian control file # Contents of Debian control file


+ 188
- 52
debian/dxvkroot/dxvkbuild.sh View File

@ -1,6 +1,6 @@
#!/bin/env bash #!/bin/env bash
# Compile DXVK git on Debian/Ubuntu/Mint and variants
# Compile DXVK & D9VK git on Debian/Ubuntu/Mint and variants
# Copyright (C) 2018 Pekka Helenius # Copyright (C) 2018 Pekka Helenius
# #
# This program is free software: you can redistribute it and/or modify # This program is free software: you can redistribute it and/or modify
@ -46,12 +46,14 @@ done
# variables! # variables!
# #
git_commithash_dxvk=${params[0]} git_commithash_dxvk=${params[0]}
git_commithash_glslang=${params[1]}
git_commithash_meson=${params[2]}
git_commithash_d9vk=${params[1]}
git_commithash_glslang=${params[2]}
git_commithash_meson=${params[3]}
git_branch_dxvk=${params[4]}
git_branch_glslang=${params[5]}
git_branch_meson=${params[6]}
git_branch_dxvk=${params[5]}
git_branch_d9vk=${params[6]}
git_branch_glslang=${params[7]}
git_branch_meson=${params[8]}
######################################################## ########################################################
@ -80,28 +82,78 @@ for check in ${args[@]}; do
--buildpkg-rm) --buildpkg-rm)
BUILDPKG_RM= BUILDPKG_RM=
;; ;;
--no-dxvk)
NO_DXVK=
;;
--no-d9vk)
NO_D9VK=
;;
esac esac
done done
######################################################## ########################################################
# PRESENCE OF WINE
# Check presence of Wine. Some version of Wine should # Check presence of Wine. Some version of Wine should
# be found in the system in order to install DXVK. # be found in the system in order to install DXVK.
known_wines=( known_wines=(
'wine'
'wine-stable'
'wine32'
'wine64'
'libwine:amd64'
'libwine:i386'
'wine-git'
'wine-staging-git'
'wine'
'wine-stable'
'wine32'
'wine64'
'libwine:amd64'
'libwine:i386'
'wine-git'
'wine-staging-git'
) )
# Alternative remote dependency packages for Debian distributions which offer too old packages for DXVK/D9VK
#
# Left side: <package name in repositories>,<version_number>
# Right side: package alternative source URL
#
# NOTE: Determine these packages in corresponding debdata files as runtime or buildtime dependencies
#
typeset -A remotePackagesAlt
remotePackagesAlt=(
[gcc-mingw-w64-base,830]="http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-mingw-w64/gcc-mingw-w64-base_8.3.0-6ubuntu1+21.1build2_amd64.deb"
[mingw-w64-common,600]="http://mirrors.kernel.org/ubuntu/pool/universe/m/mingw-w64/mingw-w64-common_6.0.0-3_all.deb"
# [binutils-common,232]="http://mirrors.kernel.org/ubuntu/pool/main/b/binutils/binutils-common_2.32-7ubuntu4_amd64.deb"
[binutils-mingw-w64-x86-64,232]="http://mirrors.kernel.org/ubuntu/pool/universe/b/binutils-mingw-w64/binutils-mingw-w64-x86-64_2.32-7ubuntu4+8.3ubuntu2_amd64.deb"
[binutils-mingw-w64-i686,232]="http://mirrors.kernel.org/ubuntu/pool/universe/b/binutils-mingw-w64/binutils-mingw-w64-i686_2.32-7ubuntu4+8.3ubuntu2_amd64.deb"
[mingw-w64-x86-64-dev,600]="http://mirrors.kernel.org/ubuntu/pool/universe/m/mingw-w64/mingw-w64-x86-64-dev_6.0.0-3_all.deb"
[gcc-mingw-w64-x86-64,830]="http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-mingw-w64/gcc-mingw-w64-x86-64_8.3.0-6ubuntu1+21.1build2_amd64.deb"
[g++-mingw-w64-x86-64,830]="http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-mingw-w64/g++-mingw-w64-x86-64_8.3.0-6ubuntu1+21.1build2_amd64.deb"
[mingw-w64-i686-dev,600]="http://mirrors.kernel.org/ubuntu/pool/universe/m/mingw-w64/mingw-w64-i686-dev_6.0.0-3_all.deb"
[gcc-mingw-w64-i686,830]="http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-mingw-w64/gcc-mingw-w64-i686_8.3.0-6ubuntu1+21.1build2_amd64.deb"
[g++-mingw-w64-i686,830]="http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-mingw-w64/g++-mingw-w64-i686_8.3.0-6ubuntu1+21.1build2_amd64.deb"
)
# Posix-compliant MingW alternative executables
#
typeset -A alternatives
alternatives=(
[x86_64-w64-mingw32-gcc]="x86_64-w64-mingw32-gcc-posix"
[x86_64-w64-mingw32-g++]="x86_64-w64-mingw32-g++-posix"
[i686-w64-mingw32-gcc]="i686-w64-mingw32-gcc-posix"
[i686-w64-mingw32-g++]="i686-w64-mingw32-g++-posix"
)
# Temporary symbolic links for DXVK & D9VK compilation
#
typeset -A tempLinks
tempLinks=(
['/usr/bin/i686-w64-mingw32-gcc']='/usr/bin/i686-w64-mingw32-gcc-posix'
['/usr/bin/i686-w64-mingw32-g++']='/usr/bin/i686-w64-mingw32-g++-posix'
['/usr/bin/x86_64-w64-mingw32-gcc']='x86_64-w64-mingw32-gcc-posix'
['/usr/bin/x86_64-w64-mingw32-g++']='x86_64-w64-mingw32-g++-posix'
)
########################################################
function runtimeCheck() { function runtimeCheck() {
# Friendly name for this package # Friendly name for this package
@ -119,15 +171,14 @@ function runtimeCheck() {
done done
if [[ -z ${pkglist[*]} ]]; then if [[ -z ${pkglist[*]} ]]; then
echo -e "\e[1mWARNING:\e[0m Not installing DXVK because \e[1m${pkgreq_name}\e[0m is missing on your system.\n\
${pkgreq_name} should be installed in order to use DXVK. Just compiling DXVK for later use.\n"
echo -e "\e[1mWARNING:\e[0m Not installing DXVK/D9VK because \e[1m${pkgreq_name}\e[0m is missing on your system.\n\
${pkgreq_name} should be installed in order to use DXVK/D9VK. Just compiling DXVK/D9VK for later use.\n"
# Do this check separately so we can warn about all missing runtime dependencies above # Do this check separately so we can warn about all missing runtime dependencies above
if [[ ! -v NO_INSTALL ]]; then if [[ ! -v NO_INSTALL ]]; then
# Force --no-install switch # Force --no-install switch
NO_INSTALL= NO_INSTALL=
fi fi
fi fi
} }
@ -137,7 +188,7 @@ ${pkgreq_name} should be installed in order to use DXVK. Just compiling DXVK for
# If the script is interrupted (Ctrl+C/SIGINT), do the following # If the script is interrupted (Ctrl+C/SIGINT), do the following
function DXVK_intCleanup() { function DXVK_intCleanup() {
rm -rf ${DXVKROOT}/{dxvk-git,meson,glslang}
rm -rf ${DXVKROOT}/{dxvk-git,d9vk-git,meson,glslang,*.deb}
rm -rf ${DXVKROOT}/../compiled_deb/"${datedir}" rm -rf ${DXVKROOT}/../compiled_deb/"${datedir}"
exit 0 exit 0
} }
@ -186,27 +237,32 @@ function pkgcompilecheck() {
function dxvk_install_custom() { function dxvk_install_custom() {
local PATCHDIR="${1}"
# Use posix alternates for MinGW binaries # Use posix alternates for MinGW binaries
function dxvk_posixpkgs() { function dxvk_posixpkgs() {
local packages=(
'i686-w64-mingw32-g++'
'i686-w64-mingw32-gcc'
'x86_64-w64-mingw32-g++'
'x86_64-w64-mingw32-gcc'
)
for package in "${packages[@]}"; do
local option=$(echo "" | sudo update-alternatives --config "${package}" | grep posix | sed 's@^[^0-9]*\([0-9]\+\).*@\1@')
echo "${option}" | sudo update-alternatives --config "${package}" &> /dev/null
for alt in ${!alternatives[@]}; do
echo "Linking MingW executable ${alt} to ${alternatives[$alt]}"
sudo rm -rf /etc/alternatives/"${alt}" 2>/dev/null
sudo ln -sf /usr/bin/"${alternatives[$alt]}" /etc/alternatives/"${alt}"
if [[ $? -ne 0 ]]; then if [[ $? -ne 0 ]]; then
echo -e "\e[1mERROR:\e[0m Error occured while running 'update-alternatives' for '${package}'. Aborting\n"
echo -e "\e[1mERROR:\e[0m Error occured while linking executable ${alt} to ${alternatives[$alt]}. Aborting\n"
exit 1 exit 1
fi fi
done done
for link in ${!tempLinks[@]}; do
if [[ ! -f ${link} ]]; then
echo "Creating temporary links for MingW executable ${link}"
sudo ln -sf ${tempLinks["${link}"]} "${link}"
if [[ $? -ne 0 ]]; then
echo -e "\e[1mERROR:\e[0m Error occured while linking executable ${link}. Aborting\n"
exit 1
fi
fi
done
} }
############################ ############################
@ -218,10 +274,10 @@ function dxvk_install_custom() {
# Get our current directory, since we will change it during patching process below # Get our current directory, since we will change it during patching process below
# We want to go back here after having applied the patches # We want to go back here after having applied the patches
local CURDIR="${PWD}" local CURDIR="${PWD}"
# Check if the following folder exists, and proceed. # Check if the following folder exists, and proceed.
if [[ -d "${DXVKROOT}/../../dxvk_custom_patches" ]]; then
cp -r "${DXVKROOT}/../../dxvk_custom_patches/"*.{patch,diff} "${DXVKROOT}/${pkg_name}/" 2>/dev/null
if [[ -d "${DXVKROOT}/../../${PATCHDIR}" ]]; then
cp -r "${DXVKROOT}/../../${PATCHDIR}/"*.{patch,diff} "${DXVKROOT}/${pkg_name}/" 2>/dev/null
local dxvk_builddir_name=$(ls -l "${DXVKROOT}/${pkg_name}" | grep ^d | awk '{print $NF}') local dxvk_builddir_name=$(ls -l "${DXVKROOT}/${pkg_name}" | grep ^d | awk '{print $NF}')
@ -258,8 +314,7 @@ function dxvk_install_custom() {
# DXVK - CUSTOM HOOKS EXECUTION # DXVK - CUSTOM HOOKS EXECUTION
dxvk_custompatches && \ dxvk_custompatches && \
dxvk_posixpkgs && \
dxvk_custom_deb_build
dxvk_posixpkgs
} }
######################################################## ########################################################
@ -323,6 +378,13 @@ function compile_and_install_deb() {
arrayparser_reverse arrayparser_reverse
############################
function pkg_installcheck() {
RETURNVALUE=$(echo $(dpkg -s "${1}" &>/dev/null)$?)
return $RETURNVALUE
}
############################ ############################
echo -e "Starting compilation$(if [[ ! -v NO_INSTALL ]] || [[ ${_pkg_name} =~ ^meson|glslang$ ]]; then printf " & installation"; fi) of ${_pkg_name}\n" echo -e "Starting compilation$(if [[ ! -v NO_INSTALL ]] || [[ ${_pkg_name} =~ ^meson|glslang$ ]]; then printf " & installation"; fi) of ${_pkg_name}\n"
@ -337,6 +399,8 @@ function compile_and_install_deb() {
local _pkg_list="${1}" local _pkg_list="${1}"
local _pkg_type="${2}" local _pkg_type="${2}"
local IFS=$'\n' local IFS=$'\n'
_pkg_list=$(echo "${_pkg_list}" | sed 's/([^)]*)//g')
unset IFS
case ${_pkg_type} in case ${_pkg_type} in
buildtime) buildtime)
@ -354,25 +418,76 @@ function compile_and_install_deb() {
# Generate a list of missing dependencies # Generate a list of missing dependencies
local a=0 local a=0
for p in ${_pkg_list[@]}; do for p in ${_pkg_list[@]}; do
local p=$(printf '%s' ${p} | awk '{print $1}')
if [[ $(echo $(dpkg -s ${p} &>/dev/null)$?) -ne 0 ]]; then
if [[ $(pkg_installcheck ${p}) -eq 0 ]]; then
local _validlist[$a]=${p} local _validlist[$a]=${p}
let a++ let a++
# Global array to track installed build dependencies # Global array to track installed build dependencies
if [[ ${_pkg_type} == "buildtime" ]]; then if [[ ${_pkg_type} == "buildtime" ]]; then
_buildpkglist[$z]=${p}
_buildpkglist[$z]="${p}"
let z++ let z++
fi fi
fi fi
done done
function pkg_remoteinstall() {
sudo apt install -y ${1} &> /dev/null
}
function pkg_localinstall() {
wget ${1} -O ${DXVKROOT}/"${2}".deb
sudo dpkg -i --force-all ${DXVKROOT}/"${2}".deb
}
function pkg_configure() {
if [[ $(sudo dpkg-reconfigure ${1} | grep "is broken or not fully installed") ]]; then
if [[ -v ${2} ]]; then
pkg_localinstall ${2} ${1}
else
pkg_remoteinstall ${1}
fi
fi
}
# Install missing dependencies, be informative # Install missing dependencies, be informative
local b=0 local b=0
for _pkg_dep in ${_validlist[@]}; do for _pkg_dep in ${_validlist[@]}; do
echo -e "$(( $b + 1 ))/$(( ${#_validlist[*]} )) - Installing ${_pkg_name} ${_pkg_type_str} dependency ${_pkg_dep}" echo -e "$(( $b + 1 ))/$(( ${#_validlist[*]} )) - Installing ${_pkg_name} ${_pkg_type_str} dependency ${_pkg_dep}"
sudo apt install -y ${_pkg_dep} &> /dev/null
if [[ ${#remotePackagesAlt[@]} -gt 0 ]]; then
for altRemote in ${!remotePackagesAlt[@]}; do
altRemotepkg=$(echo ${altRemote} | awk -F ',' '{print $1}')
altRemotever=$(echo ${altRemote} | awk -F ',' '{print $2}')
if [[ "${_pkg_dep}" == "${altRemotepkg}" ]]; then
if [[ $(pkg_installcheck ${altRemotepkg}) -ne 0 ]]; then
# TODO remove duplicate functionality
if [[ $(apt-cache show "${altRemotepkg}" | grep -m1 -oP "(?<=^Version: )[0-9|\.]*" | sed 's/\.//g') < ${altRemotever} ]]; then
pkg_localinstall ${remotePackagesAlt["${altRemote}"]} "${altRemotepkg}"
pkg_configure "${altRemotepkg}" ${remotePackagesAlt["${altRemote}"]}
else
pkg_remoteinstall "${altRemotepkg}"
pkg_configure "${altRemotepkg}"
fi
else
if [[ $(dpkg -s "${altRemotepkg}" | grep -m1 -oP "(?<=^Version: )[0-9|\.]*" | sed 's/\.//g') < ${altRemotever} ]]; then
pkg_localinstall ${remotePackagesAlt["${altRemote}"]} "${altRemotepkg}"
pkg_configure "${altRemotepkg}" ${remotePackagesAlt["${altRemote}"]}
else
pkg_remoteinstall "${altRemotepkg}"
pkg_configure "${altRemotepkg}"
fi
fi
fi
done
fi
if [[ $(pkg_installcheck ${_pkg_dep}) -ne 0 ]]; then
pkg_remoteinstall "${_pkg_dep}"
pkg_configure "${_pkg_dep}"
fi
if [[ $? -eq 0 ]]; then if [[ $? -eq 0 ]]; then
let b++ let b++
else else
@ -483,7 +598,7 @@ function compile_and_install_deb() {
mv ../${_pkg_name}*.deb ../../../compiled_deb/"${datedir}" && \ mv ../${_pkg_name}*.deb ../../../compiled_deb/"${datedir}" && \
echo -e "Compiled ${_pkg_name} is stored at '$(readlink -f ../../../compiled_deb/"${datedir}")/'\n" echo -e "Compiled ${_pkg_name} is stored at '$(readlink -f ../../../compiled_deb/"${datedir}")/'\n"
cd ../.. cd ../..
rm -rf ${_pkg_name}
rm -rf {${_pkg_name},*.deb}
else else
buildpkg_removal buildpkg_removal
exit 1 exit 1
@ -494,7 +609,7 @@ function compile_and_install_deb() {
############################ ############################
# COMMON - EXECUTION HOOKS # COMMON - EXECUTION HOOKS
pkg_dependencies "${_pkg_deps_build[*]}" buildtime && \
pkg_dependencies "${_pkg_deps_build[*]}" buildtime
if [[ ${_pkg_deps_runtime[0]} != "empty" ]] && [[ ! -v NO_INSTALL ]]; then if [[ ${_pkg_deps_runtime[0]} != "empty" ]] && [[ ! -v NO_INSTALL ]]; then
pkg_dependencies "${_pkg_deps_runtime[*]}" runtime pkg_dependencies "${_pkg_deps_runtime[*]}" runtime
@ -503,9 +618,13 @@ function compile_and_install_deb() {
pkg_folderprepare pkg_folderprepare
# TODO use package name or separate override switch here? # TODO use package name or separate override switch here?
if [[ ${_pkg_name} == *"dxvk"* ]]; then
dxvk_install_custom
fi
if [[ "${_pkg_name}" == *"dxvk"* ]]; then
dxvk_install_custom "dxvk_custom_patches"
fi
if [[ "${_pkg_name}" == *"d9vk"* ]]; then
dxvk_install_custom "d9vk_custom_patches"
fi
pkg_debianbuild pkg_debianbuild
unset _pkg_gitver unset _pkg_gitver
@ -518,6 +637,14 @@ function compile_and_install_deb() {
function buildpkg_removal() { function buildpkg_removal() {
_buildpkglist=($(echo ${_buildpkglist[@]} | tr ' ' '\n' |sort -u | tr '\n' ' '))
for link in ${!tempLinks[@]}; do
if [[ $(file ${link}) == *"symbolic link"* ]]; then
sudo rm -f "${link}"
fi
done
# Build time dependencies which were installed but no longer needed # Build time dependencies which were installed but no longer needed
if [[ -v _buildpkglist ]]; then if [[ -v _buildpkglist ]]; then
if [[ -v BUILDPKG_RM ]]; then if [[ -v BUILDPKG_RM ]]; then
@ -526,9 +653,11 @@ function buildpkg_removal() {
# In some cases, glslang or meson may still be present on the system. Remove them # In some cases, glslang or meson may still be present on the system. Remove them
for _extrapkg in glslang meson; do for _extrapkg in glslang meson; do
if [[ $(echo $(dpkg -s ${_extrapkg} &>/dev/null)$?) -eq 0 ]]; then if [[ $(echo $(dpkg -s ${_extrapkg} &>/dev/null)$?) -eq 0 ]]; then
sudo apt purge --remove -y ${_extrapkg}
sudo dpkg --remove --force-remove-reinstreq ${_extrapkg}
fi fi
done done
# Manually obtained deb packages are expected to break system configuration, thus we need to fix it.
sudo apt --fix-broken -y install
else else
echo -e "The following build time dependencies were installed and no longer needed:\n\n$(for l in ${_buildpkglist[*]}; do echo -e ${l}; done)\n" echo -e "The following build time dependencies were installed and no longer needed:\n\n$(for l in ${_buildpkglist[*]}; do echo -e ${l}; done)\n"
@ -559,8 +688,8 @@ function pkg_install_main() {
function pkg_arrayparser() { function pkg_arrayparser() {
local pkg_arrays=( local pkg_arrays=(
'pkg_deps_build'
'pkg_deps_runtime'
'pkg_deps_build'
'pkg_deps_runtime'
) )
local IFS=$'\n' local IFS=$'\n'
@ -609,8 +738,15 @@ pkgcompilecheck pkg_install_main meson "${DXVKROOT}/meson.debdata"
# Glslang - compile (& install) # Glslang - compile (& install)
pkgcompilecheck pkg_install_main glslang "${DXVKROOT}/glslang.debdata" pkgcompilecheck pkg_install_main glslang "${DXVKROOT}/glslang.debdata"
# DXVK - compile (& install)
pkg_install_main "${DXVKROOT}/dxvk.debdata"
if [[ ! -v NO_DXVK ]]; then
# DXVK - compile (& install)
pkg_install_main "${DXVKROOT}/dxvk.debdata"
fi
if [[ ! -v NO_D9VK ]]; then
# D9VK - compile (& install)
pkg_install_main "${DXVKROOT}/d9vk.debdata"
fi
# Clean buildtime dependencies # Clean buildtime dependencies
buildpkg_removal buildpkg_removal

+ 1
- 1
debian/dxvkroot/glslang.debdata View File

@ -102,7 +102,7 @@ empty
# Deb builder execution field # Deb builder execution field
# Do not build either debug symbols # Do not build either debug symbols
pkg_debbuilder="DEB_BUILD_OPTIONS=\"strip nodocs noddebs\" dpkg-buildpackage -rfakeroot -b -us -uc"
pkg_debbuilder="DEB_BUILD_OPTIONS=\"strip nodocs noddebs\" dpkg-buildpackage -rfakeroot -b -us -uc -d"
######################################################## ########################################################
# Contents of Debian control file # Contents of Debian control file


+ 1
- 1
debian/dxvkroot/meson.debdata View File

@ -135,7 +135,7 @@ empty
# Deb builder execution field # Deb builder execution field
# Do not build either debug symbols or doc files # Do not build either debug symbols or doc files
pkg_debbuilder="DEB_BUILD_OPTIONS=\"strip nodocs noddebs nocheck\" dpkg-buildpackage -rfakeroot -b -us -uc"
pkg_debbuilder="DEB_BUILD_OPTIONS=\"strip nodocs noddebs nocheck\" dpkg-buildpackage -rfakeroot -b -us -uc -d"
######################################################## ########################################################
# Contents of Debian control file # Contents of Debian control file


+ 12
- 202
debian/updatewine_debian.sh View File

@ -74,12 +74,12 @@ for check in ${args[@]}; do
--no-dxvk) --no-dxvk)
NO_DXVK= NO_DXVK=
;; ;;
--no-d9vk)
NO_D9VK=
;;
--no-pol) --no-pol)
NO_POL= NO_POL=
;; ;;
--no-winetricks)
NO_WINETRICKS=
;;
--no-install) --no-install)
NO_INSTALL= NO_INSTALL=
# If this option is given, do not check PoL wineprefixes # If this option is given, do not check PoL wineprefixes
@ -137,187 +137,14 @@ Using $(nproc --ignore 1) of $(nproc) available CPU cores for Wine source code c
######################################################## ########################################################
# Call Winetricks compilation & installation subscript in the following function
function winetricks_install_main() {
local pkg="winetricks"
# Location of expected Winetricks deb archive from
# the point of view of this script file
local pkgdebdir=".."
# Winetricks availability check
function winetricks_availcheck() {
local apt_searchcheck=$(apt-cache search ^${pkg}$ | wc -l)
if [[ $(echo $(dpkg -s ${pkg} &>/dev/null)$?) -ne 0 ]]; then
# TODO expecting only 1 match from apt-cache output
if [[ ${apt_searchcheck} -eq 1 ]]; then
sudo apt install -y ${pkg}
if [[ $? -eq 0 ]]; then
# Winetricks already installed by the previous command
return 0
else
echo -e "\e[1mWARNING:\e[0m Can't install Winetricks from repositories. Trying to compile from source.\n"
# TODO Force Winetricks compilation from source. Is this a good practice?
return 1
fi
else
# Multiple or no entries from apt-cache output. Can't decide which package to use, so force winetricks compilation.
echo -e "\e[1mWARNING:\e[0m Can't install Winetricks from repositories. Trying to compile from source.\n"
# TODO Force Winetricks compilation from source. Is this a good practice?
return 1
fi
else
# Winetricks already installed on the system
echo -e "Winetricks is installed on your system. Use your package manager or 'debian_install_winetricks.sh' script to update it.\n"
return 0
fi
}
# Winetricks installation from local deb package
function winetricks_localdeb() {
# Check that Wine exists on the system. If yes, then
# install other required winetricks dependencies
# so that Winetricks install script won't complain about
# missing them.
#
local known_wines=(
'wine'
'wine-stable'
'wine32'
'wine64'
'libwine:amd64'
'libwine:i386'
'wine-git'
'wine-staging-git'
)
# Other winetricks dependencies
local winetricks_deps=('cabextract' 'unzip' 'x11-utils')
# If known wine is found, then check winetricks_deps and install them if needed.
for winepkg in ${known_wines[@]}; do
if [[ $(echo $(dpkg -s ${winepkg} &>/dev/null)$?) -eq 0 ]]; then
for tricksdep in ${winetricks_deps[@]}; do
if [[ $(echo $(dpkg -s ${tricksdep} &>/dev/null)$?) -ne 0 ]]; then
sudo apt install -y ${tricksdep}
if [[ $? -ne 0 ]]; then
echo -e "\e[1mERROR:\e[0m Couldn't install Winetricks dependency ${tricksdep}. Skipping Winetricks installation.\n"
# TODO revert installation of any installed 'tricksdep' installed on previous loop cycle
if [[ ! -v NO_INSTALL ]];then
echo -e "DXVK won't be installed\n"
# We can set this value because winetricks function is intented to be called
# after Wine compilation & installation BUT before DXVK install function
# DXVK runtime (not build time) depends on Winetricks
params+=('--no-install')
fi
# Special variable only to inform user about errors in Winetricks installation
WINETRICKS_ERROR=
return 1
fi
fi
done
# If known wine has already been found, do not iterate through other candidates
break
fi
done
# Check for existing winetricks deb archives in the previous folder
local localdeb=$(find ${pkgdebdir} -type f -name "${pkg}*.deb" | wc -l)
case ${localdeb} in
0)
# No old winetricks archives
# Just fall through
;;
1)
# One old winetricks archive found
echo -e "Found already compiled Winetricks archive, installing it.\n"
# TODO ask user? Note that asking this limits the automation process of this script
# unless a solution will be implemented (e.g. parameter switch)
sudo dpkg -i ${pkgdebdir}/${pkg}*.deb
return 0
;;
*)
# Multiple old winetricks archives found
# Move them and compile a new one
if [[ ! -d ${pkgdebdir}/winetricks_old ]]; then
mkdir -p ${pkgdebdir}/winetricks_old
fi
mv ${pkgdebdir}/${pkg}*.deb ${pkgdebdir}/winetricks_old/
if [[ $? -ne 0 ]]; then
echo -e "\e[1mWARNING:\e[0m Couldn't move old Winetricks archives. Not installing Winetricks.\n"
if [[ ! -v NO_INSTALL ]];then
echo -e "DXVK won't be installed\n"
# We can set this value because winetricks function is intented to be called
# after Wine compilation & installation BUT before DXVK install function
# DXVK runtime (not build time) depends on Winetricks
params+=('--no-install')
fi
fi
;;
esac
echo -e "Starting compilation & installation of Winetricks\n"
bash -c "cd .. && bash ./debian_install_winetricks.sh"
if [[ $? -eq 0 ]]; then
# The compiled Winetricks deb package is found in the previous folder
sudo dpkg -i ${pkgdebdir}/${pkg}*.deb
if [[ $? -ne 0 ]]; then
echo -e "\e[1mWARNING:\e[0m Couldn't install Winetricks.\n"
if [[ ! -v NO_INSTALL ]];then
echo -e "DXVK won't be installed\n"
# We can set this value because winetricks function is intented to be called
# after Wine compilation & installation BUT before DXVK install function
# DXVK runtime (not build time) depends on Winetricks
params+=('--no-install')
fi
# Special variable only to inform user about errors in Winetricks installation
WINETRICKS_ERROR=
return 1
fi
else
echo -e "\e[1mWARNING:\e[0m Couldn't compile Winetricks.\n"
if [[ ! -v NO_INSTALL ]];then
echo -e "DXVK won't be installed\n"
# We can set this value because winetricks function is intented to be called
# after Wine compilation & installation BUT before DXVK install function
# DXVK runtime (not build time) depends on Winetricks
params+=('--no-install')
fi
# Special variable only to inform user about errors in Winetricks compilation
WINETRICKS_ERROR=
return 1
fi
}
winetricks_availcheck
if [[ $? -ne 0 ]]; then
winetricks_localdeb
fi
}
########################################################
# Call DXVK compilation & installation subscript in the following function # Call DXVK compilation & installation subscript in the following function
function dxvk_install_main() { function dxvk_install_main() {
echo -e "Starting compilation & installation of DXVK\n\n\
echo -e "Starting compilation & installation of DXVK/D9VK\n\n\
This can take up to 10-20 minutes depending on how many dependencies we need to build for it.\n" This can take up to 10-20 minutes depending on how many dependencies we need to build for it.\n"
bash -c "cd ${ROOTDIR}/dxvkroot && bash dxvkbuild.sh \"${datedir}\" \"${params[*]}\"" bash -c "cd ${ROOTDIR}/dxvkroot && bash dxvkbuild.sh \"${datedir}\" \"${params[*]}\""
} }
######################################################## ########################################################
@ -347,6 +174,7 @@ function mainQuestions() {
installed and the following packages may be compiled from source (depending on your choises):\n\n\ installed and the following packages may be compiled from source (depending on your choises):\n\n\
\t- Wine/Wine Staging (latest git version)\n\ \t- Wine/Wine Staging (latest git version)\n\
\t- DXVK (latest git version)\n\ \t- DXVK (latest git version)\n\
\t- D9VK (latest git version)\n\
\t- meson & glslang (latest git versions; these are build time dependencies for DXVK)\n\n\ \t- meson & glslang (latest git versions; these are build time dependencies for DXVK)\n\n\
Do you want to continue? [Y/n]" Do you want to continue? [Y/n]"
@ -395,8 +223,8 @@ Do you really want to continue? [Y/n]"
#################### ####################
# This question is relevant only if DXVK stuff is compiled
if [[ ! -v NO_DXVK ]]; then
# This question is relevant only if DXVK or D9VK stuff is compiled
if [[ ! -v NO_DXVK ]] || [[ ! -v NO_D9VK ]]; then
INFO_SEP INFO_SEP
echo -e "\e[1mQUESTION:\e[0m Update existing dependencies?\n\nIn a case you have old build time dependencies on your system, do you want to update them?\n\ echo -e "\e[1mQUESTION:\e[0m Update existing dependencies?\n\nIn a case you have old build time dependencies on your system, do you want to update them?\n\
@ -439,8 +267,8 @@ function coredeps_check() {
######################################################## ########################################################
# If either Wine or DXVK is to be compiled
if [[ ! -v NO_WINE ]] || [[ ! -v NO_DXVK ]]; then
# If either Wine, DXVK or D9VK is to be compiled
if [[ ! -v NO_WINE ]] || [[ ! -v NO_DXVK ]] || [[ ! -v NO_D9VK ]]; then
mainQuestions mainQuestions
coredeps_check coredeps_check
fi fi
@ -456,23 +284,11 @@ fi
#################### ####################
# Run winetricks installation, if needed
if [[ ! -v NO_DXVK ]] && [[ ! -v NO_INSTALL ]]; then
if [[ ! -v NO_WINETRICKS ]]; then
winetricks_install_main
else
echo -e "Skipping Winetricks build & installation process.\n \
DXVK will not be installed, unless Winetricks is already installed on your system.\n"
fi
fi
####################
# If DXVK is going to be installed, then
if [[ ! -v NO_DXVK ]]; then
# If DXVK or D9VK is going to be installed, then
if [[ ! -v NO_DXVK ]] || [[ ! -v NO_D9VK ]]; then
dxvk_install_main dxvk_install_main
else else
echo -e "Skipping DXVK build$(if [[ ! -v NO_INSTALL ]]; then printf " & installation"; fi) process.\n"
echo -e "Skipping DXVK/D9VK build$(if [[ ! -v NO_INSTALL ]]; then printf " & installation"; fi) process.\n"
fi fi
#################### ####################
@ -482,9 +298,3 @@ if [[ ! -v NO_POL ]]; then
echo -e "\e[1mINFO:\e[0m Updating your PlayOnLinux Wine prefixes.\n" echo -e "\e[1mINFO:\e[0m Updating your PlayOnLinux Wine prefixes.\n"
bash -c "cd ${ROOTDIR} && bash playonlinux_prefixupdate.sh" bash -c "cd ${ROOTDIR} && bash playonlinux_prefixupdate.sh"
fi fi
# If error occured during Winetricks script runtime, then
if [[ -v WINETRICKS_ERROR ]]; then
echo -e "\e[1mWARNING:\e[0m Couldn't compile or install Winetricks.\
$(if [[ ! -v NO_DXVK ]]; then printf " DXVK installation may have failed, too."; fi)\n"
fi

+ 19
- 15
updatewine.sh View File

@ -1,6 +1,6 @@
#!/bin/env bash #!/bin/env bash
# DXVK/Wine-Staging scripts dispatcher for various Linux distributions
# DXVK/D9VK/Wine-Staging scripts dispatcher for various Linux distributions
# Copyright (C) 2018 Pekka Helenius # Copyright (C) 2018 Pekka Helenius
# #
# This program is free software: you can redistribute it and/or modify # This program is free software: you can redistribute it and/or modify
@ -34,7 +34,7 @@ fi
# Just a title & author for this script, used in initialization and help page # Just a title & author for this script, used in initialization and help page
SCRIPT_TITLE="\e[1mWine/Wine Staging & DXVK package builder & auto-installer\e[0m"
SCRIPT_TITLE="\e[1mWine/Wine Staging, DXVK & D9VK package builder & auto-installer\e[0m"
SCRIPT_AUTHOR="Pekka Helenius (~Fincer), 2018" SCRIPT_AUTHOR="Pekka Helenius (~Fincer), 2018"
######################################################## ########################################################
@ -48,9 +48,12 @@ SCRIPT_AUTHOR="Pekka Helenius (~Fincer), 2018"
# version available # version available
# Do NOT leave these variable empty! # Do NOT leave these variable empty!
git_commithash_dxvk=1af96347e1c6f1f2eb11aeb11009f380fd5761ec
git_commithash_dxvk=HEAD
git_branch_dxvk=master git_branch_dxvk=master
git_commithash_d9vk=HEAD
git_branch_d9vk=master
git_commithash_wine=HEAD git_commithash_wine=HEAD
git_branch_wine=master git_branch_wine=master
@ -154,25 +157,24 @@ for arg in ${@}; do
# Skip DXVK build & installation process all together # Skip DXVK build & installation process all together
NO_DXVK= NO_DXVK=
;; ;;
--no-d9vk)
# Skip D9VK build & installation process all together
NO_D9VK=
;;
--no-pol) --no-pol)
# Skip PlayOnLinux Wine prefixes update process # Skip PlayOnLinux Wine prefixes update process
;; ;;
--no-winetricks)
# Do not build Winetricks, do not install DXVK
# Debian only
;;
*) *)
echo -e "\n\ echo -e "\n\
\ \
${SCRIPT_TITLE} by ${SCRIPT_AUTHOR}\n\n\ ${SCRIPT_TITLE} by ${SCRIPT_AUTHOR}\n\n\
Usage:\n\nbash updatewine.sh\n\nArguments:\n\n\ Usage:\n\nbash updatewine.sh\n\nArguments:\n\n\
--no-install\tDo not install Wine, Winetricks or DXVK, just compile them. Wine, meson & glslang must be installed for DXVK compilation.\n\
--no-install\tDo not install Wine, DXVK or D9VK. Just compile them. Wine, meson & glslang must be installed for DXVK & D9VK compilation.\n\
--no-dxvk\tDo not compile or install DXVK\n\ --no-dxvk\tDo not compile or install DXVK\n\
--no-d9vk\tDo not compile or install D9VK\n\
--no-pol\tDo not update PlayOnLinux Wine prefixes\n\n\ --no-pol\tDo not update PlayOnLinux Wine prefixes\n\n\
--no-staging\tCompile Wine instead of Wine Staging\n\ --no-staging\tCompile Wine instead of Wine Staging\n\
--no-wine\tDo not compile or install Wine/Wine Staging\n\
--no-winetricks\t[Debian only] Do not compile or install Winetricks.\n\
\t\tNo DXVK installation unless Winetricks already installed.\n\n\
--no-wine\tDo not compile or install Wine/Wine Staging\n\n\
Compiled packages are installed by default, unless '--no-install' argument is given.\n\ Compiled packages are installed by default, unless '--no-install' argument is given.\n\
If '--no-install' argument is given, the script doesn't check or update your PlayOnLinux Wine prefixes.\n" If '--no-install' argument is given, the script doesn't check or update your PlayOnLinux Wine prefixes.\n"
exit 0 exit 0
@ -198,6 +200,7 @@ datesuffix=$(echo $(date '+%Y-%m-%d-%H%M%S'))
githash_overrides=( githash_overrides=(
"${git_commithash_dxvk}" "${git_commithash_dxvk}"
"${git_commithash_d9vk}"
"${git_commithash_glslang}" "${git_commithash_glslang}"
"${git_commithash_meson}" "${git_commithash_meson}"
"${git_commithash_wine}" "${git_commithash_wine}"
@ -208,6 +211,7 @@ githash_overrides=(
gitbranch_overrides=( gitbranch_overrides=(
"${git_branch_dxvk}" "${git_branch_dxvk}"
"${git_branch_d9vk}"
"${git_branch_glslang}" "${git_branch_glslang}"
"${git_branch_meson}" "${git_branch_meson}"
"${git_branch_wine}" "${git_branch_wine}"
@ -249,7 +253,7 @@ function sudoQuestion() {
# Refresh sudo timestamp while the main process is running # Refresh sudo timestamp while the main process is running
function sudo_refresh() { function sudo_refresh() {
while [[ $(printf $(ps ax -o pid --no-headers | grep -o ${PIDOF} &> /dev/null)$?) -eq 0 ]]; do while [[ $(printf $(ps ax -o pid --no-headers | grep -o ${PIDOF} &> /dev/null)$?) -eq 0 ]]; do
sudo -nv && sleep 2
sudo -nv && sleep 2
done done
} }
@ -298,7 +302,7 @@ function determineDistroFamily() {
esac esac
} }
if [[ ! -v NO_WINE ]] || [[ ! -v NO_DXVK ]]; then
if [[ ! -v NO_WINE ]] || [[ ! -v NO_DXVK ]] || [[ ! -v NO_D9VK ]]; then
echo -e "\n${SCRIPT_TITLE}\n\nBuild identifier:\t${datesuffix}\n" echo -e "\n${SCRIPT_TITLE}\n\nBuild identifier:\t${datesuffix}\n"
else else
echo "" echo ""
@ -311,11 +315,11 @@ fi
determineDistroFamily determineDistroFamily
INFO_SEP INFO_SEP
echo -e "\e[1mNOTE: \e[0mDXVK requires very latest Nvidia/AMD drivers to work.\nMake sure these drivers are available on your Linux distribution.\n\
echo -e "\e[1mNOTE: \e[0mDXVK/D9VK requires very latest Nvidia/AMD drivers to work.\nMake sure these drivers are available on your Linux distribution.\n\
This script comes with GPU driver installation scripts for Debian-based Linux distributions.\n" This script comes with GPU driver installation scripts for Debian-based Linux distributions.\n"
INFO_SEP INFO_SEP
if [[ ! -v NO_WINE ]] || [[ ! -v NO_DXVK ]]; then
if [[ ! -v NO_WINE ]] || [[ ! -v NO_DXVK ]] || [[ ! -v NO_D9VK ]]; then
sudoQuestion sudoQuestion
echo "" echo ""
fi fi


Loading…
Cancel
Save