From: Jan Rękorajski Date: Tue, 26 Dec 2017 21:34:22 +0000 (+0100) Subject: - up to 1.8.0 X-Git-Tag: auto/th/tigervnc-1.8.0-1 X-Git-Url: http://git.pld-linux.org/?p=packages%2Ftigervnc.git;a=commitdiff_plain;h=377c2b5 - up to 1.8.0 --- diff --git a/tigervnc-libvnc-os.patch b/tigervnc-libvnc-os.patch deleted file mode 100644 index 0c66755..0000000 --- a/tigervnc-libvnc-os.patch +++ /dev/null @@ -1,20 +0,0 @@ -diff --git a/unix/xserver/hw/vnc/Makefile.am b/unix/xserver/hw/vnc/Makefile.am -index d7ab259..fb477c5 100644 ---- a/unix/xserver/hw/vnc/Makefile.am -+++ b/unix/xserver/hw/vnc/Makefile.am -@@ -5,6 +5,7 @@ RFB_LIB=$(LIB_DIR)/rfb/librfb.la - RDR_LIB=$(LIB_DIR)/rdr/librdr.la - NETWORK_LIB=$(LIB_DIR)/network/libnetwork.la - XREGION_LIB=$(LIB_DIR)/Xregion/libXregion.la -+OS_LIB=$(LIB_DIR)/os/libos.la - COMMON_LIBS=$(NETWORK_LIB) $(RFB_LIB) $(RDR_LIB) $(XREGION_LIB) - - noinst_LTLIBRARIES = libvnccommon.la -@@ -64,6 +65,6 @@ libvnc_la_CPPFLAGS = $(XVNC_CPPFLAGS) -I$(TIGERVNC_SRCDIR)/common -UHAVE_CONFIG_ - - libvnc_la_LDFLAGS = -module -avoid-version -Wl,-z,now - --libvnc_la_LIBADD = libvnccommon.la $(COMMON_LIBS) -+libvnc_la_LIBADD = libvnccommon.la $(COMMON_LIBS) $(OS_LIB) - - EXTRA_DIST = Xvnc.man diff --git a/tigervnc-xserver.patch b/tigervnc-xserver.patch deleted file mode 100644 index 067960b..0000000 --- a/tigervnc-xserver.patch +++ /dev/null @@ -1,422 +0,0 @@ -diff -up tigervnc-1.7.0/unix/xserver/hw/vnc/vncBlockHandler.c.xserver119 tigervnc-1.7.0/unix/xserver/hw/vnc/vncBlockHandler.c ---- tigervnc-1.7.0/unix/xserver/hw/vnc/vncBlockHandler.c.xserver119 2016-09-08 12:31:18.000000000 +0200 -+++ tigervnc-1.7.0/unix/xserver/hw/vnc/vncBlockHandler.c 2016-10-04 17:17:35.618889747 +0200 -@@ -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 vncWriteWakeupHandlerFallbac - - vncWriteWakeupHandler(ret, &fallbackFds); - } -+ -+#endif -diff -up tigervnc-1.7.0/unix/xserver/hw/vnc/vncExtInit.cc.xserver119 tigervnc-1.7.0/unix/xserver/hw/vnc/vncExtInit.cc ---- tigervnc-1.7.0/unix/xserver/hw/vnc/vncExtInit.cc.xserver119 2016-09-08 12:31:18.000000000 +0200 -+++ tigervnc-1.7.0/unix/xserver/hw/vnc/vncExtInit.cc 2016-10-04 17:17:35.618889747 +0200 -@@ -241,6 +241,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++) -@@ -269,6 +280,8 @@ void vncCallWriteWakeupHandlers(fd_set * - desktop[scr]->writeWakeupHandler(fds, nfds); - } - -+#endif -+ - int vncGetAvoidShiftNumLock(void) - { - return (bool)avoidShiftNumLock; -diff -up tigervnc-1.7.0/unix/xserver/hw/vnc/vncExtInit.h.xserver119 tigervnc-1.7.0/unix/xserver/hw/vnc/vncExtInit.h ---- tigervnc-1.7.0/unix/xserver/hw/vnc/vncExtInit.h.xserver119 2016-09-08 12:31:18.000000000 +0200 -+++ tigervnc-1.7.0/unix/xserver/hw/vnc/vncExtInit.h 2016-10-04 17:17:35.618889747 +0200 -@@ -22,6 +22,7 @@ - #include - #include - #include -+#include "xorg-version.h" - - // Only from C++ - #ifdef __cplusplus -@@ -52,10 +53,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 -up tigervnc-1.7.0/unix/xserver/hw/vnc/vncHooks.c.xserver119 tigervnc-1.7.0/unix/xserver/hw/vnc/vncHooks.c ---- tigervnc-1.7.0/unix/xserver/hw/vnc/vncHooks.c.xserver119 2016-09-08 12:31:18.000000000 +0200 -+++ tigervnc-1.7.0/unix/xserver/hw/vnc/vncHooks.c 2016-10-04 17:17:35.618889747 +0200 -@@ -128,9 +128,11 @@ static Bool vncHooksDisplayCursor(Device - #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 @@ out: - #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(ScreenP - - #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, - - // 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 -up tigervnc-1.7.0/unix/xserver/hw/vnc/xorg-version.h.xserver119 tigervnc-1.7.0/unix/xserver/hw/vnc/xorg-version.h ---- tigervnc-1.7.0/unix/xserver/hw/vnc/xorg-version.h.xserver119 2016-09-08 12:31:18.000000000 +0200 -+++ tigervnc-1.7.0/unix/xserver/hw/vnc/xorg-version.h 2016-10-04 17:24:51.640654527 +0200 -@@ -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 -up tigervnc-1.7.0/unix/xserver/hw/vnc/XserverDesktop.cc.xserver119 tigervnc-1.7.0/unix/xserver/hw/vnc/XserverDesktop.cc ---- tigervnc-1.7.0/unix/xserver/hw/vnc/XserverDesktop.cc.xserver119 2016-09-08 12:31:18.000000000 +0200 -+++ tigervnc-1.7.0/unix/xserver/hw/vnc/XserverDesktop.cc 2016-10-04 17:23:47.171977905 +0200 -@@ -89,6 +89,30 @@ public: - 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 listeners_, -@@ -110,15 +134,35 @@ XserverDesktop::XserverDesktop(int scree - - if (!httpListeners.empty ()) - httpServer = new FileHTTPServer(this); -+ -+#if XORG >= 119 -+ for (std::list::iterator i = listeners.begin(); -+ i != listeners.end(); -+ i++) { -+ SetNotifyFd((*i)->getFd(), HandleListenFd, X_NOTIFY_READ, this); -+ } -+ -+ for (std::list::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(); - } -@@ -388,6 +432,140 @@ void XserverDesktop::add_copied(const rf - } - } - -+#if XORG >= 119 -+void XserverDesktop::handleListenFd(int fd) -+{ -+ std::list::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 sockets; -+ std::list::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 sockets; -+ std::list::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], -@@ -600,10 +778,15 @@ void XserverDesktop::writeWakeupHandler( - } - } - -+#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 -up tigervnc-1.7.0/unix/xserver/hw/vnc/XserverDesktop.h.xserver119 tigervnc-1.7.0/unix/xserver/hw/vnc/XserverDesktop.h ---- tigervnc-1.7.0/unix/xserver/hw/vnc/XserverDesktop.h.xserver119 2016-09-08 12:31:18.000000000 +0200 -+++ tigervnc-1.7.0/unix/xserver/hw/vnc/XserverDesktop.h 2016-10-04 17:17:35.617889712 +0200 -@@ -38,6 +38,7 @@ - #include - #include - #include "Input.h" -+#include "xorg-version.h" - - namespace rfb { - class VNCServerST; -@@ -69,10 +70,16 @@ public: - 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/tigervnc.spec b/tigervnc.spec index fa237c8..2632735 100644 --- a/tigervnc.spec +++ b/tigervnc.spec @@ -3,19 +3,17 @@ Summary: A TigerVNC remote display system Summary(pl.UTF-8): System zdalnego dostępu TigerVNC Name: tigervnc -Version: 1.7.1 -Release: 6 +Version: 1.8.0 +Release: 1 License: GPL v2 Group: X11/Applications/Networking Source0: https://github.com/TigerVNC/tigervnc/archive/v%{version}.tar.gz?/%{name}-%{version}.tar.gz -# Source0-md5: 82dbb9d178b8e313b51f1651e0398dfe +# Source0-md5: 5c9a80dd4b99b4eb19f535db5ce5830f Source1: %{name}.desktop Source2: vncserver.init Source3: vncserver.sysconfig Source4: vncserver.target Source5: vncserver-service-generator -Patch0: %{name}-xserver.patch -Patch1: %{name}-libvnc-os.patch Patch2: %{name}-getmaster.patch Patch3: %{name}-utilize-system-crypto-policies.patch Patch4: %{name}-xstartup.patch @@ -177,8 +175,6 @@ zdalny dostęp do pulpitu. %prep %setup -q -%patch0 -p1 -%patch1 -p1 %patch2 -p1 %patch3 -p1 %patch4 -p1 @@ -195,16 +191,12 @@ cd unix/xserver %{__aclocal} -I m4 %{__autoconf} %{__automake} -export CXXFLAGS="%{rpmcxxflags} -fpermissive" %configure \ --with-os-name="PLD/Linux" \ --with-os-vendor="PLD/Team" \ - --disable-config-dbus \ --disable-config-hal \ --disable-config-udev \ - --without-xmlto \ - --without-fop \ - --without-doxygen \ + --without-dtrace \ --disable-devel-docs \ --with-default-font-path="%{_fontsdir}/misc,%{_fontsdir}/TTF,%{_fontsdir}/OTF,%{_fontsdir}/Type1,%{_fontsdir}/100dpi,%{_fontsdir}/75dpi" \ --disable-xorg \ @@ -214,25 +206,14 @@ export CXXFLAGS="%{rpmcxxflags} -fpermissive" --disable-xwin \ --disable-xephyr \ --disable-kdrive \ - --disable-xfbdev \ --disable-dri \ --enable-dri2 \ --enable-dri3 \ --with-pic \ --disable-static \ - --disable-xinerama \ - --disable-composite \ --disable-wayland \ - --disable-xwayland \ --enable-glx \ - --enable-glx-tls \ - --enable-aiglx \ - --enable-dga \ - --enable-glx-tls \ --enable-install-libxf86config \ - --enable-record \ - --disable-xfake \ - --enable-secure-rpc \ --with-xkb-output=/var/lib/xkb \ --disable-unit-tests @@ -318,6 +299,7 @@ fi %attr(755,root,root) %{_bindir}/vncviewer %{_mandir}/man1/vncviewer.1* %{_desktopdir}/tigervnc.desktop +%{_desktopdir}/vncviewer.desktop %{_iconsdir}/hicolor/*/apps/tigervnc.* %files server