runlib 35.3 KB
Newer Older
1
#!/bin/bash
Mikhail Tergoev's avatar
Mikhail Tergoev committed
2
# Author: Castro-Fidel (PortWINE-Linux.ru)
Mikhail Tergoev's avatar
Mikhail Tergoev committed
3
# Development assistants: Cefeiko; Rus_Nor; gavr; RidBowt; Dezert1r
4
########################################################################
5
echo '
6 7 8 9 10 11 12
████─████─████─███─█───█─███─█──█─███
█──█─█──█─█──█──█──█───█──█──██─█─█
████─█──█─████──█──█─█─█──█──█─██─███
█────█──█─█─█───█──█████──█──█──█─█
█────████─█─█───█───█─█──███─█──█─███

'
13
[ $(id -u) = 0 ] && echo "Do not run this script as root!" && zenity --error --text "Do not run this script as root!" && exit 1
14 15 16 17
if [ "${s_install}" != "1" ] && [ ! -x "`which "zenity" 2>/dev/null`" ];then
    echo "You will need to install: zenity, and restart the port." 
    xdg-open "http://portwine-linux.ru/portwine-faq/" > /dev/null 2>&1 & exit 0
fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
18 19 20 21
pw_ping_test () {
    ping -w1 -c1 github.com &> /dev/null
    [ "$?" == "0" ] && return 0 || return 1
}  
Mikhail Tergoev's avatar
Mikhail Tergoev committed
22 23 24 25 26 27 28
print_error () {
    echo "ERROR: $@"
}
print_info () {
    echo "INFO: $@"
}
print_var () {
29
    for vp in $@ ; do echo "${vp}=${!vp}" ; done 
Mikhail Tergoev's avatar
Mikhail Tergoev committed
30
}
31
try_copy_file () {
Mikhail Tergoev's avatar
Mikhail Tergoev committed
32 33 34 35 36 37 38
    if [ ! -f "$1" ] ; then	print_info "file $1 not found for copy"
    elif [ -z "$2" ] ; then	print_error "no way to copy file $1"
    else
        cp -f "$1" "$2"
        [ "$?" != 0 ] && print_error "failed to copy file $1 to $2" || return 0
    fi
    return 1  
39 40
}
try_copy_dir () {
Mikhail Tergoev's avatar
Mikhail Tergoev committed
41 42 43 44 45 46 47
    if [ ! -d "$1" ] ; then	print_info "directory $1 not found for copy"
    elif [ -z "$2" ] ; then	print_error "no way to copy directory $1"
    else
        cp -fr "$1" "$2"
        [ "$?" != 0 ] && print_error "failed to copy directory $1 to $2" || return 0
    fi
    return 1 
48 49
}
try_remove_file () {
Mikhail Tergoev's avatar
Mikhail Tergoev committed
50
    if [ -f "$1" ] ; then
Mikhail Tergoev's avatar
Mikhail Tergoev committed
51 52 53 54
        rm -f "$1"
        [ "$?" != 0 ] && print_error "failed to remove file $1" || return 0
    fi
    return 1 
55 56
}
try_remove_dir () {
Mikhail Tergoev's avatar
Mikhail Tergoev committed
57
    if [ -d "$1" ] ; then
Mikhail Tergoev's avatar
Mikhail Tergoev committed
58 59 60 61
        rm -fr "$1"
        [ "$?" != 0 ] && print_error "failed to remove directory $1" || return 0
    fi
    return 1  
62 63
}
try_force_link_file () {
Mikhail Tergoev's avatar
Mikhail Tergoev committed
64 65 66 67 68 69 70 71
    if [ ! -f "$1" ] ; then	print_info "file $1 not found for link"
    elif [ -z "$2" ] ; then	print_error "no way to link file $1"
    else
        [ -f "$2" ] && rm -f "$2"
        ln -s "$1" "$2"
        [ "$?" != 0 ] && print_error "failed to link file $1 to $2" || return 0
    fi
    return 1  
72 73
}
try_force_link_dir () {
Mikhail Tergoev's avatar
Mikhail Tergoev committed
74 75 76
    if [ ! -d "$1" ] ; then	print_info "directory $1 not found for link"
    elif [ -z "$2" ] ; then	print_error "no way to link directory $1"
    else
77
        ln -sf "$1" "$2"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
78 79 80
        [ "$?" != 0 ] && print_error "failed to link directory $1 to $2" || return 0
    fi
    return 1  
81 82
}
try_download () {
Mikhail Tergoev's avatar
Mikhail Tergoev committed
83 84 85 86
    set -o pipefail
    wget -c -t 3 -T 2 "$1" --output-document="$2" 2>&1 | \
    sed -u 's/^[a-zA-Z\-].*//; s/.* \{1,2\}\([0-9]\{1,3\}\)%.*/\1\n#Downloading... \1%/; s/^20[0-9][0-9].*/#Done./' | \
    zenity --progress --percentage=0 --title="Download $(basename $1)" --text=Starting... --auto-close --auto-kill --width=500 --height=90
Mikhail Tergoev's avatar
Mikhail Tergoev committed
87
    [ "${PIPESTATUS[0]}" != 0 ] && print_error "failed to download $1. Scipping." && return 1 || return 0 
88 89
}
create_new_dir () {
Mikhail Tergoev's avatar
Mikhail Tergoev committed
90 91 92 93 94 95 96 97 98
    if [ ! -d "$1" ] ; then
        mkdir -p "$1"
    fi 
}
var_winedlloverride_update () {
    if [ ! -z "${WINEDLLOVERRIDES}" ] 
    then export WINEDLLOVERRIDES="${1};${WINEDLLOVERRIDES}"
    else export WINEDLLOVERRIDES="${1}"
    fi 
99
}
Mikhail Tergoev's avatar
Mikhail Tergoev committed
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
var_vkd3d_config_update () {
    if [ ! -z "${VKD3D_CONFIG}" ] 
    then export VKD3D_CONFIG="${1};${VKD3D_CONFIG}"
    else export VKD3D_CONFIG="${1}" 
    fi 
}
unpack_tar_xz () {
    set -o pipefail
    tar -Jxvf "$1" -C "$2" | sszen 
    [ "${PIPESTATUS[0]}" != 0 ] && print_error "File unpacking error." && return 1 || return 0 
}
#pw_restart () {
#    exit 0 & 
#    /bin/bash -C $pw_full_start_command
#}
pw_mangohud_check () {
    export RUN_MANGOHUD=""
    export MANGOHUD=0
    export MANGOHUD_DLSYM=0
    if [ -x "`which mangohud 2>/dev/null`" ] && [ "${PW_MANGOHUD}" == "1" ] ; then
        if [ "${PW_VULKAN_USE}" = "0" ]; then 
            export MANGOHUD_DLSYM=1
            export RUN_MANGOHUD=mangohud
        else
            export MANGOHUD=1
        fi
    fi 
}
pw_clear_pfx () {
    try_remove_file "${WINEPREFIX}/system.reg"
    try_remove_file "${WINEPREFIX}/user.reg"
    try_remove_file "${WINEPREFIX}/userdef.reg"
    try_remove_file "${WINEPREFIX}/winetricks.log"
    try_remove_dir "${WINEPREFIX}/drive_c/windows/"
}
135
sszen() {
Mikhail Tergoev's avatar
Mikhail Tergoev committed
136 137
    zenity --progress --title="Settings..." --text="Updating parameters" --pulsate --auto-close --width=500 --height=90 --no-cancel
} 
Mikhail Tergoev's avatar
Mikhail Tergoev committed
138 139 140 141 142 143 144 145 146
PW_START_PROGRESS_BAR_CS () {
    "${pw_yad}" --progress --progress-text="$@" --pulsate --close-on-unfocus \
    --no-buttons --undecorated --center --skip-taskbar --width=500 --wrap-width=500 &
    echo ""
}
PW_START_PROGRESS_BAR_BLOK () {
    "${pw_yad}" --progress --progress-text="$@" --pulsate \
    --no-buttons --undecorated --center --skip-taskbar --width=500 --wrap-width=500 &
    echo ""
Mikhail Tergoev's avatar
Mikhail Tergoev committed
147
}
148
PW_STOP_PROGRESS_BAR () {
Mikhail Tergoev's avatar
Mikhail Tergoev committed
149 150 151
    while [ ! -z "`pgrep -a yad | grep "\-\-progress" | awk '{print $1}'`" ] 
    do kill -9 [ "`pgrep -a yad | grep "\-\-progress" | awk '{print $1}'`" ]
    done
152
}
153 154
cd "$(dirname "`readlink -f "$0"`")" && export PORT_SCRIPTS_PATH="$(pwd)"
cd "${PORT_SCRIPTS_PATH}/../../" && export PORT_WINE_PATH="$(pwd)"
155
export PORT_WINE_TMP_PATH="${PORT_WINE_PATH}/data/tmp"
156 157
read "portname" < "${PORT_WINE_TMP_PATH}/portname" && export portname
cd "${PORT_SCRIPTS_PATH}" 
Mikhail Tergoev's avatar
Mikhail Tergoev committed
158
. "${PORT_SCRIPTS_PATH}/var"  
159 160
create_new_dir "${PORT_WINE_TMP_PATH}"
create_new_dir "${HOME}/.PortWINE/tmp"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
161
try_remove_dir "${PORT_SCRIPTS_PATH}/vars"
162

163
if [ ! -e "${PORT_WINE_TMP_PATH}/${portname}_loc" ]; then
164
	SET_LANG=`zenity --title  "Install $portname" --text "Select the language" --list --radiolist \
165
	--column="Set:" --column "Language:" \
166 167
	TRUE "RUS" \
	FALSE "ENG" `
168
	echo "${SET_LANG}" > "${PORT_WINE_TMP_PATH}/${portname}_loc"
169
fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
170

Mikhail Tergoev's avatar
Mikhail Tergoev committed
171
. "${PORT_SCRIPTS_PATH}"/lang
Mikhail Tergoev's avatar
Mikhail Tergoev committed
172

173 174
if [ ! -e "${PORT_WINE_TMP_PATH}/${portname}_ver" ]; then
	echo "10" > "${PORT_WINE_TMP_PATH}/${portname}_ver"
175
fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
176

Mikhail Tergoev's avatar
Mikhail Tergoev committed
177
var_winedlloverride_update "winemenubuilder.exe="
Mikhail Tergoev's avatar
Mikhail Tergoev committed
178 179 180
export url_mono="https://github.com/madewokherd/wine-mono/releases/download/wine-mono-${mono_ver}/wine-mono-${mono_ver}-x86.tar.xz"
export url_gecko_x86="https://dl.winehq.org/wine/wine-gecko/${gecko_ver}/wine-gecko-${gecko_ver}-x86.tar.xz"
export url_gecko_x86_64="https://dl.winehq.org/wine/wine-gecko/${gecko_ver}/wine-gecko-${gecko_ver}-x86_64.tar.xz"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
181 182
export urlg="https://portwine-linux.ru/portwine-faq/"
export PW_FTP_URL="https://portwine-linux.ru/ftp"
183
export WINEDIR="${PORT_WINE_PATH}"/data/dist
184
export WINELIB="${HOME}/.PortWINE/libs${pw_libs_ver}"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
185 186
export WINEPREFIX="${PORT_WINE_PATH}/data/pfx"
export PW_COMPAT_MEDIA_PATH="${PORT_WINE_TMP_PATH}"
187
export PW_RUNTIME="$WINELIB/run.sh"
188
export PW_GUI_ICON_PATH="${PORT_WINE_PATH}/data/img/gui"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
189
export PW_VULKAN_DLL="${HOME}/.PortWINE/vulkan"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
190 191 192 193
export PW_DXVK_VER="${PW_DEF_DXVK_VER}"
export PW_VKD3D_VER="${PW_DEF_VKD3D_VER}"
export install_ver=`cat "${PORT_WINE_TMP_PATH}/${portname}_ver" | head -n 1`
export scripts_install_ver=`cat "${PORT_WINE_TMP_PATH}/scripts_ver" | head -n 1`
Mikhail Tergoev's avatar
Mikhail Tergoev committed
194

Mikhail Tergoev's avatar
Mikhail Tergoev committed
195 196
if [ -z "${INSTALLING_PORT}" ] ; then
    if [ ! -e "${WINELIB}/run.sh" ] || [ ! -e "${WINELIB}/usr/bin/yad" ] || [ ! -e "${WINELIB}/amd64/usr/bin/vkcube" ] || [ ! -e "${WINELIB}/amd64/usr/bin/xterm" ] || [ -e "${HOME}/.PortWINE/tmp/libs${pw_libs_ver}.tar.xz" ] ; then 
Mikhail Tergoev's avatar
Mikhail Tergoev committed
197 198 199 200 201 202 203 204 205 206 207 208 209 210
        print_info "Download and install libraries..."
        if try_download "https://github.com/Castro-Fidel/PortWINE/releases/download/libs${pw_libs_ver}/libs${pw_libs_ver}.tar.xz" "${HOME}/.PortWINE/tmp/libs${pw_libs_ver}.tar.xz" ; then
            if unpack_tar_xz "${HOME}/.PortWINE/tmp/libs${pw_libs_ver}.tar.xz" "${HOME}/.PortWINE/" ; then 
                try_remove_file "${HOME}/.PortWINE/tmp/libs${pw_libs_ver}.tar.xz"
            else   
                try_remove_dir "${HOME}/.PortWINE/libs${pw_libs_ver}"
                try_remove_file "${HOME}/.PortWINE/tmp/libs${pw_libs_ver}.tar.xz"
                `zenity --error --title "Error..." --text "Failed to download runtime libraries.\nCheck internet connection and restart PortProton" --no-wrap ` > /dev/null 2>&1
                exit 0
            fi
        else
            `zenity --error --title "Error..." --text "Failed to download runtime libraries.\nCheck internet connection and restart PortProton" --no-wrap ` > /dev/null 2>&1
            exit 1
        fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
211 212 213 214 215 216 217
    fi
    if [ -e "${WINELIB}/run.sh" ]; then 
        echo "######################################################"
        echo "Runtime libraries is enabled"
        try_remove_dir "${WINELIB}/pinned_libs_32"
        try_remove_dir "${WINELIB}/pinned_libs_64"
        export pw_yad="${WINELIB}/usr/bin/yad"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
218
        export pw_zstd="${WINELIB}/usr/bin/zstd"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
219
        if [ -x "`which xterm 2>/dev/null`" ]; then
Mikhail Tergoev's avatar
Mikhail Tergoev committed
220 221
            export SYS_XTERM=`which xterm`
            export PW_XTERM="${SYS_XTERM} -geometry 159x37 -e" 
Mikhail Tergoev's avatar
Mikhail Tergoev committed
222 223 224
        else
            export PW_XTERM="${WINELIB}/amd64/usr/bin/xterm -geometry 159x37 -e"        
        fi
225
    else
Mikhail Tergoev's avatar
Mikhail Tergoev committed
226 227 228 229 230
        echo "######################################################"
        echo "Runtime libraries is disabled"
    fi
    if [ ! -d "${HOME}/.PortWINE/mono/wine-mono-${mono_ver}" ] ; then 
        echo "######################################################"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
231 232 233 234 235 236 237 238
        print_info "Download and install wine mono..."
        if try_download "${url_mono}" "${HOME}/.PortWINE/tmp/wine-mono-${mono_ver}-x86.tar.xz" ; then
            create_new_dir "${HOME}/.PortWINE/mono"
            if ! unpack_tar_xz "${HOME}/.PortWINE/tmp/wine-mono-${mono_ver}-x86.tar.xz" "${HOME}/.PortWINE/mono/"
            then try_remove_dir "${HOME}/.PortWINE/mono/wine-mono-${mono_ver}-x86"
            fi
            try_remove_file "${HOME}/.PortWINE/tmp/wine-mono-${mono_ver}-x86.tar.xz" 
        fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
239 240 241 242
    fi
    if [ ! -d "${HOME}/.PortWINE/gecko/wine-gecko-${gecko_ver}-x86" ] ; then 
        echo "######################################################"
        echo "Download and install wine gecko x86..."
Mikhail Tergoev's avatar
Mikhail Tergoev committed
243 244 245 246 247 248 249
        if try_download "${url_gecko_x86}" "${HOME}/.PortWINE/tmp/wine-gecko-${gecko_ver}-x86.tar.xz" ; then
            create_new_dir "${HOME}/.PortWINE/gecko"
            if ! unpack_tar_xz "${HOME}/.PortWINE/tmp/wine-gecko-${gecko_ver}-x86.tar.xz" "${HOME}/.PortWINE/gecko/"
            then try_remove_dir "${HOME}/.PortWINE/gecko/wine-gecko-${gecko_ver}-x86"
            fi
            try_remove_file "${HOME}/.PortWINE/tmp/wine-gecko-${gecko_ver}-x86.tar.xz"
        fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
250 251 252 253
    fi
        if [ ! -d "${HOME}/.PortWINE/gecko/wine-gecko-${gecko_ver}-x86_64" ] ; then 
        echo "######################################################"
        echo "Download and install wine gecko x86_64..."
Mikhail Tergoev's avatar
Mikhail Tergoev committed
254 255 256 257 258 259 260
        if try_download "${url_gecko_x86_64}" "${HOME}/.PortWINE/tmp/wine-gecko-${gecko_ver}-x86_64.tar.xz" ; then
            create_new_dir "${HOME}/.PortWINE/gecko"
            if ! unpack_tar_xz "${HOME}/.PortWINE/tmp/wine-gecko-${gecko_ver}-x86_64.tar.xz" "${HOME}/.PortWINE/gecko/"
            then try_remove_dir "${HOME}/.PortWINE/gecko/wine-gecko-${gecko_ver}-x86_64"
            fi
            try_remove_file "${HOME}/.PortWINE/tmp/wine-gecko-${gecko_ver}-x86_64.tar.xz"
        fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
261 262 263 264 265
    fi
    create_new_dir "${WINEDIR}/share/wine/"
    try_force_link_dir "${HOME}/.PortWINE/gecko" "${WINEDIR}"/share/wine/      
    try_force_link_dir "${HOME}/.PortWINE/mono" "${WINEDIR}"/share/wine/ 

Mikhail Tergoev's avatar
Mikhail Tergoev committed
266
    if [ ! -z "${portwine_exe}" ]; then
Mikhail Tergoev's avatar
Mikhail Tergoev committed
267 268 269 270 271
        export PORTWINE_DB=`echo "${portwine_exe}" | awk -F '/' 'NF>1{print $NF}' | sed s/".exe"/""/gi`
        export PATH_TO_GAME="$( cd "$( dirname "${portwine_exe}" )" >/dev/null 2>&1 && pwd )"
        export WIN_PATH_TO_GAME=`echo "C:${PATH_TO_GAME}" | sed "s%$WINEPREFIX%%g" | sed "s/drive_c//g" | sed 's#/#\\\#g'`           
    fi
    if [ ! -z "${PORTWINE_DB}" ]; then
Mikhail Tergoev's avatar
Mikhail Tergoev committed
272
        PORTWINE_DB_FILE=`grep -ilw "#${PORTWINE_DB}" "${PORT_SCRIPTS_PATH}/portwine_db"/* | sed s/".exe"/""/gi`
Mikhail Tergoev's avatar
Mikhail Tergoev committed
273 274 275 276 277 278 279
        if [ ! -z "${PORTWINE_DB_FILE}" ]; then
            . "${PORTWINE_DB_FILE}"
            echo "Use ${PORTWINE_DB_FILE} db file."
        else
            . "${PORT_SCRIPTS_PATH}/portwine_db/default"
            echo "Use default db file."
        fi
280
    fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
281
fi
282
START_PORTWINE ()
Mikhail Tergoev's avatar
Mikhail Tergoev committed
283
    {
Mikhail Tergoev's avatar
Mikhail Tergoev committed
284 285 286 287 288
    if [ -x "`which konsole 2>/dev/null`" ]; then export PW_TERM="konsole --nofork -e"
    elif [ -x "`which xterm 2>/dev/null`" ]; then export PW_TERM="${PW_XTERM}"
    elif [ -x "`which gnome-terminal 2>/dev/null`" ]; then export PW_TERM="gnome-terminal -- $SHELL -c" 
    elif [ -x "`which lxterminal 2>/dev/null`" ]; then export PW_TERM="lxterminal -e"
    else export PW_TERM="${PW_XTERM}"
289
    fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
290

Mikhail Tergoev's avatar
Mikhail Tergoev committed
291 292
    [ -z "${INSTALLING_PORT}" ] && PW_UPDATE
    
Mikhail Tergoev's avatar
Mikhail Tergoev committed
293 294 295 296 297
    try_remove_dir "${PORT_WINE_PATH}/data/vulkan"
    create_new_dir "${PW_VULKAN_DLL}"

    export url_dxvk="https://github.com/doitsujin/dxvk/releases/download/v${PW_DXVK_VER}/dxvk-${PW_DXVK_VER}.tar.gz"
    if [ ! -d "${PW_VULKAN_DLL}/dxvk-${PW_DXVK_VER}" ] ; then
Mikhail Tergoev's avatar
Mikhail Tergoev committed
298 299 300 301 302 303 304 305 306 307 308
        if  pw_ping_test ; then
            if try_download "${url_dxvk}" "${PW_VULKAN_DLL}/dxvk-${PW_DXVK_VER}.tar.gz" ; then
                tar -zxvf "${PW_VULKAN_DLL}/dxvk-${PW_DXVK_VER}.tar.gz" -C "${PW_VULKAN_DLL}/"
                try_remove_file "${PW_VULKAN_DLL}/dxvk-${PW_DXVK_VER}.tar.gz"
            else
                try_remove_file "${PW_VULKAN_DLL}/dxvk-${PW_DXVK_VER}.tar.gz"                
                `zenity --error --title "Error..." --text "You will need to change DXVK version in db file!" --no-wrap ` > /dev/null 2>&1
                PW_EDIT_DB & exit 1
            fi
        else 
            export PW_DXVK_VER="${PW_DEF_DXVK_VER}"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
309 310 311 312 313
        fi
    fi

    export url_vkd3d="https://github.com/HansKristian-Work/vkd3d-proton/releases/download/v${PW_VKD3D_VER}/vkd3d-proton-${PW_VKD3D_VER}.tar.zst"
    if [ ! -d "${PW_VULKAN_DLL}/vkd3d-proton-${PW_VKD3D_VER}" ] ; then
Mikhail Tergoev's avatar
Mikhail Tergoev committed
314 315 316 317 318 319 320 321 322
        if  pw_ping_test ; then
            if try_download "${url_vkd3d}" "${PW_VULKAN_DLL}/vkd3d-proton-${PW_VKD3D_VER}.tar.zst" ; then
                tar -C "${PW_VULKAN_DLL}/" -I "${pw_zstd}" -xvf "${PW_VULKAN_DLL}/vkd3d-proton-${PW_VKD3D_VER}.tar.zst" 
                try_remove_file "${PW_VULKAN_DLL}/vkd3d-proton-${PW_VKD3D_VER}.tar.zst"
            else
                try_remove_file "${PW_VULKAN_DLL}/vkd3d-proton-${PW_VKD3D_VER}.tar.zst"
                `zenity --error --title "Error..." --text "You will need to change VKD3D version in db file!" --no-wrap ` > /dev/null 2>&1
                PW_EDIT_DB & exit 1
            fi
323
        else
Mikhail Tergoev's avatar
Mikhail Tergoev committed
324
            export PW_VKD3D_VER="${PW_DEF_VKD3D_VER}" 
325
        fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
326
    fi
327

Mikhail Tergoev's avatar
Mikhail Tergoev committed
328 329
    PW_START_PROGRESS_BAR_CS "Start ${portname}... Please wait..."

Mikhail Tergoev's avatar
Mikhail Tergoev committed
330
    export WINELOADER="${WINEDIR}/bin/wine"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
331
    export WINEDLLPATH="${WINEDIR}/lib64/wine:${WINEDIR}/lib/wine:${PATH_TO_GAME}"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
332 333 334 335 336 337
    export WINESERVER="${WINEDIR}/bin/wineserver"
    if [ ! -z "${PATH}" ] 
    then export PATH="${WINEDIR}/bin:${PATH}"
    else export PATH="${WINEDIR}/bin"
    fi
    export WINE="${WINELOADER}"
338
#    export GST_PLUGIN_SYSTEM_PATH_1_0="${WINEDIR}/lib64/gstreamer-1.0:${WINEDIR}/gstreamer-1.0"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
339 340 341 342 343
    export WINE_GST_REGISTRY_DIR="${PORT_WINE_TMP_PATH}"
    export MEDIACONV_AUDIO_DUMP_FILE="${PORT_WINE_TMP_PATH}"/audio.foz
    export MEDIACONV_AUDIO_TRANSCODED_FILE="${PORT_WINE_TMP_PATH}"/transcoded_audio.foz
    export MEDIACONV_VIDEO_DUMP_FILE="${PORT_WINE_TMP_PATH}"/video.foz
    export MEDIACONV_VIDEO_TRANSCODED_FILE="${PORT_WINE_TMP_PATH}"/transcoded_video.foz
Mikhail Tergoev's avatar
Mikhail Tergoev committed
344

Mikhail Tergoev's avatar
Mikhail Tergoev committed
345 346 347 348 349 350 351 352 353 354 355
    if [ ! -z "${PW_LOG}" ] && [ "${PW_LOG}" != 0 ] ; then
        export WINEDEBUG="fixme-all,err+loaddll,err+dll,err+file,err+reg"
        export DXVK_LOG_LEVEL="info"
        export VKD3D_DEBUG="warn"
        export WINE_MONO_TRACE="E:System.NotImplementedException"
    else
        export WINEDEBUG="-all"
        export DXVK_LOG_LEVEL="none"
        export VKD3D_DEBUG="none"
        export DXVK_LOG_PATH="none"
    fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
356

Mikhail Tergoev's avatar
Mikhail Tergoev committed
357 358
    #default wine-mono override for FNA games
    export WINE_MONO_OVERRIDES="Microsoft.Xna.Framework.*,Gac=n"
359

Mikhail Tergoev's avatar
Mikhail Tergoev committed
360
    if [ ! -z "${PW_NO_ESYNC}" ] && [ "${PW_NO_ESYNC}" != 0 ] 
Mikhail Tergoev's avatar
Mikhail Tergoev committed
361
    then export WINEESYNC="0"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
362 363 364
    else export WINEESYNC="1"
    fi
    if [ ! -z "${PW_NO_FSYNC}" ] && [ "${PW_NO_FSYNC}" != 0 ] ; then
Mikhail Tergoev's avatar
Mikhail Tergoev committed
365
        export WINEFSYNC="0"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
366 367 368 369 370
        export WINEFSYNC_FUTEX2="0"
    else
        export WINEFSYNC="1"
        export WINEFSYNC_FUTEX2="1"
    fi
371 372 373
    if [ ! -z "${PW_FORCE_LARGE_ADDRESS_AWARE}" ] && [ "${PW_FORCE_LARGE_ADDRESS_AWARE}" != 0 ] 
    then export WINE_LARGE_ADDRESS_AWARE="1"
    else export WINE_LARGE_ADDRESS_AWARE="0"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
374 375 376 377 378 379 380 381
    fi
    if [ ! -z "${PW_OLD_GL_STRING}" ] && [ "${PW_OLD_GL_STRING}" != 0 ] ; then
        export MESA_EXTENSION_MAX_YEAR="2003" #mesa override
        export __GL_ExtensionStringVersion="17700" #nvidia override
    fi
    if [ ! -z "${PW_NO_WRITE_WATCH}" ] && [ "${PW_NO_WRITE_WATCH}" != 0 ] ; then
        export WINE_DISABLE_WRITE_WATCH="1"
    fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
382
    if [ ! -z "${PW_VULKAN_NO_ASYNC}" ] && [ "${PW_VULKAN_NO_ASYNC}" != 0 ] ; then
Mikhail Tergoev's avatar
Mikhail Tergoev committed
383
        export RADV_DEBUG="llvm"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
384
        var_vkd3d_config_update single_queue
Mikhail Tergoev's avatar
Mikhail Tergoev committed
385 386 387 388 389 390 391 392 393 394 395 396 397
    fi
    if [ ! -z "${PW_NVAPI_DISABLE}" ] && [ "${PW_NVAPI_DISABLE}" != 0 ] ; then
        var_winedlloverride_update "nvapi,nvapi64="
    fi
    if [ ! -z "${PW_WINEDBG_DISABLE}" ] && [ "${PW_WINEDBG_DISABLE}" != 0 ] ; then
        var_winedlloverride_update "winedbg.exe="
    fi
    if [ ! -z "${PW_HIDE_NVIDIA_GPU}" ] && [ "${PW_HIDE_NVIDIA_GPU}" != 0 ] ; then
        export WINE_HIDE_NVIDIA_GPU="1"
    fi
    if [ ! -z "${PW_VKD3D_FEATURE_LEVEL}" ] && [ "${PW_VKD3D_FEATURE_LEVEL}" != 0 ] ; then
        export VKD3D_FEATURE_LEVEL="12_0"
    fi
398 399 400
    if [ ! -z "${PW_HEAP_DELAY_FREE}" ] && [ "${PW_HEAP_DELAY_FREE}" != 0 ] ; then
        export WINE_HEAP_DELAY_FREE="1"
    fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
401 402 403
    if [ ! -z "${PW_DXR_ON}" ] && [ "${PW_DXR_ON}" != 0 ] ; then
        var_vkd3d_config_update dxr
    fi 
Mikhail Tergoev's avatar
Mikhail Tergoev committed
404 405 406 407
    create_new_dir "${PORT_WINE_TMP_PATH}/dxvk_cache"
    export DXVK_STATE_CACHE_PATH="${PORT_WINE_TMP_PATH}"/dxvk_cache
    export DXVK_STATE_CACHE=1
    export STAGING_SHARED_MEMORY=1
Mikhail Tergoev's avatar
Mikhail Tergoev committed
408
    export optirun_on=""
Mikhail Tergoev's avatar
Mikhail Tergoev committed
409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446
    export check_optimus_manager=
    export PW_NVIDIA="$(lspci | grep NVIDIA)" 
    if [ -x "`which optimus-manager 2>/dev/null`" ]; then
        export check_optimus_manager=`optimus-manager --status | grep Current | cut -f 2 -d':' | sed -e 's/^[[:space:]]*//'`
    fi
    if [ ! -z "${PW_NVIDIA}" ] && [ "${check_optimus_manager}" != "intel" ]; then
        if [ "${check_optimus_manager}" = "nvidia" ]; then
            export VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/nvidia_icd.json
        elif [ -x "`which primusrun 2>/dev/null`" ]; then
            export optirun_on="primusrun"
            export VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/nvidia_icd.json 
        elif [ -x "`which optirun 2>/dev/null`" ]; then
            export optirun_on="optirun -b primus"
            export VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/nvidia_icd.json 
        elif [ -x "`which prime-run 2>/dev/null`" ]; then
            export optirun_on="prime-run"
            export VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/nvidia_icd.json 
        fi
        export __NV_PRIME_RENDER_OFFLOAD=1
        export __GLX_VENDOR_LIBRARY_NAME=nvidia
        if [ ! -d "${PORT_WINE_TMP_PATH}"/gl_shader_cache ] ; then
            mkdir -p "${PORT_WINE_TMP_PATH}"/gl_shader_cache 
        fi
        export __GL_SHADER_DISK_CACHE_PATH="${PORT_WINE_TMP_PATH}/gl_shader_cache" 
        export __GL_SHADER_DISK_CACHE=1
        export __GL_SHADER_DISK_CACHE_SIZE=1000000000
        export __GL_DXVK_OPTIMIZATIONS=1
    else
        export DRI_PRIME=1
    fi
    case "$PW_FORCE_USE_VSYNC" in  # 0-FORCE_OFF, 1-FORCE_ON, 2-BY_DEFAULT
        "0")
        export vblank_mode=0
        export __GL_SYNC_TO_VBLANK=0 ;;
        "1")
        export vblank_mode=1
        export __GL_SYNC_TO_VBLANK=1 ;;  
    esac
Mikhail Tergoev's avatar
Mikhail Tergoev committed
447
    export DXVK_CONFIG_FILE="${PORT_WINE_PATH}/data/dxvk.conf"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463
    export int_xneur=0
    if [ $(pgrep xneur)>'0' ]; then
        killall xneur
        export int_xneur=1
    fi 
    export PW_XKBD="$(setxkbmap -query | grep -w ru | awk '{print($2)}')"
    if [ ! -z ${PW_XKBD} ]; then
        setxkbmap us,ru
    fi
    if [ -x "`which "gamemoderun" 2>/dev/null`" ] && [ "$PW_FORCE_DISABLED_GAMEMOD" -eq "0" ]; then
        export PW_GAMEMODERUN=1
        echo "Gamemod will be launched."
    else
        export PW_GAMEMODERUN=0
        echo "Gamemod is not installed or disabled in vars script: PW_FORCE_DISABLED_GAMEMOD=$PW_FORCE_DISABLED_GAMEMOD"
    fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
464
    PW_INIT_PFX
Mikhail Tergoev's avatar
Mikhail Tergoev committed
465 466
    RUN_WINETRICKS_FROM_DB 
    ADD_IN_START_PORTWINE
467
} 
468 469

WAIT_WINESERVER () {
Mikhail Tergoev's avatar
Mikhail Tergoev committed
470 471 472 473
    sleep 3
    while [ ! -z "$(ls -l /proc/*/exe 2>/dev/null | grep -ie ${portname} | grep -E 'wine(64)?-preloader|wineserver' | awk -F/ '{print $3}')" ] ; do
        sleep 1
    done
474
}
475 476

KILL_PORTWINE () {
Mikhail Tergoev's avatar
Mikhail Tergoev committed
477
    wine_pids=`ls -l /proc/*/exe 2>/dev/null | grep -ie ${portname} | grep -E 'wine(64)?-preloader| ' | awk -F/ '{print $3}'`
Mikhail Tergoev's avatar
Mikhail Tergoev committed
478
    if  [ ! -z "${wine_pids}" ] ; then 
Mikhail Tergoev's avatar
Mikhail Tergoev committed
479 480 481 482 483
        for pw_kill_pids in ${wine_pids} ; do
            if [ "`ps cax | grep ${pw_kill_pids}`" ] ; then 
                kill -n 9 ${pw_kill_pids} 
            fi
        done
Mikhail Tergoev's avatar
Mikhail Tergoev committed
484
    fi
485
}
486 487

STOP_PORTWINE () {
Mikhail Tergoev's avatar
Mikhail Tergoev committed
488 489 490 491 492 493 494 495 496
    WAIT_WINESERVER
    ADD_IN_STOP_PORTWINE
    if [ "$int_xneur" = "1"  ]; then
        xneur &
    fi
    if [ ! -z ${PW_XKBD} ]; then
        setxkbmap ${PW_XKBD}
    fi 
    PW_STOP_PROGRESS_BAR
Mikhail Tergoev's avatar
Mikhail Tergoev committed
497 498
    try_remove_file "${PORT_SCRIPTS_PATH}/0"
    try_remove_file "${PORT_SCRIPTS_PATH}/1"
499
}
500 501

UPDATE_WINETRICKS () {
Mikhail Tergoev's avatar
Mikhail Tergoev committed
502 503 504 505
    W_TRX_URL="https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks"
    W_TRX_EXT_VER="$(curl -s --list-only ${W_TRX_URL} | grep -i 'WINETRICKS_VERSION=' | sed 's/WINETRICKS_VERSION=//')"
    print_info "Version winetricks on server: ${W_TRX_EXT_VER}"
    if  [ ! -f "${PORT_WINE_TMP_PATH}/winetricks" ] ; then
506 507
        try_download "${W_TRX_URL}" "${PORT_WINE_TMP_PATH}/winetricks" 
        chmod u+x "${PORT_WINE_TMP_PATH}/winetricks"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
508 509
    else
        W_TRX_INT_VER="$(cat "${PORT_WINE_TMP_PATH}/winetricks" | grep -i 'WINETRICKS_VERSION=' | sed 's/WINETRICKS_VERSION=//')"
510 511
        print_info "Version winetricks in port: ${W_TRX_INT_VER}"
        if [ "$W_TRX_INT_VER" != "$W_TRX_EXT_VER" ] ; then
Mikhail Tergoev's avatar
Mikhail Tergoev committed
512 513 514 515 516
            if try_download "${W_TRX_URL}" "${PORT_WINE_TMP_PATH}/winetricks_new" ; then
                mv -f "${PORT_WINE_TMP_PATH}/winetricks_new" "${PORT_WINE_TMP_PATH}/winetricks"
                W_TRX_INT_VER="$(cat "${PORT_WINE_TMP_PATH}/winetricks" | grep -i 'WINETRICKS_VERSION=' | sed 's/WINETRICKS_VERSION=//')" && print_info "Winetricks version in port has been updated (${W_TRX_INT_VER})" 
                chmod u+x "${PORT_WINE_TMP_PATH}/winetricks"
            fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
517
        fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
518
    fi
519
}
520 521

RUN_WINETRICKS_FROM_DB () {
Mikhail Tergoev's avatar
Mikhail Tergoev committed
522 523
    UPDATE_WINETRICKS
    if [ ! -z "${PW_DLL_INSTALL}" ]; then
524
        PW_STOP_PROGRESS_BAR
Mikhail Tergoev's avatar
Mikhail Tergoev committed
525
        export PW_DLL_NEED_INSTALL=""
Mikhail Tergoev's avatar
Mikhail Tergoev committed
526 527 528 529 530
        export USE_WT_FROM_DB=0
        if [ -e "${WINEPREFIX}/winetricks.log" ] ; then
            for need_install_dll_to_pfx in ${PW_DLL_INSTALL} ; do
                grep "${need_install_dll_to_pfx}" "${WINEPREFIX}/winetricks.log"
                if [ "$?" == "1" ] ; then
Mikhail Tergoev's avatar
Mikhail Tergoev committed
531 532 533 534
                    if [ -z "${PW_DLL_NEED_INSTALL}" ]
                    then export PW_DLL_NEED_INSTALL="${need_install_dll_to_pfx}"
                    else export PW_DLL_NEED_INSTALL="${need_install_dll_to_pfx} ${PW_DLL_NEED_INSTALL}"
                    fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
535 536 537 538
                    export USE_WT_FROM_DB=1
                fi  
            done
        else
Mikhail Tergoev's avatar
Mikhail Tergoev committed
539 540
            export PW_DLL_NEED_INSTALL="${PW_DLL_INSTALL}"
            export USE_WT_FROM_DB=1 
Mikhail Tergoev's avatar
Mikhail Tergoev committed
541 542 543 544
        fi
        if [ "${USE_WT_FROM_DB}" == "1" ] ; then
            UPDATE_WINETRICKS
            PW_STOP_PROGRESS_BAR
Mikhail Tergoev's avatar
Mikhail Tergoev committed
545 546
            print_info "Need to install DLL in prefix: ${PW_DLL_NEED_INSTALL}"
            ${PW_TERM} "${PW_RUNTIME}" "${PORT_WINE_TMP_PATH}/winetricks" -q --force ${PW_DLL_NEED_INSTALL}
Mikhail Tergoev's avatar
Mikhail Tergoev committed
547
        fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
548
        PW_START_PROGRESS_BAR_CS "Start ${portname}... Please wait..."
549
    fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
550 551 552 553 554 555
    if [[ -z `cat "${WINEPREFIX}/system.reg" | grep "Windows $PW_WINDOWS_VER"` ]] ; then
        if [ ! -z "${PW_WINDOWS_VER}" ] && [ `echo "$PW_WINDOWS_VER" | sed 's/.*/\L&/'` == "xp" ] ; then
            export PW_WINDOWS_VER="xp64"
        fi
        "${PW_RUNTIME}" "${WINELOADER}" winecfg -v `echo "win${PW_WINDOWS_VER}" | sed 's/.*/\L&/'`
        echo "Set to win${PW_WINDOWS_VER}"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
556
    fi
557
}
558 559

PW_UPDATE () {
Mikhail Tergoev's avatar
Mikhail Tergoev committed
560 561 562 563 564 565 566 567
    if [ ! -f "${PORT_WINE_TMP_PATH}/${portname}_ver" ] ; then
        echo "10" > "${PORT_WINE_TMP_PATH}/${portname}_ver"
    fi
    if [ ! -f "${PORT_WINE_TMP_PATH}/update_notifier" ] ; then
        echo "1" > "${PORT_WINE_TMP_PATH}/update_notifier"
    fi 
    read "update_not" < "${PORT_WINE_TMP_PATH}/update_notifier" 
    if [ "${update_not}" = "1" ] ; then
Mikhail Tergoev's avatar
Mikhail Tergoev committed
568
        echo `curl -s --list-only "${PW_FTP_URL}/current_version/${portname}_ver"` > "${PORT_WINE_TMP_PATH}/${portname}_cur_ver"   
Mikhail Tergoev's avatar
Mikhail Tergoev committed
569 570 571
        if [ -f "${PORT_WINE_TMP_PATH}/${portname}_ver" ] ; then
            read current_ver < "${PORT_WINE_TMP_PATH}/${portname}_cur_ver"
            try_remove_file "${PORT_WINE_TMP_PATH}/${portname}_cur_ver"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
572
            if  [ ! -z "${current_ver}" ] && [ "${current_ver}" -gt "${install_ver}" ] ; then	
Mikhail Tergoev's avatar
Mikhail Tergoev committed
573 574 575 576 577 578
                xsd=`zenity --title  "${port_upd1}" --text "${port_upd2}" --list --radiolist --height=220 --column="${inst_set}" --column "${port_upd3}" \
                TRUE "${port_upd4}" \
                FALSE "${port_upd5}" \
                FALSE "${port_upd6}" `
                case $xsd in
                    "${port_upd4}")
Mikhail Tergoev's avatar
Mikhail Tergoev committed
579
                        KILL_PORTWINE
Mikhail Tergoev's avatar
Mikhail Tergoev committed
580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598
                        xdg-open $porturl 
                        exit 0 ;;
                    "${port_upd5}")
                        echo " " ;;	
                    "${port_upd6}")
                    echo "0" > "${PORT_WINE_TMP_PATH}/update_notifier" ;;
                esac 
            fi
        fi
    fi
    if [ ! -f "${HOME}/.config/.PortTime" ] ; then
        echo "10" > "${HOME}/.config/.PortTime"
    fi
    read "port_time" < "${HOME}/.config/.PortTime"
    if [ "${port_time}" -gt "1" ] ; then
        port_time=$((${port_time}-1))
        echo "${port_time}" > "${HOME}/.config/.PortTime"
    else
        xsd2=`zenity --title  "${port_time1}" --text "${port_time2}" --list --radiolist --height=240 --column="${inst_set3}" --column "${port_time3}" \
Mikhail Tergoev's avatar
Mikhail Tergoev committed
599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615
        TRUE "${port_time4}" \
        FALSE "${port_time5}" \
        FALSE "${port_time6}" `
        if [ $? = 1 ] ; then 
            echo "1" > "${HOME}/.config/.PortTime"
        else
            case $xsd2 in
                "${port_time4}")
                    xdg-open "$urlg" &
                    echo "300" > "${HOME}/.config/.PortTime" 
                    exit 0 ;;
                "${port_time5}")
                    echo "75" > "${HOME}/.config/.PortTime" ;;
                "${port_time6}")
                    echo "150" > "${HOME}/.config/.PortTime" ;;
            esac 
        fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
616
    fi 
617
}
618

Mikhail Tergoev's avatar
Mikhail Tergoev committed
619 620 621 622
PW_INIT_PFX () {
    rm -f  "${WINEDIR}"*/lib*/*steam* 
    rm -f  "${WINEDIR}"*/lib*/wine/*steam* 
    rm -f  "${WINEDIR}"*/lib*/wine/fakedlls/*steam* 
Mikhail Tergoev's avatar
Mikhail Tergoev committed
623 624 625 626
    #sed -i '/HKCU,Software\\Valve\\Steam/d' "${WINEDIR}"*/share/wine/wine.inf 
    #sed -i '/HKLM,Software\\Wow6432Node\\Valve\\Steam/d' "${WINEDIR}"*/share/wine/wine.inf 
    #sed -i '/HKLM,Software\\Wow6432Node\\Valve\\Steam/d' "${WINEDIR}"*/share/wine/wine.inf 
    if [ ! -d "${WINEPREFIX}" ] || [ ! -d "${WINEPREFIX}"/drive_c/windows ] || [ ! -f "${WINEPREFIX}"/user.reg ] || [ ! -f "${WINEPREFIX}"/userdef.reg ] || [ ! -f "${WINEPREFIX}"/system.reg ] ; then
627 628
        sed -i '/HKCR,steam\\shell\\open\\command/d' "${WINEDIR}"*/share/wine/wine.inf 
        sed -i '/HKCR,steam\\shell\\open\\command/d' "${WINEDIR}"*/share/wine/wine.inf 
Mikhail Tergoev's avatar
Mikhail Tergoev committed
629
        PW_STOP_PROGRESS_BAR
Mikhail Tergoev's avatar
Mikhail Tergoev committed
630 631 632 633
        PW_START_PROGRESS_BAR_BLOK "Updating prefix... Please wait..."
        "${PW_RUNTIME}" "${WINELOADER}" wineboot -u
        PW_STOP_PROGRESS_BAR
        PW_START_PROGRESS_BAR_CS "Initialization prefix..."
Mikhail Tergoev's avatar
Mikhail Tergoev committed
634
    fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
635 636 637 638 639 640 641 642 643 644 645 646 647
    rm -f "${WINEPREFIX}/drive_c/windows/system32"/steam* 
    rm -f "${WINEPREFIX}/drive_c/windows/syswow64"/steam* 
    try_copy_file "${WINEDIR}/share/fonts/"LiberationSans-Regular.ttf "${WINEPREFIX}/drive_c/windows/Fonts/"arial.ttf
    try_copy_file "${WINEDIR}/share/fonts/"LiberationSans-Bold.ttf "${WINEPREFIX}/drive_c/windows/Fonts/"arialbd.ttf
    try_copy_file "${WINEDIR}/share/fonts/"LiberationSerif-Regular.ttf "${WINEPREFIX}/drive_c/windows/Fonts/"times.ttf
    try_copy_file "${WINEDIR}/share/fonts/"LiberationMono-Regular.ttf "${WINEPREFIX}/drive_c/windows/Fonts/"cour.ttf
    try_copy_file "${WINEDIR}/share/fonts/"SourceHanSansSCRegular.otf "${WINEPREFIX}/drive_c/windows/Fonts/"msyh.ttf
    for wine_build_dll in ntdll mf mf3216 mferror mfmediaengine mfplat mfplay mfreadwrite vulkan-1 ; do #sqmapi msmpeg2vdec msmpeg2adec colorcnv
        try_copy_file "${WINEDIR}/lib/wine/${wine_build_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/"
        try_copy_file "${WINEDIR}/lib64/wine/${wine_build_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32/"
        [ "$?" == 0 ] && var_winedlloverride_update "${wine_build_dll}=b"
    done
    var_winedlloverride_update "steam_api,steam_api64,steamclient,steamclient64=n"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
648 649
    #sed -i '/steamclient/d' "${WINEPREFIX}"/*.reg 
    #sed -i '/SteamPath/d' "${WINEPREFIX}"/*.reg 
Mikhail Tergoev's avatar
Mikhail Tergoev committed
650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701
    
    export TOTAL_VRAM=`"${WINELIB}/amd64/usr/bin/glxinfo" -B | grep Total | awk -F: '{print $2}' | awk '{print $1}'`
    echo "TOTAL_VRAM=${TOTAL_VRAM}"

    if [ "${PW_VULKAN_USE}" = "0" ]; then
        export MESA_GLSL_CACHE_DIR="${PORT_WINE_TMP_PATH}"
        export GL_NO_DSO_FINALIZER=1 
        export GL_YIELD="NOTHING" 
        export GL_SHARPEN_IGNORE_FILM_GRAIN=0 
        export GL_SHARPEN_ENABLE=1 
        export __GL_SHARPEN_VALUE=0 
        for wine_build_dll in d3d11 d3d10 d3d10core d3d10_1 d3d9 ; do
            try_copy_file "${WINEDIR}/lib/wine/${wine_build_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/"
            try_copy_file "${WINEDIR}/lib64/wine/${wine_build_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32/"
        done
        try_copy_file "${WINEDIR}"/lib/wine/fakedlls/dxgi.dll "${WINEPREFIX}/drive_c/windows/syswow64/"
        try_copy_file "${WINEDIR}"/lib64/wine/fakedlls/dxgi.dll "${WINEPREFIX}/drive_c/windows/system32/"
        var_winedlloverride_update "dxgi=b;d3d12="
        echo "Use OpenGL"
    elif [ "${PW_VULKAN_USE}" = "dxvk" ]; then
        for wine_dxvk_dll in d3d11 d3d10 d3d10core d3d10_1 d3d9 dxgi ; do
            try_copy_file "${PW_VULKAN_DLL}/dxvk-${PW_DXVK_VER}/x32/${wine_dxvk_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/"
            try_copy_file "${PW_VULKAN_DLL}/dxvk-${PW_DXVK_VER}/x64/${wine_dxvk_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32/"
            [ "$?" == 0 ] && var_winedlloverride_update "${wine_dxvk_dll}=n"
        done
        #var_winedlloverride_update "d3d12="
        echo "Use DXVK version ${PW_DXVK_VER} (DX9-DX11 to Vulkan)"
    else 
        for wine_vkd3d_dll in d3d12 ; do
            try_copy_file "${PW_VULKAN_DLL}/vkd3d-proton-${PW_VKD3D_VER}/x86/${wine_vkd3d_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/"
            try_copy_file "${PW_VULKAN_DLL}/vkd3d-proton-${PW_VKD3D_VER}/x64/${wine_vkd3d_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32/"
            [ "$?" == 0 ] && var_winedlloverride_update "${wine_vkd3d_dll}=n"
        done
        if [ ! -z "${PW_DXGI_FROM_DXVK}" ] && [ "${PW_DXGI_FROM_DXVK}" != 0 ] ; then
             
            for wine_dxvk_dll in d3d11 d3d10 d3d10core d3d10_1 d3d9 dxgi ; do
                try_copy_file "${PW_VULKAN_DLL}/dxvk-${PW_DXVK_VER}/x32/${wine_dxvk_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/"
                try_copy_file "${PW_VULKAN_DLL}/dxvk-${PW_DXVK_VER}/x64/${wine_dxvk_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32/"
                var_winedlloverride_update "${wine_dxvk_dll}=n"
            done
        else
            try_copy_file "${WINEDIR}/lib/wine/fakedlls/dxgi.dll" "${WINEPREFIX}/drive_c/windows/syswow64/"
            try_copy_file "${WINEDIR}/lib64/wine/fakedlls/dxgi.dll" "${WINEPREFIX}/drive_c/windows/system32/"
            var_winedlloverride_update "dxgi=b"
            for wine_build_dll in d3d11 d3d10 d3d10core d3d10_1 d3d9 ; do
                try_copy_file "${WINEDIR}/lib/wine/${wine_build_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/"
                try_copy_file "${WINEDIR}/lib64/wine/${wine_build_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32/"
            done
        fi
        export PW_WINDOWS_VER="10"
        echo "Use VKD3D-PROTON version ${PW_VKD3D_VER} (DX12 to vulkan)"
    fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
702
    }
703 704

PW_SCRIPTS_UPDATE () {
Mikhail Tergoev's avatar
Mikhail Tergoev committed
705 706 707
    if [ ! -f "${PORT_WINE_TMP_PATH}/scripts_ver" ] ; then
        echo "1000" > "${PORT_WINE_TMP_PATH}/scripts_ver"
    fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
708
    echo `curl -s --list-only "${PW_FTP_URL}/current_version/scripts_ver"` > "${PORT_WINE_TMP_PATH}/scripts_cur_ver"   
Mikhail Tergoev's avatar
Mikhail Tergoev committed
709 710 711
    if [ "$?" == "0" ] ; then
        read scripts_current_ver < "${PORT_WINE_TMP_PATH}/scripts_cur_ver"
        try_remove_file "${PORT_WINE_TMP_PATH}/scripts_cur_ver"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
712
        if [ ! -z "${scripts_current_ver}" ] && [ "${scripts_current_ver}" -gt "${scripts_install_ver}" ] ; then	
Mikhail Tergoev's avatar
Mikhail Tergoev committed
713 714 715 716 717 718 719
            echo "######################################################"
            echo "Update scripts..."
            try_download "${PW_FTP_URL}/dist/scripts.tar.xz" "${PORT_WINE_TMP_PATH}/scripts.tar.xz"
            tar -Jxvf "${PORT_WINE_TMP_PATH}/scripts.tar.xz" -C "${PORT_WINE_PATH}/data/"
            if [ "$?" == "0" ] ; then
                try_remove_file "${PORT_WINE_TMP_PATH}/scripts.tar.xz"
                echo "${scripts_current_ver}" > "${PORT_WINE_TMP_PATH}/scripts_ver"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
720 721
                `zenity --info --title "Info..." --text "${loc_scripts_update}" --no-wrap ` > /dev/null 2>&1
                xdg-open "${PORT_WINE_PATH}/data/changelog"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
722 723
                exit 0
            fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
724 725 726
        fi
    fi
}
727 728

PW_RUN () {
Mikhail Tergoev's avatar
Mikhail Tergoev committed
729 730 731 732 733
    if [ ! -z "$portwine_exe" ] ; then
        export PATH_TO_GAME="$( cd "$( dirname "${portwine_exe}" )" >/dev/null 2>&1 && pwd )"
        cd "$PATH_TO_GAME"
    else 
        cd "${WINEPREFIX}/drive_c"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
734
    fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
735 736
    pw_mangohud_check
    print_var "WINEDIR" "WINEARCH" "WINEPREFIX" "WINEDLLOVERRIDES" "PATH_TO_GAME" "PW_VULKAN_USE" "VKD3D_CONFIG"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
737 738 739 740 741 742 743 744 745
    if [ "${PW_LOG}" == 1 ] ; then
        export PW_TERM=""
        export PW_LOG_TO_FILE="${PORT_WINE_PATH}/${portname}.log"
        if [ ! -z "${PW_GAMEMODERUN}" ] && [ "${PW_GAMEMODERUN}" != 0 ] ; then
            echo "Full command line:  $PW_TERM ${optirun_on} "${PW_RUNTIME}" gamemoderun ${RUN_MANGOHUD} "${WINELOADER}" "$@" ${LAUNCH_PARAMETERS[*]}" "&>>${PW_LOG_TO_FILE}"
            $PW_TERM ${optirun_on} "${PW_RUNTIME}" gamemoderun ${RUN_MANGOHUD} "${WINELOADER}" "$@" ${LAUNCH_PARAMETERS[*]} &>>"${PW_LOG_TO_FILE}"
        else 
            echo "Full command line: $PW_TERM ${optirun_on} "${PW_RUNTIME}" ${RUN_MANGOHUD} "${WINELOADER}" "$@" ${LAUNCH_PARAMETERS[*]}" "&>>${PW_LOG_TO_FILE}"
            $PW_TERM ${optirun_on} "${PW_RUNTIME}" ${RUN_MANGOHUD} "${WINELOADER}" "$@" ${LAUNCH_PARAMETERS[*]} &>>"${PW_LOG_TO_FILE}"
Mikhail Tergoev's avatar
Mikhail Tergoev committed
746
        fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
747 748 749 750 751 752 753 754
    else
        [ "${PW_USE_TERMINAL}" != "1" ] && export PW_TERM=""
        if [ ! -z "${PW_GAMEMODERUN}" ] && [ "${PW_GAMEMODERUN}" != 0 ] ; then
            echo "Full command line: $PW_TERM ${optirun_on} "${PW_RUNTIME}" gamemoderun ${RUN_MANGOHUD} "${WINELOADER}" "$@" ${LAUNCH_PARAMETERS[*]}" 
            $PW_TERM ${optirun_on} "${PW_RUNTIME}" gamemoderun ${RUN_MANGOHUD} "${WINELOADER}" "$@" ${LAUNCH_PARAMETERS[*]}
        else 
            echo "Full command line: $PW_TERM ${optirun_on} "${PW_RUNTIME}" ${RUN_MANGOHUD} "${WINELOADER}" "$@" ${LAUNCH_PARAMETERS[*]}"
            $PW_TERM ${optirun_on} "${PW_RUNTIME}" ${RUN_MANGOHUD} "${WINELOADER}" "$@" ${LAUNCH_PARAMETERS[*]} 
Mikhail Tergoev's avatar
Mikhail Tergoev committed
755
        fi
Mikhail Tergoev's avatar
Mikhail Tergoev committed
756 757
    fi
}