Merge branch 'readonlypassword' of https://github.com/michalsrb/tigervnc into viewonly
diff --git a/BUILDING.txt b/BUILDING.txt
index 8f686cc..41f493e 100644
--- a/BUILDING.txt
+++ b/BUILDING.txt
@@ -15,6 +15,7 @@
-- If building TLS support:
* GnuTLS
+ * See "Building TLS Support" below.
-- If building native language support (NLS):
* Gnu gettext 0.14.4 or later
@@ -322,6 +323,26 @@
======================================
+Building TLS Support
+======================================
+
+TLS requires GnuTLS, which is supplied with most Linux distributions and
+with MinGW for Windows and can be built from source on OS X and other
+Unix variants. However, GnuTLS versions > 2.12.x && < 3.3.x should be
+avoided because of potential incompatibilities during initial handshaking.
+
+You can override the GNUTLS_LIBRARY and GNUTLS_INCLUDE_DIR CMake variables
+to specify the locations of libgnutls and any dependencies. For instance,
+adding
+
+ -DGNUTLS_INCLUDE_DIR=/usr/local/include \
+ -DGNUTLS_LIBRARY=/usr/local/lib/libgnutls.a
+
+to the CMake command line would link TigerVNC against a static version of
+libgnutls located under /usr/local.
+
+
+======================================
Building Native Language Support (NLS)
======================================
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1dcfd9e..3091d7b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -18,10 +18,10 @@
include(CMakeMacroLibtoolFile)
project(tigervnc)
-set(VERSION 1.3.80)
+set(VERSION 1.4.80)
# The RC version must always be four comma-separated numbers
-set(RCVERSION 1,3,80,0)
+set(RCVERSION 1,4,80,0)
# Installation paths
set(BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin")
@@ -321,6 +321,12 @@
set(CMAKE_EXTRA_INCLUDE_FILES sys/socket.h)
endif()
check_function_exists(inet_aton HAVE_INET_ATON)
+# This might give a false positive on Windows as it is also guarded by
+# a version check that we do not satisfy (requires Vista, but we target
+# Windows 2000).
+if(NOT WIN32)
+check_function_exists(inet_pton HAVE_INET_PTON)
+endif()
check_function_exists(getaddrinfo HAVE_GETADDRINFO)
set(CMAKE_EXTRA_INCLUDE_FILES)
set(CMAKE_REQUIRED_LIBRARIES)
diff --git a/cmake/Modules/CMakeMacroLibtoolFile.cmake b/cmake/Modules/CMakeMacroLibtoolFile.cmake
index 0afb7a6..f2ea7f8 100644
--- a/cmake/Modules/CMakeMacroLibtoolFile.cmake
+++ b/cmake/Modules/CMakeMacroLibtoolFile.cmake
@@ -14,7 +14,21 @@
# into libtool control file as library dependencies, and handle a few corner
# cases.
#
+
+ # First we need to split up any internal entries
+ set(target_libs "")
foreach(library ${${_target}_LIB_DEPENDS})
+ if("${library}" MATCHES " ")
+ string(REPLACE " " ";" lib_list "${library}")
+ list(APPEND target_libs ${lib_list})
+ else()
+ list(APPEND target_libs "${library}")
+ endif()
+ endforeach()
+
+ set(STATIC_MODE OFF)
+
+ foreach(library ${target_libs})
# Assume all entries are shared libs if platform-specific static library
# extension is not matched.
if("${library}" MATCHES "[^.+\\${CMAKE_STATIC_LIBRARY_SUFFIX}]$")
@@ -31,23 +45,46 @@
# No shared library extension matched. Check whether target is a CMake
# target.
get_target_property(_ltp ${library} TYPE)
- if(NOT _ltp AND NOT ${library} STREQUAL "general")
- # Not a CMake target, so use find_library() to attempt to locate the
+ if(_ltp OR ${library} STREQUAL "general")
+ # Target is a CMake target, so ignore (CMake targets are static
+ # libs in TigerVNC.)
+ elseif(${library} STREQUAL "-Wl,-Bstatic")
+ # All following libraries should be static
+ set(STATIC_MODE ON)
+ elseif(${library} STREQUAL "-Wl,-Bdynamic")
+ # All following libraries should be dynamic
+ set(STATIC_MODE OFF)
+ else()
+ # Normal library, so use find_library() to attempt to locate the
# library in a system directory.
+
+ # Need to remove -l prefix
+ if (${library} MATCHES "^\\${CMAKE_LINK_LIBRARY_FLAG}")
+ string(REPLACE ${CMAKE_LINK_LIBRARY_FLAG} "" library ${library})
+ endif()
+
+ if(STATIC_MODE)
+ set(library ${CMAKE_STATIC_LIBRARY_PREFIX}${library}${CMAKE_STATIC_LIBRARY_SUFFIX})
+ endif()
+
find_library(FL ${library})
if(FL)
- # Found library, so extract the path and library name, then add the
+ # Found library. Depending on if it's static or not we might
+ # extract the path and library name, then add the
# result to the libtool dependency libs.
- get_filename_component(_shared_lib ${FL} NAME_WE)
- get_filename_component(_shared_lib_path ${FL} PATH)
- string(REPLACE "lib" "" _shared_lib ${_shared_lib})
- set(_target_dependency_libs "${_target_dependency_libs} -L${_shared_lib_path} -l${_shared_lib}")
+ if(STATIC_MODE)
+ set(_target_dependency_libs "${_target_dependency_libs} ${FL}")
+ else()
+ get_filename_component(_shared_lib ${FL} NAME_WE)
+ get_filename_component(_shared_lib_path ${FL} PATH)
+ string(REPLACE "lib" "" _shared_lib ${_shared_lib})
+ set(_target_dependency_libs "${_target_dependency_libs} -L${_shared_lib_path} -l${_shared_lib}")
+ endif()
else()
- # No shared library found, so ignore target.
+ # No library found, so ignore target.
endif()
- else()
- # Target is a CMake target, so ignore if (CMake targets are static
- # libs in TigerVNC.)
+ # Need to clear FL to get new results next loop
+ unset(FL CACHE)
endif()
endif()
else()
@@ -69,6 +106,8 @@
else()
# No absolute pathname found. Ignore it.
endif()
+ # Need to clear FL to get new results next loop
+ unset(FL CACHE)
endif()
endif()
endforeach()
@@ -76,10 +115,6 @@
# Write the libtool control file for the static library
get_filename_component(_lname ${_target_location} NAME_WE)
set(_laname ${CMAKE_CURRENT_BINARY_DIR}/${_lname}.la)
-
- if(BUILD_STATIC)
- set(_target_dependency_libs "${_target_dependency_libs} -L${CMAKE_BINARY_DIR}/staticlib")
- endif()
file(WRITE ${_laname} "# ${_lname}.la - a libtool library file\n# Generated by ltmain.sh (GNU libtool) 2.2.6b\n")
file(APPEND ${_laname} "dlname=''\n\n")
diff --git a/cmake/StaticBuild.cmake b/cmake/StaticBuild.cmake
index 7679f45..49706bd 100644
--- a/cmake/StaticBuild.cmake
+++ b/cmake/StaticBuild.cmake
@@ -30,9 +30,14 @@
HINTS ${PC_GNUTLS_LIBDIR} ${PC_GNUTLS_LIBRARY_DIRS})
FIND_LIBRARY(NETTLE_LIBRARY NAMES nettle libnettle
HINTS ${PC_GNUTLS_LIBDIR} ${PC_GNUTLS_LIBRARY_DIRS})
+ FIND_LIBRARY(TASN1_LIBRARY NAMES tasn1 libtasn1
+ HINTS ${PC_GNUTLS_LIBDIR} ${PC_GNUTLS_LIBRARY_DIRS})
- set(GNUTLS_LIBRARIES "-Wl,-Bstatic -lgnutls -ltasn1")
+ set(GNUTLS_LIBRARIES "-Wl,-Bstatic -lgnutls")
+ if(TASN1_LIBRARY)
+ set(GNUTLS_LIBRARIES "${GNUTLS_LIBRARIES} -ltasn1")
+ endif()
if(NETTLE_LIBRARY)
set(GNUTLS_LIBRARIES "${GNUTLS_LIBRARIES} -lnettle -lhogweed -lgmp")
endif()
@@ -101,7 +106,11 @@
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -nodefaultlibs")
set(STATIC_BASE_LIBRARIES "-Wl,-Bstatic -lstdc++ -Wl,-Bdynamic")
if(WIN32)
- set(STATIC_BASE_LIBRARIES "${STATIC_BASE_LIBRARIES} -lmingw32 -lmoldname -lmingwex -lgcc -lgcc_eh -lmsvcrt -lkernel32")
+ set(STATIC_BASE_LIBRARIES "${STATIC_BASE_LIBRARIES} -lmingw32 -lgcc_eh -lgcc -lmoldname -lmingwex -lmsvcrt")
+ set(STATIC_BASE_LIBRARIES "${STATIC_BASE_LIBRARIES} -luser32 -lkernel32 -ladvapi32 -lshell32")
+ # mingw has some fun circular dependencies that requires us to link
+ # these things again
+ set(STATIC_BASE_LIBRARIES "${STATIC_BASE_LIBRARIES} -lmingw32 -lgcc_eh -lgcc -lmoldname -lmingwex -lmsvcrt")
else()
set(STATIC_BASE_LIBRARIES "${STATIC_BASE_LIBRARIES} -lgcc -lgcc_eh -lc")
endif()
diff --git a/common/network/TcpSocket.cxx b/common/network/TcpSocket.cxx
index d9e9376..0db6ff6 100644
--- a/common/network/TcpSocket.cxx
+++ b/common/network/TcpSocket.cxx
@@ -239,27 +239,66 @@
}
char* TcpSocket::getPeerAddress() {
- struct sockaddr_in info;
- struct in_addr addr;
- socklen_t info_size = sizeof(info);
+ vnc_sockaddr_t sa;
+ socklen_t sa_size = sizeof(sa);
- getpeername(getFd(), (struct sockaddr *)&info, &info_size);
- memcpy(&addr, &info.sin_addr, sizeof(addr));
-
- char* name = inet_ntoa(addr);
- if (name) {
- return rfb::strDup(name);
- } else {
+ if (getpeername(getFd(), &sa.u.sa, &sa_size) != 0) {
+ vlog.error("unable to get peer name for socket");
return rfb::strDup("");
}
+
+#if defined(HAVE_GETADDRINFO) && defined(HAVE_INET_PTON)
+ if (sa.u.sa.sa_family == AF_INET6) {
+ char buffer[INET6_ADDRSTRLEN + 2];
+ const char *name;
+
+ buffer[0] = '[';
+
+ name = inet_ntop(sa.u.sa.sa_family, &sa.u.sin6.sin6_addr,
+ buffer + 1, sizeof(buffer) - 2);
+ if (name == NULL) {
+ vlog.error("unable to convert peer name to a string");
+ return rfb::strDup("");
+ }
+
+ strcat(buffer, "]");
+
+ return rfb::strDup(buffer);
+ }
+#endif
+
+ if (sa.u.sa.sa_family == AF_INET) {
+ char *name;
+
+ name = inet_ntoa(sa.u.sin.sin_addr);
+ if (name == NULL) {
+ vlog.error("unable to convert peer name to a string");
+ return rfb::strDup("");
+ }
+
+ return rfb::strDup(name);
+ }
+
+ vlog.error("unknown address family for socket");
+ return rfb::strDup("");
}
int TcpSocket::getPeerPort() {
- struct sockaddr_in info;
- socklen_t info_size = sizeof(info);
+ vnc_sockaddr_t sa;
+ socklen_t sa_size = sizeof(sa);
- getpeername(getFd(), (struct sockaddr *)&info, &info_size);
- return ntohs(info.sin_port);
+ getpeername(getFd(), &sa.u.sa, &sa_size);
+
+ switch (sa.u.sa.sa_family) {
+#ifdef HAVE_GETADDRINFO
+ case AF_INET6:
+ return ntohs(sa.u.sin6.sin6_port);
+#endif /* HAVE_GETADDRINFO */
+ case AF_INET:
+ return ntohs(sa.u.sin.sin_port);
+ default:
+ return 0;
+ }
}
char* TcpSocket::getPeerEndpoint() {
@@ -293,7 +332,11 @@
&myaddr.u.sin6.sin6_addr);
#endif
- return (peeraddr.u.sin.sin_addr.s_addr == myaddr.u.sin.sin_addr.s_addr);
+ if (peeraddr.u.sa.sa_family == AF_INET)
+ return (peeraddr.u.sin.sin_addr.s_addr == myaddr.u.sin.sin_addr.s_addr);
+
+ // No idea what this is. Assume we're on different machines.
+ return false;
}
void TcpSocket::shutdown()
@@ -326,25 +369,34 @@
bool TcpSocket::isSocket(int sock)
{
- struct sockaddr_in info;
- socklen_t info_size = sizeof(info);
- return getsockname(sock, (struct sockaddr *)&info, &info_size) >= 0;
+ vnc_sockaddr_t sa;
+ socklen_t sa_size = sizeof(sa);
+ return getsockname(sock, &sa.u.sa, &sa_size) >= 0;
}
bool TcpSocket::isConnected(int sock)
{
- struct sockaddr_in info;
- socklen_t info_size = sizeof(info);
- return getpeername(sock, (struct sockaddr *)&info, &info_size) >= 0;
+ vnc_sockaddr_t sa;
+ socklen_t sa_size = sizeof(sa);
+ return getpeername(sock, &sa.u.sa, &sa_size) >= 0;
}
int TcpSocket::getSockPort(int sock)
{
- struct sockaddr_in info;
- socklen_t info_size = sizeof(info);
- if (getsockname(sock, (struct sockaddr *)&info, &info_size) < 0)
+ vnc_sockaddr_t sa;
+ socklen_t sa_size = sizeof(sa);
+ if (getsockname(sock, &sa.u.sa, &sa_size) < 0)
return 0;
- return ntohs(info.sin_port);
+
+ switch (sa.u.sa.sa_family) {
+#ifdef HAVE_GETADDRINFO
+ case AF_INET6:
+ return ntohs(sa.u.sin6.sin6_port);
+#endif /* HAVE_GETADDRINFO */
+
+ default:
+ return ntohs(sa.u.sin.sin_port);
+ }
}
@@ -356,9 +408,40 @@
return;
}
+ bool use_ipv6;
+ int af;
+#ifdef HAVE_GETADDRINFO
+ use_ipv6 = true;
+ af = AF_INET6;
+#else
+ use_ipv6 = false;
+ af = AF_INET;
+#endif
+
initSockets();
- if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
- throw SocketException("unable to create listening socket", errorNumber);
+ if ((fd = socket(af, SOCK_STREAM, 0)) < 0) {
+ // - Socket creation failed
+ if (use_ipv6) {
+ // - Trying to make an IPv6-capable socket failed - try again, IPv4-only
+ use_ipv6 = false;
+ af = AF_INET;
+ fd = socket(af, SOCK_STREAM, 0);
+ }
+ if (fd < 0)
+ throw SocketException("unable to create listening socket", errorNumber);
+ } else {
+ // - Socket creation succeeded
+ if (use_ipv6) {
+#ifdef IPV6_V6ONLY
+ // - We made an IPv6-capable socket, and we need it to do IPv4 too
+ int opt = 0;
+ setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, (char *)&opt, sizeof(opt));
+#else
+ vlog.error("IPV6_V6ONLY support is missing. "
+ "IPv4 clients may not be able to connect.");
+#endif
+ }
+ }
#ifndef WIN32
// - By default, close the socket on exec()
@@ -375,27 +458,62 @@
// - Bind it to the desired port
struct sockaddr_in addr;
- memset(&addr, 0, sizeof(addr));
- addr.sin_family = AF_INET;
-
- if (localhostOnly) {
- addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
- } else if (listenaddr != NULL) {
-#ifdef HAVE_INET_ATON
- if (inet_aton(listenaddr, &addr.sin_addr) == 0)
-#else
- /* Some systems (e.g. Windows) do not have inet_aton, sigh */
- if ((addr.sin_addr.s_addr = inet_addr(listenaddr)) == INADDR_NONE)
+#ifdef HAVE_GETADDRINFO
+ struct sockaddr_in6 addr6;
#endif
- {
- closesocket(fd);
- throw Exception("invalid network interface address: %s", listenaddr);
+ struct sockaddr *sa;
+ int sa_len;
+
+#ifdef HAVE_GETADDRINFO
+ if (use_ipv6) {
+ memset(&addr6, 0, (sa_len = sizeof(addr6)));
+ addr6.sin6_family = af;
+ addr6.sin6_port = htons(port);
+
+ if (localhostOnly)
+ addr6.sin6_addr = in6addr_loopback;
+ else if (listenaddr != NULL) {
+#ifdef HAVE_INET_PTON
+ if (inet_pton(AF_INET6, listenaddr, &addr6.sin6_addr) != 1)
+ use_ipv6 = false;
+#else
+ // Unable to parse without inet_pton
+ use_ipv6 = false;
+#endif
}
- } else
- addr.sin_addr.s_addr = htonl(INADDR_ANY); /* Bind to 0.0.0.0 by default. */
+
+ if (use_ipv6)
+ sa = (struct sockaddr *)&addr6;
+ }
+#endif
+
+ if (!use_ipv6) {
+ memset(&addr, 0, (sa_len = sizeof(addr)));
+ addr.sin_family = af;
+ addr.sin_port = htons(port);
+
+ if (localhostOnly) {
+ addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+ } else if (listenaddr != NULL) {
+#ifdef HAVE_INET_ATON
+ if (inet_aton(listenaddr, &addr.sin_addr) == 0)
+#else
+ /* Some systems (e.g. Windows) do not have inet_aton, sigh */
+ if ((addr.sin_addr.s_addr = inet_addr(listenaddr)) == INADDR_NONE)
+#endif
+ {
+ closesocket(fd);
+ throw Exception("invalid network interface address: %s", listenaddr);
+ }
+ } else
+ /* Bind to 0.0.0.0 by default. */
+ addr.sin_addr.s_addr = htonl(INADDR_ANY);
+
+ sa = (struct sockaddr *)&addr;
+ }
addr.sin_port = htons(port);
- if (bind(fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
+ if (bind(fd, sa, sa_len) < 0) {
int e = errorNumber;
closesocket(fd);
throw SocketException("unable to bind listening socket", e);
@@ -449,6 +567,30 @@
}
void TcpListener::getMyAddresses(std::list<char*>* result) {
+#if defined(HAVE_GETADDRINFO) && defined(HAVE_INET_PTON)
+ vnc_sockaddr_t sa;
+ struct addrinfo *ai, *current, hints;
+
+ memset(&hints, 0, sizeof(struct addrinfo));
+ hints.ai_family = AF_UNSPEC;
+ hints.ai_socktype = SOCK_STREAM;
+ hints.ai_canonname = NULL;
+ hints.ai_addr = NULL;
+ hints.ai_next = NULL;
+
+ if ((getaddrinfo(NULL, NULL, &hints, &ai)) != 0)
+ return;
+
+ for (current= ai; current != NULL; current = current->ai_next) {
+ if (current->ai_family != AF_INET && current->ai_family != AF_INET6)
+ continue;
+
+ char *addr = new char[INET6_ADDRSTRLEN];
+ inet_ntop(current->ai_family, current->ai_addr, addr, INET6_ADDRSTRLEN);
+ result->push_back(addr);
+ }
+ freeaddrinfo(ai);
+#else
const hostent* addrs = gethostbyname(0);
if (addrs == 0)
throw rdr::SystemException("gethostbyname", errorNumber);
@@ -460,6 +602,7 @@
strcpy(addr, addrC);
result->push_back(addr);
}
+#endif /* defined(HAVE_GETADDRINFO) && defined(HAVE_INET_PTON) */
}
int TcpListener::getMyPort() {
@@ -493,6 +636,15 @@
TcpFilter::verifyConnection(Socket* s) {
rfb::CharArray name;
+#ifdef HAVE_GETADDRINFO
+ vnc_sockaddr_t sa;
+ socklen_t sa_size = sizeof(sa);
+ if (getpeername(s->getFd(), &sa.u.sa, &sa_size) != 0 ||
+ sa.u.sa.sa_family != AF_INET)
+ /* Matching only works for IPv4 */
+ return false;
+#endif /* HAVE_GETADDRINFO */
+
name.buf = s->getPeerAddress();
std::list<TcpFilter::Pattern>::iterator i;
for (i=filter.begin(); i!=filter.end(); i++) {
diff --git a/common/rfb/CConnection.cxx b/common/rfb/CConnection.cxx
index 1695c3a..e0a23b5 100644
--- a/common/rfb/CConnection.cxx
+++ b/common/rfb/CConnection.cxx
@@ -181,7 +181,7 @@
if (secType != secTypeInvalid) {
os->writeU8(secType);
os->flush();
- vlog.debug("Choosing security type %s(%d)",secTypeName(secType),secType);
+ vlog.info("Choosing security type %s(%d)",secTypeName(secType),secType);
}
}
diff --git a/common/rfb/CSecurityVeNCrypt.cxx b/common/rfb/CSecurityVeNCrypt.cxx
index 77eeef9..a15da4a 100644
--- a/common/rfb/CSecurityVeNCrypt.cxx
+++ b/common/rfb/CSecurityVeNCrypt.cxx
@@ -164,7 +164,7 @@
break;
}
- vlog.debug("Choosing security type %s (%d)", secTypeName(chosenType),
+ vlog.info("Choosing security type %s (%d)", secTypeName(chosenType),
chosenType);
/* Set up the stack according to the chosen type: */
diff --git a/common/rfb/SSecurityVeNCrypt.cxx b/common/rfb/SSecurityVeNCrypt.cxx
index 9e4260f..39647f6 100644
--- a/common/rfb/SSecurityVeNCrypt.cxx
+++ b/common/rfb/SSecurityVeNCrypt.cxx
@@ -157,7 +157,7 @@
if (!haveChosenType)
chosenType = secTypeInvalid;
- vlog.debug("Choosing security type %s (%d)", secTypeName(chosenType),
+ vlog.info("Client requests security type %s (%d)", secTypeName(chosenType),
chosenType);
/* Set up the stack according to the chosen type */
diff --git a/common/rfb/SecurityServer.cxx b/common/rfb/SecurityServer.cxx
index 5bd7b2c..e0aee13 100644
--- a/common/rfb/SecurityServer.cxx
+++ b/common/rfb/SecurityServer.cxx
@@ -43,7 +43,7 @@
#endif
")",
#ifdef HAVE_GNUTLS
- "VncAuth,TLSVnc",
+ "TLSVnc,VncAuth",
#else
"VncAuth",
#endif
diff --git a/config.h.in b/config.h.in
index a50e723..490d7f6 100644
--- a/config.h.in
+++ b/config.h.in
@@ -2,6 +2,7 @@
#define PACKAGE_VERSION "@VERSION@"
#cmakedefine HAVE_INET_ATON
+#cmakedefine HAVE_INET_PTON
#cmakedefine HAVE_GETADDRINFO
#cmakedefine HAVE_GNUTLS_SET_GLOBAL_ERRNO
#cmakedefine HAVE_GNUTLS_SET_ERRNO
diff --git a/contrib/packages/rpm/el5/SOURCES/25-no-hint-fedora.conf b/contrib/packages/rpm/el5/SOURCES/25-no-hint-fedora.conf
new file mode 100644
index 0000000..9c71eb0
--- /dev/null
+++ b/contrib/packages/rpm/el5/SOURCES/25-no-hint-fedora.conf
@@ -0,0 +1,243 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+
+<fontconfig>
+
+<!-- We can't hint CJK fonts well, so turn off hinting for CJK fonts. -->
+
+ <match target="font">
+ <test name="family" compare="eq">
+ <string>Kochi Mincho</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ <edit name="embeddedbitmap" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+ <match target="font">
+ <test name="family" compare="eq">
+ <string>Kochi Gothic</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ <edit name="embeddedbitmap" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+ <match target="font">
+ <test name="family" compare="eq">
+ <string>Sazanami Mincho</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ <edit name="embeddedbitmap" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+ <match target="font">
+ <test name="family" compare="eq">
+ <string>Sazanami Gothic</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ <edit name="embeddedbitmap" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+ <match target="font">
+ <test name="family" compare="eq">
+ <string>Baekmuk Batang</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+ <match target="font">
+ <test name="family" compare="eq">
+ <string>Baekmuk Dotum</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+ <match target="font">
+ <test name="family" compare="eq">
+ <string>Baekmuk Gulim</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+ <match target="font">
+ <test name="family" compare="eq">
+ <string>Baekmuk Headline</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+ <match target="font">
+ <test name="family" compare="eq">
+ <string>AR PL Mingti2L Big5</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+ <match target="font">
+ <test name="family" compare="eq">
+ <string>AR PL ShanHeiSun Uni</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ <edit name="embeddedbitmap" mode="assign">
+ <bool>true</bool>
+ </edit>
+ </match>
+ <match target="font">
+ <test name="family" compare="eq">
+ <string>AR PL KaitiM Big5</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+ <match target="font">
+ <test name="family" compare="eq">
+ <string>AR PL ZenKai Uni</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+ <match target="font">
+ <test name="family" compare="eq">
+ <string>AR PL SungtiL GB</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+ <match target="font">
+ <test name="family" compare="eq">
+ <string>AR PL KaitiM GB</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+ <match target="font">
+ <test name="family" compare="eq">
+ <string>ZYSong18030</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+
+ <!--
+ We also need to turn off hinting for Indic fonts with a joined baseline.
+ -->
+ <match target="font">
+ <test name="family" compare="eq">
+ <string>Mukti Narrow</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+ <match target="font">
+ <test name="family" compare="eq">
+ <string>Lohit Hindi</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+ <match target="font">
+ <test name="family" compare="eq">
+ <string>Lohit Bengali</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+ <match target="font">
+ <test name="family" compare="eq">
+ <string>Lohit Punjabi</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+
+<!--
+Gujarti fonts are distorted when hinting is enabled. Turn it off.
+-->
+ <match target="font">
+ <test name="family" compare="eq">
+ <string>Lohit Gujarati</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+
+<!--
+Disabling hinting for newly added Indic fonts (kn/or/ml/te)
+-->
+ <match target="font">
+ <test name="family" compare="eq">
+ <string>Lohit Kannada</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+
+ <match target="font">
+ <test name="family" compare="eq">
+ <string>Lohit Oriya</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+
+ <match target="font">
+ <test name="family" compare="eq">
+ <string>Lohit Malayalam</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+
+ <match target="font">
+ <test name="family" compare="eq">
+ <string>Lohit Telugu</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+
+<!--
+And Sinhala
+-->
+ <match target="font">
+ <test name="family" compare="eq">
+ <string>LKLUG</string>
+ </test>
+ <edit name="hinting" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+
+</fontconfig>
diff --git a/contrib/packages/rpm/el5/SOURCES/30-aliases-fedora.conf b/contrib/packages/rpm/el5/SOURCES/30-aliases-fedora.conf
new file mode 100644
index 0000000..28cd157
--- /dev/null
+++ b/contrib/packages/rpm/el5/SOURCES/30-aliases-fedora.conf
@@ -0,0 +1,180 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- conf.d/sub-pixel.conf -->
+<fontconfig>
+
+ <!-- Alias similar families from 5 sources:
+
+ PostScript fonts:
+ Helvetica
+ Times
+ Courier
+ Microsoft fonts:
+ Arial
+ Times New Roman
+ Courier New
+ URW fonts:
+ Nimbus Sans L
+ Nimbus Roman No9 L
+ Nimbus Mono L
+ StarOffice fonts:
+ Albany
+ Thorndale
+ Cumberland
+ AMT fonts:
+ Albany AMT
+ Thorndale AMT
+ Cumberland AMT
+
+ Of these, URW fonts are metric compatible with PostScrict fonts
+ and the StarOffice and AMT ones are compatible with Microsoft
+ fonts. We want for each of them to fallback to any of these
+ available, but in an order preferring the metric-compatible ones
+ first. As an exception, we assume that URW fonts are always
+ available and do not alias them.
+
+ It seems to be really hard to do this with fontconfig. The
+ easiest way seems to be to list them all for each one.
+ -->
+
+ <!-- PostScript -->
+ <alias>
+ <family>Helvetica</family>
+ <accept>
+ <family>Nimbus Sans L</family>
+ <family>Liberation Sans</family>
+ <family>Arial</family>
+ <family>Albany</family>
+ <family>Albany AMT</family>
+ </accept>
+ </alias>
+
+ <alias>
+ <family>Times</family>
+ <accept>
+ <family>Nimbus Roman No9 L</family>
+ <family>Liberation Serif</family>
+ <family>Times New Roman</family>
+ <family>Thorndale</family>
+ <family>Thorndale AMT</family>
+ </accept>
+ </alias>
+
+ <alias>
+ <family>Courier</family>
+ <accept>
+ <family>Nimbus Mono L</family>
+ <family>Liberation Mono</family>
+ <family>Courier New</family>
+ <family>Cumberland</family>
+ <family>Cumberland AMT</family>
+ </accept>
+ </alias>
+
+
+
+ <!-- Microsoft -->
+ <alias>
+ <family>Arial</family>
+ <accept>
+ <family>Liberation Sans</family>
+ <family>Albany</family>
+ <family>Albany AMT</family>
+ <family>Helvetica</family>
+ <family>Nimbus Sans L</family>
+ </accept>
+ </alias>
+
+ <alias>
+ <family>Times New Roman</family>
+ <accept>
+ <family>Liberation Serif</family>
+ <family>Thorndale</family>
+ <family>Thorndale AMT</family>
+ <family>Times</family>
+ <family>Nimbus Roman No9 L</family>
+ </accept>
+ </alias>
+
+ <alias>
+ <family>Courier New</family>
+ <accept>
+ <family>Liberation Mono</family>
+ <family>Cumberland</family>
+ <family>Cumberland AMT</family>
+ <family>Courier</family>
+ <family>Nimbus Mono L</family>
+ </accept>
+ </alias>
+
+
+ <!-- StarOffice -->
+ <alias>
+ <family>Albany</family>
+ <accept>
+ <family>Liberation Sans</family>
+ <family>Arial</family>
+ <family>Albany AMT</family>
+ <family>Helvetica</family>
+ <family>Nimbus Sans L</family>
+ </accept>
+ </alias>
+
+ <alias>
+ <family>Thorndale</family>
+ <accept>
+ <family>Liberation Serif</family>
+ <family>Times New Roman</family>
+ <family>Thorndale AMT</family>
+ <family>Times</family>
+ <family>Nimbus Roman No9 L</family>
+ </accept>
+ </alias>
+
+ <alias>
+ <family>Cumberland</family>
+ <accept>
+ <family>Liberation Mono</family>
+ <family>Courier New</family>
+ <family>Cumberland AMT</family>
+ <family>Courier</family>
+ <family>Nimbus Mono L</family>
+ </accept>
+ </alias>
+
+
+ <!-- AMT -->
+ <alias>
+ <family>Albany AMT</family>
+ <accept>
+ <family>Liberation Sans</family>
+ <family>Arial</family>
+ <family>Albany</family>
+ <family>Helvetica</family>
+ <family>Nimbus Sans L</family>
+ </accept>
+ </alias>
+
+ <alias>
+ <family>Thorndale AMT</family>
+ <accept>
+ <family>Liberation Serif</family>
+ <family>Times New Roman</family>
+ <family>Thorndale</family>
+ <family>Times</family>
+ <family>Nimbus Roman No9 L</family>
+ </accept>
+ </alias>
+
+ <alias>
+ <family>Cumberland AMT</family>
+ <accept>
+ <family>Liberation Mono</family>
+ <family>Courier New</family>
+ <family>Cumberland</family>
+ <family>Courier</family>
+ <family>Nimbus Mono L</family>
+ </accept>
+ </alias>
+
+</fontconfig>
diff --git a/contrib/packages/rpm/el5/SOURCES/40-generic-fedora.conf b/contrib/packages/rpm/el5/SOURCES/40-generic-fedora.conf
new file mode 100644
index 0000000..c0e720b
--- /dev/null
+++ b/contrib/packages/rpm/el5/SOURCES/40-generic-fedora.conf
@@ -0,0 +1,35 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+<!--
+ Mark families with their generics so we'll get
+ something reasonable
+-->
+
+<!--
+ Serif faces
+ -->
+ <alias>
+ <family>Sazanami Mincho</family>
+ <family>AR PL ZenKai Uni</family>
+ <family>ZYSong18030</family>
+ <default><family>serif</family></default>
+ </alias>
+<!--
+ Sans-serif faces
+ -->
+ <alias>
+ <family>Sazanami Gothic</family>
+ <family>AR PL ShanHeiSun Uni</family>
+ <family>ZYSong18030</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+<!--
+ Monospace faces
+ -->
+ <alias>
+ <family>Cumberland</family>
+ <family>ZYSong18030</family>
+ <default><family>monospace</family></default>
+ </alias>
+</fontconfig>
diff --git a/contrib/packages/rpm/el5/SOURCES/64-nonlatin-fedora.conf b/contrib/packages/rpm/el5/SOURCES/64-nonlatin-fedora.conf
new file mode 100644
index 0000000..be29084
--- /dev/null
+++ b/contrib/packages/rpm/el5/SOURCES/64-nonlatin-fedora.conf
@@ -0,0 +1,67 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+ <alias>
+ <family>serif</family>
+ <prefer>
+ <family>KacstQura</family>
+ <family>Frank Ruehl CLM</family>
+ <family>Lohit Bengali</family>
+ <family>Lohit Gujarati</family>
+ <family>Lohit Hindi</family>
+ <family>Lohit Punjabi</family>
+ <family>Lohit Tamil</family>
+ <family>Lohit Malayalam</family>
+ <family>Lohit Kannada</family>
+ <family>Lohit Telugu</family>
+ <family>Lohit Oriya</family>
+ <family>LKLUG</family>
+ <family>Sazanami Mincho</family>
+ <family>AR PL Zenkai Uni</family>
+ <family>ZYSong18030</family>
+ </prefer>
+ </alias>
+ <alias>
+ <family>sans-serif</family>
+ <prefer>
+ <family>KacstQura</family>
+ <family>Lohit Bengali</family>
+ <family>Lohit Gujarati</family>
+ <family>Lohit Hindi</family>
+ <family>Lohit Punjabi</family>
+ <family>Lohit Tamil</family>
+ <family>Lohit Malayalam</family>
+ <family>Lohit Kannada</family>
+ <family>Lohit Telugu</family>
+ <family>Lohit Oriya</family>
+ <family>LKLUG</family>
+ <family>Sazanami Gothic</family>
+ <family>AR PL ShanHeiSun Uni</family>
+ <family>AR PL SungtiL GB</family>
+ <family>AR PL Mingti2L Big5</family>
+ <family>ZYSong18030</family>
+ <family>Baekmuk Gulim</family>
+ </prefer>
+ </alias>
+ <alias>
+ <family>monospace</family>
+ <prefer>
+ <family>Lohit Bengali</family>
+ <family>Lohit Gujarati</family>
+ <family>Lohit Hindi</family>
+ <family>Lohit Punjabi</family>
+ <family>Lohit Tamil</family>
+ <family>Lohit Malayalam</family>
+ <family>Lohit Kannada</family>
+ <family>Lohit Telugu</family>
+ <family>Lohit Oriya</family>
+ <family>LKLUG</family>
+ <family>Sazanami Gothic</family>
+ <family>AR PL ShanHeiSun Uni</family>
+ <family>AR PL SungtiL GB</family>
+ <family>AR PL Mingti2L Big5</family>
+ <family>ZYSong18030</family>
+ <family>Baekmuk Gulim</family>
+ </prefer>
+ </alias>
+</fontconfig>
diff --git a/contrib/packages/rpm/el5/SOURCES/75-blacklist-fedora.conf b/contrib/packages/rpm/el5/SOURCES/75-blacklist-fedora.conf
new file mode 100644
index 0000000..996c17a
--- /dev/null
+++ b/contrib/packages/rpm/el5/SOURCES/75-blacklist-fedora.conf
@@ -0,0 +1,54 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+
+<!-- Blacklist certain fonts that freetype can't handle -->
+
+<fontconfig>
+ <selectfont>
+ <rejectfont>
+ <pattern>
+ <patelt name="family"><string>Hershey-Gothic-English</string></patelt>
+ </pattern>
+ </rejectfont>
+ <rejectfont>
+ <pattern>
+ <patelt name="family"><string>Hershey-Plain-Duplex-Italic</string></patelt>
+ </pattern>
+ </rejectfont>
+ <rejectfont>
+ <pattern>
+ <patelt name="family"><string>Hershey-Plain-Duplex</string></patelt>
+ </pattern>
+ </rejectfont>
+ <rejectfont>
+ <pattern>
+ <patelt name="family"><string>Hershey-Script-Simplex</string></patelt>
+ </pattern>
+ </rejectfont>
+ <rejectfont>
+ <pattern>
+ <patelt name="family"><string>Hershey-Plain-Triplex</string></patelt>
+ </pattern>
+ </rejectfont>
+ <rejectfont>
+ <pattern>
+ <patelt name="family"><string>Hershey-Plain-Triplex-Italic</string></patelt>
+ </pattern>
+ </rejectfont>
+ <rejectfont>
+ <pattern>
+ <patelt name="family"><string>Hershey-Script-Complex</string></patelt>
+ </pattern>
+ </rejectfont>
+ <rejectfont>
+ <pattern>
+ <patelt name="family"><string>Hershey-Gothic-Italian</string></patelt>
+ </pattern>
+ </rejectfont>
+ <rejectfont>
+ <pattern>
+ <patelt name="family"><string>Hershey-Gothic-German</string></patelt>
+ </pattern>
+ </rejectfont>
+ </selectfont>
+</fontconfig>
diff --git a/contrib/packages/rpm/el5/SOURCES/FindX11.cmake b/contrib/packages/rpm/el5/SOURCES/FindX11.cmake
new file mode 100644
index 0000000..86335fc
--- /dev/null
+++ b/contrib/packages/rpm/el5/SOURCES/FindX11.cmake
@@ -0,0 +1,514 @@
+# - Find X11 installation
+# Try to find X11 on UNIX systems. The following values are defined
+# X11_FOUND - True if X11 is available
+# X11_INCLUDE_DIR - include directories to use X11
+# X11_LIBRARIES - link against these to use X11
+#
+# and also the following more fine grained variables:
+# Include paths: X11_ICE_INCLUDE_PATH, X11_ICE_LIB, X11_ICE_FOUND
+# X11_SM_INCLUDE_PATH, X11_SM_LIB, X11_SM_FOUND
+# X11_X11_INCLUDE_PATH, X11_X11_LIB
+# X11_Xaccessrules_INCLUDE_PATH, X11_Xaccess_FOUND
+# X11_Xaccessstr_INCLUDE_PATH, X11_Xaccess_FOUND
+# X11_Xau_INCLUDE_PATH, X11_Xau_LIB, X11_Xau_FOUND
+# X11_Xcomposite_INCLUDE_PATH, X11_Xcomposite_LIB, X11_Xcomposite_FOUND
+# X11_Xcursor_INCLUDE_PATH, X11_Xcursor_LIB, X11_Xcursor_FOUND
+# X11_Xdamage_INCLUDE_PATH, X11_Xdamage_LIB, X11_Xdamage_FOUND
+# X11_Xdmcp_INCLUDE_PATH, X11_Xdmcp_LIB, X11_Xdmcp_FOUND
+# X11_Xext_LIB, X11_Xext_FOUND
+# X11_dpms_INCLUDE_PATH, (in X11_Xext_LIB), X11_dpms_FOUND
+# X11_XShm_INCLUDE_PATH, (in X11_Xext_LIB), X11_XShm_FOUND
+# X11_Xshape_INCLUDE_PATH, (in X11_Xext_LIB), X11_Xshape_FOUND
+# X11_xf86misc_INCLUDE_PATH, X11_Xxf86misc_LIB, X11_xf86misc_FOUND
+# X11_xf86vmode_INCLUDE_PATH, X11_Xxf86vm_LIB X11_xf86vmode_FOUND
+# X11_Xfixes_INCLUDE_PATH, X11_Xfixes_LIB, X11_Xfixes_FOUND
+# X11_Xft_INCLUDE_PATH, X11_Xft_LIB, X11_Xft_FOUND
+# X11_Xi_INCLUDE_PATH, X11_Xi_LIB, X11_Xi_FOUND
+# X11_Xinerama_INCLUDE_PATH, X11_Xinerama_LIB, X11_Xinerama_FOUND
+# X11_Xinput_INCLUDE_PATH, X11_Xinput_LIB, X11_Xinput_FOUND
+# X11_Xkb_INCLUDE_PATH, X11_Xkb_FOUND
+# X11_Xkblib_INCLUDE_PATH, X11_Xkb_FOUND
+# X11_Xkbfile_INCLUDE_PATH, X11_Xkbfile_LIB, X11_Xkbfile_FOUND
+# X11_Xmu_INCLUDE_PATH, X11_Xmu_LIB, X11_Xmu_FOUND
+# X11_Xpm_INCLUDE_PATH, X11_Xpm_LIB, X11_Xpm_FOUND
+# X11_XTest_INCLUDE_PATH, X11_XTest_LIB, X11_XTest_FOUND
+# X11_Xrandr_INCLUDE_PATH, X11_Xrandr_LIB, X11_Xrandr_FOUND
+# X11_Xrender_INCLUDE_PATH, X11_Xrender_LIB, X11_Xrender_FOUND
+# X11_Xscreensaver_INCLUDE_PATH, X11_Xscreensaver_LIB, X11_Xscreensaver_FOUND
+# X11_Xt_INCLUDE_PATH, X11_Xt_LIB, X11_Xt_FOUND
+# X11_Xutil_INCLUDE_PATH, X11_Xutil_FOUND
+# X11_Xv_INCLUDE_PATH, X11_Xv_LIB, X11_Xv_FOUND
+# X11_XSync_INCLUDE_PATH, (in X11_Xext_LIB), X11_XSync_FOUND
+
+
+#=============================================================================
+# Copyright 2001-2009 Kitware, Inc.
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+# License text for the above reference.)
+
+if (UNIX)
+ set(X11_FOUND 0)
+ # X11 is never a framework and some header files may be
+ # found in tcl on the mac
+ set(CMAKE_FIND_FRAMEWORK_SAVE ${CMAKE_FIND_FRAMEWORK})
+ set(CMAKE_FIND_FRAMEWORK NEVER)
+ if(NOT X11_INC_SEARCH_PATH)
+ set(X11_INC_SEARCH_PATH
+ /usr/pkg/xorg/include
+ /usr/X11R6/include
+ /usr/X11R7/include
+ /usr/include/X11
+ /usr/openwin/include
+ /usr/openwin/share/include
+ /opt/graphics/OpenGL/include
+ )
+ endif()
+
+
+ if(NOT X11_LIB_SEARCH_PATH)
+ set(X11_LIB_SEARCH_PATH
+ /usr/pkg/xorg/lib
+ /usr/X11R6/lib
+ /usr/X11R7/lib
+ /usr/openwin/lib
+ )
+ endif()
+
+ find_path(X11_X11_INCLUDE_PATH X11/X.h ${X11_INC_SEARCH_PATH})
+ find_path(X11_Xlib_INCLUDE_PATH X11/Xlib.h ${X11_INC_SEARCH_PATH})
+
+ # Look for includes; keep the list sorted by name of the cmake *_INCLUDE_PATH
+ # variable (which doesn't need to match the include file name).
+
+ # Solaris lacks XKBrules.h, so we should skip kxkbd there.
+ find_path(X11_ICE_INCLUDE_PATH X11/ICE/ICE.h ${X11_INC_SEARCH_PATH})
+ find_path(X11_SM_INCLUDE_PATH X11/SM/SM.h ${X11_INC_SEARCH_PATH})
+ find_path(X11_Xaccessrules_INCLUDE_PATH X11/extensions/XKBrules.h ${X11_INC_SEARCH_PATH})
+ find_path(X11_Xaccessstr_INCLUDE_PATH X11/extensions/XKBstr.h ${X11_INC_SEARCH_PATH})
+ find_path(X11_Xau_INCLUDE_PATH X11/Xauth.h ${X11_INC_SEARCH_PATH})
+ find_path(X11_Xcomposite_INCLUDE_PATH X11/extensions/Xcomposite.h ${X11_INC_SEARCH_PATH})
+ find_path(X11_Xcursor_INCLUDE_PATH X11/Xcursor/Xcursor.h ${X11_INC_SEARCH_PATH})
+ find_path(X11_Xdamage_INCLUDE_PATH X11/extensions/Xdamage.h ${X11_INC_SEARCH_PATH})
+ find_path(X11_Xdmcp_INCLUDE_PATH X11/Xdmcp.h ${X11_INC_SEARCH_PATH})
+ find_path(X11_dpms_INCLUDE_PATH X11/extensions/dpms.h ${X11_INC_SEARCH_PATH})
+ find_path(X11_xf86misc_INCLUDE_PATH X11/extensions/xf86misc.h ${X11_INC_SEARCH_PATH})
+ find_path(X11_xf86vmode_INCLUDE_PATH X11/extensions/xf86vmode.h ${X11_INC_SEARCH_PATH})
+ find_path(X11_Xfixes_INCLUDE_PATH X11/extensions/Xfixes.h ${X11_INC_SEARCH_PATH})
+ find_path(X11_Xft_INCLUDE_PATH X11/Xft/Xft.h ${X11_INC_SEARCH_PATH})
+ find_path(X11_Xi_INCLUDE_PATH X11/extensions/XInput.h ${X11_INC_SEARCH_PATH})
+ find_path(X11_Xinerama_INCLUDE_PATH X11/extensions/Xinerama.h ${X11_INC_SEARCH_PATH})
+ find_path(X11_Xinput_INCLUDE_PATH X11/extensions/XInput.h ${X11_INC_SEARCH_PATH})
+ find_path(X11_Xkb_INCLUDE_PATH X11/extensions/XKB.h ${X11_INC_SEARCH_PATH})
+ find_path(X11_Xkblib_INCLUDE_PATH X11/XKBlib.h ${X11_INC_SEARCH_PATH})
+ find_path(X11_Xkbfile_INCLUDE_PATH X11/extensions/XKBfile.h ${X11_INC_SEARCH_PATH})
+ find_path(X11_Xmu_INCLUDE_PATH X11/Xmu/Xmu.h ${X11_INC_SEARCH_PATH})
+ find_path(X11_Xpm_INCLUDE_PATH X11/xpm.h ${X11_INC_SEARCH_PATH})
+ find_path(X11_XTest_INCLUDE_PATH X11/extensions/XTest.h ${X11_INC_SEARCH_PATH})
+ find_path(X11_XShm_INCLUDE_PATH X11/extensions/XShm.h ${X11_INC_SEARCH_PATH})
+ find_path(X11_Xrandr_INCLUDE_PATH X11/extensions/Xrandr.h ${X11_INC_SEARCH_PATH})
+ find_path(X11_Xrender_INCLUDE_PATH X11/extensions/Xrender.h ${X11_INC_SEARCH_PATH})
+ find_path(X11_XRes_INCLUDE_PATH X11/extensions/XRes.h ${X11_INC_SEARCH_PATH})
+ find_path(X11_Xscreensaver_INCLUDE_PATH X11/extensions/scrnsaver.h ${X11_INC_SEARCH_PATH})
+ find_path(X11_Xshape_INCLUDE_PATH X11/extensions/shape.h ${X11_INC_SEARCH_PATH})
+ find_path(X11_Xutil_INCLUDE_PATH X11/Xutil.h ${X11_INC_SEARCH_PATH})
+ find_path(X11_Xt_INCLUDE_PATH X11/Intrinsic.h ${X11_INC_SEARCH_PATH})
+ find_path(X11_Xv_INCLUDE_PATH X11/extensions/Xvlib.h ${X11_INC_SEARCH_PATH})
+ find_path(X11_XSync_INCLUDE_PATH X11/extensions/sync.h ${X11_INC_SEARCH_PATH})
+
+
+ find_library(X11_X11_LIB X11 ${X11_LIB_SEARCH_PATH})
+
+ # Find additional X libraries. Keep list sorted by library name.
+ find_library(X11_ICE_LIB ICE ${X11_LIB_SEARCH_PATH})
+ find_library(X11_SM_LIB SM ${X11_LIB_SEARCH_PATH})
+ find_library(X11_Xau_LIB Xau ${X11_LIB_SEARCH_PATH})
+ find_library(X11_Xcomposite_LIB Xcomposite ${X11_LIB_SEARCH_PATH})
+ find_library(X11_Xcursor_LIB Xcursor ${X11_LIB_SEARCH_PATH})
+ find_library(X11_Xdamage_LIB Xdamage ${X11_LIB_SEARCH_PATH})
+ find_library(X11_Xdmcp_LIB Xdmcp ${X11_LIB_SEARCH_PATH})
+ find_library(X11_Xext_LIB Xext ${X11_LIB_SEARCH_PATH})
+ find_library(X11_Xfixes_LIB Xfixes ${X11_LIB_SEARCH_PATH})
+ find_library(X11_Xft_LIB Xft ${X11_LIB_SEARCH_PATH})
+ find_library(X11_Xi_LIB Xi ${X11_LIB_SEARCH_PATH})
+ find_library(X11_Xinerama_LIB Xinerama ${X11_LIB_SEARCH_PATH})
+ find_library(X11_Xinput_LIB Xi ${X11_LIB_SEARCH_PATH})
+ find_library(X11_Xkbfile_LIB xkbfile ${X11_LIB_SEARCH_PATH})
+ find_library(X11_Xmu_LIB Xmu ${X11_LIB_SEARCH_PATH})
+ find_library(X11_Xpm_LIB Xpm ${X11_LIB_SEARCH_PATH})
+ find_library(X11_Xrandr_LIB Xrandr ${X11_LIB_SEARCH_PATH})
+ find_library(X11_Xrender_LIB Xrender ${X11_LIB_SEARCH_PATH})
+ find_library(X11_XRes_LIB XRes ${X11_LIB_SEARCH_PATH})
+ find_library(X11_Xscreensaver_LIB Xss ${X11_LIB_SEARCH_PATH})
+ find_library(X11_Xt_LIB Xt ${X11_LIB_SEARCH_PATH})
+ find_library(X11_XTest_LIB Xtst ${X11_LIB_SEARCH_PATH})
+ find_library(X11_Xv_LIB Xv ${X11_LIB_SEARCH_PATH})
+ find_library(X11_Xxf86misc_LIB Xxf86misc ${X11_LIB_SEARCH_PATH})
+ find_library(X11_Xxf86vm_LIB Xxf86vm ${X11_LIB_SEARCH_PATH})
+
+ set(X11_LIBRARY_DIR "")
+ if(X11_X11_LIB)
+ get_filename_component(X11_LIBRARY_DIR ${X11_X11_LIB} PATH)
+ endif()
+
+ set(X11_INCLUDE_DIR) # start with empty list
+ if(X11_X11_INCLUDE_PATH)
+ set(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_X11_INCLUDE_PATH})
+ endif()
+
+ if(X11_Xlib_INCLUDE_PATH)
+ set(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xlib_INCLUDE_PATH})
+ endif()
+
+ if(X11_Xutil_INCLUDE_PATH)
+ set(X11_Xutil_FOUND TRUE)
+ set(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xutil_INCLUDE_PATH})
+ endif()
+
+ if(X11_Xshape_INCLUDE_PATH)
+ set(X11_Xshape_FOUND TRUE)
+ set(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xshape_INCLUDE_PATH})
+ endif()
+
+ set(X11_LIBRARIES) # start with empty list
+ if(X11_X11_LIB)
+ set(X11_LIBRARIES ${X11_LIBRARIES} ${X11_X11_LIB})
+ endif()
+
+ if(X11_Xext_LIB)
+ set(X11_Xext_FOUND TRUE)
+ set(X11_LIBRARIES ${X11_LIBRARIES} ${X11_Xext_LIB})
+ endif()
+
+ if(X11_Xt_LIB AND X11_Xt_INCLUDE_PATH)
+ set(X11_Xt_FOUND TRUE)
+ endif()
+
+ if(X11_Xft_LIB AND X11_Xft_INCLUDE_PATH)
+ set(X11_Xft_FOUND TRUE)
+ set(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xft_INCLUDE_PATH})
+ endif()
+
+ if(X11_Xv_LIB AND X11_Xv_INCLUDE_PATH)
+ set(X11_Xv_FOUND TRUE)
+ set(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xv_INCLUDE_PATH})
+ endif()
+
+ if (X11_Xau_LIB AND X11_Xau_INCLUDE_PATH)
+ set(X11_Xau_FOUND TRUE)
+ endif ()
+
+ if (X11_Xdmcp_INCLUDE_PATH AND X11_Xdmcp_LIB)
+ set(X11_Xdmcp_FOUND TRUE)
+ set(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xdmcp_INCLUDE_PATH})
+ set(X11_LIBRARIES ${X11_LIBRARIES} ${X11_Xdmcp_LIB})
+ if (X11_Xau_FOUND)
+ set(X11_LIBRARIES ${X11_LIBRARIES} ${X11_Xau_LIB})
+ endif ()
+ endif ()
+
+ if (X11_Xaccessrules_INCLUDE_PATH AND X11_Xaccessstr_INCLUDE_PATH)
+ set(X11_Xaccess_FOUND TRUE)
+ set(X11_Xaccess_INCLUDE_PATH ${X11_Xaccessstr_INCLUDE_PATH})
+ set(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xaccess_INCLUDE_PATH})
+ endif ()
+
+ if (X11_Xpm_INCLUDE_PATH AND X11_Xpm_LIB)
+ set(X11_Xpm_FOUND TRUE)
+ set(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xpm_INCLUDE_PATH})
+ endif ()
+
+ if (X11_Xcomposite_INCLUDE_PATH AND X11_Xcomposite_LIB)
+ set(X11_Xcomposite_FOUND TRUE)
+ set(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xcomposite_INCLUDE_PATH})
+ endif ()
+
+ if (X11_Xdamage_INCLUDE_PATH AND X11_Xdamage_LIB)
+ set(X11_Xdamage_FOUND TRUE)
+ set(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xdamage_INCLUDE_PATH})
+ endif ()
+
+ if (X11_XShm_INCLUDE_PATH)
+ set(X11_XShm_FOUND TRUE)
+ set(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_XShm_INCLUDE_PATH})
+ endif ()
+
+ if (X11_XTest_INCLUDE_PATH AND X11_XTest_LIB)
+ set(X11_XTest_FOUND TRUE)
+ set(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_XTest_INCLUDE_PATH})
+ endif ()
+
+ if (X11_Xi_INCLUDE_PATH AND X11_Xi_LIB)
+ set(X11_Xi_FOUND TRUE)
+ set(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xi_INCLUDE_PATH})
+ endif ()
+
+ if (X11_Xinerama_INCLUDE_PATH AND X11_Xinerama_LIB)
+ set(X11_Xinerama_FOUND TRUE)
+ set(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xinerama_INCLUDE_PATH})
+ endif ()
+
+ if (X11_Xfixes_INCLUDE_PATH AND X11_Xfixes_LIB)
+ set(X11_Xfixes_FOUND TRUE)
+ set(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xfixes_INCLUDE_PATH})
+ endif ()
+
+ if (X11_Xrender_INCLUDE_PATH AND X11_Xrender_LIB)
+ set(X11_Xrender_FOUND TRUE)
+ set(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xrender_INCLUDE_PATH})
+ endif ()
+
+ if (X11_XRes_INCLUDE_PATH AND X11_XRes_LIB)
+ set(X11_XRes_FOUND TRUE)
+ set(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_XRes_INCLUDE_PATH})
+ endif ()
+
+ if (X11_Xrandr_INCLUDE_PATH AND X11_Xrandr_LIB)
+ set(X11_Xrandr_FOUND TRUE)
+ set(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xrandr_INCLUDE_PATH})
+ endif ()
+
+ if (X11_xf86misc_INCLUDE_PATH AND X11_Xxf86misc_LIB)
+ set(X11_xf86misc_FOUND TRUE)
+ set(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_xf86misc_INCLUDE_PATH})
+ endif ()
+
+ if (X11_xf86vmode_INCLUDE_PATH AND X11_Xxf86vm_LIB)
+ set(X11_xf86vmode_FOUND TRUE)
+ set(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_xf86vmode_INCLUDE_PATH})
+ endif ()
+
+ if (X11_Xcursor_INCLUDE_PATH AND X11_Xcursor_LIB)
+ set(X11_Xcursor_FOUND TRUE)
+ set(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xcursor_INCLUDE_PATH})
+ endif ()
+
+ if (X11_Xscreensaver_INCLUDE_PATH AND X11_Xscreensaver_LIB)
+ set(X11_Xscreensaver_FOUND TRUE)
+ set(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xscreensaver_INCLUDE_PATH})
+ endif ()
+
+ if (X11_dpms_INCLUDE_PATH)
+ set(X11_dpms_FOUND TRUE)
+ set(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_dpms_INCLUDE_PATH})
+ endif ()
+
+ if (X11_Xkb_INCLUDE_PATH AND X11_Xkblib_INCLUDE_PATH AND X11_Xlib_INCLUDE_PATH)
+ set(X11_Xkb_FOUND TRUE)
+ set(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xkb_INCLUDE_PATH} )
+ endif ()
+
+ if (X11_Xkbfile_INCLUDE_PATH AND X11_Xkbfile_LIB AND X11_Xlib_INCLUDE_PATH)
+ set(X11_Xkbfile_FOUND TRUE)
+ set(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xkbfile_INCLUDE_PATH} )
+ endif ()
+
+ if (X11_Xmu_INCLUDE_PATH AND X11_Xmu_LIB)
+ set(X11_Xmu_FOUND TRUE)
+ set(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xmu_INCLUDE_PATH})
+ endif ()
+
+ if (X11_Xinput_INCLUDE_PATH AND X11_Xinput_LIB)
+ set(X11_Xinput_FOUND TRUE)
+ set(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xinput_INCLUDE_PATH})
+ endif ()
+
+ if (X11_XSync_INCLUDE_PATH)
+ set(X11_XSync_FOUND TRUE)
+ set(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_XSync_INCLUDE_PATH})
+ endif ()
+
+ if(X11_ICE_LIB AND X11_ICE_INCLUDE_PATH)
+ set(X11_ICE_FOUND TRUE)
+ endif()
+
+ if(X11_SM_LIB AND X11_SM_INCLUDE_PATH)
+ set(X11_SM_FOUND TRUE)
+ endif()
+
+ # Most of the X11 headers will be in the same directories, avoid
+ # creating a huge list of duplicates.
+ if (X11_INCLUDE_DIR)
+ list(REMOVE_DUPLICATES X11_INCLUDE_DIR)
+ endif ()
+
+ # Deprecated variable for backwards compatibility with CMake 1.4
+ if (X11_X11_INCLUDE_PATH AND X11_LIBRARIES)
+ set(X11_FOUND 1)
+ endif ()
+
+ if(X11_FOUND)
+ include(/usr/share/cmake28/Modules/CheckFunctionExists.cmake)
+ include(/usr/share/cmake28/Modules/CheckLibraryExists.cmake)
+
+ # Translated from an autoconf-generated configure script.
+ # See libs.m4 in autoconf's m4 directory.
+ if($ENV{ISC} MATCHES "^yes$")
+ set(X11_X_EXTRA_LIBS -lnsl_s -linet)
+ else()
+ set(X11_X_EXTRA_LIBS "")
+
+ # See if XOpenDisplay in X11 works by itself.
+ CHECK_LIBRARY_EXISTS("${X11_LIBRARIES}" "XOpenDisplay" "${X11_LIBRARY_DIR}" X11_LIB_X11_SOLO)
+ if(NOT X11_LIB_X11_SOLO)
+ # Find library needed for dnet_ntoa.
+ CHECK_LIBRARY_EXISTS("dnet" "dnet_ntoa" "" X11_LIB_DNET_HAS_DNET_NTOA)
+ if (X11_LIB_DNET_HAS_DNET_NTOA)
+ set (X11_X_EXTRA_LIBS ${X11_X_EXTRA_LIBS} -ldnet)
+ else ()
+ CHECK_LIBRARY_EXISTS("dnet_stub" "dnet_ntoa" "" X11_LIB_DNET_STUB_HAS_DNET_NTOA)
+ if (X11_LIB_DNET_STUB_HAS_DNET_NTOA)
+ set (X11_X_EXTRA_LIBS ${X11_X_EXTRA_LIBS} -ldnet_stub)
+ endif ()
+ endif ()
+ endif()
+
+ # Find library needed for gethostbyname.
+ CHECK_FUNCTION_EXISTS("gethostbyname" CMAKE_HAVE_GETHOSTBYNAME)
+ if(NOT CMAKE_HAVE_GETHOSTBYNAME)
+ CHECK_LIBRARY_EXISTS("nsl" "gethostbyname" "" CMAKE_LIB_NSL_HAS_GETHOSTBYNAME)
+ if (CMAKE_LIB_NSL_HAS_GETHOSTBYNAME)
+ set (X11_X_EXTRA_LIBS ${X11_X_EXTRA_LIBS} -lnsl)
+ else ()
+ CHECK_LIBRARY_EXISTS("bsd" "gethostbyname" "" CMAKE_LIB_BSD_HAS_GETHOSTBYNAME)
+ if (CMAKE_LIB_BSD_HAS_GETHOSTBYNAME)
+ set (X11_X_EXTRA_LIBS ${X11_X_EXTRA_LIBS} -lbsd)
+ endif ()
+ endif ()
+ endif()
+
+ # Find library needed for connect.
+ CHECK_FUNCTION_EXISTS("connect" CMAKE_HAVE_CONNECT)
+ if(NOT CMAKE_HAVE_CONNECT)
+ CHECK_LIBRARY_EXISTS("socket" "connect" "" CMAKE_LIB_SOCKET_HAS_CONNECT)
+ if (CMAKE_LIB_SOCKET_HAS_CONNECT)
+ set (X11_X_EXTRA_LIBS -lsocket ${X11_X_EXTRA_LIBS})
+ endif ()
+ endif()
+
+ # Find library needed for remove.
+ CHECK_FUNCTION_EXISTS("remove" CMAKE_HAVE_REMOVE)
+ if(NOT CMAKE_HAVE_REMOVE)
+ CHECK_LIBRARY_EXISTS("posix" "remove" "" CMAKE_LIB_POSIX_HAS_REMOVE)
+ if (CMAKE_LIB_POSIX_HAS_REMOVE)
+ set (X11_X_EXTRA_LIBS ${X11_X_EXTRA_LIBS} -lposix)
+ endif ()
+ endif()
+
+ # Find library needed for shmat.
+ CHECK_FUNCTION_EXISTS("shmat" CMAKE_HAVE_SHMAT)
+ if(NOT CMAKE_HAVE_SHMAT)
+ CHECK_LIBRARY_EXISTS("ipc" "shmat" "" CMAKE_LIB_IPS_HAS_SHMAT)
+ if (CMAKE_LIB_IPS_HAS_SHMAT)
+ set (X11_X_EXTRA_LIBS ${X11_X_EXTRA_LIBS} -lipc)
+ endif ()
+ endif()
+ endif()
+
+ if (X11_ICE_FOUND)
+ CHECK_LIBRARY_EXISTS("ICE" "IceConnectionNumber" "${X11_LIBRARY_DIR}"
+ CMAKE_LIB_ICE_HAS_ICECONNECTIONNUMBER)
+ if(CMAKE_LIB_ICE_HAS_ICECONNECTIONNUMBER)
+ set (X11_X_PRE_LIBS ${X11_ICE_LIB})
+ if(X11_SM_LIB)
+ set (X11_X_PRE_LIBS ${X11_SM_LIB} ${X11_X_PRE_LIBS})
+ endif()
+ endif()
+ endif ()
+
+ if (X11_Xdmcp_FOUND)
+ set (X11_X_EXTRA_LIBS ${X11_X_EXTRA_LIBS} ${X11_Xdmcp_LIB})
+ endif ()
+
+ if (X11_Xau_FOUND)
+ set (X11_X_EXTRA_LIBS ${X11_X_EXTRA_LIBS} ${X11_Xau_LIB})
+ endif ()
+
+ # Build the final list of libraries.
+ set(X11_LIBRARIES ${X11_X_PRE_LIBS} ${X11_LIBRARIES} ${X11_X_EXTRA_LIBS})
+
+ include(/usr/share/cmake28/Modules/FindPackageMessage.cmake)
+ FIND_PACKAGE_MESSAGE(X11 "Found X11: ${X11_X11_LIB}"
+ "[${X11_X11_LIB}][${X11_INCLUDE_DIR}]")
+ else ()
+ if (X11_FIND_REQUIRED)
+ message(FATAL_ERROR "Could not find X11")
+ endif ()
+ endif ()
+
+ mark_as_advanced(
+ X11_X11_INCLUDE_PATH
+ X11_X11_LIB
+ X11_Xext_LIB
+ X11_Xau_LIB
+ X11_Xau_INCLUDE_PATH
+ X11_Xlib_INCLUDE_PATH
+ X11_Xutil_INCLUDE_PATH
+ X11_Xcomposite_INCLUDE_PATH
+ X11_Xcomposite_LIB
+ X11_Xaccess_INCLUDE_PATH
+ X11_Xfixes_LIB
+ X11_Xfixes_INCLUDE_PATH
+ X11_Xrandr_LIB
+ X11_Xrandr_INCLUDE_PATH
+ X11_Xdamage_LIB
+ X11_Xdamage_INCLUDE_PATH
+ X11_Xrender_LIB
+ X11_Xrender_INCLUDE_PATH
+ X11_XRes_LIB
+ X11_XRes_INCLUDE_PATH
+ X11_Xxf86misc_LIB
+ X11_xf86misc_INCLUDE_PATH
+ X11_Xxf86vm_LIB
+ X11_xf86vmode_INCLUDE_PATH
+ X11_Xi_LIB
+ X11_Xi_INCLUDE_PATH
+ X11_Xinerama_LIB
+ X11_Xinerama_INCLUDE_PATH
+ X11_XTest_LIB
+ X11_XTest_INCLUDE_PATH
+ X11_Xcursor_LIB
+ X11_Xcursor_INCLUDE_PATH
+ X11_dpms_INCLUDE_PATH
+ X11_Xt_LIB
+ X11_Xt_INCLUDE_PATH
+ X11_Xdmcp_LIB
+ X11_LIBRARIES
+ X11_Xaccessrules_INCLUDE_PATH
+ X11_Xaccessstr_INCLUDE_PATH
+ X11_Xdmcp_INCLUDE_PATH
+ X11_Xkb_INCLUDE_PATH
+ X11_Xkblib_INCLUDE_PATH
+ X11_Xkbfile_INCLUDE_PATH
+ X11_Xkbfile_LIB
+ X11_Xmu_INCLUDE_PATH
+ X11_Xmu_LIB
+ X11_Xscreensaver_INCLUDE_PATH
+ X11_Xscreensaver_LIB
+ X11_Xpm_INCLUDE_PATH
+ X11_Xpm_LIB
+ X11_Xinput_LIB
+ X11_Xinput_INCLUDE_PATH
+ X11_Xft_LIB
+ X11_Xft_INCLUDE_PATH
+ X11_Xshape_INCLUDE_PATH
+ X11_Xv_LIB
+ X11_Xv_INCLUDE_PATH
+ X11_XShm_INCLUDE_PATH
+ X11_ICE_LIB
+ X11_ICE_INCLUDE_PATH
+ X11_SM_LIB
+ X11_SM_INCLUDE_PATH
+ X11_XSync_INCLUDE_PATH
+ )
+ set(CMAKE_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK_SAVE})
+endif ()
+
+# X11_FIND_REQUIRED_<component> could be checked too
diff --git a/contrib/packages/rpm/el5/SOURCES/fc-cache.1 b/contrib/packages/rpm/el5/SOURCES/fc-cache.1
new file mode 100644
index 0000000..3d4eebf
--- /dev/null
+++ b/contrib/packages/rpm/el5/SOURCES/fc-cache.1
@@ -0,0 +1,75 @@
+.\" This manpage has been automatically generated by docbook2man
+.\" from a DocBook document. This tool can be found at:
+.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>
+.\" Please send any bug reports, improvements, comments, patches,
+.\" etc. to Steve Cheng <steve@ggi-project.org>.
+.TH "FC-CACHE" "1" "16 January 2007" "" ""
+
+.SH NAME
+fc-cache \- build font information cache files
+.SH SYNOPSIS
+
+\fBfc-cache\fR [ \fB-fsvV?\fR ] [ \fB--force\fR ] [ \fB--system-only\fR ] [ \fB--verbose\fR ] [ \fB--version\fR ] [ \fB--help\fR ] [ \fB\fIdirs\fB\fR ]
+
+.SH "DESCRIPTION"
+.PP
+\fBfc-cache\fR scans the font directories on
+the system and builds font information cache files for
+applications using fontconfig for their font handling.
+.PP
+If directory arguments are not given,
+\fBfc-cache\fR uses each directory in the
+current font configuration. Each directory is scanned for
+font files readable by FreeType. A cache is created which
+contains properties of each font and the associated filename.
+This cache is used to speed up application startup when using
+the fontconfig library.
+.PP
+Note that \fBfc-cache\fR must be executed
+once per architecture to generate font information customized
+for that architecture. On a subsequent run,
+\fBfc-cache\fR will augment the cache
+information files with the information for the new
+architecture.
+.SH "OPTIONS"
+.PP
+This program follows the usual GNU command line syntax,
+with long options starting with two dashes (`-'). A summary of
+options is included below.
+.TP
+\fB-f --force \fR
+Force re-generation of apparently up-to-date cache files,
+overriding the timestamp checking.
+.TP
+\fB-s --system-only \fR
+Only scan system-wide directories, omitting the places
+located in the user's home directory.
+.TP
+\fB-v --verbose \fR
+Display status information while busy.
+.TP
+\fB-? --help \fR
+Show summary of options.
+.TP
+\fB-V --version \fR
+Show version of the program and exit.
+.TP
+\fB\fIdirs\fB \fR
+A list of directories to scan for fonts.
+.SH "FILES"
+.TP
+\fB\fIfonts.cache-2\fB\fR
+These files are generated by \fBfc-cache\fR
+and contain maps from file names to font properties. They are
+read by the fontconfig library at application startup to locate
+appropriate fonts.
+.SH "SEE ALSO"
+.PP
+\fBfc-list\fR (1).
+.PP
+The fontconfig user's guide, in HTML format:
+\fI/usr/share/doc/fontconfig/fontconfig-user.html\fR\&.
+.SH "AUTHOR"
+.PP
+This manual page was written by Keith Packard
+<keithp@keithp.com> and Josselin Mouette <joss@debian.org>\&.
diff --git a/contrib/packages/rpm/el5/SOURCES/fc-cat.1 b/contrib/packages/rpm/el5/SOURCES/fc-cat.1
new file mode 100644
index 0000000..f87ef56
--- /dev/null
+++ b/contrib/packages/rpm/el5/SOURCES/fc-cat.1
@@ -0,0 +1,37 @@
+.\" This manpage has been automatically generated by docbook2man
+.\" from a DocBook document. This tool can be found at:
+.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>
+.\" Please send any bug reports, improvements, comments, patches,
+.\" etc. to Steve Cheng <steve@ggi-project.org>.
+.TH "FC-CAT" "1" "16 January 2007" "" ""
+
+.SH NAME
+fc-cat \- read font information cache files
+.SH SYNOPSIS
+
+\fBfc-cat < fonts-cache-2-file >\fR [ \fB-V?\fR ] [ \fB--version\fR ] [ \fB--help\fR ] [ \fB\fIdirs\fB\fR ]
+
+.SH "DESCRIPTION"
+.PP
+\fBfc-cat\fR reads a font information cache file
+and emits it in ASCII form.
+.SH "OPTIONS"
+.PP
+This program follows the usual GNU command line syntax,
+with long options starting with two dashes (`-'). A summary of
+options is included below.
+.TP
+\fB-? --help \fR
+Show summary of options.
+.TP
+\fB-V --version \fR
+Show version of the program and exit.
+.SH "SEE ALSO"
+.PP
+\fBfc-cache\fR (1).
+.PP
+The fontconfig user's guide, in HTML format:
+\fI/usr/share/doc/fontconfig/fontconfig-user.html\fR\&.
+.SH "AUTHOR"
+.PP
+This manual page was written by Patrick Lam <plam@mit.edu>\&.
diff --git a/contrib/packages/rpm/el5/SOURCES/fc-list.1 b/contrib/packages/rpm/el5/SOURCES/fc-list.1
new file mode 100644
index 0000000..8ccc850
--- /dev/null
+++ b/contrib/packages/rpm/el5/SOURCES/fc-list.1
@@ -0,0 +1,61 @@
+.\" This manpage has been automatically generated by docbook2man
+.\" from a DocBook document. This tool can be found at:
+.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>
+.\" Please send any bug reports, improvements, comments, patches,
+.\" etc. to Steve Cheng <steve@ggi-project.org>.
+.TH "FC-LIST" "1" "16 January 2007" "" ""
+
+.SH NAME
+fc-list \- list available fonts
+.SH SYNOPSIS
+
+\fBfc-list\fR [ \fB-vV?\fR ] [ \fB--verbose\fR ] [ \fB--version\fR ] [ \fB--help\fR ] [ \fB\fIpattern\fB\fR ] [ \fB\fIelement\fB\fR ]
+
+.SH "DESCRIPTION"
+.PP
+\fBfc-list\fR lists fonts and styles
+available on the system for applications using fontconfig.
+.SH "OPTIONS"
+.PP
+This program follows the usual GNU command line syntax,
+with long options starting with two dashes (`-'). A summary of
+options is included below.
+.TP
+\fB-v --verbose \fR
+Display status information while busy.
+.TP
+\fB-? --help \fR
+Show summary of options.
+.TP
+\fB-V --version \fR
+Show version of the program and exit.
+.TP
+\fB\fIpattern\fB \fR
+If this argument is set, only fonts matching
+\fIpattern\fR are displayed.
+.TP
+\fB\fIelement\fB \fR
+If set, the \fIelement\fR property
+is displayed for matching fonts.
+.SH "EXAMPLES"
+.TP
+\fBfc-list\fR
+Lists all font faces.
+.TP
+\fBfc-list :lang=hi\fR
+Lists font faces that cover Hindi.
+.TP
+\fBfc-list : family style file spacing \fR
+Lists the filename and spacing value for each font
+face. ``:'' is an empty pattern that matches all
+fonts.
+.SH "SEE ALSO"
+.PP
+\fBfc-cache\fR (1).
+.PP
+The fontconfig user's guide, in HTML format:
+\fI/usr/share/doc/fontconfig/fontconfig-user.html\fR\&.
+.SH "AUTHOR"
+.PP
+This manual page was written by Keith Packard
+<keithp@keithp.com> and Josselin Mouette <joss@debian.org>\&.
diff --git a/contrib/packages/rpm/el5/SOURCES/fc-match.1 b/contrib/packages/rpm/el5/SOURCES/fc-match.1
new file mode 100644
index 0000000..5b8a7f9
--- /dev/null
+++ b/contrib/packages/rpm/el5/SOURCES/fc-match.1
@@ -0,0 +1,51 @@
+.\" This manpage has been automatically generated by docbook2man
+.\" from a DocBook document. This tool can be found at:
+.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>
+.\" Please send any bug reports, improvements, comments, patches,
+.\" etc. to Steve Cheng <steve@ggi-project.org>.
+.TH "FC-MATCH" "1" "16 January 2007" "" ""
+
+.SH NAME
+fc-match \- match available fonts
+.SH SYNOPSIS
+
+\fBfc-match\fR [ \fB-svV?\fR ] [ \fB--sort\fR ] [ \fB--verbose\fR ] [ \fB--version\fR ] [ \fB--help\fR ] [ \fB\fIfont-pattern\fB\fR ]
+
+.SH "DESCRIPTION"
+.PP
+\fBfc-match\fR matches font-pattern (empty
+pattern by default) using the normal fontconfig matching rules to find
+the best font available. If --sort is given, the sorted list of best
+matching fonts is displayed. With --verbose, the whole font pattern
+for each match is printed, otherwise only the file, family and style
+are printed..
+.SH "OPTIONS"
+.PP
+This program follows the usual GNU command line syntax,
+with long options starting with two dashes (`-'). A summary of
+options is included below.
+.TP
+\fB-v --verbose \fR
+Print whole font pattern for each match.
+.TP
+\fB-? --help \fR
+Show summary of options.
+.TP
+\fB-V --version \fR
+Show version of the program and exit.
+.TP
+\fB-s --sort \fR
+Displays sorted list of best matching fonts.
+.TP
+\fB\fIfont-pattern\fB \fR
+Displays fonts matching
+\fIfont-pattern\fR (uses empty pattern by default).
+.SH "SEE ALSO"
+.PP
+\fBfc-list\fR (1).
+.PP
+The fontconfig user's guide, in HTML format:
+\fI/usr/share/doc/fontconfig/fontconfig-user.html\fR\&.
+.SH "AUTHOR"
+.PP
+This manual page was updated by Patrick Lam <plam@csail.mit.edu>\&.
diff --git a/contrib/packages/rpm/el5/SOURCES/fltk-1.3.2-libdl.patch b/contrib/packages/rpm/el5/SOURCES/fltk-1.3.2-libdl.patch
new file mode 100644
index 0000000..78c8fd4
--- /dev/null
+++ b/contrib/packages/rpm/el5/SOURCES/fltk-1.3.2-libdl.patch
@@ -0,0 +1,100 @@
+Index: CMakeLists.txt
+===================================================================
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt (revision 9965)
++++ b/CMakeLists.txt (working copy)
+@@ -138,6 +139,7 @@
+ #######################################################################
+ # libraries
+ find_library(LIB_CAIRO cairo)
++find_library(LIB_dl dl)
+ find_library(LIB_fontconfig fontconfig)
+ find_library(LIB_freetype freetype)
+ find_library(LIB_GL GL)
+@@ -146,7 +148,7 @@
+ find_library(LIB_png png)
+ find_library(LIB_zlib z)
+
+-mark_as_advanced(LIB_CAIRO LIB_fontconfig LIB_freetype)
++mark_as_advanced(LIB_CAIRO LIB_dl LIB_fontconfig LIB_freetype)
+ mark_as_advanced(LIB_GL LIB_MesaGL)
+ mark_as_advanced(LIB_jpeg LIB_png LIB_zlib)
+
+Index: src/CMakeLists.txt
+===================================================================
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+--- a/src/CMakeLists.txt (revision 9965)
++++ b/src/CMakeLists.txt (working copy)
+@@ -220,7 +220,7 @@
+ endif(MSVC)
+
+ if(USE_THREADS)
+- target_link_libraries(fltk ${CMAKE_THREAD_LIBS_INIT})
++ target_link_libraries(fltk ${CMAKE_THREAD_LIBS_INIT} ${LIB_dl})
+ endif(USE_THREADS)
+
+ if(USE_X11)
+@@ -334,7 +334,7 @@
+ endif(MSVC)
+
+ if(USE_THREADS)
+- target_link_libraries(fltk_SHARED ${CMAKE_THREAD_LIBS_INIT})
++ target_link_libraries(fltk_SHARED ${CMAKE_THREAD_LIBS_INIT} ${LIB_dl})
+ endif(USE_THREADS)
+
+ if(USE_X11)
+@@ -384,11 +384,11 @@
+ endif(MSVC)
+
+ if(USE_THREADS)
+- target_link_libraries(fltk_SHARED ${CMAKE_THREAD_LIBS_INIT})
++ target_link_libraries(fltk_forms_SHARED ${CMAKE_THREAD_LIBS_INIT} ${LIB_dl})
+ endif(USE_THREADS)
+
+ if(USE_X11)
+- target_link_libraries(fltk_SHARED ${X11_LIBRARIES})
++ target_link_libraries(fltk_forms_SHARED ${X11_LIBRARIES})
+ endif(USE_X11)
+
+ #######################################################################
+diff -Naur a/CMake/FindDL.cmake b/CMake/FindDL.cmake
+--- a/CMake/FindDL.cmake 1969-12-31 19:00:00.000000000 -0500
++++ b/CMake/FindDL.cmake 2014-10-29 23:00:18.000000000 -0400
+@@ -0,0 +1,37 @@
++# - Find dl functions
++# This module finds dl libraries.
++#
++# It sets the following variables:
++# DL_FOUND - Set to false, or undefined, if dl libraries aren't found.
++# DL_INCLUDE_DIR - The dl include directory.
++# DL_LIBRARY - The dl library to link against.
++
++INCLUDE(CheckFunctionExists)
++
++FIND_PATH(DL_INCLUDE_DIR NAMES dlfcn.h)
++FIND_LIBRARY(DL_LIBRARY NAMES dl)
++
++IF (DL_LIBRARY)
++ SET(DL_FOUND TRUE)
++ELSE (DL_LIBRARY)
++ # if dlopen can be found without linking in dl then,
++ # dlopen is part of libc, so don't need to link extra libs.
++ CHECK_FUNCTION_EXISTS(dlopen DL_FOUND)
++ SET(DL_LIBRARY "")
++ENDIF (DL_LIBRARY)
++
++IF (DL_FOUND)
++
++ # show which dl was found only if not quiet
++ IF (NOT DL_FIND_QUIETLY)
++ MESSAGE(STATUS "Found dl: ${DL_LIBRARY}")
++ ENDIF (NOT DL_FIND_QUIETLY)
++
++ELSE (DL_FOUND)
++
++ # fatal error if dl is required but not found
++ IF (DL_FIND_REQUIRED)
++ MESSAGE(FATAL_ERROR "Could not find dl")
++ ENDIF (DL_FIND_REQUIRED)
++
++ENDIF (DL_FOUND)
diff --git a/contrib/packages/rpm/el5/SOURCES/fltk-1.3.2-static-libs.patch b/contrib/packages/rpm/el5/SOURCES/fltk-1.3.2-static-libs.patch
new file mode 100644
index 0000000..0341612
--- /dev/null
+++ b/contrib/packages/rpm/el5/SOURCES/fltk-1.3.2-static-libs.patch
@@ -0,0 +1,74 @@
+--- fltk-1.3.2/src/CMakeLists.txt 2014-09-02 22:05:40.000000000 -0400
++++ fltk-1.3.2/src/CMakeLists.txt 2014-09-02 22:12:35.000000000 -0400
+@@ -223,10 +223,6 @@
+ target_link_libraries(fltk ${CMAKE_THREAD_LIBS_INIT} ${LIB_dl})
+ endif(USE_THREADS)
+
+-if(USE_X11)
+- target_link_libraries(fltk ${X11_LIBRARIES})
+-endif(USE_X11)
+-
+ if(WIN32)
+ target_link_libraries(fltk comctl32)
+ endif(WIN32)
+@@ -239,10 +235,6 @@
+ target_link_libraries(fltk ${X11_Xinerama_LIB})
+ endif(HAVE_XINERAMA)
+
+-if(HAVE_XFIXES)
+- target_link_libraries(fltk ${X11_Xfixes_LIB})
+-endif(HAVE_XFIXES)
+-
+ if(HAVE_XCURSOR)
+ target_link_libraries(fltk ${X11_Xcursor_LIB})
+ endif(HAVE_XCURSOR)
+@@ -251,10 +243,30 @@
+ target_link_libraries(fltk ${X11_Xft_LIB})
+ endif(USE_XFT)
+
++if(HAVE_XFIXES)
++ target_link_libraries(fltk ${X11_Xfixes_LIB})
++endif(HAVE_XFIXES)
++
++if(X11_Xrender_FOUND)
++ target_link_libraries(fltk ${X11_Xrender_LIB})
++endif(X11_Xrender_FOUND)
++
++if(USE_X11)
++ target_link_libraries(fltk ${X11_LIBRARIES})
++endif(USE_X11)
++
+ if(LIB_fontconfig)
+ target_link_libraries(fltk ${LIB_fontconfig})
+ endif(LIB_fontconfig)
+
++if(LIB_EXPAT)
++ target_link_libraries(fltk ${LIB_EXPAT})
++endif(LIB_EXPAT)
++
++if(LIB_freetype)
++ target_link_libraries(fltk ${LIB_freetype} ${LIB_dl})
++endif(LIB_freetype)
++
+ #######################################################################
+ add_library(fltk_forms STATIC ${FLCPPFILES})
+ target_link_libraries(fltk_forms fltk)
+--- fltk-1.3.2/CMakeLists.txt 2014-09-02 22:56:47.000000000 -0400
++++ fltk-1.3.2/CMakeLists.txt 2014-09-02 22:57:19.000000000 -0400
+@@ -147,6 +147,7 @@
+ find_library(LIB_jpeg jpeg)
+ find_library(LIB_png png)
+ find_library(LIB_zlib z)
++find_library(LIB_EXPAT expat)
+
+ mark_as_advanced(LIB_CAIRO LIB_dl LIB_fontconfig LIB_freetype)
+ mark_as_advanced(LIB_GL LIB_MesaGL)
+@@ -383,7 +383,7 @@
+
+ if(OPENGL_FOUND)
+ set(CMAKE_REQUIRED_INCLUDES ${OPENGL_INCLUDE_DIR}/GL)
+- set(CMAKE_REQUIRED_LIBRARIES -lGLU -lGL)
++ set(CMAKE_REQUIRED_LIBRARIES -lGLU -lGL -lXdmcp -lXau)
+ CHECK_FUNCTION_EXISTS(glXGetProcAddressARB HAVE_GLXGETPROCADDRESSARB)
+ set(FLTK_GL_FOUND TRUE)
+ else()
diff --git a/contrib/packages/rpm/el5/SOURCES/tigervnc-static-fltk.patch b/contrib/packages/rpm/el5/SOURCES/tigervnc-static-fltk.patch
new file mode 100644
index 0000000..650da73
--- /dev/null
+++ b/contrib/packages/rpm/el5/SOURCES/tigervnc-static-fltk.patch
@@ -0,0 +1,22 @@
+--- a/cmake/StaticBuild.cmake 2014-10-29 20:23:24.000000000 -0400
++++ b/cmake/StaticBuild.cmake 2014-10-29 20:24:05.000000000 -0400
+@@ -68,7 +68,7 @@
+ endif()
+
+ if(FLTK_FOUND)
+- set(FLTK_LIBRARIES "-Wl,-Bstatic -lfltk_images -lpng -ljpeg -lfltk -Wl,-Bdynamic")
++ set(FLTK_LIBRARIES "-Wl,-Bstatic -L${FLTK_LIBRARY_DIR} -lfltk_images -lpng -ljpeg -lfltk -Wl,-Bdynamic")
+
+ if(WIN32)
+ set(FLTK_LIBRARIES "${FLTK_LIBRARIES} -lcomctl32")
+--- a/vncviewer/CMakeLists.txt 2014-10-29 20:39:58.000000000 -0400
++++ b/vncviewer/CMakeLists.txt 2014-10-29 21:01:31.000000000 -0400
+@@ -46,7 +46,7 @@
+ add_executable(vncviewer ${VNCVIEWER_SOURCES})
+ endif()
+
+-target_link_libraries(vncviewer rfb network rdr os Xregion ${FLTK_LIBRARIES} ${GETTEXT_LIBRARIES})
++target_link_libraries(vncviewer ${FLTK_LIBRARIES} rfb network rdr os Xregion ${X11_Xdmcp_LIB} ${X11_Xau_LIB} ${GETTEXT_LIBRARIES})
+
+ if(APPLE)
+ target_link_libraries(vncviewer "-framework Cocoa" "-framework Carbon")
diff --git a/contrib/packages/rpm/el5/SOURCES/tigervnc-x0vncserver-static-libs-fix.patch b/contrib/packages/rpm/el5/SOURCES/tigervnc-x0vncserver-static-libs-fix.patch
new file mode 100644
index 0000000..9de3f85
--- /dev/null
+++ b/contrib/packages/rpm/el5/SOURCES/tigervnc-x0vncserver-static-libs-fix.patch
@@ -0,0 +1,22 @@
+--- a/unix/x0vncserver/CMakeLists.txt 2014-10-29 18:25:30.000000000 -0400
++++ b/unix/x0vncserver/CMakeLists.txt 2014-10-29 18:26:38.000000000 -0400
+@@ -31,7 +31,7 @@
+ message(WARNING "No DAMAGE extension. x0vncserver will have to use the slower polling method.")
+ endif()
+
+-target_link_libraries(x0vncserver ${X11_LIBRARIES})
++target_link_libraries(x0vncserver ${X11_LIBRARIES} ${X11_Xdmcp_LIB} ${X11_Xau_LIB})
+
+ install(TARGETS x0vncserver DESTINATION ${BIN_DIR})
+ install(FILES x0vncserver.man DESTINATION ${MAN_DIR}/man1 RENAME x0vncserver.1)
+--- a/unix/vncconfig/CMakeLists.txt 2014-10-29 18:45:41.000000000 -0400
++++ b/unix/vncconfig/CMakeLists.txt 2014-10-29 18:46:17.000000000 -0400
+@@ -9,7 +9,7 @@
+ vncconfig.cxx
+ QueryConnectDialog.cxx)
+
+-target_link_libraries(vncconfig tx rfb network rdr ${X11_LIBRARIES})
++target_link_libraries(vncconfig tx rfb network rdr ${X11_LIBRARIES} ${X11_Xdmcp_LIB} ${X11_Xau_LIB})
+
+ install(TARGETS vncconfig DESTINATION ${BIN_DIR})
+ install(FILES vncconfig.man DESTINATION ${MAN_DIR}/man1 RENAME vncconfig.1)
diff --git a/contrib/packages/rpm/el5/SPECS/tigervnc.spec b/contrib/packages/rpm/el5/SPECS/tigervnc.spec
index c20076d..1b88670 100644
--- a/contrib/packages/rpm/el5/SPECS/tigervnc.spec
+++ b/contrib/packages/rpm/el5/SPECS/tigervnc.spec
@@ -1,10 +1,9 @@
%define _default_patch_fuzz 2
-%define snap 20131128svn5139
%define mesa_version 7.7.1
Name: tigervnc
-Version: 1.3.80
-Release: 17%{?snap:.%{snap}}%{?dist}
+Version: @VERSION@
+Release: 18%{?snap:.%{snap}}%{?dist}
Summary: A TigerVNC remote display system
Group: User Interface/Desktops
@@ -16,11 +15,13 @@
Source1: vncserver.service
Source2: vncserver.sysconfig
Source6: vncviewer.desktop
+Source9: FindX11.cmake
Source11: http://fltk.org/pub/fltk/1.3.2/fltk-1.3.2-source.tar.gz
Source12: http://downloads.sourceforge.net/project/libjpeg-turbo/1.3.0/libjpeg-turbo-1.3.0.tar.gz
# http://ftp.redhat.com/pub/redhat/linux/enterprise/6Client/en/os/SRPMS/xorg-x11-proto-devel-7.6-13.el6.src.rpm
# http://ftp.redhat.com/pub/redhat/linux/enterprise/6Client/en/os/SRPMS/
+Source98: http://www.x.org/releases/X11R7.5/src/util/makedepend-1.0.2.tar.bz2
Source99: http://xcb.freedesktop.org/dist/libpthread-stubs-0.3.tar.bz2
Source100: http://www.x.org/releases/X11R7.5/src/lib/libICE-1.0.6.tar.bz2
Source101: http://www.x.org/releases/X11R7.5/src/lib/libSM-1.1.1.tar.bz2
@@ -113,13 +114,25 @@
Source163: http://www.x.org/releases/X11R7.5/src/lib/libXres-1.0.4.tar.bz2
Source164: http://www.x.org/releases/individual/lib/libXxf86misc-1.0.2.tar.bz2
+Source200: http://fontconfig.org/release/fontconfig-2.4.1.tar.gz
+Source201: 25-no-hint-fedora.conf
+Source202: 30-aliases-fedora.conf
+Source203: 40-generic-fedora.conf
+Source204: 64-nonlatin-fedora.conf
+Source205: 75-blacklist-fedora.conf
+
+Source210: fc-cache.1
+Source211: fc-cat.1
+Source212: fc-list.1
+Source213: fc-match.1
+
# FIXME:
# need to apply any patches in from the F12 srpms
-#http://dl.fedoraproject.org/pub/archive/fedora/linux/releases/12/Fedora/source/SRPMS/mesa-7.6-0.13.fc12.src.rpm
-#http://dl.fedoraproject.org/pub/archive/fedora/linux/releases/12/Fedora/source/SRPMS/pixman-0.16.2-1.fc12.src.rpm
-#http://vault.centos.org/6.3/os/Source/SPackages/pixman-0.18.4-1.el6_0.1.src.rpm
-#http://archive.fedoraproject.org/pub/archive/fedora/linux/releases/12/Everything/source/SRPMS/libdrm-2.4.15-4.fc12.src.rpm
-#http://dl.fedoraproject.org/pub/archive/fedora/linux/releases/12/Fedora/source/SRPMS/freetype-2.3.9-6.fc12.src.rpm
+# http://dl.fedoraproject.org/pub/archive/fedora/linux/releases/12/Fedora/source/SRPMS/mesa-7.6-0.13.fc12.src.rpm
+# http://dl.fedoraproject.org/pub/archive/fedora/linux/releases/12/Fedora/source/SRPMS/pixman-0.16.2-1.fc12.src.rpm
+# http://vault.centos.org/6.3/os/Source/SPackages/pixman-0.18.4-1.el6_0.1.src.rpm
+# http://archive.fedoraproject.org/pub/archive/fedora/linux/releases/12/Everything/source/SRPMS/libdrm-2.4.15-4.fc12.src.rpm
+# http://dl.fedoraproject.org/pub/archive/fedora/linux/releases/12/Fedora/source/SRPMS/freetype-2.3.9-6.fc12.src.rpm
BuildRoot: %{_tmppath}/%{name}-%{version}%{?snap:-%{snap}}-%{release}-root-%(%{__id_u} -n)
@@ -131,6 +144,8 @@
BuildRequires: pkgconfig >= 0.20
BuildRequires: gcc44, gcc44-c++
BuildRequires: glibc-devel, libstdc++-devel, libpng-devel
+BuildRequires: expat-devel
+BuildRequires: gperf, intltool, libtalloc-devel
BuildRequires: openmotif-devel
Requires: openmotif, openmotif22
@@ -147,9 +162,14 @@
Patch4: tigervnc-cookie.patch
Patch10: tigervnc11-ldnow.patch
Patch11: tigervnc11-gethomedir.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=692048
+Patch14: tigervnc-x0vncserver-static-libs-fix.patch
+Patch15: tigervnc-static-fltk.patch
Patch101: tigervnc-ac-compatibility.patch
Patch102: tigervnc-xorg-1.7.5-remove-copyisolatin1lowered.patch
+Patch124: fltk-1.3.2-libdl.patch
+Patch125: fltk-1.3.2-static-libs.patch
# Patches from libdrm-2.4.15-4.fc12.src.rpm
# hardcode the 666 instead of 660 for device nodes
@@ -407,23 +427,6 @@
of TigerVNC server, allowing others to access the desktop on your
machine.
-%ifnarch s390 s390x
-%package server-module
-Summary: TigerVNC module to Xorg
-Group: User Interface/X
-Provides: vnc-server = 4.1.3-2, vnc-libs = 4.1.3-2
-Obsoletes: vnc-server < 4.1.3-2, vnc-libs < 4.1.3-2
-Provides: tightvnc-server-module = 1.5.0-0.15.20090204svn3586
-Obsoletes: tightvnc-server-module < 1.5.0-0.15.20090204svn3586
-Requires: xorg-x11-server-Xorg
-Requires: tigervnc-license
-BuildRequires: nasm >= 2.04
-
-%description server-module
-This package contains libvnc.so module to X server, allowing others
-to access the desktop on your machine.
-%endif
-
%package server-applet
Summary: Java TigerVNC viewer applet for TigerVNC server
Group: User Interface/X
@@ -461,9 +464,12 @@
%setup -q -n %{name}-%{version}%{?snap:-%{snap}}
# sed -i -e 's/80/0/g' CMakeLists.txt
+cp %SOURCE9 cmake/Modules/
%patch4 -p1 -b .cookie
%patch10 -p1 -b .ldnow
%patch11 -p1 -b .gethomedir
+%patch15 -p1 -b .static-fltk
+%patch14 -p1 -b .x0vncserver
tar xzf %SOURCE11
pushd fltk-*
@@ -471,12 +477,16 @@
do
patch -p1 -i $p
done
+cp %SOURCE9 CMake/
+%patch124 -p1 -b .libdl
+%patch125 -p1 -b .static-libs
popd
tar xzf %SOURCE12
mkdir xorg
pushd xorg
+tar xjf %SOURCE98
tar xjf %SOURCE99
tar xjf %SOURCE100
tar xjf %SOURCE101
@@ -535,8 +545,8 @@
tar xjf %SOURCE154
tar xjf %SOURCE155
tar xjf %SOURCE156
-#tar xjf %SOURCE157
-#tar xjf %SOURCE158
+# tar xjf %SOURCE157
+# tar xjf %SOURCE158
tar xjf %SOURCE159
tar xjf %SOURCE160
tar xjf %SOURCE161
@@ -544,8 +554,8 @@
tar xjf %SOURCE163
tar xjf %SOURCE164
popd
-cp -a unix/xserver xorg/xserver
-cp -a xorg/xorg-server-1.*/* xorg/xserver
+tar xzf %SOURCE200
+cp -a xorg/xorg-server-1.*/* unix/xserver
pushd xorg
pushd libdrm-*
%patch133 -p1 -b .forceperms
@@ -637,9 +647,10 @@
%patch10400 -p1 -b .libsm-fix
popd
-pushd xserver
-patch -p1 < %{_builddir}/%{name}-%{version}%{?snap:-%{snap}}/unix/xserver17.patch
+popd
+pushd unix/xserver
+patch -p1 < %{_builddir}/%{name}-%{version}%{?snap:-%{snap}}/unix/xserver17.patch
for all in `find %{_builddir}/%{name}-%{version}%{?snap:-%{snap}}/unix/xorg-7.5-patches/ -type f |grep '.*\.patch$'`; do
echo Applying $all
patch -p1 < $all
@@ -762,7 +773,6 @@
%patch8000 -p1 -b .cve-2011-4818
%patch8001 -p1 -b .cve-2011-4818-extra
-popd
popd
@@ -771,79 +781,47 @@
%define static_lib_buildroot %{tigervnc_src_dir}/build
export CC=gcc44
export CXX=g++44
-export CFLAGS="$RPM_OPT_FLAGS"
-export CXXFLAGS="$CFLAGS"
-
-echo "*** Building fltk ***"
-pushd fltk-*
-export CFLAGS="$RPM_OPT_FLAGS"
+export CFLAGS="$RPM_OPT_FLAGS -fPIC"
export CXXFLAGS="$CFLAGS -static-libgcc"
-%{cmake28} -G"Unix Makefiles" \
- -DCMAKE_INSTALL_PREFIX=%{_prefix} \
- -DCMAKE_BUILD_TYPE=Release \
- -DOPTION_PREFIX_LIB=%{_libdir} \
- -DOPTION_PREFIX_CONFIG=%{_libdir} \
- -DOPTION_USE_THREADS=off \
- -DOPTION_BUILD_EXAMPLES=off \
- -DOPTION_USE_SYSTEM_LIBPNG=on
-make %{?_smp_mflags}
+
+%define xorg_buildroot %{tigervnc_src_dir}/xorg.build
+mkdir -p %{xorg_buildroot}%{_libdir}
+pushd %{xorg_buildroot}%{_libdir}
+ln -s `g++44 -print-file-name=libexpat.a`
+ln -s `g++44 -print-file-name=libgcrypt.a`
+ln -s `g++44 -print-file-name=libgpg-error.a`
+ln -s `g++44 -print-file-name=libgnutls.a`
+ln -s `g++44 -print-file-name=libstdc++.a`
+ln -s `g++44 -print-file-name=libcrypto.a`
+ln -s `g++44 -print-file-name=libz.a`
+ln -s `g++44 -print-file-name=libgcc.a`
+ln -s `g++44 -print-file-name=libpng.a`
popd
echo "*** Building libjpeg-turbo ***"
pushd libjpeg-turbo-*
-export CFLAGS="$RPM_OPT_FLAGS -fPIC"
-export CXXFLAGS="$CFLAGS -static-libgcc"
./configure --prefix=%{_prefix} --libdir=%{_libdir} --disable-nls --enable-static --disable-shared
-make %{?_smp_mflags} DESTDIR=%{static_lib_buildroot} install
+make %{?_smp_mflags} DESTDIR=%{xorg_buildroot} install
popd
-echo "*** Building VNC ***"
-export CFLAGS="$RPM_OPT_FLAGS -fPIC"
-export CXXFLAGS="$CFLAGS"
-%{cmake28} -G"Unix Makefiles" \
- -DBUILD_STATIC=1 \
- -DUSE_INCLUDED_ZLIB=1 \
- -DCMAKE_INSTALL_PREFIX=%{_prefix} \
- -DFLTK_LIBRARIES="%{tigervnc_src_dir}/fltk-1.3.2/lib/libfltk.a;%{tigervnc_src_dir}/fltk-1.3.2/lib/libfltk_images.a;`g++ -print-file-name=libpng.a`" \
- -DFLTK_FLUID_EXECUTABLE=%{tigervnc_src_dir}/fltk-1.3.2/bin/fluid \
- -DFLTK_INCLUDE_DIR=%{tigervnc_src_dir}/fltk-1.3.2 \
- -DJPEG_INCLUDE_DIR=%{static_lib_buildroot}%{_includedir} \
- -DJPEG_LIBRARY=%{static_lib_buildroot}%{_libdir}/libjpeg.a \
- -DGNUTLS_LIBRARY='%{_libdir}/libgnutls.a;%{_libdir}/libgcrypt.a;%{_libdir}/libgpg-error.a'
-make %{?_smp_mflags}
-
-echo "*** Building Xorg ***"
-%define xorg_buildroot %{tigervnc_src_dir}/xorg.build
-mkdir -p %{xorg_buildroot}%{_libdir}
-pushd %{xorg_buildroot}%{_libdir}
-ln -s `g++ -print-file-name=libstdc++.a`
-ln -s `g++ -print-file-name=libcrypto.a`
-ln -s `g++ -print-file-name=libz.a`
-ln -s `g++ -print-file-name=libgcc.a`
-popd
export CFLAGS="$RPM_OPT_FLAGS -fPIC -I%{xorg_buildroot}%{_includedir}"
export CXXFLAGS="$RPM_OPT_FLAGS -fPIC -I%{xorg_buildroot}%{_includedir} -static-libgcc"
-export LDFLAGS="-L%{xorg_buildroot}%{_libdir} $LDFLAGS"
+export CPPFLAGS=$CXXFLAGS
+export LDFLAGS="$LDFLAGS -L%{xorg_buildroot}%{_libdir}"
export ACLOCAL="aclocal -I %{xorg_buildroot}%{_datadir}/aclocal"
export PKG_CONFIG_PATH="%{xorg_buildroot}%{_libdir}/pkgconfig:%{xorg_buildroot}%{_datadir}/pkgconfig"
+
+echo "*** Building Xorg ***"
pushd xorg
-pushd util-macros-*
-echo "Building macros"
-./configure --prefix=/usr --libdir=%{_libdir} --disable-nls --enable-static --disable-shared
-make DESTDIR=%{xorg_buildroot} install
-find %{xorg_buildroot}%{_prefix} -type f -name "*.la" -exec sed -i -e "s|libdir='%{_libdir}'|libdir='%{xorg_buildroot}%{_libdir}'|" {} \;
-find %{xorg_buildroot}%{_prefix} -type f -name "*.pc" -exec sed -i -e "s|libdir=%{_libdir}|libdir=%{xorg_buildroot}%{_libdir}|" {} \;
-find %{xorg_buildroot}%{_prefix} -type f -name "*.pc" -exec sed -i -e "s|prefix=/usr|prefix=%{xorg_buildroot}%{_prefix}|" {} \;
-popd
echo "*** Building freetype ***"
pushd freetype-*
-./configure --prefix=/usr --libdir=%{_libdir} --enable-static --disable-shared --with-libtool=/usr/bin/libtool --disable-nls CFLAGS="$CFLAGS -fno-strict-aliasing"
+CFLAGS="$CFLAGS -fno-strict-aliasing" LDFLAGS="$LDFLAGS -static" ./configure --prefix=/usr --libdir=%{_libdir} --enable-static --disable-shared
sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' builds/unix/libtool
sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' builds/unix/libtool
make DESTDIR=%{xorg_buildroot} install
find %{xorg_buildroot}%{_prefix} -type f -name "*.la" -exec sed -i -e "s|libdir='%{_libdir}'|libdir='%{xorg_buildroot}%{_libdir}'|" {} \;
-find %{xorg_buildroot}%{_prefix} -type f -name "*.la" -exec sed -i -e "s|libdir=%{_libdir}|libdir=%{xorg_buildroot}%{_libdir}|" {} \;
+find %{xorg_buildroot}%{_prefix} -type f -name "*.pc" -exec sed -i -e "s|libdir=%{_libdir}|libdir=%{xorg_buildroot}%{_libdir}|" {} \;
find %{xorg_buildroot}%{_prefix} -type f -name "*.pc" -exec sed -i -e "s|prefix=/usr|prefix=%{xorg_buildroot}%{_prefix}|" {} \;
# fix multilib issues
%ifarch x86_64 s390x ia64 ppc64 alpha sparc64
@@ -872,30 +850,41 @@
EOF
popd
+pushd util-macros-*
+echo "Building macros"
+./configure --prefix=/usr --libdir=%{_libdir} --disable-nls --enable-static --disable-shared
+make DESTDIR=%{xorg_buildroot} install
+find %{xorg_buildroot}%{_prefix} -type f -name "*.la" -exec sed -i -e "s|libdir='%{_libdir}'|libdir='%{xorg_buildroot}%{_libdir}'|" {} \;
+find %{xorg_buildroot}%{_prefix} -type f -name "*.pc" -exec sed -i -e "s|libdir=%{_libdir}|libdir=%{xorg_buildroot}%{_libdir}|" {} \;
+find %{xorg_buildroot}%{_prefix} -type f -name "*.pc" -exec sed -i -e "s|prefix=/usr|prefix=%{xorg_buildroot}%{_prefix}|" {} \;
+popd
+
modules="\
- dri2proto \
- glproto \
- xf86vidmodeproto \
- xextproto \
- xproto \
- kbproto \
- inputproto \
- xcmiscproto \
bigreqsproto \
- xf86bigfontproto \
- fixesproto \
- damageproto \
- xf86driproto \
- randrproto \
- renderproto \
- scrnsaverproto \
- resourceproto \
- fontsproto \
- videoproto \
compositeproto \
- xineramaproto \
- xf86dgaproto \
+ damageproto \
+ dri2proto \
+ fixesproto \
+ fontsproto \
+ glproto \
+ inputproto \
+ kbproto \
+ randrproto \
recordproto \
+ renderproto \
+ resourceproto \
+ scrnsaverproto \
+ videoproto \
+ xproto \
+ xcmiscproto \
+ xextproto \
+ xf86bigfontproto \
+ xf86dgaproto \
+ xf86driproto \
+ xf86vidmodeproto \
+ xf86miscproto \
+ xineramaproto \
+ makedepend \
xtrans \
libXau \
libXdmcp \
@@ -921,6 +910,7 @@
libxkbfile \
libXrandr \
libXres \
+ libXScrnSaver \
libXtst \
libXv \
libXxf86dga \
@@ -938,17 +928,14 @@
echo ======================
%ifarch i386 i686
if [ "${module}" = "libdrm" ]; then
- export CFLAGS=`echo $CFLAGS | sed -e 's/-march=i*86/-march=native/'`
+ extraoptions="${extraoptions} --disable-intel"
fi
%endif
if [ "${module}" = "libXaw" ]; then
extraoptions="${extraoptions} --disable-xaw8 --disable-xaw6"
fi
- #if [ "${module}" = "randrproto" ]; then
- # ./autogen.sh
- #fi
if [ "${module}" = "libX11" ]; then
- extraoptions="${extraoptions} --without-xcb --disable-specs --disable-dependency-tracking"
+ extraoptions="${extraoptions} --without-xcb --disable-specs"
fi
if [ "${module}" = "libSM" ]; then
extraoptions="${extraoptions} --without-libuuid"
@@ -962,13 +949,21 @@
if [ "${module}" = "libXfont" ]; then
extraoptions="${extraoptions} --with-freetype-config=%{xorg_buildroot}%{_bindir}/freetype-config"
fi
- ./configure --prefix=/usr --libdir=%{_libdir} ${extraoptions} --enable-static --disable-shared
+ if [ "${module}" = "libpthread-stubs" ]; then
+ LDFLAGS="" ./configure --prefix=/usr --libdir=%{_libdir} ${extraoptions} --enable-static --disable-shared --with-pic
+ elif [ "${module}" = "libX11" ]; then
+ XDMCP_FLAGS="-L%{xorg_buildroot}%{_libdir} -Wl,-B,static -lXdmcp -lXau" ./configure --prefix=/usr --libdir=%{_libdir} ${extraoptions} --enable-static --disable-shared --with-pic
+ elif [ "${module}" = "libXtst" ]; then
+ XTST_FLAGS="-L%{xorg_buildroot}%{_libdir} -Wl,-B,static -lXext" ./configure --prefix=/usr --libdir=%{_libdir} ${extraoptions} --enable-static --disable-shared --with-pic
+ else
+ ./configure --prefix=/usr --libdir=%{_libdir} ${extraoptions} --enable-static --disable-shared --with-pic
+ fi
echo ======================
echo building ${module}
echo ======================
make DESTDIR=%{xorg_buildroot} install
find %{xorg_buildroot}%{_prefix} -type f -name "*.la" -exec sed -i -e "s|libdir='%{_libdir}'|libdir='%{xorg_buildroot}%{_libdir}'|" {} \;
- find %{xorg_buildroot}%{_prefix} -type f -name "*.la" -exec sed -i -e "s|libdir=%{_libdir}|libdir=%{xorg_buildroot}%{_libdir}|" {} \;
+ find %{xorg_buildroot}%{_prefix} -type f -name "*.pc" -exec sed -i -e "s|libdir=%{_libdir}|libdir=%{xorg_buildroot}%{_libdir}|" {} \;
find %{xorg_buildroot}%{_prefix} -type f -name "*.pc" -exec sed -i -e "s|prefix=/usr|prefix=%{xorg_buildroot}%{_prefix}|" {} \;
popd
done
@@ -982,8 +977,6 @@
%else
%define _mesa_flags --enable-pic
%endif
-export CFLAGS="$RPM_OPT_FLAGS -fvisibility=hidden -Os"
-export CXXFLAGS="$RPM_OPT_FLAGS -fvisibility=hidden -Os -static-libgcc"
# Need to set cfghost?
./configure \
@@ -1009,18 +1002,58 @@
make DESTDIR=%{xorg_buildroot}
make DESTDIR=%{xorg_buildroot} install
find %{xorg_buildroot}%{_prefix} -type f -name "*.la" -exec sed -i -e "s|libdir='%{_libdir}'|libdir='%{xorg_buildroot}%{_libdir}'|" {} \;
-find %{xorg_buildroot}%{_prefix} -type f -name "*.la" -exec sed -i -e "s|libdir=%{_libdir}|libdir=%{xorg_buildroot}%{_libdir}|" {} \;
+find %{xorg_buildroot}%{_prefix} -type f -name "*.pc" -exec sed -i -e "s|libdir=%{_libdir}|libdir=%{xorg_buildroot}%{_libdir}|" {} \;
find %{xorg_buildroot}%{_prefix} -type f -name "*.pc" -exec sed -i -e "s|prefix=/usr|prefix=%{xorg_buildroot}%{_prefix}|" {} \;
-#rm %{xorg_buildroot}%{_libdir}/dri/libdricore.so
popd
popd
-pushd xorg/xserver
-export CFLAGS="$RPM_OPT_FLAGS -fPIC -I%{xorg_buildroot}%{_includedir}"
-export CXXFLAGS="$RPM_OPT_FLAGS -fPIC -I%{xorg_buildroot}%{_includedir} -static-libgcc"
+
+echo "*** Building fontconfig ***"
+pushd fontconfig-*
+HASDOCBOOK=no ./configure --prefix=%{_prefix} --libdir=%{_libdir} --with-add-fonts=/usr/share/X11/fonts/Type1,/usr/share/X11/fonts/OTF --enable-static --disable-shared
+make %{?_smp_mflags}
+make DESTDIR=%{xorg_buildroot} install
+find %{xorg_buildroot}%{_prefix} -type f -name "*.la" -exec sed -i -e "s|libdir='%{_libdir}'|libdir='%{xorg_buildroot}%{_libdir}'|" {} \;
+find %{xorg_buildroot}%{_prefix} -type f -name "*.pc" -exec sed -i -e "s|libdir=%{_libdir}|libdir=%{xorg_buildroot}%{_libdir}|" {} \;
+find %{xorg_buildroot}%{_prefix} -type f -name "*.pc" -exec sed -i -e "s|prefix=/usr|prefix=%{xorg_buildroot}%{_prefix}|" {} \;
+popd
+
+echo "*** Building fltk ***"
+pushd fltk-*
+export CMAKE_PREFIX_PATH="%{xorg_buildroot}%{_prefix}:%{_prefix}"
+export CMAKE_EXE_LINKER_FLAGS="-static-libgcc -L%{xorg_buildroot}%{_libdir}"
+%{cmake28} -G"Unix Makefiles" \
+ -DCMAKE_INSTALL_PREFIX=%{xorg_buildroot}%{_prefix} \
+ -DX11_INC_SEARCH_PATH=%{xorg_buildroot}%{_includedir} \
+ -DX11_LIB_SEARCH_PATH=%{xorg_buildroot}%{_libdir} \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DOPTION_USE_THREADS=off \
+ -DOPTION_BUILD_EXAMPLES=off \
+ -DOPTION_USE_SYSTEM_LIBPNG=on
+make %{?_smp_mflags}
+popd
+
+echo "*** Building VNC ***"
+export CFLAGS="$CFLAGS -fPIC"
+export CXXFLAGS=`echo $CXXFLAGS | sed -e 's/ -c //g'`
+%{cmake28} -G"Unix Makefiles" \
+ -DX11_INC_SEARCH_PATH=%{xorg_buildroot}%{_includedir} \
+ -DX11_LIB_SEARCH_PATH=%{xorg_buildroot}%{_libdir} \
+ -DFLTK_LIBRARY_DIR=%{tigervnc_src_dir}/fltk-1.3.2/lib \
+ -DFLTK_LIBRARIES="%{tigervnc_src_dir}/fltk-1.3.2/lib/libfltk.a;%{tigervnc_src_dir}/fltk-1.3.2/lib/libfltk_images.a;-lpng" \
+ -DFLTK_FLUID_EXECUTABLE=%{tigervnc_src_dir}/fltk-1.3.2/bin/fluid \
+ -DFLTK_INCLUDE_DIR=%{tigervnc_src_dir}/fltk-1.3.2 \
+ -DBUILD_STATIC=1 \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DUSE_INCLUDED_ZLIB=0 \
+ -DCMAKE_INSTALL_PREFIX=%{_prefix}
+
+make %{?_smp_mflags}
+
+pushd unix/xserver
+export LD=$CXX
export PIXMANINCDIR=%{xorg_buildroot}%{_includedir}/pixman-1
autoreconf -fiv
-
./configure --prefix=/usr --libdir=%{_libdir} --mandir=%{_datadir}/man \
--disable-xorg --disable-xnest --disable-xvfb --disable-dmx \
--disable-xwin --disable-xephyr --disable-kdrive --with-pic \
@@ -1076,15 +1109,24 @@
# Build Java applet
pushd java
-%{cmake28} .
-make
+%{cmake28} \
+%if 0%{!?_self_signed:1}
+ -DJAVA_KEYSTORE=%{_keystore} \
+ -DJAVA_KEYSTORE_TYPE=%{_keystore_type} \
+ -DJAVA_KEY_ALIAS=%{_key_alias} \
+ -DJAVA_STOREPASS=":env STOREPASS" \
+ -DJAVA_KEYPASS=":env KEYPASS" \
+ -DJAVA_TSA_URL=https://timestamp.geotrust.com/tsa .
+%endif
+
+JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF8" make
popd
%install
rm -rf $RPM_BUILD_ROOT
make install DESTDIR=$RPM_BUILD_ROOT
-pushd xorg/xserver/hw/vnc
+pushd unix/xserver/hw/vnc
make install DESTDIR=$RPM_BUILD_ROOT
popd
@@ -1118,12 +1160,9 @@
%find_lang %{name} %{name}.lang
# remove unwanted files
-rm -f $RPM_BUILD_ROOT%{_libdir}/xorg/modules/extensions/libvnc.la
-rm -f $RPM_BUILD_ROOT%{_libdir}/dri/libdricore.so
-
-%ifarch s390 s390x %{?rhel:ppc ppc64}
-rm -f $RPM_BUILD_ROOT%{_libdir}/xorg/modules/extensions/libvnc.so
-%endif
+rm -f $RPM_BUILD_ROOT%{_libdir}/xorg/modules/extensions/libvnc.la
+rm -f $RPM_BUILD_ROOT%{_libdir}/xorg/modules/extensions/libvnc.a
+rm -f $RPM_BUILD_ROOT%{_libdir}/dri/libdricore.so
# move files to correct location
mkdir -p $RPM_BUILD_ROOT%{_libdir}/dri
@@ -1182,12 +1221,6 @@
%{_mandir}/man1/vncconfig.1*
%{_libdir}/dri/swrast_dri.so
-%ifnarch s390 s390x
-%files server-module
-%defattr(-,root,root,-)
-%{_libdir}/xorg/modules/extensions/libvnc.a
-%endif
-
%files server-applet
%defattr(-,root,root,-)
%doc java/com/tigervnc/vncviewer/README
@@ -1202,6 +1235,9 @@
%{_datadir}/icons/hicolor/*/apps/*
%changelog
+* Wed Nov 19 2014 Brian P. Hinz <bphinz@users.sourceforge.net> 1.3.80-18.20141119git59c5a55c
+- Removed server module sub-package
+
* Thu Nov 28 2013 Brian P. Hinz <bphinz@users.sourceforge.net> 1.3.80-17.20131128svn5139
- Bumped version to 1.3.80
- Cleaned up linter warnings
diff --git a/contrib/packages/rpm/el6/SPECS/tigervnc.spec b/contrib/packages/rpm/el6/SPECS/tigervnc.spec
index 11b39f6..da8ce73 100644
--- a/contrib/packages/rpm/el6/SPECS/tigervnc.spec
+++ b/contrib/packages/rpm/el6/SPECS/tigervnc.spec
@@ -1,8 +1,6 @@
-%define snap 20131128svn5139
-
Name: tigervnc
-Version: 1.3.80
-Release: 17%{?snap:.%{snap}}%{?dist}
+Version: @VERSION@
+Release: 18%{?snap:.%{snap}}%{?dist}
Summary: A TigerVNC remote display system
Group: User Interface/Desktops
@@ -153,7 +151,7 @@
for all in `find . -type f -perm -001`; do
chmod -x "$all"
done
-patch -p1 -b --suffix .vnc < ../xserver113.patch
+patch -p1 -b --suffix .vnc < ../xserver115.patch
popd
%patch16 -p0 -b .man
@@ -218,8 +216,17 @@
# Build Java applet
pushd java
-%{cmake28} .
-make
+%{cmake28} \
+%if 0%{!?self_signed:1}
+ -DJAVA_KEYSTORE=%{_keystore} \
+ -DJAVA_KEYSTORE_TYPE=%{_keystore_type} \
+ -DJAVA_KEY_ALIAS=%{_key_alias} \
+ -DJAVA_STOREPASS=":env STOREPASS" \
+ -DJAVA_KEYPASS=":env KEYPASS" \
+ -DJAVA_TSA_URL=https://timestamp.geotrust.com/tsa .
+%endif
+
+JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF8" make
popd
%install
@@ -332,6 +339,9 @@
%{_datadir}/icons/hicolor/*/apps/*
%changelog
+* Tue Nov 04 2014 Brian P. Hinz <bphinz@users.sourceforge.net> 1.3.80-18.20131128svn5139
+- Bumped xserver patch to keep pace with native version
+
* Thu Nov 28 2013 Brian P. Hinz <bphinz@users.sourceforge.net> 1.3.80-17.20131128svn5139
- Bumped version to 1.3.80
- Cleaned up linter warnings
diff --git a/contrib/packages/rpm/sle11/SPECS/tigervnc.spec b/contrib/packages/rpm/sle11/SPECS/tigervnc.spec
index ddf9310..f98e8fb 100644
--- a/contrib/packages/rpm/sle11/SPECS/tigervnc.spec
+++ b/contrib/packages/rpm/sle11/SPECS/tigervnc.spec
@@ -14,12 +14,11 @@
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
-%define snap 20131202svn5145
%define debug_package %{nil}
Name: tigervnc
-Version: 1.3.80
+Version: @VERSION@
Release: 1%{?snap:.%{snap}}%{?dist}
Packager: Brian P. Hinz <bphinz@users.sourceforge.net>
License: GPL-2.0 and MIT
@@ -70,9 +69,6 @@
# Tiger vnc patches
-Patch3: u_tigervnc-1.3.0-fix-use-after-free.patch
-#Patch4: tigervnc-newfbsize.patch
-#Patch5: tigervnc-clean-pressed-key-on-exit.patch
# Xserver patches
Patch1: fpic.diff
@@ -155,10 +151,6 @@
tar xjf %SOURCE2
cp -r ./xorg-server-*/* unix/xserver/
-%patch3 -p1
-#%patch4 -p1
-#%patch5 -p1
-
pushd unix/xserver
for all in `find . -type f -perm -001`; do
chmod -x "$all"
@@ -323,8 +315,17 @@
# Build java client
pushd java
-cmake -DCMAKE_INSTALL_PREFIX:PATH=%{_prefix}
-make %{?_smp_mflags}
+cmake -DCMAKE_INSTALL_PREFIX:PATH=%{_prefix} \
+%if 0%{!?_self_signed:1}
+ -DJAVA_KEYSTORE=%{_keystore} \
+ -DJAVA_KEYSTORE_TYPE=%{_keystore_type} \
+ -DJAVA_KEY_ALIAS=%{_key_alias} \
+ -DJAVA_STOREPASS=":env STOREPASS" \
+ -DJAVA_KEYPASS=":env KEYPASS" \
+ -DJAVA_TSA_URL=https://timestamp.geotrust.com/tsa
+%endif
+
+JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF8" make %{?_smp_mflags}
popd
%install
diff --git a/java/CMakeLists.txt b/java/CMakeLists.txt
index c98c69c..bf1cffb 100644
--- a/java/CMakeLists.txt
+++ b/java/CMakeLists.txt
@@ -2,7 +2,7 @@
project(tigervnc-java Java)
if(NOT VERSION)
- set(VERSION 1.3.80)
+ set(VERSION 1.4.80)
endif()
find_package(Java)
diff --git a/java/com/tigervnc/network/SSLEngineManager.java b/java/com/tigervnc/network/SSLEngineManager.java
index cb1f7c4..c011099 100644
--- a/java/com/tigervnc/network/SSLEngineManager.java
+++ b/java/com/tigervnc/network/SSLEngineManager.java
@@ -41,14 +41,14 @@
private ByteBuffer peerNetData;
private Executor executor;
- private FdInStream inStream;
- private FdOutStream outStream;
+ private FdInStream in;
+ private FdOutStream os;
- public SSLEngineManager(SSLEngine sslEngine, FdInStream is,
- FdOutStream os) throws IOException {
+ public SSLEngineManager(SSLEngine sslEngine, FdInStream is_,
+ FdOutStream os_) throws IOException {
- inStream = is;
- outStream = os;
+ in = is_;
+ os = os_;
engine = sslEngine;
executor = Executors.newSingleThreadExecutor();
@@ -56,7 +56,8 @@
pktBufSize = engine.getSession().getPacketBufferSize();
appBufSize = engine.getSession().getApplicationBufferSize();
- myAppData = ByteBuffer.allocate(appBufSize);
+ myAppData =
+ ByteBuffer.allocate(Math.max(appBufSize, os.getBufSize()));
myNetData = ByteBuffer.allocate(pktBufSize);
peerAppData = ByteBuffer.allocate(appBufSize);
peerNetData = ByteBuffer.allocate(pktBufSize);
@@ -80,13 +81,14 @@
SSLEngineResult res = engine.unwrap(peerNetData, peerAppData);
peerNetData.compact();
hs = res.getHandshakeStatus();
+ // Check status
switch (res.getStatus()) {
case BUFFER_UNDERFLOW:
- int len = Math.min(peerNetData.remaining(), inStream.getBufSize());
- int m = inStream.check(1, len, false);
- byte[] buf = new byte[m];
- inStream.readBytes(buf, 0, m);
- peerNetData.put(buf, 0, m);
+ int max = Math.min(peerNetData.remaining(), in.getBufSize());
+ int m = in.check(1, max, true);
+ int pos = peerNetData.position();
+ in.readBytes(peerNetData.array(), pos, m);
+ peerNetData.position(pos+m);
peerNetData.flip();
peerNetData.compact();
break;
@@ -102,7 +104,7 @@
}
break;
- case NEED_WRAP :
+ case NEED_WRAP:
// Empty the local network packet buffer.
myNetData.clear();
@@ -112,20 +114,17 @@
// Check status
switch (res.getStatus()) {
- case OK :
+ case OK:
myAppData.compact();
myNetData.flip();
- int n = myNetData.remaining();
- byte[] b = new byte[n];
- myNetData.get(b);
+ os.writeBytes(myNetData.array(), 0, myNetData.remaining());
+ os.flush();
myNetData.clear();
- outStream.writeBytes(b, 0, n);
- outStream.flush();
break;
case BUFFER_OVERFLOW:
// FIXME: How much larger should the buffer be?
- // fallthrough
+ break;
case CLOSED:
engine.closeOutbound();
@@ -133,7 +132,8 @@
}
break;
- case NEED_TASK :
+
+ case NEED_TASK:
// Handle blocking tasks
executeTasks();
break;
@@ -151,29 +151,28 @@
public int read(byte[] data, int dataPtr, int length) throws IOException {
// Read SSL/TLS encoded data from peer
- int len = Math.min(pktBufSize,inStream.getBufSize());
- int bytesRead = inStream.check(1,len,false);
- byte[] buf = new byte[bytesRead];
- inStream.readBytes(buf, 0, bytesRead);
- if (peerNetData.remaining() < bytesRead) {
- peerNetData.flip();
- ByteBuffer b = ByteBuffer.allocate(peerNetData.remaining() + bytesRead);
- b.put(peerNetData);
- peerNetData = b;
- }
- peerNetData.put(buf);
+ int bytesRead = 0;
peerNetData.flip();
SSLEngineResult res = engine.unwrap(peerNetData, peerAppData);
peerNetData.compact();
switch (res.getStatus()) {
case OK :
+ bytesRead = Math.min(length, res.bytesProduced());
peerAppData.flip();
- peerAppData.get(data, dataPtr, res.bytesProduced());
+ peerAppData.get(data, dataPtr, bytesRead);
peerAppData.compact();
break;
case BUFFER_UNDERFLOW:
- // normal (need more net data)
+ // need more net data
+ int pos = peerNetData.position();
+ // attempt to drain the underlying buffer first
+ int need = peerNetData.remaining();
+ int avail = in.check(1, in.getBufSize(), false);
+ if (avail < need)
+ avail = in.check(1, Math.min(need, in.getBufSize()), true);
+ in.readBytes(peerNetData.array(), pos, Math.min(need, avail));
+ peerNetData.position(pos+Math.min(need, avail));
break;
case CLOSED:
@@ -181,24 +180,28 @@
break;
}
- return res.bytesProduced();
+ return bytesRead;
}
public int write(byte[] data, int dataPtr, int length) throws IOException {
int n = 0;
- // FIXME: resize myAppData if necessary
myAppData.put(data, dataPtr, length);
myAppData.flip();
while (myAppData.hasRemaining()) {
SSLEngineResult res = engine.wrap(myAppData, myNetData);
n += res.bytesConsumed();
switch (res.getStatus()) {
- case BUFFER_OVERFLOW:
- ByteBuffer b = ByteBuffer.allocate(myNetData.capacity() + myAppData.remaining());
- myNetData.flip();
- b.put(myNetData);
- myNetData = b;
+ case OK:
break;
+
+ case BUFFER_OVERFLOW:
+ // Make room in the buffer by flushing the outstream
+ myNetData.flip();
+ os.writeBytes(myNetData.array(), 0, myNetData.remaining());
+ os.flush();
+ myNetData.clear();
+ break;
+
case CLOSED:
engine.closeOutbound();
break;
@@ -206,12 +209,9 @@
}
myAppData.clear();
myNetData.flip();
- int len = myNetData.remaining();
- byte[] buf = new byte[len];
- myNetData.get(buf);
+ os.writeBytes(myNetData.array(), 0, myNetData.remaining());
+ os.flush();
myNetData.clear();
- outStream.writeBytes(buf, 0, len);
- outStream.flush();
return n;
}
diff --git a/java/com/tigervnc/network/Socket.java b/java/com/tigervnc/network/Socket.java
index bcc920d..651dc05 100644
--- a/java/com/tigervnc/network/Socket.java
+++ b/java/com/tigervnc/network/Socket.java
@@ -58,7 +58,6 @@
// Is the remote end on the same machine?
abstract public boolean sameMachine();
- // Was there a "?" in the ConnectionFilter used to accept this Socket?
public void setRequiresQuery() {queryConnection = true;}
public final boolean requiresQuery() {return queryConnection;}
@@ -78,29 +77,3 @@
boolean isShutdown_;
boolean queryConnection;
}
-
-/*
-abstract class ConnectionFilter {
- public abstract boolean verifyConnection(Socket s);
-};
-
-abstract class SocketListener {
- public SocketListener() {
- fd = null; filter = null;
- }
-
- // shutdown() stops the socket from accepting further connections
- public abstract void shutdown();
-
- // accept() returns a new Socket object if there is a connection
- // attempt in progress AND if the connection passes the filter
- // if one is installed. Otherwise, returns 0.
- public abstract Socket accept();
-
- // setFilter() applies the specified filter to all new connections
- public void setFilter(ConnectionFilter f) {filter = f;}
- //public SocketDescriptor getFd() {return fd;}
- protected FileDescriptor fd;
- protected ConnectionFilter filter;
-};
-*/
diff --git a/java/com/tigervnc/network/SocketListener.java b/java/com/tigervnc/network/SocketListener.java
index a1b2c12..a1f5ea1 100644
--- a/java/com/tigervnc/network/SocketListener.java
+++ b/java/com/tigervnc/network/SocketListener.java
@@ -29,18 +29,15 @@
public SocketListener() {}
// shutdown() stops the socket from accepting further connections
- abstract public void shutdown();
+ abstract public void shutdown() throws Exception;
// accept() returns a new Socket object if there is a connection
// attempt in progress AND if the connection passes the filter
// if one is installed. Otherwise, returns 0.
abstract public Socket accept();
- // setFilter() applies the specified filter to all new connections
- //public void setFilter(ConnectionFilter* f) {filter = f;}
public FileDescriptor getFd() {return fd;}
protected FileDescriptor fd;
- //protected ConnectionFilter* filter;
}
diff --git a/java/com/tigervnc/network/TcpListener.java b/java/com/tigervnc/network/TcpListener.java
index bab9e4c..45ee8a4 100644
--- a/java/com/tigervnc/network/TcpListener.java
+++ b/java/com/tigervnc/network/TcpListener.java
@@ -84,12 +84,21 @@
this(listenaddr, port, false, null, true);
}
-// TcpListener::~TcpListener() {
-// if (closeFd) closesocket(fd);
-// }
+ protected void finalize() throws Exception {
+ if (closeFd)
+ try {
+ ((SocketDescriptor)getFd()).close();
+ } catch (IOException e) {
+ throw new Exception(e.getMessage());
+ }
+ }
- public void shutdown() {
- //shutdown(getFd(), 2);
+ public void shutdown() throws Exception {
+ try {
+ ((SocketDescriptor)getFd()).shutdown();
+ } catch (IOException e) {
+ throw new Exception(e.getMessage());
+ }
}
public TcpSocket accept() {
@@ -132,32 +141,12 @@
}
fd.setChannel(new_sock);
TcpSocket s = new TcpSocket(fd);
- //if (filter && !filter->verifyConnection(s)) {
- // delete s;
- // return 0;
- //}
return s;
}
-/*
-void TcpListener::getMyAddresses(std::list<char*>* result) {
- const hostent* addrs = gethostbyname(0);
- if (addrs == 0)
- throw rdr::SystemException("gethostbyname", errorNumber);
- if (addrs->h_addrtype != AF_INET)
- throw rdr::Exception("getMyAddresses: bad family");
- for (int i=0; addrs->h_addr_list[i] != 0; i++) {
- const char* addrC = inet_ntoa(*((struct in_addr*)addrs->h_addr_list[i]));
- char* addr = new char[strlen(addrC)+1];
- strcpy(addr, addrC);
- result->push_back(addr);
+ public int getMyPort() {
+ return ((SocketDescriptor)getFd()).socket().getLocalPort();
}
-}
- */
-
- //public int getMyPort() {
- // return TcpSocket.getSockPort();
- //}
private boolean closeFd;
private ServerSocketChannel channel;
diff --git a/java/com/tigervnc/network/TcpSocket.java b/java/com/tigervnc/network/TcpSocket.java
index 051a9d8..43787e4 100644
--- a/java/com/tigervnc/network/TcpSocket.java
+++ b/java/com/tigervnc/network/TcpSocket.java
@@ -113,8 +113,7 @@
}
public int getMyPort() {
- SocketAddress address = ((SocketDescriptor)getFd()).socket().getLocalSocketAddress();
- return ((InetSocketAddress)address).getPort();
+ return getSockPort();
}
public String getPeerAddress() {
@@ -184,7 +183,7 @@
}
public int getSockPort() {
- return ((InetSocketAddress)((SocketDescriptor)getFd()).socket().getRemoteSocketAddress()).getPort();
+ return ((SocketDescriptor)getFd()).socket().getLocalPort();
}
/* Tunnelling support. */
diff --git a/java/com/tigervnc/vncviewer/ClipboardDialog.java b/java/com/tigervnc/vncviewer/ClipboardDialog.java
index d4cde6e..e7aa7e9 100644
--- a/java/com/tigervnc/vncviewer/ClipboardDialog.java
+++ b/java/com/tigervnc/vncviewer/ClipboardDialog.java
@@ -1,5 +1,5 @@
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
- * Copyright (C) 2011 Brian P. Hinz
+ * Copyright (C) 2011-2014 Brian P. Hinz
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,27 +21,91 @@
import java.awt.*;
import java.awt.event.*;
-import java.awt.datatransfer.Clipboard;
-import java.awt.datatransfer.StringSelection;
+import java.awt.datatransfer.*;
+import java.io.*;
+import java.nio.*;
import javax.swing.*;
import javax.swing.border.*;
+import javax.swing.text.*;
+
import com.tigervnc.rfb.LogWriter;
class ClipboardDialog extends Dialog implements ActionListener {
+ private class VncTransferHandler extends TransferHandler {
+ // Custom TransferHandler designed to limit the size of outbound
+ // clipboard transfers to VncViewer.maxCutText.getValue() bytes.
+ private LogWriter vlog = new LogWriter("VncTransferHandler");
+
+ public void exportToClipboard(JComponent c, Clipboard clip, int a)
+ throws IllegalStateException {
+ if (!(c instanceof JTextComponent)) return;
+ StringSelection selection =
+ new StringSelection(((JTextComponent)c).getText());
+ clip.setContents(selection, null);
+ }
+
+ public boolean importData(JComponent c, Transferable t) {
+ if (canImport(c, t.getTransferDataFlavors())) {
+ try {
+ DataFlavor VncFlavor = null;
+ for (DataFlavor f : t.getTransferDataFlavors())
+ if (f.isFlavorTextType() && f.isRepresentationClassInputStream())
+ VncFlavor = f;
+ if (VncFlavor == null) return false;
+ Reader reader = (Reader)VncFlavor.getReaderForText(t);
+ CharBuffer cbuf =
+ CharBuffer.allocate(VncViewer.maxCutText.getValue());
+ cbuf.limit(reader.read(cbuf.array(), 0, cbuf.length()));
+ reader.close();
+ if (c instanceof JTextComponent)
+ ((JTextComponent)c).setText(cbuf.toString());
+ return true;
+ } catch (OutOfMemoryError oome) {
+ vlog.error("ERROR: Too much data on local clipboard!");
+ } catch (UnsupportedFlavorException ufe) {
+ // Skip import
+ vlog.info(ufe.toString());
+ } catch (IOException ioe) {
+ // Skip import
+ vlog.info(ioe.toString());
+ }
+ }
+ return false;
+ }
+
+ public boolean canImport(JComponent c, DataFlavor[] flavors) {
+ for (DataFlavor f : flavors)
+ if (f.isFlavorTextType() && f.isRepresentationClassReader())
+ return true;
+ return false;
+ }
+ }
+
public ClipboardDialog(CConn cc_) {
super(false);
+ setTitle("VNC Clipboard Viewer");
+ setPreferredSize(new Dimension(640, 480));
+ addWindowFocusListener(new WindowAdapter() {
+ // Necessary to ensure that updates from the system clipboard
+ // still occur when the ClipboardDialog has the focus.
+ public void WindowGainedFocus(WindowEvent e) {
+ clientCutText();
+ }
+ });
cc = cc_;
- setTitle("VNC clipboard");
- JPanel pt = new JPanel();
- textArea = new JTextArea(5,50);
- textArea.setBorder(BorderFactory.createLineBorder(Color.gray));
- textArea.setLineWrap(true);
+ textArea = new JTextArea();
+ textArea.setTransferHandler(new VncTransferHandler());
+ // If the textArea can receive the focus, then text within the textArea
+ // can be selected. On platforms that don't support separate selection
+ // and clipboard buffers, this triggers a replacement of the textAra's
+ // contents with the selected text.
+ textArea.setFocusable(false);
+ textArea.setLineWrap(false);
textArea.setWrapStyleWord(true);
JScrollPane sp = new JScrollPane(textArea);
- pt.add(sp, BorderLayout.CENTER);
- getContentPane().add("North", pt);
-
+ getContentPane().add(sp, BorderLayout.CENTER);
+ // button panel placed below the scrollpane
JPanel pb = new JPanel();
clearButton = new JButton("Clear");
pb.add(clearButton);
@@ -53,40 +117,22 @@
pb.add(cancelButton);
cancelButton.addActionListener(this);
getContentPane().add("South", pb);
-
pack();
}
- public boolean compareContentsTo(String str) {
- return str.equals(textArea.getText());
-
- }
-
- public void setContents(String str) {
- textArea.setText(str);
- }
-
- public String getContents() {
- return textArea.getText();
- }
-
public void serverCutText(String str, int len) {
- setContents(str);
- SecurityManager sm = System.getSecurityManager();
- try {
- if (sm != null) sm.checkSystemClipboardAccess();
- Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
- if (cb != null) {
- StringSelection ss = new StringSelection(str);
- try {
- cb.setContents(ss, null);
- } catch(Exception e) {
- vlog.debug(e.getMessage());
- }
- }
- } catch(SecurityException e) {
- vlog.debug("Cannot access the system clipboard: "+e.getMessage());
- }
+ textArea.setText(str);
+ textArea.copy();
+ }
+
+ public void clientCutText() {
+ int hc = textArea.getText().hashCode();
+ textArea.paste();
+ textArea.setCaretPosition(0);
+ String text = textArea.getText();
+ if (cc.viewer.sendClipboard.getValue())
+ if (hc != text.hashCode())
+ cc.writeClientCutText(text, text.length());
}
public void setSendingEnabled(boolean b) {
@@ -98,7 +144,8 @@
if (s instanceof JButton && (JButton)s == clearButton) {
serverCutText(new String(""), 0);
} else if (s instanceof JButton && (JButton)s == sendButton) {
- cc.writeClientCutText(textArea.getText(), textArea.getText().length());
+ String text = textArea.getText();
+ cc.writeClientCutText(text, text.length());
endDialog();
} else if (s instanceof JButton && (JButton)s == cancelButton) {
endDialog();
diff --git a/java/com/tigervnc/vncviewer/DesktopWindow.java b/java/com/tigervnc/vncviewer/DesktopWindow.java
index e78ee27..10d158c 100644
--- a/java/com/tigervnc/vncviewer/DesktopWindow.java
+++ b/java/com/tigervnc/vncviewer/DesktopWindow.java
@@ -85,7 +85,7 @@
addKeyListener(this);
addFocusListener(new FocusAdapter() {
public void focusGained(FocusEvent e) {
- checkClipboard();
+ cc.clipboardDialog.clientCutText();
}
public void focusLost(FocusEvent e) {
cc.releaseDownKeys();
@@ -359,36 +359,6 @@
g2.dispose();
}
- public synchronized void checkClipboard() {
- SecurityManager sm = System.getSecurityManager();
- try {
- if (sm != null) sm.checkSystemClipboardAccess();
- Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
- if (cb != null) {
- Transferable t = cb.getContents(null);
- if (t == null) return;
- DataFlavor flavor =
- DataFlavor.selectBestTextFlavor(t.getTransferDataFlavors());
- if (flavor == null) return;
- BufferedReader br = new BufferedReader(flavor.getReaderForText(t));
- CharBuffer cbuf =
- CharBuffer.allocate(VncViewer.maxCutText.getValue());
- br.read(cbuf);
- cbuf.flip();
- String newContents = cbuf.toString();
- if (!cc.clipboardDialog.compareContentsTo(newContents)) {
- cc.clipboardDialog.setContents(newContents);
- if (cc.viewer.sendClipboard.getValue())
- cc.writeClientCutText(newContents, newContents.length());
- }
- br.close();
- System.gc();
- }
- } catch(java.lang.Exception e) {
- vlog.debug("Exception getting clipboard data: " + e.getMessage());
- }
- }
-
// Mouse-Motion callback function
private void mouseMotionCB(MouseEvent e) {
if (!cc.viewer.viewOnly.getValue() &&
diff --git a/java/com/tigervnc/vncviewer/VncViewer.java b/java/com/tigervnc/vncviewer/VncViewer.java
index 0df39c8..1e0f223 100644
--- a/java/com/tigervnc/vncviewer/VncViewer.java
+++ b/java/com/tigervnc/vncviewer/VncViewer.java
@@ -457,7 +457,7 @@
while (true) {
Socket new_sock = listener.accept();
if (new_sock != null)
- newViewer(this, new_sock);
+ newViewer(this, new_sock, true);
}
}
diff --git a/po/tigervnc.pot b/po/tigervnc.pot
index 5df3639..5a91804 100644
--- a/po/tigervnc.pot
+++ b/po/tigervnc.pot
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: tigervnc-devel@googlegroups.com\n"
-"POT-Creation-Date: 2014-09-22 11:15+0000\n"
+"POT-Creation-Date: 2014-11-19 12:46+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -30,7 +30,7 @@
msgid "About TigerVNC Viewer"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1086
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1097
msgid "About TigerVNC viewer..."
msgstr ""
@@ -50,7 +50,7 @@
msgid "Allow JPEG compression:"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1070
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1081
msgid "Alt"
msgstr ""
@@ -71,7 +71,7 @@
msgid "Bad Name/Value pair on line: %d in file: %s"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:92
+#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:91
msgid "BitBlt failed"
msgstr ""
@@ -101,7 +101,7 @@
msgid "Connect"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1085
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1096
msgid "Connection info..."
msgstr ""
@@ -144,6 +144,18 @@
msgid "Could not create VNC home directory: can't obtain home directory path."
msgstr ""
+#: /home/ossman/devel/tigervnc/vncviewer/OSXPixelBuffer.cxx:58
+msgid "Could not create framebuffer bitmap"
+msgstr ""
+
+#: /home/ossman/devel/tigervnc/vncviewer/OSXPixelBuffer.cxx:52
+msgid "Could not create framebuffer device"
+msgstr ""
+
+#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:107
+msgid "Could not create framebuffer image"
+msgstr ""
+
#: /home/ossman/devel/tigervnc/vncviewer/parameters.cxx:310
#, c-format
msgid "Could not encode the parameter-value %s when writing to the Registry."
@@ -156,11 +168,15 @@
"small."
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:80
+#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:68
+msgid "Couldn't find suitable pixmap format"
+msgstr ""
+
+#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:79
msgid "CreateCompatibleDC failed"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1068
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1079
msgid "Ctrl"
msgstr ""
@@ -179,10 +195,14 @@
msgid "Desktop name: %.80s"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1088
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1099
msgid "Dismiss menu"
msgstr ""
+#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:59
+msgid "Display lacks pixmap format for default depth"
+msgstr ""
+
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:778
msgid "Enable full-screen mode over all monitors"
msgstr ""
@@ -252,24 +272,7 @@
msgid "Error(%d) writing %s(REG_SZ) to Registry."
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/OSXPixelBuffer.cxx:50
-#: /home/ossman/devel/tigervnc/vncviewer/FLTKPixelBuffer.cxx:33
-msgid "Error: Not enough memory for framebuffer"
-msgstr ""
-
-#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:69
-msgid "Error: couldn't find suitable pixmap format"
-msgstr ""
-
-#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:60
-msgid "Error: display lacks pixmap format for default depth"
-msgstr ""
-
-#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:78
-msgid "Error: only true colour displays supported"
-msgstr ""
-
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1056
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1067
msgid "Exit viewer"
msgstr ""
@@ -310,7 +313,7 @@
msgid "Full (all available colors)"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1059
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1070
msgid "Full screen"
msgstr ""
@@ -352,7 +355,7 @@
msgid "Invalid parameter name on line: %d in file: %s"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:797
+#: /home/ossman/devel/tigervnc/vncviewer/DesktopWindow.cxx:805
msgid "Invalid screen layout computed for resize request!"
msgstr ""
@@ -399,7 +402,7 @@
msgid "Misc."
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1026
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1037
#, c-format
msgid "Multiple characters given for key code %d (0x%04x): '%s'"
msgstr ""
@@ -408,32 +411,32 @@
msgid "No"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:688
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:691
#, c-format
msgid "No scan code for extended virtual key 0x%02x"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:690
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:693
#, c-format
msgid "No scan code for virtual key 0x%02x"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:701
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:710
#, c-format
msgid "No symbol for extended virtual key 0x%02x"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:765
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:776
#, c-format
msgid "No symbol for key code %d (in the current state)"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:739
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:750
#, c-format
msgid "No symbol for key code 0x%02x (in the current state)"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:703
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:712
#, c-format
msgid "No symbol for virtual key 0x%02x"
msgstr ""
@@ -444,16 +447,26 @@
msgid "None"
msgstr ""
+#: /home/ossman/devel/tigervnc/vncviewer/OSXPixelBuffer.cxx:48
+#: /home/ossman/devel/tigervnc/vncviewer/FLTKPixelBuffer.cxx:33
+#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:111
+msgid "Not enough memory for framebuffer"
+msgstr ""
+
#: /home/ossman/devel/tigervnc/vncviewer/vncviewer.cxx:220
#: /home/ossman/devel/tigervnc/vncviewer/OptionsDialog.cxx:88
msgid "OK"
msgstr ""
+#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:77
+msgid "Only true colour displays supported"
+msgstr ""
+
#: /home/ossman/devel/tigervnc/vncviewer/UserDialog.cxx:74
msgid "Opening password file failed"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1084
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1095
#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:64
msgid "Options..."
msgstr ""
@@ -498,7 +511,7 @@
msgid "Quit"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1082
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1093
msgid "Refresh screen"
msgstr ""
@@ -515,7 +528,7 @@
msgid "Resize remote session to the local window"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1062
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1073
msgid "Resize window to session"
msgstr ""
@@ -536,16 +549,16 @@
msgid "Security method: %s"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:83
+#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:82
msgid "SelectObject failed"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1075
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1086
#, c-format
msgid "Send %s"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1080
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1091
msgid "Send Ctrl-Alt-Del"
msgstr ""
@@ -632,12 +645,17 @@
"See http://www.tigervnc.org for information on TigerVNC."
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1004
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:456
+#, c-format
+msgid "Unable to create platform specific framebuffer: %s"
+msgstr ""
+
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1015
#, c-format
msgid "Unknown FLTK key code %d (0x%04x)"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:878
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:889
#, c-format
msgid "Unknown decimal separator: '%s'"
msgstr ""
@@ -671,7 +689,7 @@
msgid "Using %s encoding"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:80
+#: /home/ossman/devel/tigervnc/vncviewer/X11PixelBuffer.cxx:79
#, c-format
msgid "Using default colormap and visual, %sdepth %d."
msgstr ""
@@ -681,6 +699,10 @@
msgid "Using pixel format %s"
msgstr ""
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:457
+msgid "Using platform independent framebuffer"
+msgstr ""
+
#: /home/ossman/devel/tigervnc/vncviewer/ServerDialog.cxx:42
msgid "VNC Viewer: Connection Details"
msgstr ""
@@ -694,7 +716,7 @@
msgid "VNC authentication"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1176
+#: /home/ossman/devel/tigervnc/vncviewer/Viewport.cxx:1187
msgid "VNC connection info"
msgstr ""
@@ -736,6 +758,6 @@
msgid "quality (0=poor, 9=best)"
msgstr ""
-#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:63
+#: /home/ossman/devel/tigervnc/vncviewer/Win32PixelBuffer.cxx:62
msgid "unable to create DIB section"
msgstr ""
diff --git a/unix/xserver/hw/vnc/xvnc.cc b/unix/xserver/hw/vnc/xvnc.cc
index 2ef888d..0fd7b0c 100644
--- a/unix/xserver/hw/vnc/xvnc.cc
+++ b/unix/xserver/hw/vnc/xvnc.cc
@@ -98,7 +98,7 @@
#define Xfree free
#endif
-#define XVNCVERSION "TigerVNC 1.3.80"
+#define XVNCVERSION "TigerVNC 1.4.80"
#define XVNCCOPYRIGHT ("Copyright (C) 1999-2013 TigerVNC Team and many others (see README.txt)\n" \
"See http://www.tigervnc.org for information on TigerVNC.\n")
diff --git a/vncviewer/DesktopWindow.cxx b/vncviewer/DesktopWindow.cxx
index 3579618..423d2df 100644
--- a/vncviewer/DesktopWindow.cxx
+++ b/vncviewer/DesktopWindow.cxx
@@ -658,12 +658,20 @@
void DesktopWindow::handleDesktopSize()
{
- int width, height;
+ if (desktopSize.hasBeenSet()) {
+ int width, height;
- if (sscanf(desktopSize.getValueStr(), "%dx%d", &width, &height) != 2)
- return;
+ // An explicit size has been requested
- remoteResize(width, height);
+ if (sscanf(desktopSize.getValueStr(), "%dx%d", &width, &height) != 2)
+ return;
+
+ remoteResize(width, height);
+ } else if (::remoteResize) {
+ // No explicit size, but remote resizing is on so make sure it
+ // matches whatever size the window ended up being
+ remoteResize(w(), h());
+ }
}
diff --git a/vncviewer/FLTKPixelBuffer.cxx b/vncviewer/FLTKPixelBuffer.cxx
index 1eafe10..ab116d1 100644
--- a/vncviewer/FLTKPixelBuffer.cxx
+++ b/vncviewer/FLTKPixelBuffer.cxx
@@ -30,7 +30,7 @@
{
data = new rdr::U8[width * height * format.bpp/8];
if (data == NULL)
- throw rfb::Exception(_("Error: Not enough memory for framebuffer"));
+ throw rfb::Exception(_("Not enough memory for framebuffer"));
}
FLTKPixelBuffer::~FLTKPixelBuffer()