wine: Set WINELOADER in wrapper, wrap also wine64.
Fixes #63170. Note that this brings back wrapping of wine64 which was removed in #28486 because the underlying issue is now fixed.
This commit is contained in:
parent
54cbf55543
commit
96c957f92c
1 changed files with 18 additions and 3 deletions
|
@ -95,10 +95,25 @@ stdenv.mkDerivation ((lib.optionalAttrs (buildScript != null) {
|
|||
((map (links "share/wine/gecko") geckos)
|
||||
++ (map (links "share/wine/mono") monos))}
|
||||
'' + lib.optionalString supportFlags.gstreamerSupport ''
|
||||
for i in wine ; do
|
||||
if [ -e "$out/bin/$i" ]; then
|
||||
wrapProgram "$out/bin/$i" \
|
||||
# Wrapping Wine is tricky.
|
||||
# https://github.com/NixOS/nixpkgs/issues/63170
|
||||
# https://github.com/NixOS/nixpkgs/issues/28486
|
||||
# The main problem is that wine-preloader opens and loads the wine(64) binary, and
|
||||
# breakage occurs if it finds a shell script instead of the real binary. We solve this
|
||||
# by setting WINELOADER to point to the original binary. Additionally, the locations
|
||||
# of the 32-bit and 64-bit binaries must differ only by the presence of "64" at the
|
||||
# end, due to the logic Wine uses to find the other binary (see get_alternate_loader
|
||||
# in dlls/kernel32/process.c). Therefore we do not use wrapProgram which would move
|
||||
# the binaries to ".wine-wrapped" and ".wine64-wrapped", but use makeWrapper directly,
|
||||
# and move the binaries to ".wine" and ".wine64".
|
||||
for i in wine wine64 ; do
|
||||
prog="$out/bin/$i"
|
||||
if [ -e "$prog" ]; then
|
||||
hidden="$(dirname "$prog")/.$(basename "$prog")"
|
||||
mv "$prog" "$hidden"
|
||||
makeWrapper "$hidden" "$prog" \
|
||||
--argv0 "" \
|
||||
--set WINELOADER "$hidden" \
|
||||
--prefix GST_PLUGIN_SYSTEM_PATH_1_0 ":" "$GST_PLUGIN_SYSTEM_PATH_1_0"
|
||||
fi
|
||||
done
|
||||
|
|
Loading…
Reference in a new issue