nixpkgs/pkgs/development/mobile/genymotion/default.nix
Dolphin von Chips 28d80ffa92 genymotion: fix startup on Qt-based environments
Currently trying to run Genymotion on Plasma 5 fails at all, Genymotion
itself complaining about libqtquickcontrols2materialstyleplugin.so using
"incompatible Qt library".
As it turns out, this package ships its own
version of Qt but does not ignore any environment variables related to
Qt, which results in Genymotion's Qt using (apparently incompatible)
QML plugins from user's system. This can be fixed quite easily by
unsetting `QML2_IMPORT_PATH` in a wrapper, which this patch does.
There might be more such problems, but I haven't encountered them yet,
so fixing those will be up to someone else ;)
2022-03-24 16:32:38 +05:00

97 lines
2.5 KiB
Nix

{ stdenv, lib, fetchurl, makeWrapper, which, zlib, libGL, glib, xorg, libxkbcommon
, xdg-utils, libXrender, fontconfig, freetype, systemd, libpulseaudio
# For glewinfo
, libXmu, libXi, libXext }:
let
packages = [
stdenv.cc.cc
zlib
glib
xorg.libX11
libxkbcommon
libXmu
libXi
libXext
libGL
libXrender
fontconfig
freetype
systemd
libpulseaudio
];
libPath = lib.makeLibraryPath packages;
in
stdenv.mkDerivation rec {
pname = "genymotion";
version = "3.2.1";
src = fetchurl {
url = "https://dl.genymotion.com/releases/genymotion-${version}/genymotion-${version}-linux_x64.bin";
name = "genymotion-${version}-linux_x64.bin";
sha256 = "sha256-yCczUfiMcuu9OauMDmMdtnheDBXiC9tOEu0cWAW95FM=";
};
nativeBuildInputs = [ makeWrapper ];
buildInputs = [ which xdg-utils ];
unpackPhase = ''
mkdir -p phony-home $out/share/applications
export HOME=$TMP/phony-home
mkdir ${pname}
echo "y" | sh $src -d ${pname}
sourceRoot=${pname}
substitute phony-home/.local/share/applications/genymobile-genymotion.desktop \
$out/share/applications/genymobile-genymotion.desktop --replace "$TMP/${pname}" "$out/libexec"
'';
installPhase = ''
mkdir -p $out/bin $out/libexec
mv genymotion $out/libexec/
ln -s $out/libexec/genymotion/{genymotion,player} $out/bin
'';
fixupPhase = ''
patchInterpreter() {
patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
"$out/libexec/genymotion/$1"
}
patchExecutable() {
patchInterpreter "$1"
wrapProgram "$out/libexec/genymotion/$1" \
--set "LD_LIBRARY_PATH" "${libPath}" \
--unset "QML2_IMPORT_PATH"
}
patchTool() {
patchInterpreter "tools/$1"
wrapProgram "$out/libexec/genymotion/tools/$1" \
--set "LD_LIBRARY_PATH" "${libPath}"
}
patchExecutable genymotion
patchExecutable player
patchTool adb
patchTool aapt
patchTool glewinfo
rm $out/libexec/genymotion/libxkbcommon*
'';
meta = with lib; {
description = "Fast and easy Android emulation";
longDescription = ''
Genymotion is a relatively fast Android emulator which comes with
pre-configured Android (x86 with OpenGL hardware acceleration) images,
suitable for application testing.
'';
homepage = "https://www.genymotion.com/";
license = licenses.unfree;
platforms = ["x86_64-linux"];
maintainers = [ maintainers.puffnfresh ];
};
}