diff options
author | Frederik Rietdijk <fridh@fridh.nl> | 2019-07-16 11:15:46 +0200 |
---|---|---|
committer | Frederik Rietdijk <fridh@fridh.nl> | 2019-07-16 11:15:46 +0200 |
commit | a28a9ac156b921f394882be3c282e906f4662af5 (patch) | |
tree | d673d7f563445d1d7493734d3cbdfefecb4734bd /pkgs/misc/emulators | |
parent | e29cf290867c6781896bb191df057a6065fdf57b (diff) | |
parent | 0ddb9e04957e372eacfd7aedd8135cd605bc7517 (diff) | |
download | nixlib-a28a9ac156b921f394882be3c282e906f4662af5.tar nixlib-a28a9ac156b921f394882be3c282e906f4662af5.tar.gz nixlib-a28a9ac156b921f394882be3c282e906f4662af5.tar.bz2 nixlib-a28a9ac156b921f394882be3c282e906f4662af5.tar.lz nixlib-a28a9ac156b921f394882be3c282e906f4662af5.tar.xz nixlib-a28a9ac156b921f394882be3c282e906f4662af5.tar.zst nixlib-a28a9ac156b921f394882be3c282e906f4662af5.zip |
Merge master into staging-next
Diffstat (limited to 'pkgs/misc/emulators')
-rw-r--r-- | pkgs/misc/emulators/wine/base.nix | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/pkgs/misc/emulators/wine/base.nix b/pkgs/misc/emulators/wine/base.nix index e86db53c88a6..8edf7ad39597 100644 --- a/pkgs/misc/emulators/wine/base.nix +++ b/pkgs/misc/emulators/wine/base.nix @@ -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 |