From 8cc9cb17bb7afc0e9fb5a78154c1ec76dce581bc Mon Sep 17 00:00:00 2001
From: Mikhail Tergoev <fidel@altlinux.org>
Date: Wed, 28 May 2025 22:15:32 +0300
Subject: [PATCH] added support wine-cpcsp_proxy

---
 THIRD-PARTY    |  3 +++
 sha256sum.list |  3 +++
 winehelper     | 61 +++++++++++++++++++++++++++++++++++++++++++++-----
 3 files changed, 61 insertions(+), 6 deletions(-)

diff --git a/THIRD-PARTY b/THIRD-PARTY
index def8d0f..65ff449 100644
--- a/THIRD-PARTY
+++ b/THIRD-PARTY
@@ -20,3 +20,6 @@ https://github.com/HansKristian-Work/vkd3d-proton
 
 WINETRICKS:
 https://github.com/Winetricks/winetricks
+
+WINE-CPCSP_PROXY:
+https://github.com/Etersoft/wine-cpcsp_proxy
diff --git a/sha256sum.list b/sha256sum.list
index cb521df..0ab9f43 100755
--- a/sha256sum.list
+++ b/sha256sum.list
@@ -13,6 +13,9 @@ fb7fdfde96de10a1b3b051bdf2727b6a7c1768b878483726454dd6726e9e0193  wine-9.0.14-al
 
 df1a940d2e072a884524f66a16e0f0ef74048bc6a6642b96eb257528a522109f  vkd3d-proton-1.1-2602.tar.xz
 
+##### CPCSP_PROXY #####
+3153088ff28d6af415c3504a421e5382554dbb305f38d5a87dd84df90d680421  wine-cpcsp_proxy-0.6.1-alt1.tar.xz
+
 ##### PREFIX #####
 
 0e86cd9958d1bd1bfac99e23165a091a4ea2fa3e693c551f69aabeed5f681fea  defpfx_x86_v01.tar.xz
diff --git a/winehelper b/winehelper
index fcde8c1..2fb629d 100755
--- a/winehelper
+++ b/winehelper
@@ -67,6 +67,9 @@ check_variables WINEFSYNC "0"
 check_variables WINEARCH "win64" # or "win32"
 check_variables WH_WINE_USE "wine_x_tkg_10-0_amd64" # or system
 
+check_variables WH_USE_CPCSP_PROXY "0"
+check_variables CPCSP_PROXY_VER "0.6.1-alt1"
+
 check_variables STAGING_SHARED_MEMORY "1"
 check_variables WINE_LARGE_ADDRESS_AWARE "1"
 check_variables WINE_FULLSCREEN_FSR "1"
@@ -668,7 +671,14 @@ init_wine_ver () {
             export GST_PLUGIN_SYSTEM_PATH_1_0="${WINEDIR}/lib/gstreamer-1.0"
         fi
 
-        if [[ "${WINEARCH}" == "win64" ]] ; then
+        [[ ! -f "${WINEDIR}/version" ]] && echo "${WH_WINE_USE}" > "${WINEDIR}/version"
+
+        if [[ ! -d "${WINEDIR}/lib64/wine" ]] && [[ -d "${WINEDIR}/lib/wine/x86_64-unix" ]] ; then
+            create_new_dir "${WINEDIR}/lib64/"
+            try_force_link_dir "${WINEDIR}/lib/wine/" "${WINEDIR}/lib64/"
+        fi
+
+        if [[ -d "${WINEDIR}/lib64" ]] ; then
             export LD_LIBRARY_PATH+=":${WINEDIR}/lib64"
             export WINEDLLPATH+=":${WINEDIR}/lib64/wine"
             if [[ -d "${WINEDIR}/lib64/gstreamer-1.0" ]] ; then
@@ -676,12 +686,28 @@ init_wine_ver () {
             fi
         fi
 
-        [[ ! -f "${WINEDIR}/version" ]] && echo "${WH_WINE_USE}" > "${WINEDIR}/version"
+        if [[ $WH_USE_CPCSP_PROXY == "1" ]] \
+        && ! grep -q "$CPCSP_PROXY_VER" "${WINEDIR}/cpcsp_proxy.ver"
+        then
+            CPCSP_PROXY_NAME="wine-cpcsp_proxy-$CPCSP_PROXY_VER"
+            CPCSP_PROXY_URL="$CLOUD_URL/$CPCSP_PROXY_NAME.tar.xz"
 
-        if [[ ! -d "${WINEDIR}/lib64/" ]] && [[ -d "${WINEDIR}/lib/wine/x86_64-unix" ]] ; then
-            create_new_dir "${WINEDIR}/lib64/wine"
-            mv -f "${WINEDIR}/lib/wine/x86_64-unix" "${WINEDIR}/lib64/wine/"
-            mv -f "${WINEDIR}/lib/wine/x86_64-windows" "${WINEDIR}/lib64/wine/"
+            if [[ ! -f "$WH_TMP_DIR/$CPCSP_PROXY_NAME" ]] ; then
+                print_info "Загрузка $CPCSP_PROXY_NAME.tar.xz"
+                if try_download "$CPCSP_PROXY_URL" "$WH_TMP_DIR/$CPCSP_PROXY_NAME.tar.xz" check256sum
+                then unpack "$WH_TMP_DIR/$CPCSP_PROXY_NAME.tar.xz" "$WH_TMP_DIR"
+                else try_remove_file "$WH_TMP_DIR/$CPCSP_PROXY_NAME.tar.xz"
+                fi
+            else
+                unpack "$WH_TMP_DIR/$CPCSP_PROXY_NAME.tar.xz" "$WH_TMP_DIR"
+            fi
+
+            cp -fr "$WH_TMP_DIR/$CPCSP_PROXY_NAME/"i386-* "${WINEDIR}/lib/wine/"
+            if [[ -d "${WINEDIR}/lib64" ]] ; then
+                cp -fr "$WH_TMP_DIR/$CPCSP_PROXY_NAME/"x86_64-* "${WINEDIR}/lib64/wine/"
+            fi
+            try_remove_dir "$WH_TMP_DIR/$CPCSP_PROXY_NAME"
+            echo "$CPCSP_PROXY_VER" > "${WINEDIR}/cpcsp_proxy.ver"
         fi
     else
         # use system WINE
@@ -989,6 +1015,29 @@ init_wineprefix () {
         try_remove_file "$WRAPPER"
     fi
 
+    # настраиваем префикс для работы с cpcsp_proxy
+    if [[ $WH_USE_CPCSP_PROXY == "1" ]] ; then
+        for cpcsp_proxy_file in "cpcsp_proxy.dll" "cpcsp_proxy_setup.exe" ; do
+            try_copy_wine_dll_to_pfx_64 "$cpcsp_proxy_file"
+            try_copy_wine_dll_to_pfx_32 "$cpcsp_proxy_file"
+        done
+
+        if ! grep -q "cpcsp_proxy.dll" "$WINEPREFIX/system.reg" ; then
+            if [[ "$WINEARCH" == "win32" ]]
+            then cpcsp_proxy_cmd=("$WINELOADER" "cpcsp_proxy_setup.exe")
+            else cpcsp_proxy_cmd=("${WINELOADER}64" "cpcsp_proxy_setup.exe")
+            fi
+
+            print_info "Запускаем настройку cpcsp_proxy:"
+            echo "${cpcsp_proxy_cmd[*]}"
+            if "${cpcsp_proxy_cmd[@]}"
+            then print_info "Настройка cpcsp_proxy успешно завершена."
+            else fatal "Ошибка во время настройки cpcsp_proxy."
+            fi
+            wait_wineserver
+        fi
+    fi
+
     echo "# переменные последнего использования префикса:" > "$WINEPREFIX/last.conf"
     for var in WH_WINE_USE BASE_PFX WINEARCH WH_WINDOWS_VER WINEESYNC WINEFSYNC \
     STAGING_SHARED_MEMORY WINE_LARGE_ADDRESS_AWARE WH_USE_SHADER_CACHE WH_USE_WINE_DXGI \