mirror of
				https://github.com/the-sane/lug-helper.git
				synced 2025-10-31 20:42:49 +00:00 
			
		
		
		
	lug-helper.sh: Add detection for new WOW64 mode system Wine installs
This allows us to fail the preflight if a user has a system Wine but that Wine uses the experimental WOW64 mode, which EAC does not yet support.
This commit is contained in:
		| @@ -985,8 +985,6 @@ wine_check() { | |||||||
|     if [ ! -x "$(command -v wine)" ]; then |     if [ ! -x "$(command -v wine)" ]; then | ||||||
|         preflight_fail+=("Wine does not appear to be installed.\nPlease refer to our Quick Start Guide:\n$lug_wiki") |         preflight_fail+=("Wine does not appear to be installed.\nPlease refer to our Quick Start Guide:\n$lug_wiki") | ||||||
|         return 1 |         return 1 | ||||||
|     else |  | ||||||
|         preflight_pass+=("Wine is installed on your system.") |  | ||||||
|     fi |     fi | ||||||
|  |  | ||||||
|     # Get the current wine version |     # Get the current wine version | ||||||
| @@ -1002,8 +1000,85 @@ wine_check() { | |||||||
|         system_wine_ok="true" |         system_wine_ok="true" | ||||||
|     fi |     fi | ||||||
|  |  | ||||||
|     # Check for wow64 wines |     # Function to determine the architecture of a binary file using 'od' | ||||||
|     if [ ! -x "$(command -v wine-preloader)" ] || [ -L "$(command -v wine64-preloader)" ]; then |     get_file_arch() { | ||||||
|  |         local file_path="$1" | ||||||
|  |         local ob_output | ||||||
|  |         ob_output="$(od -An -t x1 -j 0x12 -N 1 "$file_path" 2>/dev/null | tr -d '[:space:]')" | ||||||
|  |         case "$ob_output" in | ||||||
|  |             "3e")      echo "x86_64" ;; | ||||||
|  |             "03"|"06") echo "i386" ;; | ||||||
|  |             "b7")      echo "aarch64" ;; | ||||||
|  |             "28")      echo "aarch32" ;; | ||||||
|  |             *)         echo "" ;; | ||||||
|  |         esac | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     # Proceed only if the Wine version is acceptable | ||||||
|  |     if [ "$system_wine_ok" = "true" ]; then | ||||||
|  |         # Get paths to wine and wineserver binaries | ||||||
|  |         wine_bin="$(command -v wine)" | ||||||
|  |         wineserver_bin="$(command -v wineserver)" | ||||||
|  |         wineboot_bin="$(command -v wineboot)" | ||||||
|  |  | ||||||
|  |         # Determine the architecture of wine binary | ||||||
|  |         wine_binary_arch="$(get_file_arch "${wine_bin}")" | ||||||
|  |  | ||||||
|  |         # If unable to determine architecture, attempt alternative methods | ||||||
|  |         if [ -z "${wine_binary_arch}" ]; then | ||||||
|  |             wineboot_bin="$(command -v wineboot)" | ||||||
|  |             if [ -x "${wineboot_bin}" ]; then | ||||||
|  |                 wine_bin_dir="$(dirname "$(readlink -f "${wineboot_bin}" 2>/dev/null)" 2>/dev/null)" | ||||||
|  |                 if [ -x "${wine_bin_dir}/wine" ]; then | ||||||
|  |                     wine_binary_arch="$(get_file_arch "${wine_bin_dir}/wine")" | ||||||
|  |                 fi | ||||||
|  |             fi | ||||||
|  |         fi | ||||||
|  |  | ||||||
|  |         # Determine the architecture of wineserver binary | ||||||
|  |         wineserver_binary_arch="$(get_file_arch "${wineserver_bin}")" | ||||||
|  |  | ||||||
|  |         if [ -z "${wineserver_binary_arch}" ]; then | ||||||
|  |             if [ -x "${wineboot_bin}" ]; then | ||||||
|  |                 wine_bin_dir="$(dirname "$(readlink -f "${wineboot_bin}" 2>/dev/null)" 2>/dev/null)" | ||||||
|  |                 if [ -x "${wine_bin_dir}/wineserver64" ]; then | ||||||
|  |                     wineserver_binary_arch="$(get_file_arch "${wine_bin_dir}/wineserver64")" | ||||||
|  |                 elif [ -x "${wine_bin_dir}/wineserver32" ]; then | ||||||
|  |                     wineserver_binary_arch="$(get_file_arch "${wine_bin_dir}/wineserver32")" | ||||||
|  |                 elif [ -x "${wine_bin_dir}/wineserver" ]; then | ||||||
|  |                     wineserver_binary_arch="$(get_file_arch "${wine_bin_dir}/wineserver")" | ||||||
|  |                 fi | ||||||
|  |             fi | ||||||
|  |         fi | ||||||
|  |  | ||||||
|  |         # Determine WOW64 type | ||||||
|  |         if [ "${wineserver_binary_arch}" = "${wine_binary_arch}" ]; then | ||||||
|  |             wow64_style="new" | ||||||
|  |         elif [ -n "${wineserver_binary_arch}" ] && [ -n "${wine_binary_arch}" ]; then | ||||||
|  |             wow64_style="classic" | ||||||
|  |         else | ||||||
|  |             wow64_style="unknown" | ||||||
|  |             system_wine_ok="false" | ||||||
|  |         fi | ||||||
|  |  | ||||||
|  |         # If WOW64 support is present, check if it's "new" or "classic WOW64  | ||||||
|  |         # If it is set system_wine_ok to false | ||||||
|  |         if [ "${wow64_style}" = "new" ]; then | ||||||
|  |             preflight_fail+=("Wine is installed but uses the experimental WOW64 mode, which is not supported.") | ||||||
|  |             system_wine_ok="false" | ||||||
|  |         elif [ "${wow64_style}" = "classic" ]; then | ||||||
|  |             preflight_pass+=("Wine is installed on your system.") | ||||||
|  |             system_wine_ok="true" | ||||||
|  |         elif [ "${wow64_style}" = "unknown" ]; then | ||||||
|  |             preflight_fail+=("Failed to determine if Wine has experimental WOW64 support.") | ||||||
|  |             system_wine_ok="false" | ||||||
|  |         else | ||||||
|  |             # Wine is installed and does not have WOW64 support | ||||||
|  |             preflight_fail+=("Wine is installed but does not have WOW64 support. Please install 64bit Wine") | ||||||
|  |             system_wine_ok="false" | ||||||
|  |         fi | ||||||
|  |     else | ||||||
|  |         preflight_fail+=("Wine version $wine_current does not meet the required version $wine_required.") | ||||||
|         system_wine_ok="false" |         system_wine_ok="false" | ||||||
|     fi |     fi | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user