diff --git a/pkgs/tools/X11/xpra/default.nix b/pkgs/tools/X11/xpra/default.nix index 915144daa908..4df793c5b166 100644 --- a/pkgs/tools/X11/xpra/default.nix +++ b/pkgs/tools/X11/xpra/default.nix @@ -1,6 +1,6 @@ -{ stdenv, lib, fetchurl, callPackage, python2Packages, pkgconfig -, xorg, gtk2, glib, pango, cairo, gdk_pixbuf, atk -, makeWrapper, xorgserver, getopt, xauth, utillinux, which +{ stdenv, lib, fetchurl, callPackage, substituteAll, python3, pkgconfig +, xorg, gtk3, glib, pango, cairo, gdk_pixbuf, atk +, wrapGAppsHook, xorgserver, getopt, xauth, utillinux, which , ffmpeg, x264, libvpx, libwebp , libfakeXinerama , gst_all_1, pulseaudio, gobjectIntrospection @@ -9,7 +9,7 @@ with lib; let - inherit (python2Packages) cython buildPythonApplication; + inherit (python3.pkgs) cython buildPythonApplication; xf86videodummy = callPackage ./xf86videodummy { }; in buildPythonApplication rec { @@ -21,7 +21,14 @@ in buildPythonApplication rec { sha256 = "1azvvddjfq7lb5kmbn0ilgq2nf7pmymsc3b9lhbjld6w156qdv01"; }; - nativeBuildInputs = [ pkgconfig ]; + patches = [ + (substituteAll { + src = ./fix-paths.patch; + inherit (xorg) xkeyboardconfig; + }) + ]; + + nativeBuildInputs = [ pkgconfig gobjectIntrospection wrapGAppsHook ]; buildInputs = [ cython @@ -30,11 +37,10 @@ in buildPythonApplication rec { xorg.xproto xorg.fixesproto xorg.libXtst xorg.libXfixes xorg.libXcomposite xorg.libXdamage xorg.libXrandr xorg.libxkbfile - pango cairo gdk_pixbuf atk gtk2 glib + pango cairo gdk_pixbuf atk gtk3 glib ffmpeg libvpx x264 libwebp - gobjectIntrospection gst_all_1.gstreamer gst_all_1.gst-plugins-base gst_all_1.gst-plugins-good @@ -42,38 +48,34 @@ in buildPythonApplication rec { gst_all_1.gst-libav pam - - makeWrapper ]; - propagatedBuildInputs = with python2Packages; [ - pillow pygtk pygobject2 rencode pycrypto cryptography pycups lz4 dbus-python - netifaces numpy websockify pygobject3 gst-python pam + propagatedBuildInputs = with python3.pkgs; [ + pillow rencode pycrypto cryptography pycups lz4 dbus-python + netifaces numpy websockify pygobject3 pycairo gst-python pam ]; - preBuild = '' - export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE $(pkg-config --cflags gtk+-2.0) $(pkg-config --cflags pygtk-2.0) $(pkg-config --cflags xtst)" - substituteInPlace xpra/server/auth/pam_auth.py --replace "/lib/libpam.so.1" "${pam}/lib/libpam.so" - substituteInPlace xpra/x11/bindings/keyboard_bindings.pyx --replace "/usr/share/X11/xkb" "${xorg.xkeyboardconfig}/share/X11/xkb" - ''; - setupPyBuildFlags = ["--with-Xdummy" "--without-strict"]; + NIX_CFLAGS_COMPILE = [ + # error: 'import_cairo' defined but not used + "-Wno-error=unused-function" + ]; - postInstall = '' - wrapProgram $out/bin/xpra \ - --set XPRA_INSTALL_PREFIX "$out" \ - --set GI_TYPELIB_PATH "$GI_TYPELIB_PATH" \ - --set GST_PLUGIN_SYSTEM_PATH_1_0 "$GST_PLUGIN_SYSTEM_PATH_1_0" \ - --prefix LD_LIBRARY_PATH : ${libfakeXinerama}/lib \ + setupPyBuildFlags = [ + "--with-Xdummy" + "--without-strict" + "--with-gtk3" + "--without-gtk2" + ]; + + preFixup = '' + gappsWrapperArgs+=( + --set XPRA_INSTALL_PREFIX "$out" + --prefix LD_LIBRARY_PATH : ${libfakeXinerama}/lib --prefix PATH : ${stdenv.lib.makeBinPath [ getopt xorgserver xauth which utillinux pulseaudio ]} + ) ''; - preCheck = "exit 0"; - - #TODO: replace postInstall with postFixup to avoid double wrapping of xpra; needs more work though - #postFixup = '' - # sed -i '3iexport FONTCONFIG_FILE="${fontsConf}"' $out/bin/xpra - # sed -i '4iexport PATH=${stdenv.lib.makeBinPath [ getopt xorgserver xauth which utillinux ]}\${PATH:+:}\$PATH' $out/bin/xpra - #''; + doCheck = false; passthru = { inherit xf86videodummy; }; diff --git a/pkgs/tools/X11/xpra/fix-paths.patch b/pkgs/tools/X11/xpra/fix-paths.patch new file mode 100644 index 000000000000..c50ec28c35e2 --- /dev/null +++ b/pkgs/tools/X11/xpra/fix-paths.patch @@ -0,0 +1,33 @@ +--- a/setup.py ++++ b/setup.py +@@ -1885,7 +1885,7 @@ + if OSX: + pycairo = "py3cairo" + else: +- pycairo = "pycairo" ++ pycairo = "py3cairo" + cython_add(Extension("xpra.client.gtk3.cairo_workaround", + ["xpra/client/gtk3/cairo_workaround.pyx"], + **pkgconfig(pycairo) +--- a/xpra/client/gtk3/cairo_workaround.pyx ++++ b/xpra/client/gtk3/cairo_workaround.pyx +@@ -65,7 +65,7 @@ + void cairo_surface_flush (cairo_surface_t *surface) + void cairo_surface_mark_dirty (cairo_surface_t *surface) + +-cdef extern from "pycairo/pycairo.h": ++cdef extern from "py3cairo.h": + ctypedef struct Pycairo_CAPI_t: + pass + ctypedef struct PycairoSurface: +--- a/xpra/x11/bindings/keyboard_bindings.pyx ++++ b/xpra/x11/bindings/keyboard_bindings.pyx +@@ -19,7 +19,7 @@ + + DEF PATH_MAX = 1024 + DEF DFLT_XKB_RULES_FILE = "base" +-DEF DFLT_XKB_CONFIG_ROOT = "/usr/share/X11/xkb" ++DEF DFLT_XKB_CONFIG_ROOT = "@xkeyboardconfig@/share/X11/xkb" + + ################################### + # Headers, python magic