summaryrefslogtreecommitdiff
path: root/net-misc/tigervnc
diff options
context:
space:
mode:
Diffstat (limited to 'net-misc/tigervnc')
-rw-r--r--net-misc/tigervnc/Manifest15
-rw-r--r--net-misc/tigervnc/files/tigervnc-1.7.1-xserver119-compat.patch446
-rw-r--r--net-misc/tigervnc/files/tigervnc.confd9
-rw-r--r--net-misc/tigervnc/files/tigervnc.initd72
-rw-r--r--net-misc/tigervnc/files/xserver119.patch95
-rw-r--r--net-misc/tigervnc/metadata.xml20
-rw-r--r--net-misc/tigervnc/tigervnc-1.7.1-r2.ebuild189
-rw-r--r--net-misc/tigervnc/tigervnc-1.7.1-r4.ebuild192
-rw-r--r--net-misc/tigervnc/tigervnc-1.8.0.ebuild189
9 files changed, 1227 insertions, 0 deletions
diff --git a/net-misc/tigervnc/Manifest b/net-misc/tigervnc/Manifest
new file mode 100644
index 000000000000..66e42fd5640a
--- /dev/null
+++ b/net-misc/tigervnc/Manifest
@@ -0,0 +1,15 @@
+AUX tigervnc-1.7.1-xserver119-compat.patch 13889 SHA256 b40580c3fa81285da14cfe3b0377165682d6f49785a6af36812fc7477970844e SHA512 3be73f862020220b82de65e03c5678c623b2295f44a70afd577136b0c8358b8512b08604753c74dcd7a49977ed164e6a2e76f6c400b304f8aad7f8b2d999e544 WHIRLPOOL e4e47da39c18c2d64e7bc2b92c72334ccef2346542173fc58291e7fb2e201273c94f7ea8fa33b49a8fdc269f3a048a9343b4628b926036176f124d167b66f91a
+AUX tigervnc.confd 346 SHA256 48b6ae4f3e9e528b3cd4bc1349ceed3cd1a403ab0f3a2a8dd57a4769f88ceafc SHA512 204ab170de8b76d72d6fd2c3fcfab19cb2750eca231956f53cdfc81270baaef9ae31b08ce53b103a737045ccca8ce0b7f9649fb7cbd582ee0acff437ff5c85b4 WHIRLPOOL 9911713196cb57057b2200c0303b832fe7708520453cbf4ca1b9ed945738c734afff3f4d1f96e361e487e59b39f3ef44ac939234e1ea56e2e9e4e612cd5d70ee
+AUX tigervnc.initd 1974 SHA256 8e516bc12f88e238b1aebac39ed47a6123b4130d5977ca3fb4d7fcc0c04f32a0 SHA512 b0d43352551cf3cbcfe404dcbfe5617965e08674d5af0f7ec801c9124d7ab0279d9bb8f76b6141b5ad96a70df9c99d5b6cfff0ba29211a37a344906d105e1bc8 WHIRLPOOL 3846dd60cf6193a69bd4813152cad24c893e53591a3154edeac74f5ad1aa2af3fa232a313b7584ccc5e32b5832df8fe2b6f11325aad06d7969ad688d40e4f35b
+AUX xserver119.patch 3681 SHA256 7f130baaf463dfae50206840a0e216236154d7ba43c8d9900df1b721358079da SHA512 531c3b99c5402a66f95ed5743dd37ae9de493cd9bb2e63b39afdd2d536ae438b3c5e2618226f070adc62e41b169837ae7a3302b7bb131b181361a7b142a9e93f WHIRLPOOL 10df9ab432cd342e6d19b2c0cb0d552bb876fb96ed3a71424369a68a73530708af94af3666df3dafdd9d368c16f65a078b375ef8a10d89faa77250ebd48199b1
+DIST tigervnc-1.4.2-patches-0.1.tar.bz2 7361 SHA256 21c77708d303192108ffeef02acc0e7310461b4910bb49ae78c8a944e52c436e SHA512 86235aba8e735e4afed21d2940cee8ea2f4f1bc951db79aaf481ae79ab81d4518add6be2619ce9371f77fd068c8dbf069754ecc0168e5afe9e8505d3d61cc573 WHIRLPOOL 97a8c1719e7959ce8abd29f9ad249c7acf1b5a21ef36c0ce00b6e3bae8e6e78e9cdb0b34a23da6bd44c9e513e95f22716b286c5ec57bf1a854101c4810c7b481
+DIST tigervnc-1.7.1.tar.gz 1406032 SHA256 3c021ec0bee4611020c0bcbab995b0ef2f6f1a46127a52b368827f3275527ccc SHA512 babdc362b28d7af80c7efbb3a1aadf158d7f29621afe36d785748af45e515e2718cf1011359db7b39c218770b3f3ee2767e08abc58091f018c08ba9739a3e68d WHIRLPOOL 178d6b3fb7569cfb2de5dd144031b441b02a865574928d20f1589fd6f933b9276477292182cde56e948ab75d2fc0bea4d79f71bcddb33f6057970a7caa08b2cc
+DIST tigervnc-1.8.0.tar.gz 1433830 SHA256 9951dab0e10f8de03996ec94bec0d938da9f36d48dca8c954e8bbc95c16338f8 SHA512 c066e9781622e342667bf03fd6bbb94ed17b412b07c46764b7b73b2eb308c285e865cf1e901f7d218db05a0486fb3f8877e75da3c939ef0d020247713779327a WHIRLPOOL 4001182ec2da3551b0eb2d6ee863c225340b474dc6d32cbe4c0941e421852a10913ee80706009b1a59043b6983ac2bc42f070d1a5aa97eefe1cff3c97497b2f0
+DIST tigervnc.png 4958 SHA256 e0828aeb92ccaaf93e690e9ee5e17803de1cb140d3ca79fb756fe08ebbc4492e SHA512 97f9a42e9b9f50f1c91de3b7d7991aa8965240fe4958d6da4e9f72f9baa4510ad615765f7c59d6e0a90c9d4b5fe53ad1547c766f2da45e4a6b6e29b03ced2b8b WHIRLPOOL bbf01f6702724bc4329d053bd3fbf856103371abce20f6f74aa3c2e5eed0eebcdcccd287788b1efbb8de3008cb484a8da5ccd1bd667727e4b0861f3bb550529c
+DIST xorg-server-1.19.1.tar.bz2 6041792 SHA256 79ae2cf39d3f6c4a91201d8dad549d1d774b3420073c5a70d390040aa965a7fb SHA512 37d413fdd96ce6b15ae20ca5028331498586044cfc7a6ab0acb99201b04063c69bcd06867f2dc33237b244ce2870a1c5a4be3cbe4560f2461894f46f8d5dbdd7 WHIRLPOOL 9fab4118e866e11a7742ba63d7f681490d43718a329416fb742e268fdf56f348bc9f1f2b5229fbaac98ce78f41fc1e9e5aa7587ee120fcccaba752ff4bac1555
+EBUILD tigervnc-1.7.1-r2.ebuild 4637 SHA256 249210856391fe17a3d7b07056d38aa8fbe843be20959091effb7da3a3677e39 SHA512 4ccc3ece00c4c9bd4e35f7160cd85effb66c3f2c90c844447e3e1a02cd009bc435cf9be58e5a6b478be11b832adcc0f4bc58385d2cb4f6d8510b0eefa9c155c7 WHIRLPOOL 13aef55fa4da3b483f9f4c35a24d4527cf82aeae3955e4dddae67f890f4facaf80571e3223360ac5c5818ac664da47cea5db9ad3d52e5fc165de868f73ad098f
+EBUILD tigervnc-1.7.1-r4.ebuild 4722 SHA256 466b11c47fbc7147e068f4ac65da00b61603ee347040c7c5b65a43589cace47d SHA512 8852901f22f45a263f6d5b7d6a58e56a926306fab94836826fbcb65a6ba3428c82a7b25db6476a6dbb3428b4374684649a18959cc029aa5574e9ca20113d5286 WHIRLPOOL db1ce346de70416b12bd0b7bd0a50aae773999e6d37495894322f60ae83941fec8a75a9f680b0dabefbb8e01d8ef1d3a14b73754eec1c0e582d67dd3ed45d672
+EBUILD tigervnc-1.8.0.ebuild 4526 SHA256 79754f7e609b3444ec63d458849591be416dfb3dae70bb9c066c9f354a31e116 SHA512 b0749605633022f185df75d65f04f04ebf21f1d9a0bdbb06f3a19947c9c9167e93b3e0e2ca19602b7ffe56763008cfe6156cce0949335328ff6f15a56899c6b2 WHIRLPOOL d72e2cb6f58db5c22ad46052e7d1a0071775375d9f64858cc146f02c381f9b726e1f1611fc4e18faa7ee842749a853b995392e9eb26c38a91324da7b49b45e2b
+MISC ChangeLog 8410 SHA256 bd682137413d956f17d33752f2cc480623e91c92a6e209bd902ba173fe451809 SHA512 877b097f78fb01467b31decde5dfd34b66b984feb5df398effc3447b1fe90800e380d80919babad8deb6ba54d828f8e6542915f46dda24e42495221aed2c57d6 WHIRLPOOL 47292baea39ebb7a25b1e2d71a4721be78e2c5cf48e4d0bb6240a452e93824f70283afcf9c443cd11ee9f3feec8bfdcf37c0f897258de23e7f763629a886d27e
+MISC ChangeLog-2015 28816 SHA256 2accf9b750570af369f0a2b8bb23db0a4f032fbf9ff5a8761ddbc604ec74d281 SHA512 1d645ee4e13d8639b6e27685b78e5b0a41167bd76ab5e4375404e6e106548dff000fe2b309a249557afdbdb4dc6dc7dbaf3ba15c3acb9088a71d9520490f1b68 WHIRLPOOL 20f0137d3ef189d90bdf7663c82172cb54c25149539e709dcd4b1201edecafa6256bb20097d3081d77778529f22c120767b7c30cfcf4abd8c2b33cba325d63ac
+MISC metadata.xml 671 SHA256 d98d7ab061b2970005b38a491a5c6cbf46e81e4a149b540ec3e390c715c083b0 SHA512 e2416162e344db1025f15b89754c6f84f9b69217b86abe15bb6d048ae80bcc0a84df6943ada53c71f6bc6236f13f7add3e5f03a9e52cc61da060a391b8a69a44 WHIRLPOOL d9a1ca79d5f1b3340ff40db17cb88a21e7c578250ebab1758fb0ee73e1687e9620bb819a3fb3142d43e77778cc1f978b6deab6bbd62364e10d7af3a042eae356
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 &region);
+ 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/tigervnc.confd b/net-misc/tigervnc/files/tigervnc.confd
new file mode 100644
index 000000000000..e651dbbe7889
--- /dev/null
+++ b/net-misc/tigervnc/files/tigervnc.confd
@@ -0,0 +1,9 @@
+# Config file for /etc/init.d/tigervnc
+
+# Specify the user(s) Xvnc(1) should be run for. The syntax is: "username:display".
+# example: "DISPLAYS="foo:1 bar:2" You can specify more users separated by space.
+# DISPLAYS="myuser:1"
+
+# Specify any of vncserver(1) and Xvnc(1) options. See the respective man pages for more information.
+# VNC_OPTS=""
+
diff --git a/net-misc/tigervnc/files/tigervnc.initd b/net-misc/tigervnc/files/tigervnc.initd
new file mode 100644
index 000000000000..06a154257e6f
--- /dev/null
+++ b/net-misc/tigervnc/files/tigervnc.initd
@@ -0,0 +1,72 @@
+#!/sbin/openrc-run
+# Copyright 1999-2014 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License, v2 or later
+
+depend() {
+ need net
+}
+
+checkconfig() {
+ if [ -n "${DISPLAYS}" ]; then
+ if [ $1 = "start" ]; then
+ local user
+ for user in $DISPLAYS; do
+ if eval [ ! -f "~${user%%:*}/.vnc/passwd" ]; then
+ eerror "There are no passwords defined for user ${user%%:*}."
+ return 1
+ elif [ -e "/tmp/.X11-unix/X${user##*:}" ]; then
+ eerror "Display :${user##*:} appears to be already in use because of /tmp/.X11-unix/X${user##*:}"
+ eerror "Remove this file if there is no X server $HOSTNAME:${user##*:}"
+ return 1
+ elif [ -e "/tmp/.X${user##*:}-lock" ]; then
+ eerror "Display :${user##*:} appears to be already in use because of /tmp/.X${user##*:}-lock"
+ eerror "Remove this file if there is no X server $HOSTNAME:${user##*:}"
+ return 1
+ fi
+ done
+ fi
+ return 0
+ else
+ eerror 'Please define $DISPLAYS in /etc/conf.d/tigervnc'
+ return 1
+ fi
+}
+
+start() {
+ checkconfig start || return 1
+ ebegin "Starting TigerVNC server"
+ for user in $DISPLAYS; do
+ usrname=${user%%:*}
+ usropts=VNC_OPTS_${usrname}
+ usrdisp=${user##*:}
+ usrvar=$usropts"["$usrdisp"]"
+ [ -z ${!usrvar} ] && vnc_opts=$VNC_OPTS || vnc_opts=${!usrvar}
+
+ # A user may have an invalid shell, so we default to /bin/sh if its the case
+ if [ -x /usr/bin/getent ] ; then
+ usrshell=`getent passwd ${user%%:*} | cut -d: -f 7`
+ case "$usrshell" in
+ */bash|*/ksh|*/sh|*/csh|*/tcsh) ;;
+ *) shell="-s /bin/sh" ;;
+ esac
+ echo $usrshell $shell
+ fi
+
+ su ${shell} ${user%%:*} -c "source /etc/profile && cd ~${user%%:*} && vncserver :${user##*:} $vnc_opts" &>/dev/null
+ done
+ eend $?
+}
+
+stop() {
+ checkconfig stop || return 2
+ ebegin "Stopping TigerVNC server"
+ for user in $DISPLAYS; do
+ su -s /bin/sh ${user%%:*} -c "vncserver -kill :${user##*:}" &>/dev/null
+ done
+ eend $?
+}
+
+restart() {
+ svc_stop
+ svc_start
+}
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/metadata.xml b/net-misc/tigervnc/metadata.xml
new file mode 100644
index 000000000000..8dfc0c1b9f1d
--- /dev/null
+++ b/net-misc/tigervnc/metadata.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>otakuto.gentoo@gmail.com</email>
+ <name>Takuto Yoshida</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>proxy-maint@gentoo.org</email>
+ <name>Proxy Maintainers</name>
+ </maintainer>
+ <use>
+ <flag name="drm">build with DRM support</flag>
+ <flag name="server">Build TigerVNC server</flag>
+ <flag name="xorgmodule">Build the Xorg module</flag>
+ </use>
+ <upstream>
+ <remote-id type="github">TigerVNC/tigervnc</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/net-misc/tigervnc/tigervnc-1.7.1-r2.ebuild b/net-misc/tigervnc/tigervnc-1.7.1-r2.ebuild
new file mode 100644
index 000000000000..297e4521dbd1
--- /dev/null
+++ b/net-misc/tigervnc/tigervnc-1.7.1-r2.ebuild
@@ -0,0 +1,189 @@
+# 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.31
+ x11-libs/libXfont2
+ 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
+}
diff --git a/net-misc/tigervnc/tigervnc-1.7.1-r4.ebuild b/net-misc/tigervnc/tigervnc-1.7.1-r4.ebuild
new file mode 100644
index 000000000000..40b8ab883d80
--- /dev/null
+++ b/net-misc/tigervnc/tigervnc-1.7.1-r4.ebuild
@@ -0,0 +1,192 @@
+# 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 nls 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:= )
+ nls? ( virtual/libiconv )
+ 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}
+ !net-misc/tightvnc
+ !net-misc/vnc
+ !net-misc/xf4vnc
+ java? ( >=virtual/jre-1.5:* )"
+
+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.31
+ x11-libs/libXfont2
+ nls? ( sys-devel/gettext )
+ 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_NLS=$(usex nls)
+ -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 x0vncserver vncconfig; do
+ rm usr/bin/$f || die
+ rm usr/share/man/man1/$f.1 || die
+ done
+ fi
+}
diff --git a/net-misc/tigervnc/tigervnc-1.8.0.ebuild b/net-misc/tigervnc/tigervnc-1.8.0.ebuild
new file mode 100644
index 000000000000..e4ab6ef621c3
--- /dev/null
+++ b/net-misc/tigervnc/tigervnc-1.8.0.ebuild
@@ -0,0 +1,189 @@
+# 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
+ 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 nls java +opengl pam server systemd +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:= )
+ nls? ( virtual/libiconv )
+ 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}
+ !net-misc/tightvnc
+ !net-misc/vnc
+ !net-misc/xf4vnc
+ java? ( >=virtual/jre-1.5:* )"
+
+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.31
+ x11-libs/libXfont2
+ nls? ( sys-devel/gettext )
+ 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/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
+ 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_NLS=$(usex nls)
+ -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
+
+ if use server; then
+ emake -C unix/xserver/hw/vnc DESTDIR="${D}" install
+ if ! use xorgmodule; then
+ rm -rv "${ED%/}"/usr/$(get_libdir)/xorg || die
+ else
+ rm -v "${ED%/}"/usr/$(get_libdir)/xorg/modules/extensions/libvnc.la || die
+ fi
+
+ newconfd "${FILESDIR}"/${PN}.confd ${PN}
+ if use systemd; then
+ systemd_douserunit contrib/systemd/user/vncserver@.service
+ else
+ newinitd "${FILESDIR}"/${PN}.initd ${PN}
+ fi
+ else
+ local f
+ cd "${ED}" || die
+ for f in vncserver x0vncserver vncconfig; do
+ rm usr/bin/$f || die
+ rm usr/share/man/man1/$f.1 || die
+ done
+ fi
+}