Don't install amd_ags_x64 into prefix

The DLL ships with the games and having the built-in version in
system32/syswow64 has unexpected consequences.

If the game is launched from a subdirectory, but the DLL is in current
working directory, the built-in takes precedence as CWD has lower search
priority than system directories (with the default SafeDllSearchMode).

By not installing amd_ags_x64.dll in system32/syswow64 the built-in is
still picked up correctly from lib/ when necessary.

There's an accompanying patch for wine that makes sure wineboot won't
install the dll, but since we construct our default_pfx in a special way
we also need to make sure that files won't get copied/linked there.

To make prefix updates smooth this change also removes any stale
amd_ags_x64.dlls that may have been installed by previous version of
Proton.

CW-Bug-Id: 18804
This commit is contained in:
Arkadiusz Hiler 2021-04-22 12:43:54 +03:00 committed by Andrew Eikum
parent afc9bf84c7
commit 575d9bc1f9
2 changed files with 11 additions and 1 deletions

View File

@ -50,9 +50,12 @@ def make_relative_symlink(target, linkname):
os.symlink(rel, linkname)
def setup_dll_symlinks(default_pfx_dir, dist_dir):
skip_dlls = [ 'amd_ags_x64.dll' ]
for walk_dir, dirs, files in os.walk(default_pfx_dir):
for file_ in files:
filename = os.path.join(walk_dir, file_)
if file_ in skip_dlls:
continue
if os.path.isfile(filename) and file_is_wine_builtin_dll(filename):
bitness = dll_bitness(filename)
if bitness == 32:

9
proton
View File

@ -20,7 +20,7 @@ from filelock import FileLock
#To enable debug logging, copy "user_settings.sample.py" to "user_settings.py"
#and edit it if needed.
CURRENT_PREFIX_VERSION="6.3-1"
CURRENT_PREFIX_VERSION="6.3-2"
PFX="Proton: "
ld_path_var = "LD_LIBRARY_PATH"
@ -308,6 +308,13 @@ class CompatData:
log("Unable to write new registry file to " + self.prefix_dir + "system.reg")
pass
stale_builtins = [self.prefix_dir + "/drive_c/windows/system32/amd_ags_x64.dll",
self.prefix_dir + "/drive_c/windows/syswow64/amd_ags_x64.dll" ]
for builtin in stale_builtins:
if os.path.lexists(builtin) and file_is_wine_builtin_dll(builtin):
log("Removing stale builtin " + builtin)
os.remove(builtin)
except ValueError:
log("Prefix has an invalid version?! You may want to back up user files and delete this prefix.")
#Just let the Wine upgrade happen and hope it works...