diff options
author | Bruno Henc <hencb@protonmail.ch> | 2017-02-19 23:11:55 +0100 |
---|---|---|
committer | Michael Palimaka <kensington@gentoo.org> | 2017-03-02 22:12:27 +1100 |
commit | 5d6997c802d49ff00baf4b191b9e1b9e7f06660f (patch) | |
tree | 23956574f2d794c253bcc4b4cf8def4c02d96d0f /net-misc | |
parent | kde-frameworks/kio: remove 5.29.0-r0 (diff) | |
download | gentoo-5d6997c802d49ff00baf4b191b9e1b9e7f06660f.tar.gz gentoo-5d6997c802d49ff00baf4b191b9e1b9e7f06660f.tar.bz2 gentoo-5d6997c802d49ff00baf4b191b9e1b9e7f06660f.zip |
net-misc/tigervnc: add xorg-server-1.19 support
The latest release of tigervnc (1.7.1) doesn't
support xorg-server-1.19. Backporting a patch
and commit from the main trunk allows one to
build tigervnc-1.7.1 with the server use flag
for xorg-server-1.19.
The ebuild is tested to be building and performing
correctly with LXDE and GNOME on a localhost.
However, I recommend backporting other changes as
well to fix possible issues with xorg-server-1.19.
Since TigerVNC releases aren't as frequent,
backporting might be worth the effort.
Gentoo-bug: 603424
Diffstat (limited to 'net-misc')
-rw-r--r-- | net-misc/tigervnc/Manifest | 1 | ||||
-rw-r--r-- | net-misc/tigervnc/files/tigervnc-1.7.1-xserver119-compat.patch | 446 | ||||
-rw-r--r-- | net-misc/tigervnc/files/xserver119.patch | 95 | ||||
-rw-r--r-- | net-misc/tigervnc/tigervnc-1.7.1-r1.ebuild | 188 |
4 files changed, 730 insertions, 0 deletions
diff --git a/net-misc/tigervnc/Manifest b/net-misc/tigervnc/Manifest index f6a0feedd6cf..06e4ed53d1ff 100644 --- a/net-misc/tigervnc/Manifest +++ b/net-misc/tigervnc/Manifest @@ -2,3 +2,4 @@ DIST tigervnc-1.4.2-patches-0.1.tar.bz2 7361 SHA256 21c77708d303192108ffeef02acc DIST tigervnc-1.7.1.tar.gz 1406032 SHA256 3c021ec0bee4611020c0bcbab995b0ef2f6f1a46127a52b368827f3275527ccc SHA512 babdc362b28d7af80c7efbb3a1aadf158d7f29621afe36d785748af45e515e2718cf1011359db7b39c218770b3f3ee2767e08abc58091f018c08ba9739a3e68d WHIRLPOOL 178d6b3fb7569cfb2de5dd144031b441b02a865574928d20f1589fd6f933b9276477292182cde56e948ab75d2fc0bea4d79f71bcddb33f6057970a7caa08b2cc DIST tigervnc.png 4958 SHA256 e0828aeb92ccaaf93e690e9ee5e17803de1cb140d3ca79fb756fe08ebbc4492e SHA512 97f9a42e9b9f50f1c91de3b7d7991aa8965240fe4958d6da4e9f72f9baa4510ad615765f7c59d6e0a90c9d4b5fe53ad1547c766f2da45e4a6b6e29b03ced2b8b WHIRLPOOL bbf01f6702724bc4329d053bd3fbf856103371abce20f6f74aa3c2e5eed0eebcdcccd287788b1efbb8de3008cb484a8da5ccd1bd667727e4b0861f3bb550529c DIST xorg-server-1.18.4.tar.bz2 6009508 SHA256 278459b2c31d61a15655d95a72fb79930c480a6bb8cf9226e48a07df8b1d31c8 SHA512 2055948caa1437547ea823a70d8b24584b65338bb9f1bbf75e3ad7fd60ec9684378facaffa05b7ce496d904213cd192085a43ba889a1476d5fbc813b7e41b56b WHIRLPOOL f9ba5ffb49e6ac7ca20d64d27712a0a8f10c6560256a20e9f944d6438dc5f5eebe53daf6af110084da67a622e92874969047518e72ff181de0d64d83030d629f +DIST xorg-server-1.19.1.tar.bz2 6041792 SHA256 79ae2cf39d3f6c4a91201d8dad549d1d774b3420073c5a70d390040aa965a7fb SHA512 37d413fdd96ce6b15ae20ca5028331498586044cfc7a6ab0acb99201b04063c69bcd06867f2dc33237b244ce2870a1c5a4be3cbe4560f2461894f46f8d5dbdd7 WHIRLPOOL 9fab4118e866e11a7742ba63d7f681490d43718a329416fb742e268fdf56f348bc9f1f2b5229fbaac98ce78f41fc1e9e5aa7587ee120fcccaba752ff4bac1555 diff --git a/net-misc/tigervnc/files/tigervnc-1.7.1-xserver119-compat.patch b/net-misc/tigervnc/files/tigervnc-1.7.1-xserver119-compat.patch new file mode 100644 index 000000000000..192344257a5e --- /dev/null +++ b/net-misc/tigervnc/files/tigervnc-1.7.1-xserver119-compat.patch @@ -0,0 +1,446 @@ +From 3fed95eda27dfbeee6535f987f5d14a66f64749b Mon Sep 17 00:00:00 2001 +From: Hans de Goede <hdegoede@redhat.com> +Date: Wed, 5 Oct 2016 11:15:27 +0200 +Subject: [PATCH] Add xorg-xserver 1.19 support + +--- + unix/xserver/hw/vnc/XserverDesktop.cc | 183 ++++++++++++++++++++++++++++++++++ + unix/xserver/hw/vnc/XserverDesktop.h | 7 ++ + unix/xserver/hw/vnc/vncBlockHandler.c | 19 ++++ + unix/xserver/hw/vnc/vncExtInit.cc | 13 +++ + unix/xserver/hw/vnc/vncExtInit.h | 5 + + unix/xserver/hw/vnc/vncHooks.c | 21 +++- + unix/xserver/hw/vnc/xorg-version.h | 4 +- + unix/xserver119.patch | 95 ++++++++++++++++++ + 8 files changed, 343 insertions(+), 4 deletions(-) + create mode 100644 unix/xserver119.patch + +diff --git a/unix/xserver/hw/vnc/XserverDesktop.cc b/unix/xserver/hw/vnc/XserverDesktop.cc +index 4f82a54..8cc0b0b 100644 +--- a/unix/xserver/hw/vnc/XserverDesktop.cc ++++ b/unix/xserver/hw/vnc/XserverDesktop.cc +@@ -90,6 +90,30 @@ class FileHTTPServer : public rfb::HTTPServer { + XserverDesktop* desktop; + }; + ++#if XORG >= 119 ++extern "C" { ++/* ++ * xserver NotifyFd callbacks. Note we also expect write notifies to work, ++ * which only works with xserver >= 1.19. ++ */ ++#include "os.h" ++ ++static void HandleListenFd(int fd, int xevents, void *data) ++{ ++ XserverDesktop *desktop = (XserverDesktop *)data; ++ ++ desktop->handleListenFd(fd); ++} ++ ++static void HandleSocketFd(int fd, int xevents, void *data) ++{ ++ XserverDesktop *desktop = (XserverDesktop *)data; ++ ++ desktop->handleSocketFd(fd, xevents); ++} ++ ++} ++#endif + + XserverDesktop::XserverDesktop(int screenIndex_, + std::list<network::TcpListener*> listeners_, +@@ -111,15 +135,35 @@ XserverDesktop::XserverDesktop(int screenIndex_, + + if (!httpListeners.empty ()) + httpServer = new FileHTTPServer(this); ++ ++#if XORG >= 119 ++ for (std::list<TcpListener*>::iterator i = listeners.begin(); ++ i != listeners.end(); ++ i++) { ++ SetNotifyFd((*i)->getFd(), HandleListenFd, X_NOTIFY_READ, this); ++ } ++ ++ for (std::list<TcpListener*>::iterator i = httpListeners.begin(); ++ i != httpListeners.end(); ++ i++) { ++ SetNotifyFd((*i)->getFd(), HandleListenFd, X_NOTIFY_READ, this); ++ } ++#endif + } + + XserverDesktop::~XserverDesktop() + { + while (!listeners.empty()) { ++#if XORG >= 119 ++ RemoveNotifyFd(listeners.back()->getFd()); ++#endif + delete listeners.back(); + listeners.pop_back(); + } + while (!httpListeners.empty()) { ++#if XORG >= 119 ++ RemoveNotifyFd(listeners.back()->getFd()); ++#endif + delete httpListeners.back(); + httpListeners.pop_back(); + } +@@ -389,6 +433,140 @@ void XserverDesktop::add_copied(const rfb::Region &dest, const rfb::Point &delta + } + } + ++#if XORG >= 119 ++void XserverDesktop::handleListenFd(int fd) ++{ ++ std::list<TcpListener*>::iterator i; ++ SocketServer *fd_server = NULL; ++ bool is_http = false; ++ ++ for (i = listeners.begin(); i != listeners.end(); i++) { ++ if ((*i)->getFd() == fd) { ++ fd_server = server; ++ break; ++ } ++ } ++ if (httpServer && !fd_server) { ++ for (i = httpListeners.begin(); i != httpListeners.end(); i++) { ++ if ((*i)->getFd() == fd) { ++ fd_server = httpServer; ++ is_http = true; ++ break; ++ } ++ } ++ } ++ if (!fd_server) { ++ vlog.error("XserverDesktop::handleListenFd: Error cannot find fd"); ++ return; ++ } ++ ++ Socket* sock = (*i)->accept(); ++ sock->outStream().setBlocking(false); ++ vlog.debug("new %sclient, sock %d", is_http ? "http " : "", sock->getFd()); ++ fd_server->addSocket(sock); ++ SetNotifyFd(sock->getFd(), HandleSocketFd, X_NOTIFY_READ, this); ++} ++ ++void XserverDesktop::handleSocketFd(int fd, int xevents) ++{ ++ std::list<Socket*> sockets; ++ std::list<Socket*>::iterator i; ++ SocketServer *fd_server = NULL; ++ bool is_http = false; ++ ++ server->getSockets(&sockets); ++ for (i = sockets.begin(); i != sockets.end(); i++) { ++ if ((*i)->getFd() == fd) { ++ fd_server = server; ++ break; ++ } ++ } ++ if (httpServer && !fd_server) { ++ httpServer->getSockets(&sockets); ++ for (i = sockets.begin(); i != sockets.end(); i++) { ++ if ((*i)->getFd() == fd) { ++ fd_server = httpServer; ++ is_http = true; ++ break; ++ } ++ } ++ } ++ if (!fd_server) { ++ vlog.error("XserverDesktop::handleSocketFd: Error cannot find fd"); ++ return; ++ } ++ ++ if (xevents & X_NOTIFY_READ) ++ fd_server->processSocketReadEvent(*i); ++ ++ if (xevents & X_NOTIFY_WRITE) ++ fd_server->processSocketWriteEvent(*i); ++ ++ if ((*i)->isShutdown()) { ++ vlog.debug("%sclient gone, sock %d", is_http ? "http " : "", fd); ++ RemoveNotifyFd(fd); ++ fd_server->removeSocket(*i); ++ if (!is_http) ++ vncClientGone(fd); ++ delete (*i); ++ } ++} ++ ++void XserverDesktop::blockHandler(int* timeout) ++{ ++ // We don't have a good callback for when we can init input devices[1], ++ // so we abuse the fact that this routine will be called first thing ++ // once the dix is done initialising. ++ // [1] Technically Xvnc has InitInput(), but libvnc.so has nothing. ++ vncInitInputDevice(); ++ ++ try { ++ std::list<Socket*> sockets; ++ std::list<Socket*>::iterator i; ++ server->getSockets(&sockets); ++ for (i = sockets.begin(); i != sockets.end(); i++) { ++ int fd = (*i)->getFd(); ++ if ((*i)->isShutdown()) { ++ vlog.debug("client gone, sock %d",fd); ++ server->removeSocket(*i); ++ vncClientGone(fd); ++ delete (*i); ++ } else { ++ /* Update existing NotifyFD to listen for write (or not) */ ++ if ((*i)->outStream().bufferUsage() > 0) ++ SetNotifyFd(fd, HandleSocketFd, X_NOTIFY_READ | X_NOTIFY_WRITE, this); ++ else ++ SetNotifyFd(fd, HandleSocketFd, X_NOTIFY_READ, this); ++ } ++ } ++ if (httpServer) { ++ httpServer->getSockets(&sockets); ++ for (i = sockets.begin(); i != sockets.end(); i++) { ++ int fd = (*i)->getFd(); ++ if ((*i)->isShutdown()) { ++ vlog.debug("http client gone, sock %d",fd); ++ httpServer->removeSocket(*i); ++ delete (*i); ++ } else { ++ /* Update existing NotifyFD to listen for write (or not) */ ++ if ((*i)->outStream().bufferUsage() > 0) ++ SetNotifyFd(fd, HandleSocketFd, X_NOTIFY_READ | X_NOTIFY_WRITE, this); ++ else ++ SetNotifyFd(fd, HandleSocketFd, X_NOTIFY_READ, this); ++ } ++ } ++ } ++ ++ int nextTimeout = server->checkTimeouts(); ++ if (nextTimeout > 0 && (*timeout == -1 || nextTimeout < *timeout)) ++ *timeout = nextTimeout; ++ } catch (rdr::Exception& e) { ++ vlog.error("XserverDesktop::blockHandler: %s",e.str()); ++ } ++} ++ ++#else ++ + void XserverDesktop::readBlockHandler(fd_set* fds, struct timeval ** timeout) + { + // We don't have a good callback for when we can init input devices[1], +@@ -603,10 +781,15 @@ void XserverDesktop::writeWakeupHandler(fd_set* fds, int nfds) + } + } + ++#endif ++ + void XserverDesktop::addClient(Socket* sock, bool reverse) + { + vlog.debug("new client, sock %d reverse %d",sock->getFd(),reverse); + server->addSocket(sock, reverse); ++#if XORG >= 119 ++ SetNotifyFd(sock->getFd(), HandleSocketFd, X_NOTIFY_READ, this); ++#endif + } + + void XserverDesktop::disconnectClients() +diff --git a/unix/xserver/hw/vnc/XserverDesktop.h b/unix/xserver/hw/vnc/XserverDesktop.h +index c069028..9e77627 100644 +--- a/unix/xserver/hw/vnc/XserverDesktop.h ++++ b/unix/xserver/hw/vnc/XserverDesktop.h +@@ -38,6 +38,7 @@ + #include <rfb/VNCServerST.h> + #include <rdr/SubstitutingInStream.h> + #include "Input.h" ++#include "xorg-version.h" + + namespace rfb { + class VNCServerST; +@@ -69,10 +70,16 @@ class XserverDesktop : public rfb::SDesktop, public rfb::FullFramePixelBuffer, + const unsigned char *rgbaData); + void add_changed(const rfb::Region ®ion); + void add_copied(const rfb::Region &dest, const rfb::Point &delta); ++#if XORG >= 119 ++ void handleListenFd(int fd); ++ void handleSocketFd(int fd, int xevents); ++ void blockHandler(int* timeout); ++#else + void readBlockHandler(fd_set* fds, struct timeval ** timeout); + void readWakeupHandler(fd_set* fds, int nfds); + void writeBlockHandler(fd_set* fds, struct timeval ** timeout); + void writeWakeupHandler(fd_set* fds, int nfds); ++#endif + void addClient(network::Socket* sock, bool reverse); + void disconnectClients(); + +diff --git a/unix/xserver/hw/vnc/vncBlockHandler.c b/unix/xserver/hw/vnc/vncBlockHandler.c +index 4e44478..baebc3d 100644 +--- a/unix/xserver/hw/vnc/vncBlockHandler.c ++++ b/unix/xserver/hw/vnc/vncBlockHandler.c +@@ -30,6 +30,23 @@ + + #include "vncExtInit.h" + #include "vncBlockHandler.h" ++#include "xorg-version.h" ++ ++#if XORG >= 119 ++ ++static void vncBlockHandler(void* data, void* timeout) ++{ ++ vncCallBlockHandlers(timeout); ++} ++ ++void vncRegisterBlockHandlers(void) ++{ ++ if (!RegisterBlockAndWakeupHandlers(vncBlockHandler, ++ (ServerWakeupHandlerProcPtr)NoopDDA, 0)) ++ FatalError("RegisterBlockAndWakeupHandlers() failed\n"); ++} ++ ++#else + + static void vncBlockHandler(void * data, OSTimePtr t, void * readmask); + static void vncWakeupHandler(void * data, int nfds, void * readmask); +@@ -144,3 +161,5 @@ static void vncWriteWakeupHandlerFallback(void) + + vncWriteWakeupHandler(ret, &fallbackFds); + } ++ ++#endif +diff --git a/unix/xserver/hw/vnc/vncExtInit.cc b/unix/xserver/hw/vnc/vncExtInit.cc +index dea3cb8..9d70e44 100644 +--- a/unix/xserver/hw/vnc/vncExtInit.cc ++++ b/unix/xserver/hw/vnc/vncExtInit.cc +@@ -249,6 +249,17 @@ int vncExtensionIsActive(int scrIdx) + return (desktop[scrIdx] != NULL); + } + ++#if XORG >= 119 ++ ++void vncCallBlockHandlers(int* timeout) ++{ ++ for (int scr = 0; scr < vncGetScreenCount(); scr++) ++ if (desktop[scr]) ++ desktop[scr]->blockHandler(timeout); ++} ++ ++#else ++ + void vncCallReadBlockHandlers(fd_set * fds, struct timeval ** timeout) + { + for (int scr = 0; scr < vncGetScreenCount(); scr++) +@@ -277,6 +288,8 @@ void vncCallWriteWakeupHandlers(fd_set * fds, int nfds) + desktop[scr]->writeWakeupHandler(fds, nfds); + } + ++#endif ++ + int vncGetAvoidShiftNumLock(void) + { + return (bool)avoidShiftNumLock; +diff --git a/unix/xserver/hw/vnc/vncExtInit.h b/unix/xserver/hw/vnc/vncExtInit.h +index 9785d11..3164528 100644 +--- a/unix/xserver/hw/vnc/vncExtInit.h ++++ b/unix/xserver/hw/vnc/vncExtInit.h +@@ -22,6 +22,7 @@ + #include <stdint.h> + #include <stddef.h> + #include <sys/select.h> ++#include "xorg-version.h" + + // Only from C++ + #ifdef __cplusplus +@@ -50,10 +51,14 @@ extern int vncInetdSock; + void vncExtensionInit(void); + int vncExtensionIsActive(int scrIdx); + ++#if XORG >= 119 ++void vncCallBlockHandlers(int* timeout); ++#else + void vncCallReadBlockHandlers(fd_set * fds, struct timeval ** timeout); + void vncCallReadWakeupHandlers(fd_set * fds, int nfds); + void vncCallWriteBlockHandlers(fd_set * fds, struct timeval ** timeout); + void vncCallWriteWakeupHandlers(fd_set * fds, int nfds); ++#endif + + int vncGetAvoidShiftNumLock(void); + +diff --git a/unix/xserver/hw/vnc/vncHooks.c b/unix/xserver/hw/vnc/vncHooks.c +index 22ea9ea..29f3f8b 100644 +--- a/unix/xserver/hw/vnc/vncHooks.c ++++ b/unix/xserver/hw/vnc/vncHooks.c +@@ -128,9 +128,11 @@ static Bool vncHooksDisplayCursor(DeviceIntPtr pDev, + #if XORG <= 112 + static void vncHooksBlockHandler(int i, pointer blockData, pointer pTimeout, + pointer pReadmask); +-#else ++#elif XORG <= 118 + static void vncHooksBlockHandler(ScreenPtr pScreen, void * pTimeout, + void * pReadmask); ++#else ++static void vncHooksBlockHandler(ScreenPtr pScreen, void * pTimeout); + #endif + #ifdef RENDER + static void vncHooksComposite(CARD8 op, PicturePtr pSrc, PicturePtr pMask, +@@ -716,9 +718,11 @@ static Bool vncHooksDisplayCursor(DeviceIntPtr pDev, + #if XORG <= 112 + static void vncHooksBlockHandler(int i, pointer blockData, pointer pTimeout, + pointer pReadmask) +-#else ++#elif XORG <= 118 + static void vncHooksBlockHandler(ScreenPtr pScreen_, void * pTimeout, + void * pReadmask) ++#else ++static void vncHooksBlockHandler(ScreenPtr pScreen_, void * pTimeout) + #endif + { + #if XORG <= 112 +@@ -731,8 +735,10 @@ static void vncHooksBlockHandler(ScreenPtr pScreen_, void * pTimeout, + + #if XORG <= 112 + (*pScreen->BlockHandler) (i, blockData, pTimeout, pReadmask); +-#else ++#elif XORG <= 118 + (*pScreen->BlockHandler) (pScreen, pTimeout, pReadmask); ++#else ++ (*pScreen->BlockHandler) (pScreen, pTimeout); + #endif + + vncHooksScreen->ignoreHooks--; +@@ -1033,12 +1039,21 @@ static void vncHooksCopyClip(GCPtr dst, GCPtr src) { + + // Unwrap and rewrap helpers + ++#if XORG >= 116 ++#define GC_OP_PROLOGUE(pGC, name)\ ++ vncHooksGCPtr pGCPriv = vncHooksGCPrivate(pGC);\ ++ const GCFuncs *oldFuncs = pGC->funcs;\ ++ pGC->funcs = pGCPriv->wrappedFuncs;\ ++ pGC->ops = pGCPriv->wrappedOps; \ ++ DBGPRINT((stderr,"vncHooks" #name " called\n")) ++#else + #define GC_OP_PROLOGUE(pGC, name)\ + vncHooksGCPtr pGCPriv = vncHooksGCPrivate(pGC);\ + GCFuncs *oldFuncs = pGC->funcs;\ + pGC->funcs = pGCPriv->wrappedFuncs;\ + pGC->ops = pGCPriv->wrappedOps; \ + DBGPRINT((stderr,"vncHooks" #name " called\n")) ++#endif + + #define GC_OP_EPILOGUE(pGC)\ + pGCPriv->wrappedOps = pGC->ops;\ +diff --git a/unix/xserver/hw/vnc/xorg-version.h b/unix/xserver/hw/vnc/xorg-version.h +index 60610cb..9d1c0eb 100644 +--- a/unix/xserver/hw/vnc/xorg-version.h ++++ b/unix/xserver/hw/vnc/xorg-version.h +@@ -50,8 +50,10 @@ + #define XORG 117 + #elif XORG_VERSION_CURRENT < ((1 * 10000000) + (18 * 100000) + (99 * 1000)) + #define XORG 118 ++#elif XORG_VERSION_CURRENT < ((1 * 10000000) + (19 * 100000) + (99 * 1000)) ++#define XORG 119 + #else +-#error "X.Org newer than 1.18 is not supported" ++#error "X.Org newer than 1.19 is not supported" + #endif + + #endif diff --git a/net-misc/tigervnc/files/xserver119.patch b/net-misc/tigervnc/files/xserver119.patch new file mode 100644 index 000000000000..614f104a4d4d --- /dev/null +++ b/net-misc/tigervnc/files/xserver119.patch @@ -0,0 +1,95 @@ +diff -up xserver/configure.ac.xserver116-rebased xserver/configure.ac +--- xserver/configure.ac.xserver116-rebased 2016-09-29 13:14:45.595441590 +0200 ++++ xserver/configure.ac 2016-09-29 13:14:45.631442006 +0200 +@@ -74,6 +74,7 @@ dnl forcing an entire recompile.x + AC_CONFIG_HEADERS(include/version-config.h) + + AM_PROG_AS ++AC_PROG_CXX + AC_PROG_LN_S + LT_PREREQ([2.2]) + LT_INIT([disable-static win32-dll]) +@@ -1863,6 +1864,10 @@ if test "x$XVFB" = xyes; then + AC_SUBST([XVFB_SYS_LIBS]) + fi + ++dnl Xvnc DDX ++AC_SUBST([XVNC_CPPFLAGS], ["-DHAVE_DIX_CONFIG_H $XSERVER_CFLAGS"]) ++AC_SUBST([XVNC_LIBS], ["$FB_LIB $FIXES_LIB $XEXT_LIB $CONFIG_LIB $DBE_LIB $RECORD_LIB $GLX_LIBS $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $DRI3_LIB $PRESENT_LIB $MIEXT_SYNC_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB $MAIN_LIB"]) ++AC_SUBST([XVNC_SYS_LIBS], ["$GLX_SYS_LIBS"]) + + dnl Xnest DDX + +@@ -1898,6 +1903,8 @@ if test "x$XORG" = xauto; then + fi + AC_MSG_RESULT([$XORG]) + ++AC_DEFINE_UNQUOTED(XORG_VERSION_CURRENT, [$VENDOR_RELEASE], [Current Xorg version]) ++ + if test "x$XORG" = xyes; then + XORG_DDXINCS='-I$(top_srcdir)/hw/xfree86 -I$(top_srcdir)/hw/xfree86/include -I$(top_srcdir)/hw/xfree86/common' + XORG_OSINCS='-I$(top_srcdir)/hw/xfree86/os-support -I$(top_srcdir)/hw/xfree86/os-support/bus -I$(top_srcdir)/os' +@@ -2116,7 +2123,6 @@ if test "x$XORG" = xyes; then + AC_DEFINE(XORG_SERVER, 1, [Building Xorg server]) + AC_DEFINE(XORGSERVER, 1, [Building Xorg server]) + AC_DEFINE(XFree86Server, 1, [Building XFree86 server]) +- AC_DEFINE_UNQUOTED(XORG_VERSION_CURRENT, [$VENDOR_RELEASE], [Current Xorg version]) + AC_DEFINE(NEED_XF86_TYPES, 1, [Need XFree86 typedefs]) + AC_DEFINE(NEED_XF86_PROTOTYPES, 1, [Need XFree86 helper functions]) + AC_DEFINE(__XSERVERNAME__, "Xorg", [Name of X server]) +@@ -2691,6 +2697,7 @@ hw/dmx/Makefile + hw/dmx/man/Makefile + hw/vfb/Makefile + hw/vfb/man/Makefile ++hw/vnc/Makefile + hw/xnest/Makefile + hw/xnest/man/Makefile + hw/xwin/Makefile +diff -up xserver/hw/Makefile.am.xserver116-rebased xserver/hw/Makefile.am +--- xserver/hw/Makefile.am.xserver116-rebased 2016-09-29 13:14:45.601441659 +0200 ++++ xserver/hw/Makefile.am 2016-09-29 13:14:45.631442006 +0200 +@@ -38,7 +38,8 @@ SUBDIRS = \ + $(DMX_SUBDIRS) \ + $(KDRIVE_SUBDIRS) \ + $(XQUARTZ_SUBDIRS) \ +- $(XWAYLAND_SUBDIRS) ++ $(XWAYLAND_SUBDIRS) \ ++ vnc + + DIST_SUBDIRS = dmx xfree86 vfb xnest xwin xquartz kdrive xwayland + +diff -up xserver/mi/miinitext.c.xserver116-rebased xserver/mi/miinitext.c +--- xserver/mi/miinitext.c.xserver116-rebased 2016-09-29 13:14:45.618441855 +0200 ++++ xserver/mi/miinitext.c 2016-09-29 13:14:45.631442006 +0200 +@@ -114,6 +114,10 @@ SOFTWARE. + #include "micmap.h" + #include "globals.h" + ++#ifdef TIGERVNC ++extern void vncExtensionInit(INITARGS); ++#endif ++ + /* The following is only a small first step towards run-time + * configurable extensions. + */ +@@ -238,6 +242,9 @@ EnableDisableExtensionError(const char * + + /* List of built-in (statically linked) extensions */ + static const ExtensionModule staticExtensions[] = { ++#ifdef TIGERVNC ++ {vncExtensionInit, "VNC-EXTENSION", NULL}, ++#endif + {GEExtensionInit, "Generic Event Extension", &noGEExtension}, + {ShapeExtensionInit, "SHAPE", NULL}, + #ifdef MITSHM +--- xserver/include/os.h~ 2016-10-03 09:07:29.000000000 +0200 ++++ xserver/include/os.h 2016-10-03 14:13:00.013654506 +0200 +@@ -621,7 +621,7 @@ + extern _X_EXPORT void + LogClose(enum ExitCode error); + extern _X_EXPORT Bool +-LogSetParameter(LogParameter param, int value); ++LogSetParameter(enum _LogParameter param, int value); + extern _X_EXPORT void + LogVWrite(int verb, const char *f, va_list args) + _X_ATTRIBUTE_PRINTF(2, 0); diff --git a/net-misc/tigervnc/tigervnc-1.7.1-r1.ebuild b/net-misc/tigervnc/tigervnc-1.7.1-r1.ebuild new file mode 100644 index 000000000000..164dbb1670fe --- /dev/null +++ b/net-misc/tigervnc/tigervnc-1.7.1-r1.ebuild @@ -0,0 +1,188 @@ +# Copyright 1999-2017 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +EAPI="6" + +CMAKE_IN_SOURCE_BUILD=1 + +inherit autotools cmake-utils eutils flag-o-matic java-pkg-opt-2 systemd + +XSERVER_VERSION="1.19.1" + +DESCRIPTION="Remote desktop viewer display system" +HOMEPAGE="http://www.tigervnc.org" +SRC_URI="https://github.com/TigerVNC/tigervnc/archive/v${PV}.tar.gz -> ${P}.tar.gz + https://dev.gentoo.org/~armin76/dist/tigervnc-1.4.2-patches-0.1.tar.bz2 + mirror://gentoo/${PN}.png + server? ( ftp://ftp.freedesktop.org/pub/xorg/individual/xserver/xorg-server-${XSERVER_VERSION}.tar.bz2 )" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~mips ~ppc ~ppc64 ~sh ~sparc ~x86" +IUSE="+drm gnutls java +opengl pam server +xorgmodule" + +CDEPEND="virtual/jpeg:0 + sys-libs/zlib + >=x11-libs/libXtst-1.0.99.2 + >=x11-libs/fltk-1.3.1 + gnutls? ( net-libs/gnutls:= ) + pam? ( virtual/pam ) + server? ( + dev-lang/perl + >=x11-libs/libXi-1.2.99.1 + >=x11-libs/libXfont-1.4.2 + >=x11-libs/libxkbfile-1.0.4 + x11-libs/libXrender + >=x11-libs/pixman-0.27.2 + >=x11-apps/xauth-1.0.3 + x11-apps/xsetroot + >=x11-misc/xkeyboard-config-2.4.1-r3 + opengl? ( >=app-eselect/eselect-opengl-1.3.1-r1 ) + xorgmodule? ( =x11-base/xorg-server-${XSERVER_VERSION%.*}* ) + drm? ( x11-libs/libdrm ) + )" + +RDEPEND="${CDEPEND} + java? ( >=virtual/jre-1.5:* ) + !net-misc/vnc + !net-misc/tightvnc + !net-misc/xf4vnc" + +DEPEND="${CDEPEND} + amd64? ( dev-lang/nasm ) + x86? ( dev-lang/nasm ) + >=x11-proto/inputproto-2.2.99.1 + >=x11-proto/xextproto-7.2.99.901 + >=x11-proto/xproto-7.0.26 + java? ( >=virtual/jdk-1.5 ) + server? ( + virtual/pkgconfig + media-fonts/font-util + x11-misc/util-macros + >=x11-proto/bigreqsproto-1.1.0 + >=x11-proto/compositeproto-0.4 + >=x11-proto/damageproto-1.1 + >=x11-proto/fixesproto-5.0 + >=x11-proto/fontsproto-2.1.3 + >=x11-proto/glproto-1.4.17 + >=x11-proto/randrproto-1.4.0 + >=x11-proto/renderproto-0.11 + >=x11-proto/resourceproto-1.2.0 + >=x11-proto/scrnsaverproto-1.1 + >=x11-proto/videoproto-2.2.2 + >=x11-proto/xcmiscproto-1.2.0 + >=x11-proto/xineramaproto-1.1.3 + >=x11-libs/xtrans-1.3.3 + >=x11-proto/dri2proto-2.8 + opengl? ( >=media-libs/mesa-10.3.4-r1 ) + )" + +PATCHES=( + "${WORKDIR}"/patches/010_libvnc-os.patch + "${WORKDIR}"/patches/030_manpages.patch + "${WORKDIR}"/patches/055_xstartup.patch +) + +src_prepare() { + if use server ; then + cp -r "${WORKDIR}"/xorg-server-${XSERVER_VERSION}/. unix/xserver || die + fi + + default + + if use server; then + eapply "${FILESDIR}/${PN}-1.7.1-xserver119-compat.patch" + cd unix/xserver || die + eapply "${FILESDIR}/xserver119.patch" + eautoreconf + fi +} + +src_configure() { + use arm || use hppa && append-flags "-fPIC" + + local mycmakeargs=( + -DENABLE_GNUTLS=$(usex gnutls) + -DENABLE_PAM=$(usex pam) + -DBUILD_JAVA=$(usex java) + ) + + cmake-utils_src_configure + + if use server; then + cd unix/xserver || die + econf \ + $(use_enable opengl glx) \ + $(use_enable drm libdrm) \ + --disable-config-hal \ + --disable-config-udev \ + --disable-devel-docs \ + --disable-dmx \ + --disable-dri \ + --disable-dri3 \ + --disable-glamor \ + --disable-kdrive \ + --disable-libunwind \ + --disable-linux-acpi \ + --disable-record \ + --disable-selective-werror \ + --disable-silent-rules \ + --disable-static \ + --disable-tslib \ + --disable-unit-tests \ + --disable-xephyr \ + --disable-xinerama \ + --disable-xnest \ + --disable-xorg \ + --disable-xvfb \ + --disable-xwin \ + --disable-xwayland \ + --enable-dri2 \ + --with-pic \ + --without-dtrace \ + --disable-present \ + --disable-unit-tests + fi +} + +src_compile() { + cmake-utils_src_compile + + if use server; then + # deps of the vnc module and the module itself + local d subdirs=( + fb xfixes Xext dbe $(usex opengl glx "") randr render damageext miext Xi xkb + composite dix mi os hw/vnc + ) + for d in "${subdirs[@]}"; do + emake -C unix/xserver/"${d}" + done + fi +} + +src_install() { + cmake-utils_src_install + + newicon "${DISTDIR}"/tigervnc.png vncviewer.png + make_desktop_entry vncviewer vncviewer vncviewer Network + + if use server ; then + emake -C unix/xserver/hw/vnc DESTDIR="${D}" install + if ! use xorgmodule; then + rm -r "${ED%/}"/usr/$(get_libdir)/xorg || die + else + rm "${ED%/}"/usr/$(get_libdir)/xorg/modules/extensions/libvnc.la || die + fi + + newconfd "${FILESDIR}"/${PN}.confd ${PN} + newinitd "${FILESDIR}"/${PN}.initd ${PN} + systemd_douserunit contrib/systemd/user/vncserver@.service + else + local f + cd "${ED}" || die + for f in vncserver vncpasswd x0vncserver vncconfig; do + rm usr/bin/$f || die + rm usr/share/man/man1/$f.1 || die + done + fi +} |