mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-09-24 04:59:14 -07:00
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
This commit is contained in:
committed by
Michael Palimaka
parent
9aa601946b
commit
5d6997c802
@@ -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
|
||||
|
||||
446
net-misc/tigervnc/files/tigervnc-1.7.1-xserver119-compat.patch
Normal file
446
net-misc/tigervnc/files/tigervnc-1.7.1-xserver119-compat.patch
Normal file
@@ -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
|
||||
95
net-misc/tigervnc/files/xserver119.patch
Normal file
95
net-misc/tigervnc/files/xserver119.patch
Normal file
@@ -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);
|
||||
188
net-misc/tigervnc/tigervnc-1.7.1-r1.ebuild
Normal file
188
net-misc/tigervnc/tigervnc-1.7.1-r1.ebuild
Normal file
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user