Merge branch 'perf' of https://github.com/CendioOssman/tigervnc
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3091d7b..5ecd89e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -226,6 +226,9 @@
if(X11_Xcursor_FOUND)
set(FLTK_LIBRARIES ${FLTK_LIBRARIES} ${X11_Xcursor_LIB})
endif()
+ if(X11_Xrender_FOUND)
+ set(FLTK_LIBRARIES ${FLTK_LIBRARIES} ${X11_Xrender_LIB})
+ endif()
endif()
if(FLTK_FOUND)
diff --git a/cmake/StaticBuild.cmake b/cmake/StaticBuild.cmake
index 0b99035..0ec3361 100644
--- a/cmake/StaticBuild.cmake
+++ b/cmake/StaticBuild.cmake
@@ -79,12 +79,12 @@
elseif(APPLE)
set(FLTK_LIBRARIES "${FLTK_LIBRARIES} -framework Cocoa")
else()
- set(FLTK_LIBRARIES "${FLTK_LIBRARIES} -lm")
+ set(FLTK_LIBRARIES "${FLTK_LIBRARIES} -lm -ldl")
endif()
if(X11_FOUND AND NOT APPLE)
if(${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
- set(FLTK_LIBRARIES "${FLTK_LIBRARIES} ${X11_Xcursor_LIB} ${X11_Xfixes_LIB} -Wl,-Bstatic -lXft -Wl,-Bdynamic -lfontconfig -lXext -R/usr/sfw/lib")
+ set(FLTK_LIBRARIES "${FLTK_LIBRARIES} ${X11_Xcursor_LIB} ${X11_Xfixes_LIB} -Wl,-Bstatic -lXft -Wl,-Bdynamic -lfontconfig -lXrender -lXext -R/usr/sfw/lib -L=/usr/sfw/lib -lfreetype -lsocket -lnsl")
else()
set(FLTK_LIBRARIES "${FLTK_LIBRARIES} -Wl,-Bstatic -lXcursor -lXfixes -lXft -lfontconfig -lexpat -lfreetype -lbz2 -lXrender -lXext -lXinerama -Wl,-Bdynamic")
endif()
diff --git a/common/os/winerrno.h b/common/os/winerrno.h
new file mode 100644
index 0000000..aebbdbe
--- /dev/null
+++ b/common/os/winerrno.h
@@ -0,0 +1,101 @@
+
+/* Generated with:
+cat /usr/i686-pc-mingw32/sys-root/mingw/include/winerror.h \
+ | awk '/#define WSAE.*WSABASE/{gsub("WSA", ""); print "#undef " $2 "\n#define " $2 " WSA" $2}' \
+ | egrep -v '_QOS|PROVIDER|PROCTABLE'
+*/
+
+#undef EINTR
+#define EINTR WSAEINTR
+#undef EBADF
+#define EBADF WSAEBADF
+#undef EACCES
+#define EACCES WSAEACCES
+#undef EFAULT
+#define EFAULT WSAEFAULT
+#undef EINVAL
+#define EINVAL WSAEINVAL
+#undef EMFILE
+#define EMFILE WSAEMFILE
+#undef EWOULDBLOCK
+#define EWOULDBLOCK WSAEWOULDBLOCK
+#undef EINPROGRESS
+#define EINPROGRESS WSAEINPROGRESS
+#undef EALREADY
+#define EALREADY WSAEALREADY
+#undef ENOTSOCK
+#define ENOTSOCK WSAENOTSOCK
+#undef EDESTADDRREQ
+#define EDESTADDRREQ WSAEDESTADDRREQ
+#undef EMSGSIZE
+#define EMSGSIZE WSAEMSGSIZE
+#undef EPROTOTYPE
+#define EPROTOTYPE WSAEPROTOTYPE
+#undef ENOPROTOOPT
+#define ENOPROTOOPT WSAENOPROTOOPT
+#undef EPROTONOSUPPORT
+#define EPROTONOSUPPORT WSAEPROTONOSUPPORT
+#undef ESOCKTNOSUPPORT
+#define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT
+#undef EOPNOTSUPP
+#define EOPNOTSUPP WSAEOPNOTSUPP
+#undef EPFNOSUPPORT
+#define EPFNOSUPPORT WSAEPFNOSUPPORT
+#undef EAFNOSUPPORT
+#define EAFNOSUPPORT WSAEAFNOSUPPORT
+#undef EADDRINUSE
+#define EADDRINUSE WSAEADDRINUSE
+#undef EADDRNOTAVAIL
+#define EADDRNOTAVAIL WSAEADDRNOTAVAIL
+#undef ENETDOWN
+#define ENETDOWN WSAENETDOWN
+#undef ENETUNREACH
+#define ENETUNREACH WSAENETUNREACH
+#undef ENETRESET
+#define ENETRESET WSAENETRESET
+#undef ECONNABORTED
+#define ECONNABORTED WSAECONNABORTED
+#undef ECONNRESET
+#define ECONNRESET WSAECONNRESET
+#undef ENOBUFS
+#define ENOBUFS WSAENOBUFS
+#undef EISCONN
+#define EISCONN WSAEISCONN
+#undef ENOTCONN
+#define ENOTCONN WSAENOTCONN
+#undef ESHUTDOWN
+#define ESHUTDOWN WSAESHUTDOWN
+#undef ETOOMANYREFS
+#define ETOOMANYREFS WSAETOOMANYREFS
+#undef ETIMEDOUT
+#define ETIMEDOUT WSAETIMEDOUT
+#undef ECONNREFUSED
+#define ECONNREFUSED WSAECONNREFUSED
+#undef ELOOP
+#define ELOOP WSAELOOP
+#undef ENAMETOOLONG
+#define ENAMETOOLONG WSAENAMETOOLONG
+#undef EHOSTDOWN
+#define EHOSTDOWN WSAEHOSTDOWN
+#undef EHOSTUNREACH
+#define EHOSTUNREACH WSAEHOSTUNREACH
+#undef ENOTEMPTY
+#define ENOTEMPTY WSAENOTEMPTY
+#undef EPROCLIM
+#define EPROCLIM WSAEPROCLIM
+#undef EUSERS
+#define EUSERS WSAEUSERS
+#undef EDQUOT
+#define EDQUOT WSAEDQUOT
+#undef ESTALE
+#define ESTALE WSAESTALE
+#undef EREMOTE
+#define EREMOTE WSAEREMOTE
+#undef EDISCON
+#define EDISCON WSAEDISCON
+#undef ENOMORE
+#define ENOMORE WSAENOMORE
+#undef ECANCELLED
+#define ECANCELLED WSAECANCELLED
+#undef EREFUSED
+#define EREFUSED WSAEREFUSED
diff --git a/common/rdr/FdInStream.cxx b/common/rdr/FdInStream.cxx
index adb14c5..22433a1 100644
--- a/common/rdr/FdInStream.cxx
+++ b/common/rdr/FdInStream.cxx
@@ -31,8 +31,7 @@
#define close closesocket
#undef errno
#define errno WSAGetLastError()
-#undef EINTR
-#define EINTR WSAEINTR
+#include <os/winerrno.h>
#else
#include <sys/types.h>
#include <errno.h>
diff --git a/common/rdr/FdOutStream.cxx b/common/rdr/FdOutStream.cxx
index 533faa3..83360d6 100644
--- a/common/rdr/FdOutStream.cxx
+++ b/common/rdr/FdOutStream.cxx
@@ -26,11 +26,9 @@
#ifdef _WIN32
#include <winsock2.h>
#define write(s,b,l) send(s,(const char*)b,l,0)
-#define EWOULDBLOCK WSAEWOULDBLOCK
#undef errno
#define errno WSAGetLastError()
-#undef EINTR
-#define EINTR WSAEINTR
+#include <os/winerrno.h>
#else
#include <sys/types.h>
#include <errno.h>
diff --git a/contrib/packages/deb/ubuntu-precise/debian/patches/100_rethrow_signals.patch b/contrib/packages/deb/ubuntu-precise/debian/patches/100_rethrow_signals.patch
index 7c2e6d0..b40b148 100644
--- a/contrib/packages/deb/ubuntu-precise/debian/patches/100_rethrow_signals.patch
+++ b/contrib/packages/deb/ubuntu-precise/debian/patches/100_rethrow_signals.patch
@@ -1,5 +1,5 @@
---- a/unix/xserver/hw/vnc/xvnc.cc 2013-07-14 14:05:29.963390223 -0400
-+++ b/unix/xserver/hw/vnc/xvnc.cc 2013-07-14 14:04:12.840357191 -0400
+--- a/unix/xserver/hw/vnc/xvnc.c 2013-07-14 14:05:29.963390223 -0400
++++ b/unix/xserver/hw/vnc/xvnc.c 2013-07-14 14:04:12.840357191 -0400
@@ -250,7 +250,7 @@
#if XORG < 111
AbortDDX()
diff --git a/contrib/packages/deb/ubuntu-precise/debian/patches/511_tigervnc11-gethomedir.patch b/contrib/packages/deb/ubuntu-precise/debian/patches/511_tigervnc11-gethomedir.patch
index 208608c..ac1a85f 100644
--- a/contrib/packages/deb/ubuntu-precise/debian/patches/511_tigervnc11-gethomedir.patch
+++ b/contrib/packages/deb/ubuntu-precise/debian/patches/511_tigervnc11-gethomedir.patch
@@ -8,7 +8,7 @@
COMMON_LIBS=$(NETWORK_LIB) $(RFB_LIB) $(RDR_LIB) $(XREGION_LIB)
noinst_LTLIBRARIES = libvnccommon.la
-@@ -55,7 +56,7 @@ libvnc_la_CPPFLAGS = $(XVNC_CPPFLAGS) -I
+@@ -55,6 +56,6 @@ libvnc_la_CPPFLAGS = $(XVNC_CPPFLAGS) -I
libvnc_la_LDFLAGS = -module -avoid-version -Wl,-z,now
@@ -16,4 +16,3 @@
+libvnc_la_LIBADD = libvnccommon.la $(COMMON_LIBS) $(OS_LIB)
EXTRA_DIST = Xvnc.man
-
diff --git a/contrib/packages/deb/ubuntu-trusty/debian/patches/100_rethrow_signals.patch b/contrib/packages/deb/ubuntu-trusty/debian/patches/100_rethrow_signals.patch
index 7c2e6d0..b40b148 100644
--- a/contrib/packages/deb/ubuntu-trusty/debian/patches/100_rethrow_signals.patch
+++ b/contrib/packages/deb/ubuntu-trusty/debian/patches/100_rethrow_signals.patch
@@ -1,5 +1,5 @@
---- a/unix/xserver/hw/vnc/xvnc.cc 2013-07-14 14:05:29.963390223 -0400
-+++ b/unix/xserver/hw/vnc/xvnc.cc 2013-07-14 14:04:12.840357191 -0400
+--- a/unix/xserver/hw/vnc/xvnc.c 2013-07-14 14:05:29.963390223 -0400
++++ b/unix/xserver/hw/vnc/xvnc.c 2013-07-14 14:04:12.840357191 -0400
@@ -250,7 +250,7 @@
#if XORG < 111
AbortDDX()
diff --git a/contrib/packages/deb/ubuntu-trusty/debian/patches/511_tigervnc11-gethomedir.patch b/contrib/packages/deb/ubuntu-trusty/debian/patches/511_tigervnc11-gethomedir.patch
index 208608c..ac1a85f 100644
--- a/contrib/packages/deb/ubuntu-trusty/debian/patches/511_tigervnc11-gethomedir.patch
+++ b/contrib/packages/deb/ubuntu-trusty/debian/patches/511_tigervnc11-gethomedir.patch
@@ -8,7 +8,7 @@
COMMON_LIBS=$(NETWORK_LIB) $(RFB_LIB) $(RDR_LIB) $(XREGION_LIB)
noinst_LTLIBRARIES = libvnccommon.la
-@@ -55,7 +56,7 @@ libvnc_la_CPPFLAGS = $(XVNC_CPPFLAGS) -I
+@@ -55,6 +56,6 @@ libvnc_la_CPPFLAGS = $(XVNC_CPPFLAGS) -I
libvnc_la_LDFLAGS = -module -avoid-version -Wl,-z,now
@@ -16,4 +16,3 @@
+libvnc_la_LIBADD = libvnccommon.la $(COMMON_LIBS) $(OS_LIB)
EXTRA_DIST = Xvnc.man
-
diff --git a/contrib/packages/rpm/el5/SOURCES/tigervnc11-gethomedir.patch b/contrib/packages/rpm/el5/SOURCES/tigervnc11-gethomedir.patch
index fd07be3..ea54438 100644
--- a/contrib/packages/rpm/el5/SOURCES/tigervnc11-gethomedir.patch
+++ b/contrib/packages/rpm/el5/SOURCES/tigervnc11-gethomedir.patch
@@ -9,7 +9,7 @@
COMMON_LIBS=$(NETWORK_LIB) $(RFB_LIB) $(RDR_LIB) $(XREGION_LIB)
noinst_LTLIBRARIES = libvnccommon.la
-@@ -52,7 +53,7 @@ libvnc_la_CPPFLAGS = $(XVNC_CPPFLAGS) -I
+@@ -52,6 +53,6 @@ libvnc_la_CPPFLAGS = $(XVNC_CPPFLAGS) -I
libvnc_la_LDFLAGS = -module -avoid-version -Wl,-z,now
@@ -17,4 +17,3 @@
+libvnc_la_LIBADD = libvnccommon.la $(COMMON_LIBS) $(OS_LIB)
EXTRA_DIST = Xvnc.man
-
diff --git a/contrib/packages/rpm/el6/SOURCES/tigervnc11-gethomedir.patch b/contrib/packages/rpm/el6/SOURCES/tigervnc11-gethomedir.patch
index 0a4252d..53b4dc1 100644
--- a/contrib/packages/rpm/el6/SOURCES/tigervnc11-gethomedir.patch
+++ b/contrib/packages/rpm/el6/SOURCES/tigervnc11-gethomedir.patch
@@ -9,7 +9,7 @@
COMMON_LIBS=$(NETWORK_LIB) $(RFB_LIB) $(RDR_LIB) $(XREGION_LIB)
noinst_LTLIBRARIES = libvnccommon.la
-@@ -55,7 +56,7 @@ libvnc_la_CPPFLAGS = $(XVNC_CPPFLAGS) -I
+@@ -55,6 +56,6 @@ libvnc_la_CPPFLAGS = $(XVNC_CPPFLAGS) -I
libvnc_la_LDFLAGS = -module -avoid-version -Wl,-z,now
@@ -17,4 +17,3 @@
+libvnc_la_LIBADD = libvnccommon.la $(COMMON_LIBS) $(OS_LIB)
EXTRA_DIST = Xvnc.man
-
diff --git a/unix/xserver/hw/vnc/Makefile.am b/unix/xserver/hw/vnc/Makefile.am
index 902aabf..ab8becb 100644
--- a/unix/xserver/hw/vnc/Makefile.am
+++ b/unix/xserver/hw/vnc/Makefile.am
@@ -31,6 +31,11 @@
$(top_srcdir)/Xi/stubs.c $(top_srcdir)/mi/miinitext.c \
$(top_srcdir)/fb/fbcmap_mi.c buildtime.c
+# Xvnc contains no C++ sources so automake doesn't understand that we
+# need to use the C++ compiler to link things. This is the upstream
+# recommendation for coaxing automake.
+nodist_EXTRA_Xvnc_SOURCES = dummy.cxx
+
Xvnc_CPPFLAGS = $(XVNC_CPPFLAGS) -DTIGERVNC -DNO_MODULE_EXTS \
-UHAVE_CONFIG_H \
-DXFree86Server -DVENDOR_RELEASE="$(VENDOR_RELEASE)" \
@@ -47,6 +52,9 @@
libvnc_la_SOURCES = vncModule.c
+# See Xvnc magic above
+nodist_EXTRA_libvnc_la_SOURCES = dummy.cxx
+
libvnc_la_CPPFLAGS = $(XVNC_CPPFLAGS) -I$(TIGERVNC_SRCDIR)/common -UHAVE_CONFIG_H \
-I$(top_srcdir)/hw/xfree86/common \
-I$(top_srcdir)/hw/xfree86/os-support \
diff --git a/unix/xserver/hw/vnc/vncExtInit.h b/unix/xserver/hw/vnc/vncExtInit.h
index 6c9857c..65cbbe4 100644
--- a/unix/xserver/hw/vnc/vncExtInit.h
+++ b/unix/xserver/hw/vnc/vncExtInit.h
@@ -20,6 +20,7 @@
#define __VNCEXTINIT_H__
#include <stdint.h>
+#include <stddef.h>
#include <sys/select.h>
// Only from C++
diff --git a/unix/xserver/hw/vnc/vncModule.c b/unix/xserver/hw/vnc/vncModule.c
index 5dcf875..8cbf9c2 100644
--- a/unix/xserver/hw/vnc/vncModule.c
+++ b/unix/xserver/hw/vnc/vncModule.c
@@ -29,6 +29,9 @@
#endif
#include "xorg-version.h"
+#if XORG <= 111
+typedef pointer XF86OptionPtr;
+#endif
#include "xf86.h"
#include "xf86Module.h"
diff --git a/vncviewer/vncviewer.cxx b/vncviewer/vncviewer.cxx
index 7fb712a..d980ed2 100644
--- a/vncviewer/vncviewer.cxx
+++ b/vncviewer/vncviewer.cxx
@@ -32,6 +32,7 @@
#include <sys/stat.h>
#ifdef WIN32
+#include <os/winerrno.h>
#include <direct.h>
#define mkdir(path, mode) _mkdir(path)
#endif