From 419fbfa1e3cc8d31091d894d4da346ad6228a325e856870495bf8993e6c7f7d0 Mon Sep 17 00:00:00 2001 From: Marcus Meissner Date: Sun, 25 Jun 2017 19:24:09 +0000 Subject: [PATCH] OBS-URL: https://build.opensuse.org/package/show/Emulators/wine?expand=0&rev=425 --- wine-2.10.tar.xz | 3 - wine-2.10.tar.xz.sign | 16 -- wine-2.11.tar.xz | 3 + wine-2.11.tar.xz.sign | 16 ++ wine.spec | 4 +- winetricks | 441 ++++++++++++++++++++---------------------- winetricks.1 | 2 +- 7 files changed, 231 insertions(+), 254 deletions(-) delete mode 100644 wine-2.10.tar.xz delete mode 100644 wine-2.10.tar.xz.sign create mode 100644 wine-2.11.tar.xz create mode 100644 wine-2.11.tar.xz.sign diff --git a/wine-2.10.tar.xz b/wine-2.10.tar.xz deleted file mode 100644 index deb87fd..0000000 --- a/wine-2.10.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:488df7ffd2e81da455bf428fc9eb784bb4273a890334500895665711bd52f179 -size 19209580 diff --git a/wine-2.10.tar.xz.sign b/wine-2.10.tar.xz.sign deleted file mode 100644 index 948781d..0000000 --- a/wine-2.10.tar.xz.sign +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iQIzBAABCAAdFiEE2iNXmnTUrZr50/lFzvrI6q8XUZ0FAlk63hIACgkQzvrI6q8X -UZ0yvQ/7BFNtOn2u8M44JKYfOUFWWD9r2SfKh0OpsNay+lM6Nsf+Ik+U2+9rQxXn -9RSTe/48oJKZiv+bSxXrAjFAoGF3UBlwnyn4ug2tGERNuw7tbjmfFblBjFBDF+dw -jntVLtZpZSa9nPKP4tWQ12a7AoNif8XHyXzs79pU9xfcRFIJZYhKn8La6OaxtU7b -+cInTZ+AzlpK3Qi/SsNIAH1i6nZ5J2amkCDYj5alQE95tnNnzM62vurlnpehAiUG -TJdVld+WRpKhKvnxyCsz559WbZb6TEuEZkURp2hEK8UGfeJ5vMk6fbpqs9mzszR/ -c+X+MfIGdNSq4J77Pchm/NkDPCnVL1aQQ0AkDuPikWavel9ea6iVs0BDpJUW9Uzo -XcT1YhS46FMgTFqgWTFvCVWR1Skfj4Ko8az5EmsgR0TeuDlsYA4A3gHLBojZ40+H -mvtND5ummqdtc/IT2pnnC54s8DrwTvExJnYKSFPue2Nbid3YK+BNqOSuiNrsAQ3Z -DOqtlBbxj43JjTHzCIfDnn4dqBRbvFz5oPLTC2HQ+fbdczSC2JSse/yawhf6SPHy -O/IyJDIN57bpz1gGi3AE6y+JUWNwODkPFnw28EVyf8rSFf60658ZB4TbpGzTtMXQ -VDBe3zLpOqbHE7xWyVzzB/DEbalpBikjZtnOWmIfz3lSGKeNt+c= -=gbhq ------END PGP SIGNATURE----- diff --git a/wine-2.11.tar.xz b/wine-2.11.tar.xz new file mode 100644 index 0000000..260435f --- /dev/null +++ b/wine-2.11.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:efa96dade206aa21accf0da195335a805d38209d6a14320607c6308ebde4cc3c +size 19251116 diff --git a/wine-2.11.tar.xz.sign b/wine-2.11.tar.xz.sign new file mode 100644 index 0000000..39b1271 --- /dev/null +++ b/wine-2.11.tar.xz.sign @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCAAdFiEE2iNXmnTUrZr50/lFzvrI6q8XUZ0FAllNWL8ACgkQzvrI6q8X +UZ3uKw//Q1V0e30uC8P4wZqGKOBteF2E+JawygfAncInfx4P8VgK4rIA6bgacWYP +bn73aziWAds3Nhzqx8VlnIBwWZ3c/e0Wv2vwUbSbwoZxxNfmGv4GyFYq/LxA6hUh +dbxcRoYa42Nr+IXDiz3Z9kVfchxaJIG1t31Q/yJ2lXw3AVN1PZWHHxGpsC1fdQV5 +ikELKKIU2R3S4mM5kAhsjeM9it7IxrAZIr1GBIvdsEIV39Auo6PQ3l/DP0ADEgd8 +8MEU3JIEH6tpFDd6/G2w4wjjGfXDo+KlhjzURrWY0MgOh99+L9C6IpD8gCpoPyIy +mQBuEVMqwZZLh1w9KoWbZ8Bbje4mMTE0zcoEBZ/WIrDMkCrRuiJSzOnQN2gNXn/J +xaI+aeHeQ2Ql1HfcSMZ5tvPAnjhruK4CL/1HTq5DESKZOm0X4GORNZxe2ApKairG +xSJQO+vRSGAQjOzD1UJDdtxToOov+NBFKD+UGAtqYNdmxymy6N6NT9t89LkEP664 +84eHpB4ri/rVAGVIojXlzEWWoR4+224oUL/7b+eeW4Q52oYCiqvNbj9hKlSOZJFS +68Y74te+HLNUZ90qiRuI3TPAJt26GDGr8w60PHIMCWc13XCKzpZysk9/89En7GC/ +OJv/pa3VBc7fJqJw52CWgyy3M+hR9c1INzkJKmZ3bs4M/cr4gZs= +=Wove +-----END PGP SIGNATURE----- diff --git a/wine.spec b/wine.spec index bdc9fb5..8386b7a 100644 --- a/wine.spec +++ b/wine.spec @@ -61,8 +61,8 @@ BuildRequires: update-desktop-files BuildRequires: valgrind-devel BuildRequires: xorg-x11-devel BuildRequires: pkgconfig(libudev) -%define realver 2.10 -Version: 2.10 +%define realver 2.11 +Version: 2.11 Release: 0 Summary: An MS Windows Emulator License: LGPL-2.1+ diff --git a/winetricks b/winetricks index e7acf59..a38b7d7 100644 --- a/winetricks +++ b/winetricks @@ -6,7 +6,7 @@ # Name of this version of winetricks (YYYYMMDD) # (This doesn't change often, use the sha256sum of the file when reporting problems) -WINETRICKS_VERSION=20170517-next +WINETRICKS_VERSION=20170614-next # This is a UTF-8 file # You should see an o with two dots over it here [รถ] @@ -148,7 +148,6 @@ WINETRICKS_VERSION=20170517-next # # Support: # - Winetricks is maintained by Austin English . -# - If winetricks has helped you out, then please consider donating to the FSF/EFF as a thank you # - If winetricks has helped you out, then please consider donating to the FSF/EFF as a thank you: # * EFF - https://supporters.eff.org/donate/button # * FSF - https://my.fsf.org/donate @@ -166,11 +165,9 @@ W_COUNTRY="" W_PREFIXES_ROOT="${WINE_PREFIXES:-$XDG_DATA_HOME/wineprefixes}" # For temp files before $WINEPREFIX is available: -if [ -x "$(which mktemp 2>/dev/null)" ] -then +if [ -x "$(which mktemp 2>/dev/null)" ] ; then W_TMP_EARLY="$(mktemp -d "${TMPDIR:-/tmp}/winetricks.XXXXXXXX")" -elif [ -w "$TMPDIR" ] -then +elif [ -w "$TMPDIR" ] ; then W_TMP_EARLY="$TMPDIR" else W_TMP_EARLY="/tmp" @@ -299,8 +296,7 @@ w_package_broken_win64() # Optional: bug_link="$1" - if [ "$W_ARCH" = "win64" ] - then + if [ "$W_ARCH" = "win64" ] ; then if [ -n "$1" ] ; then w_die "This package is broken on 64-bit Wine. Using a prefix made with WINEARCH=win32 to work around this. See: ${bug_link}" else @@ -313,8 +309,7 @@ w_package_broken_win64() # Note: this is for packages that natively don't support win64, not packages that are broken on wine64, for that, use w_package_broken_win64() w_package_unsupported_win64() { - if [ "$W_ARCH" = "win64" ] - then + if [ "$W_ARCH" = "win64" ] ; then w_die "This package does not work on a 64-bit installation. You must use a prefix made with WINEARCH=win32." fi } @@ -322,8 +317,7 @@ w_package_unsupported_win64() # For packages that are not well tested or have some known issues on win64, but aren't broken w_package_warn_win64() { - if [ "$W_ARCH" = "win64" ] - then + if [ "$W_ARCH" = "win64" ] ; then w_warn "This package may not fully work on a 64-bit installation. 32-bit prefixes may work better." fi } @@ -601,8 +595,7 @@ w_get_sha1sum() # See https://github.com/Winetricks/winetricks/issues/645 # User is running winetricks from /dev/stdin - if [ -f "$_W_sha1_file" ] || [ -h "$_W_sha1_file" ] - then + if [ -f "$_W_sha1_file" ] || [ -h "$_W_sha1_file" ] ; then _W_gotsha1sum=$($WINETRICKS_SHA1SUM < "$_W_sha1_file" | sed 's/(stdin)= //;s/ .*//') w_get_sha256sum "$_W_sha1_file" else @@ -622,8 +615,7 @@ w_get_sha256sum() # See https://github.com/Winetricks/winetricks/issues/645 # User is running winetricks from /dev/stdin - if [ -f "$_W_sha256_file" ] || [ -h "$_W_sha256_file" ] - then + if [ -f "$_W_sha256_file" ] || [ -h "$_W_sha256_file" ] ; then _W_gotsha256sum=$($WINETRICKS_SHA256SUM < "$_W_sha256_file" | sed 's/(stdin)= //;s/ .*//') else w_warn "$_W_sha256_file is not a regular file, not checking sha256sum" @@ -654,8 +646,7 @@ w_verify_sha1sum() _W_vs_file=$2 w_get_sha1sum "$_W_vs_file" - if [ "$_W_gotsha1sum"x != "$_W_vs_wantsum"x ] - then + if [ "$_W_gotsha1sum"x != "$_W_vs_wantsum"x ] ; then w_die "sha1sum mismatch! Rename $_W_vs_file and try again." fi unset _W_vs_wantsum _W_vs_file _W_gotsha1sum @@ -668,8 +659,7 @@ w_verify_sha256sum() _W_vs_file=$2 w_get_sha256sum "$_W_vs_file" - if [ "$_W_gotsha256sum"x != "$_W_vs_wantsum"x ] - then + if [ "$_W_gotsha256sum"x != "$_W_vs_wantsum"x ] ; then w_die "sha256sum mismatch! Rename $_W_vs_file and try again." fi unset _W_vs_wantsum _W_vs_file _W_gotsha256sum @@ -896,12 +886,10 @@ w_download_to() .) w_die "bug: please do not download packages to top of cache" ;; esac - if echo "$_W_url" | grep ' ' - then + if echo "$_W_url" | grep ' ' ; then w_die "bug: please use %20 instead of literal spaces in urls, curl rejects spaces, and they make life harder for linkcheck.sh" fi - if [ "$_W_file"x = ""x ] - then + if [ "$_W_file"x = ""x ] ; then _W_file=$(basename "$_W_url") fi @@ -917,31 +905,25 @@ w_download_to() fi fi - if test ! -d "$_W_cache" - then + if test ! -d "$_W_cache" ; then w_try mkdir -p "$_W_cache" fi # Try download twice checksum_ok="" tries=0 - while test $tries -lt 2 - do + while test $tries -lt 2 ; do # Warn on a second try test "$tries" -eq 1 && winetricks_dl_warning tries=$((tries + 1)) - if test -s "$_W_cache/$_W_file" - then - if test "$_W_sum" - then - if test $tries = 1 - then + if test -s "$_W_cache/$_W_file" ; then + if test "$_W_sum" ; then + if test $tries = 1 ; then # The cache was full. If the file is larger than 500 MB, # don't checksum it, that just annoys the user. # shellcheck disable=SC2046 - if test $(du -k "$_W_cache/$_W_file" | cut -f1) -gt 500000 - then + if test $(du -k "$_W_cache/$_W_file" | cut -f1) -gt 500000 ; then checksum_ok=1 break fi @@ -953,24 +935,21 @@ w_download_to() ;; sha1) w_get_sha1sum "$_W_cache/$_W_file" - if [ "$_W_gotsha1sum"x = "$_W_sum"x ] - then + if [ "$_W_gotsha1sum"x = "$_W_sum"x ] ; then checksum_ok=1 break fi ;; sha256) w_get_sha256sum "$_W_cache/$_W_file" - if [ "$_W_gotsha256sum"x = "$_W_sum"x ] - then + if [ "$_W_gotsha256sum"x = "$_W_sum"x ] ; then checksum_ok=1 break fi ;; esac - if test ! "$WINETRICKS_CONTINUE_DOWNLOAD" - then + if test ! "$WINETRICKS_CONTINUE_DOWNLOAD" ; then w_warn "Checksum for $_W_cache/$_W_file did not match, retrying download" mv -f "$_W_cache/$_W_file" "$_W_cache/$_W_file".bak fi @@ -978,8 +957,7 @@ w_download_to() # file exists, no checksum known, declare success and exit loop break fi - elif test -f "$_W_cache/$_W_file" - then + elif test -f "$_W_cache/$_W_file" ; then # zero-length file, just delete before retrying rm "$_W_cache/$_W_file" fi @@ -996,8 +974,7 @@ w_download_to() *) _W_agent="" ;; esac - if [ "${WINETRICKS_DOWNLOADER}" = "aria2c" ] - then + if [ "${WINETRICKS_DOWNLOADER}" = "aria2c" ] ; then # Note: aria2c wants = for most options or silently fails # (Slightly fancy) aria2c support @@ -1024,8 +1001,7 @@ w_download_to() --save-session='' \ --stream-piece-selector=geom \ "$_W_url" - elif [ "${WINETRICKS_DOWNLOADER}" = "wget" ] - then + elif [ "${WINETRICKS_DOWNLOADER}" = "wget" ] ; then # Use -nd to insulate ourselves from people who set -x in WGETRC # [*] --retry-connrefused works around the broken sf.net mirroring # system when downloading corefonts @@ -1045,8 +1021,7 @@ w_download_to() ${_W_cookiejar:+--load-cookies "$_W_cookiejar"} \ ${_W_agent:+--user-agent="$_W_agent"} \ "$_W_url" - elif [ "${WINETRICKS_DOWNLOADER}" = "curl" ] - then + elif [ "${WINETRICKS_DOWNLOADER}" = "curl" ] ; then # Note: curl does not accept '=' when passing options # curl doesn't get filename from the location given by the server! @@ -1062,8 +1037,7 @@ w_download_to() ${_W_cookiejar:+--cookie "$_W_cookiejar"} \ ${_W_agent:+--user-agent "$_W_agent"} \ "$_W_url" - elif [ "${WINETRICKS_DOWNLOADER}" = "fetch" ] - then + elif [ "${WINETRICKS_DOWNLOADER}" = "fetch" ] ; then # Note: fetch does not support configurable retry count # shellcheck disable=SC2086 @@ -1075,8 +1049,8 @@ w_download_to() else w_die "Here be dragons" fi - if test $? = 0 - then + + if test $? = 0 ; then # Need to decompress .exe's that are compressed, else Cygwin fails # Also affects ttf files on github # FIXME: gzip hack below may no longer be needed, but need to investigate before removing @@ -1113,11 +1087,9 @@ w_download_to() # Usage: w_open_folder directory w_open_folder() { - for _W_cmd in xdg-open open cygstart true - do + for _W_cmd in xdg-open open cygstart true ; do _W_cmdpath=$(which $_W_cmd) - if test -n "$_W_cmdpath" - then + if test -n "$_W_cmdpath" ; then break fi done @@ -1130,11 +1102,9 @@ w_open_folder() w_open_webpage() { # See https://www.dwheeler.com/essays/open-files-urls.html - for _W_cmd in xdg-open sdtwebclient cygstart open firefox true - do + for _W_cmd in xdg-open sdtwebclient cygstart open firefox true ; do _W_cmdpath=$(which $_W_cmd) - if test -n "$_W_cmdpath" - then + if test -n "$_W_cmdpath" ; then break fi done @@ -1164,12 +1134,10 @@ w_download_torrent() UT_WINPATH="$W_CACHE_WIN\\$W_PACKAGE" w_try_cd "$W_CACHE/$W_PACKAGE" - if [ "$2"x != ""x ] # foo.torrent parameter supplied - then + if [ "$2"x != ""x ] ; then # foo.torrent parameter supplied w_try "$WINE" utorrent "/DIRECTORY" "$UT_WINPATH" "$UT_WINPATH\\$2" & else # grab all torrents - for torrent in *.torrent - do + for torrent in *.torrent ; do w_try "$WINE" utorrent "/DIRECTORY" "$UT_WINPATH" "$UT_WINPATH\\$torrent" & done fi @@ -1292,14 +1260,14 @@ sub read_into_container{ if (/"([^"]*)"\s*"([^"]*)"$/) { ${$pcontainer}{$1} = $2; } elsif (/"([^"]*)"$/) { - my( %newcon, $name ); - $name = $1; - read_into_container(\%newcon); - ${$pcontainer}{$name} = \%newcon; + my( %newcon, $name ); + $name = $1; + read_into_container(\%newcon); + ${$pcontainer}{$name} = \%newcon; } elsif (/}/) { - return; + return; } else { - w_die "huh?"; + w_die "huh?"; } } } @@ -1352,8 +1320,7 @@ dump_container(\%top, "\t"); print "}\n"; _EOF_ -for file in userdata/*/config/localconfig.vdf -do +for file in userdata/*/config/localconfig.vdf ; do cp "$file" "$file.old" perl "$W_TMP"/steamconfig.pl "$file.old" > "$file" done @@ -1775,19 +1742,68 @@ w_skip_windows() return 1 } +# for common code in w_override_dlls and w_override_app_dlls +w_common_override_dll() +{ + _W_mode="$1" + module="$2" + + # Remove wine's builtin manifest, if present. Use: + # wineboot ; find "$WINEPREFIX"/drive_c/windows/winsxs/ -iname *manifest | grep deadbeef | sort + case "$W_PACKAGE" in + comctl32) + w_try rm -rf "$W_WINDIR_UNIX"/winsxs/manifests/amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.2600.2982_none_deadbeef.manifest + w_try rm -rf "$W_WINDIR_UNIX"/winsxs/manifests/x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.2600.2982_none_deadbeef.manifest + ;; + vcrun2005) + w_try rm -rf "$W_WINDIR_UNIX"/winsxs/manifests/amd64_microsoft.vc80.atl_1fc8b3b9a1e18e3b_8.0.50727.4053_none_deadbeef.manifest + w_try rm -rf "$W_WINDIR_UNIX"/winsxs/manifests/amd64_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4053_none_deadbeef.manifest + w_try rm -rf "$W_WINDIR_UNIX"/winsxs/manifests/x86_microsoft.vc80.atl_1fc8b3b9a1e18e3b_8.0.50727.4053_none_deadbeef.manifest + w_try rm -rf "$W_WINDIR_UNIX"/winsxs/manifests/x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4053_none_deadbeef.manifest + + # These are 32-bit only? + w_try rm -rf "$W_WINDIR_UNIX"/winsxs/manifests/x86_microsoft.vc80.mfc_1fc8b3b9a1e18e3b_8.0.50727.6195_none_deadbeef.manifest + w_try rm -rf "$W_WINDIR_UNIX"/winsxs/manifests/x86_microsoft.vc80.mfcloc_1fc8b3b9a1e18e3b_8.0.50727.6195_none_deadbeef.manifest + w_try rm -rf "$W_WINDIR_UNIX"/winsxs/manifests/x86_microsoft.vc80.openmp_1fc8b3b9a1e18e3b_8.0.50727.6195_none_deadbeef.manifest + ;; + vcrun2008) + w_try rm -rf "$W_WINDIR_UNIX"/winsxs/manifests/amd64_microsoft.vc90.atl_1fc8b3b9a1e18e3b_9.0.30729.6161_none_deadbeef.manifest + w_try rm -rf "$W_WINDIR_UNIX"/winsxs/manifests/amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.6161_none_deadbeef.manifest + w_try rm -rf "$W_WINDIR_UNIX"/winsxs/manifests/x86_microsoft.vc90.atl_1fc8b3b9a1e18e3b_9.0.30729.6161_none_deadbeef.manifest + w_try rm -rf "$W_WINDIR_UNIX"/winsxs/manifests/x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.6161_none_deadbeef.manifest + + # These are 32-bit only? + w_try rm -rf "$W_WINDIR_UNIX"/winsxs/manifests/x86_microsoft.vc90.mfc_1fc8b3b9a1e18e3b_9.0.30729.6161_none_deadbeef.manifest + w_try rm -rf "$W_WINDIR_UNIX"/winsxs/manifests/x86_microsoft.vc90.mfcloc_1fc8b3b9a1e18e3b_9.0.30729.6161_none_deadbeef.manifest + w_try rm -rf "$W_WINDIR_UNIX"/winsxs/manifests/x86_microsoft.vc90.openmp_1fc8b3b9a1e18e3b_9.0.30729.6161_none_deadbeef.manifest + ;; + esac + + if [ "$_W_mode" = default ] ; then + # To delete a registry key, give an unquoted dash as value + echo "\"*$module\"=-" >> "$W_TMP"/override-dll.reg + else + # Note: if you want to override even DLLs loaded with an absolute + # path, you need to add an asterisk: + echo "\"*$module\"=\"$_W_mode\"" >> "$W_TMP"/override-dll.reg + fi +} + w_override_dlls() { w_skip_windows w_override_dlls && return _W_mode=$1 case $_W_mode in - *=*) - w_die "w_override_dlls: unknown mode $_W_mode. + *=*) + w_die "w_override_dlls: unknown mode $_W_mode. Usage: 'w_override_dlls mode[,mode] dll ...'." ;; - disabled) - _W_mode="" ;; + disabled) + _W_mode="" ;; esac + shift + echo "Using $_W_mode override for following DLLs: $*" cat > "$W_TMP"/override-dll.reg <<_EOF_ REGEDIT4 @@ -1796,23 +1812,7 @@ REGEDIT4 _EOF_ while test "$1" != "" do - case "$1" in - comctl32) - rm -rf "$W_WINDIR_UNIX"/winsxs/manifests/x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.2600.2982_none_deadbeef.manifest - ;; - esac - - if [ "$_W_mode" = default ] - then - # To delete a registry key, give an unquoted dash as value - echo "\"*$1\"=-" >> "$W_TMP"/override-dll.reg - else - # Note: if you want to override even DLLs loaded with an absolute - # path, you need to add an asterisk: - echo "\"*$1\"=\"$_W_mode\"" >> "$W_TMP"/override-dll.reg - #echo "\"$1\"=\"$_W_mode\"" >> "$W_TMP"/override-dll.reg - fi - + w_common_override_dll "$_W_mode" "$1" shift done @@ -2143,44 +2143,30 @@ w_override_app_dlls() # Fixme: handle comma-separated list of modes case $_W_mode in - b|builtin) _W_mode=builtin ;; - n|native) _W_mode=native ;; - default) _W_mode=default ;; - d|disabled) _W_mode="" ;; - *) + b|builtin) _W_mode=builtin ;; + n|native) _W_mode=native ;; + default) _W_mode=default ;; + d|disabled) _W_mode="" ;; + *) w_die "w_override_app_dlls: unknown mode $_W_mode. (want native, builtin, default, or disabled) Usage: 'w_override_app_dlls app mode dll ...'." ;; esac echo "Using $_W_mode override for following DLLs when running $_W_app: $*" ( - echo REGEDIT4 - echo "" - echo "[HKEY_CURRENT_USER\\Software\\Wine\\AppDefaults\\$_W_app\\DllOverrides]" + echo REGEDIT4 + echo "" + echo "[HKEY_CURRENT_USER\\Software\\Wine\\AppDefaults\\$_W_app\\DllOverrides]" ) > "$W_TMP"/override-dll.reg while test "$1" != "" do - case "$1" in - comctl32) - rm -rf "$W_WINDIR_UNIX"/winsxs/manifests/x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.2600.2982_none_deadbeef.manifest - ;; - esac - if [ "$_W_mode" = default ] - then - # To delete a registry key, give an unquoted dash as value - echo "\"*$1\"=-" >> "$W_TMP"/override-dll.reg - else - # Note: if you want to override even DLLs loaded with an absolute - # path, you need to add an asterisk: - echo "\"*$1\"=\"$_W_mode\"" >> "$W_TMP"/override-dll.reg - #echo "\"$1\"=\"$_W_mode\"" >> "$W_TMP"/override-dll.reg - fi + w_common_override_dll "$_W_mode" "$1" shift done w_try_regedit "$W_TMP_WIN"\\override-dll.reg - rm "$W_TMP"/override-dll.reg + w_try rm "$W_TMP"/override-dll.reg unset _W_app _W_mode } @@ -2385,60 +2371,46 @@ w_set_app_winver() unset _W_app } -# Usage: w_wine_version OP VALUE -# All the integer comparison operators of 'test' are supported, since 'test' does the work. +# Usage: w_compare_wine_version OP VALUE +# Note: currently only -ge and -le are supported, +# as well as the special case -bn (between) # Example: -# if w_wine_version -gt 1.3.2 -# then +# if w_compare_wine_version -gt 2.5 ; then # ... # fi -w_wine_version() +w_compare_wine_version() { - # Note, there are also hacks for major releases (1.6/1.8/2.0/etc. and RCs) in winetricks_init() - # - # Parse major/minor/micro/nano fields of VALUE. Ignore nano. - case $2 in - 0*|1.0|1.0.*) w_die "bug: $2 is before 1.1, we don't bother with bugs fixed that long ago" ;; - 1.1.*) _W_minor=1; _W_micro=$(echo "$2" | sed 's/.*\.//');; - 1.2) _W_minor=2; _W_micro=0;; - 1.2.*) _W_minor=2; _W_micro=$(echo "$2" | sed 's/.*\.//');; - 1.3.*) _W_minor=3; _W_micro=$(echo "$2" | sed 's/.*\.//');; - 1.4) _W_minor=4; _W_micro=0;; - 1.4.*) _W_minor=4; _W_micro=$(echo "$2" | sed 's/.*\.//');; - 1.5.*) _W_minor=5; _W_micro=$(echo "$2" | sed 's/.*\.//');; - 1.6|1.6-rc*) _W_minor=6; _W_micro=0;; - 1.6.*) _W_minor=6; _W_micro=$(echo "$2" | sed 's/.*\.//');; - 1.7.*) _W_minor=7; _W_micro=$(echo "$2" | sed 's/.*\.//');; - 1.8.*) _W_minor=8; _W_micro=$(echo "$2" | sed 's/.*\.//');; - 1.9.*) _W_minor=9; _W_micro=$(echo "$2" | sed 's/.*\.//');; + comparison="$1" + known_wine_val1="$2" + known_wine_val2="$3" - # Rather than rework numbering system to handle both, just consider 2.x+ as 1.10, 1.11, etc. - 2.0|2.0-rc*) _W_minor=10; _W_micro=0;; - 2.0.*|2.*) _W_minor=10; _W_micro=$(echo "$2" | sed 's/.*\.//');; - 3.0|3.0-rc*) _W_minor=11; _W_micro=0;; - 3.0.*|3.*) _W_minor=11; _W_micro=$(echo "$2" | sed 's/.*\.//');; - - *) w_die "bug: unrecognized version $2";; + case "$comparison" in + # expected value if the comparison is true + -bn) _expected_pos_current_wine="2" + _wine_versions_string="${known_wine_val1}\n${_wine_version_stripped}\n${known_wine_val2}" + ;; + -ge) _expected_pos_current_wine="2" + _wine_versions_string="${known_wine_val1}\n${_wine_version_stripped}" + ;; + -le) _expected_pos_current_wine="1" + _wine_versions_string="${known_wine_val1}\n${_wine_version_stripped}" + ;; + *) w_die "Unsupported comparison. Only -ge and -le are supported" ;; esac - # Comparing current wine version 1.$WINETRICKS_WINE_MINOR.$WINETRICKS_WINE_MICRO against 1.$_W_minor.$_W_micro - if test "$WINETRICKS_WINE_MINOR" = "$_W_minor" - then - test "$WINETRICKS_WINE_MICRO" "$1" "$_W_micro" || return 1 + # shellcheck disable=SC2039 + _pos_current_wine="$(echo -e "${_wine_versions_string}" | sort -V | grep -n "^${_wine_version_stripped}\$" | cut -d : -f1)" + if [ "$_pos_current_wine" = "$_expected_pos_current_wine" ] ; then + #echo "true: known_wine_version=$2, comparison=$1, stripped wine=$_wine_version_stripped, expected_pos=$_expected_pos_known, pos_known=$_pos_known_wine" + #echo "Wine version comparison is true" + return 1 else - test "$WINETRICKS_WINE_MINOR" "$1" "$_W_minor" || return 1 + #echo "false: known_wine_version=$2, comparison=$1, stripped wine=$_wine_version_stripped, expected_pos=$_expected_pos_known, pos_known=$_pos_known_wine" + #echo "Wine version comparison is false" + return 0 fi } -# Built-in self test for w_wine_version -#echo Verify that version 1.3.4 is equal to itself -#WINETRICKS_WINE_MINOR=3 WINETRICKS_WINE_MICRO=4 w_wine_version -eq 1.3.4 || w_die "fail test case wine-1.3.4 = 1.3.4" -#echo Verify that version 1.3.4 is greater than 1.2 -#WINETRICKS_WINE_MINOR=3 WINETRICKS_WINE_MICRO=4 w_wine_version -gt 1.2 || w_die "fail test case wine-1.3.4 > wine-1.2" -#echo Verify that version 1.6 is greater than 1.2 -#WINETRICKS_WINE_MINOR=6 WINETRICKS_WINE_MICRO=0 w_wine_version -gt 1.2 || w_die "fail test case wine-1.6 > wine-1.2" -# FIXME: 2.x tests - # Usage: w_wine_version_in range ... # True if wine version in any of the given ranges # 'range' can be @@ -2447,41 +2419,21 @@ w_wine_version() # val1,val2 (for >= val1 && <= val2) w_wine_version_in() { - for _W_range - do - _W_val1=$(echo "$_W_range" | sed 's/,.*//') - _W_val2=$(echo "$_W_range" | sed 's/.*,//') - - # If in this range, return true - case $_W_range in - ,*) w_wine_version -le "$_W_val2" && unset _W_range _W_val1 _W_val2 && return 0;; - *,) w_wine_version -ge "$_W_val1" && unset _W_range _W_val1 _W_val2 && return 0;; - *) w_wine_version -ge "$_W_val1" && w_wine_version -le "$_W_val2" && unset _W_range _W_val1 _W_val2 && return 0;; - esac - done - unset _W_range _W_val1 _W_val2 - return 1 + for _W_range + do + _W_val1=$(echo "$_W_range" | sed 's/,.*//') + _W_val2=$(echo "$_W_range" | sed 's/.*,//') + # If in this range, return true + case $_W_range in + ,*) w_compare_wine_version -le "$_W_val2" && unset _W_range _W_val1 _W_val2 && return 0;; + *,) w_compare_wine_version -ge "$_W_val1" && unset _W_range _W_val1 _W_val2 && return 0;; + *) w_compare_wine_version -bn "$_W_val1" "$_W_val2" && unset _W_range _W_val1 _W_val2 && return 0;; + esac + done + unset _W_range _W_val1 _W_val2 + return 1 } -# Built-in self test for w_wine_version_in -#w_wine_version_in_test() -#{ -# WINETRICKS_WINE_MINOR=$1 WINETRICKS_WINE_MICRO=$2 w_wine_version_in $3 $4 $5 $6 || w_die "fail test case wine-1.$1.$2 in $3 $4 $5 $6" -#} -#w_wine_version_not_in_test() -#{ -# WINETRICKS_WINE_MINOR=$1 WINETRICKS_WINE_MICRO=$2 w_wine_version_in $3 $4 $5 $6 && w_die "fail test case wine-1.$1.$2 in $3 $4 $5 $6" -#} -#echo Verify that version 1.2.0 is in the range 1.2, -#w_wine_version_in_test 2 0 1.2, -#echo Verify that version 1.3.4 is in the range 1.2, -#w_wine_version_in_test 3 4 1.2, -#echo Verify that version 1.3 is not in the range ,1.2 -#w_wine_version_not_in_test 3 0 ,1.2 -#echo Verify that version 1.6-rc1 is in the range 1.2, -#w_wine_version_in_test 6 0 1.2, -#echo test passed - # Usage: workaround_wine_bug bugnumber [message] [good-wine-version-range ...] # Returns true and outputs given msg if the workaround needs to be applied. # For debugging: if you want to skip a bug's workaround, put the bug number in @@ -4923,24 +4875,17 @@ winetricks_init() W_ISO_MOUNT_ROOT=/mnt/winetricks W_ISO_MOUNT_LETTER=i - WINETRICKS_WINE_VERSION=$(winetricks_early_wine --version | sed 's/.*wine/wine/') + WINETRICKS_WINE_VERSION=${WINETRICKS_WINE_VERSION:-$(winetricks_early_wine --version | sed 's/.*wine/wine/')} WINETRICKS_ORIG_WINE_VERSION="${WINETRICKS_WINE_VERSION}" - # See also w_wine_version() - # A small hack... - case "$WINETRICKS_WINE_VERSION" in - wine-1.4-*) WINETRICKS_WINE_VERSION="wine-1.4.40"; export WINETRICKS_WINE_VERSION;; - wine-1.4) WINETRICKS_WINE_VERSION="wine-1.4.0"; export WINETRICKS_WINE_VERSION;; - wine-1.6-*) WINETRICKS_WINE_VERSION="wine-1.6.0"; export WINETRICKS_WINE_VERSION;; - wine-1.6) WINETRICKS_WINE_VERSION="wine-1.6.0"; export WINETRICKS_WINE_VERSION;; - wine-1.8-*) WINETRICKS_WINE_VERSION="wine-1.8.0"; export WINETRICKS_WINE_VERSION;; - wine-1.8) WINETRICKS_WINE_VERSION="wine-1.8.0"; export WINETRICKS_WINE_VERSION;; - wine-2.0-*) WINETRICKS_WINE_VERSION="wine-1.10.0"; export WINETRICKS_WINE_VERSION;; - wine-2.0) WINETRICKS_WINE_VERSION="wine-1.10.0"; export WINETRICKS_WINE_VERSION;; - wine-3.0-*) WINETRICKS_WINE_VERSION="wine-1.11.0"; export WINETRICKS_WINE_VERSION;; - wine-3.0) WINETRICKS_WINE_VERSION="wine-1.11.0"; export WINETRICKS_WINE_VERSION;; - esac - WINETRICKS_WINE_MINOR=$(echo $WINETRICKS_WINE_VERSION | sed 's/wine-1\.\([0-9]*\)\..*/\1/') - WINETRICKS_WINE_MICRO=$(echo $WINETRICKS_WINE_VERSION | sed 's/wine-1.[0-9][0-9]*\.\([0-9]*\).*/\1/') + + # Need to account for lots of variations: + # wine-1.9.22 + # wine-1.9.22 (Debian 1.9.22-1) + # wine-1.9.22 (Staging) + # wine-2.0 (Debian 2.0-1) + # wine-2.0-rc1 + # wine-2.8 + _wine_version_stripped="$(echo "$WINETRICKS_WINE_VERSION" | cut -d ' ' -f1 | sed -e 's/wine-//' -e 's/-rc.*//')" if [ ! "$WINETRICKS_SUPER_QUIET" ] ; then echo "Using winetricks $(winetricks_print_version) with ${WINETRICKS_ORIG_WINE_VERSION} and WINEARCH=${W_ARCH}" @@ -7217,7 +7162,8 @@ w_metadata dotnet462 dlls \ publisher="Microsoft" \ year="2016" \ media="download" \ - conflicts="dotnet20 dotnet20sdk dotnet20sp1 dotnet20sp2 dotnet35sp1 dotnet40 dotnet46 dotnet461 vjrun20" + conflicts="dotnet20 dotnet20sdk dotnet20sp1 dotnet20sp2 dotnet35sp1 dotnet40 dotnet46 dotnet461 vjrun20" \ + installed_file1="c:/windows/dotnet462.installed.workaround" load_dotnet462() { @@ -7255,6 +7201,10 @@ load_dotnet462() esac w_override_dlls native mscoree + + # Unfortunately, dotnet462 install the same files that dotnet461 does, but with different checksums + # The only unique files are temporary ones. As a workaround, touch a file instead so that we know it's been installed for list-installed + w_try touch "${W_WINDIR_UNIX}/dotnet462.installed.workaround" } verify_dotnet462() @@ -7276,8 +7226,9 @@ load_dotnet_verifier() { # https://blogs.msdn.microsoft.com/astebner/2008/10/13/net-framework-setup-verification-tool-users-guide/ # 2016/10/26: sha256sum 1daf4b1b27669b65f613e17814da3c8342d3bfa9520a65a880c58d6a2a6e32b5, adds .NET Framework 4.6.{1,2} support + # 2017/06/12: sha256sum , adds .NET Framework 4.7 support - w_download https://msdnshared.blob.core.windows.net/media/2016/10/netfx_setupverifier_new.zip 1daf4b1b27669b65f613e17814da3c8342d3bfa9520a65a880c58d6a2a6e32b5 "${file1}" + w_download https://msdnshared.blob.core.windows.net/media/2017/05/netfx_setupverifier_new.zip 22c596a13f0822871a01346d2f5736a3b230e1f6cb8ea429aba844d52adc568a w_try_cd "$W_CACHE/$W_PACKAGE" w_try_unzip "$W_SYSTEM32_DLLS" netfx_setupverifier_new.zip netfx_setupverifier.exe @@ -8241,21 +8192,16 @@ w_metadata msscript dlls \ publisher="Microsoft" \ year="2004" \ media="download" \ - file1="sct10en.exe" \ + file1="../winxpsp3/WindowsXP-KB936929-SP3-x86-ENU.exe" \ installed_file1="$W_SYSTEM32_DLLS_WIN/msscript.ocx" load_msscript() { - # https://msdn.microsoft.com/scripting/scriptcontrol/x86/sct10en.exe - # https://www.microsoft.com/en-us/download/details.aspx?id=1949 - # Originally at: https://download.microsoft.com/download/d/2/a/d2a7430c-6d5b-48e9-96c4-3c751be7bffe/sct10en.exe - # Mirror list: http://www.filewatcher.com/_/?q=sct10en.exe (make sure you get the 196.98KB version) - w_download ftp://beorn.sftcomp.ru/support/gpb/V7/WS/sct10en.exe 9b6730c3070f252f5051e0cf6b99523b66730599d795a607efd40b7fb0e11efb - - w_try_cabextract --directory="${W_TMP}" "${W_CACHE}/${W_PACKAGE}/${file1}" - w_try cp -f "$W_TMP"/msscript.ocx "$W_SYSTEM32_DLLS" - w_try_regsvr msscript.ocx + helper_winxpsp3 i386/msscript.oc_ + w_try_cabextract --directory="$W_SYSTEM32_DLLS" "$W_TMP"/i386/msscript.oc_ + w_override_dlls native,builtin i386/msscript.ocx } + #---------------------------------------------------------------- w_metadata msls31 dlls \ @@ -8333,7 +8279,10 @@ load_msxml3() # Service Pack 7 # Originally at https://download.microsoft.com/download/8/8/8/888f34b7-4f54-4f06-8dac-fa29b19f33dd/msxml3.msi # Mirror list: http://www.filewatcher.com/m/msxml3.msi.1070592-0.html - w_download ftp://support.danbit.dk/D/DVD-RW-USB2B/Driver/Installation/Data/Redist/msxml3.msi f9c678f8217e9d4f9647e8a1f6d89a7c26a57b9e9e00d39f7487493dd7b4e36c + # Known bad sites (2017/06/11): + # ftp://support.danbit.dk/D/DVD-RW-USB2B/Driver/Installation/Data/Redist/msxml3.msi + # ftp://94.79.56.169/common/Client/MSXML%204.0%20Service%20Pack%202/msxml3.msi + w_download "ftp://176.9.43.153/MS%20XML%20Parser/msxml3.msi" f9c678f8217e9d4f9647e8a1f6d89a7c26a57b9e9e00d39f7487493dd7b4e36c # It won't install on top of Wine's msxml3, which has a pretty high version number, so delete Wine's fake DLL rm "$W_SYSTEM32_DLLS"/msxml3.dll @@ -8643,6 +8592,30 @@ load_qdvd() #---------------------------------------------------------------- +w_metadata qedit dlls \ + title="qedit.dll" \ + publisher="Microsoft" \ + year="2011" \ + media="download" \ + file1="../win7sp1/windows6.1-KB976932-X86.exe" \ + installed_file1="$W_SYSTEM32_DLLS_WIN/qedit.dll" + +load_qedit() +{ + helper_win7sp1 x86_microsoft-windows-qedit_31bf3856ad364e35_6.1.7601.17514_none_5ca34698a5a970d2/qedit.dll + w_try cp "$W_TMP/x86_microsoft-windows-qedit_31bf3856ad364e35_6.1.7601.17514_none_5ca34698a5a970d2/qedit.dll" "$W_SYSTEM32_DLLS/qedit.dll" + + if [ "$W_ARCH" = "win64" ] + then + helper_win7sp1_x64 amd64_microsoft-windows-qedit_31bf3856ad364e35_6.1.7601.17514_none_b8c1e21c5e06e208/qedit.dll + w_try cp "$W_TMP/amd64_microsoft-windows-qedit_31bf3856ad364e35_6.1.7601.17514_none_b8c1e21c5e06e208/qedit.dll" "$W_SYSTEM64_DLLS/qedit.dll" + fi + + w_override_dlls native,builtin qedit +} + +#---------------------------------------------------------------- + w_metadata quartz dlls \ title="quartz.dll (from Directx 9 user redistributable)" \ publisher="Microsoft" \ @@ -9285,13 +9258,13 @@ load_vcrun2005() w_download https://download.microsoft.com/download/8/B/4/8B42259F-5D70-43F4-AC2E-4B208FD8D66A/vcredist_x86.EXE 4ee4da0fe62d5fa1b5e80c6e6d88a4a2f8b3b140c35da51053d0d7b72a381d29 # For native to be used, msvc* dlls must either be set to native only, OR - # set to native, builtin and remove wine's builtin manifest. Removing the manifest - # Makes it harder for user to revert later, so use native only method. + # set to native, builtin and remove wine's builtin manifest. Setting to native only breaks several apps, + # e.g., Dirac Codec and Ragnarok Online. # For more info, see: # https://bugs.winehq.org/show_bug.cgi?id=28225 # https://bugs.winehq.org/show_bug.cgi?id=33604 # https://bugs.winehq.org/show_bug.cgi?id=42859 - w_override_dlls native atl80 msvcm80 msvcp80 msvcr80 vcomp + w_override_dlls native,builtin atl80 msvcm80 msvcp80 msvcr80 vcomp w_try_cd "$W_CACHE/$W_PACKAGE" w_try "$WINE" "$file1" $W_UNATTENDED_SLASH_Q @@ -9340,13 +9313,17 @@ load_vcrun2008() w_download https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x86.exe 6b3e4c51c6c0e5f68c8a72b497445af3dbf976394cbb62aa23569065c28deeb6 # For native to be used, msvc* dlls must either be set to native only, OR - # set to native, builtin and remove wine's builtin manifest. Removing the manifest - # Makes it harder for user to revert later, so use native only method. + # set to native, builtin and remove wine's builtin manifest. Setting to native only breaks several apps, + # e.g., Dirac Codec and Ragnarok Online. # For more info, see: # https://bugs.winehq.org/show_bug.cgi?id=28225 # https://bugs.winehq.org/show_bug.cgi?id=33604 # https://bugs.winehq.org/show_bug.cgi?id=42859 - w_override_dlls native atl90 msvcm90 msvcp90 msvcr90 vcomp90 + # https://bugs.winehq.org/show_bug.cgi?id=28225 + # https://bugs.winehq.org/show_bug.cgi?id=33604 + # https://bugs.winehq.org/show_bug.cgi?id=42859 + w_override_dlls native,builtin atl90 msvcm90 msvcp90 msvcr90 vcomp90 + w_try_cd "$W_CACHE/$W_PACKAGE" w_try "$WINE" "$file1" $W_UNATTENDED_SLASH_Q @@ -10940,7 +10917,7 @@ load_ev3() w_override_dlls native urlmon fi - if w_workaround_wine_bug 34897 "Installing update KB2936068 to work around bug 34897" 1.9.10, + if w_workaround_wine_bug 34897 "Installing update KB2936068 to work around bug 34897" 1.9.10,1.9.12 then w_call ie8_kb2936068 fi diff --git a/winetricks.1 b/winetricks.1 index cd76c29..1990301 100644 --- a/winetricks.1 +++ b/winetricks.1 @@ -1,5 +1,5 @@ .\" -*- nroff -*- -.TH WINETRICKS 1 "May 2017" "Winetricks 20170517" "Wine Package Manager" +.TH WINETRICKS 1 "June 2017" "Winetricks 20170614" "Wine Package Manager" .SH NAME winetricks \- manage virtual Windows environments using Wine .SH SYNOPSIS