building the more recent Xorg modules in a local directory and then building
Xvnc such that it links against the local build of these libraries, not the X11
libraries installed on the system. The "build-xorg" script in the TigerVNC
-source distribution (located under unix/) automates this process.
+source distribution (located under contrib/xorg/) automates this process.
The following procedure will build both the TigerVNC Viewer and a
"legacy-friendly" version of the TigerVNC Server:
cd {build_directory}
- sh {source_directory}/unix/build-xorg init
- sh {source_directory}/unix/build-xorg build [additional CMake flags]
+ sh {source_directory}/contrib/xorg/build-xorg init
+ sh {source_directory}/contrib/xorg/build-xorg build [additional CMake flags]
build-xorg generates a version of Xvnc that has no external dependencies on the
X11 shared libraries or any other distribution-specific shared libraries. This
This is convenient for testing changes that just apply to the TigerVNC source
code. To accomplish this, run:
- sh {source_directory}/unix/build-xorg rebuild [additional make flags]
+ sh {source_directory}/contrib/xorg/build-xorg rebuild [additional make flags]
For instance,
- sh {source_directory}/unix/build-xorg rebuild clean
+ sh {source_directory}/contrib/xorg/build-xorg rebuild clean
will clean both the Xvnc and vncviewer builds without destroying any of the
build configuration or module dependencies.
--- /dev/null
+#!/bin/bash
+# -*- mode: shell-script; coding: UTF-8 -*-
+#
+# Build Xvnc with Xorg 7.4 or 7.5
+#
+
+set -e
+
+PREFIX=
+MAKE="make"
+PARALLEL_MAKE=0
+XORG_VERSION=7.5
+XONLY=0
+CFGHOST=
+SRCDIR=`dirname $0`/..
+
+modules="dri2proto \
+ libpthread-stubs \
+ glproto \
+ xf86vidmodeproto \
+ xextproto \
+ xproto \
+ kbproto \
+ inputproto \
+ xcmiscproto \
+ bigreqsproto \
+ fixesproto \
+ damageproto \
+ xf86driproto \
+ randrproto \
+ renderproto \
+ scrnsaverproto \
+ resourceproto \
+ fontsproto \
+ videoproto \
+ compositeproto \
+ xineramaproto \
+ libdrm \
+ libXau \
+ xtrans \
+ libXdmcp \
+ libX11 \
+ libXext \
+ libXxf86vm \
+ libICE \
+ libSM \
+ libXt \
+ libXmu \
+ libXfixes \
+ libXdamage \
+ libXi \
+ libxkbfile \
+ libfontenc \
+ libXfont \
+ libpciaccess \
+ pixman"
+
+init()
+{
+ update_modules
+
+ pushd xorg
+ tar jxf ~/.tigervnc-xorg-$XORG_VERSION/util-macros.tar.bz2
+ pushd util-macros-*
+ echo "Building macros"
+ ./configure --prefix=${PREFIX}
+ ($MAKE install)
+ popd
+
+ pushd xserver
+
+ patch -p1 < $SRCDIR/unix/xserver18.patch
+ for all in `find $SRCDIR/contrib/xorg/xorg-$XORG_VERSION-patches/ -type f |grep '.*\.patch$'`; do
+ echo Applying $all
+ patch -p1 < $all
+ done
+
+ popd
+ popd
+}
+
+
+update_modules()
+{
+ if [ -d xorg ]; then rm -rf xorg; fi
+ if [ -d xorg.build ]; then rm -rf xorg.build; fi
+ mkdir xorg
+ pushd xorg
+ $SRCDIR/contrib/xorg/download-xorg-$XORG_VERSION
+ for module in ${modules}; do
+ tar jxf ~/.tigervnc-xorg-$XORG_VERSION/${module}.tar.bz2
+ done
+
+ [ -r ~/.tigervnc-xorg-$XORG_VERSION/Mesa.tar.bz2 ] && \
+ tar jxf ~/.tigervnc-xorg-$XORG_VERSION/Mesa.tar.bz2
+ [ -r ~/.tigervnc-xorg-$XORG_VERSION/Mesa.tar.gz ] && \
+ tar zxf ~/.tigervnc-xorg-$XORG_VERSION/Mesa.tar.gz
+
+ tar jxf ~/.tigervnc-xorg-$XORG_VERSION/freetype.tar.bz2
+ tar jxf ~/.tigervnc-xorg-$XORG_VERSION/xorg-server.tar.bz2
+ cp -r $SRCDIR/unix/xserver xserver
+ cp -r xorg-server-1.*/* xserver
+ popd
+}
+
+
+build ()
+{
+ if [ $XONLY -eq 0 ]; then
+
+ # Build VNC
+ echo "*** Building VNC ***"
+ cmake -G"Unix Makefiles" ${1+"$@"} -DUSE_INCLUDED_ZLIB=1 -DBUILD_STATIC=1 $SRCDIR
+ $MAKE
+
+ # Build Xorg
+ echo "*** Building Xorg ***"
+ pushd xorg
+
+ # build freetype
+ echo "*** Building freetype ***"
+ pushd freetype-*
+ ./configure ${CFGHOST} --prefix=${PREFIX} --enable-static --disable-shared
+ if [ $? -ne 0 ]; then
+ echo "Failed to configure freetype."
+ exit
+ fi
+ $MAKE install
+ popd
+
+ for module in ${modules}; do
+ extraoptions=""
+ cd ${module}-*
+ echo ======================
+ echo configuring ${module}
+ echo ======================
+ if [ "${module}" = "libX11" ]; then
+ extraoptions="${extraoptions} --without-xcb --disable-specs"
+ fi
+ if [ "${module}" = "libSM" ]; then
+ extraoptions="${extraoptions} --without-libuuid"
+ fi
+ if [ "${module}" = "pixman" ]; then
+ extraoptions="${extraoptions} --disable-gtk"
+ fi
+ if [ "${module}" = "libXfont" ]; then
+ extraoptions="${extraoptions} --with-freetype-config=${PREFIX}/bin/freetype-config"
+ fi
+ OLD_CFLAGS=${CFLAGS}
+ OLD_CXXFLAGS=${CXXFLAGS}
+ CFLAGS=${CFLAGS}' -fPIC'
+ CXXFLAGS=${CXXFLAGS}' -fPIC'
+ export CFLAGS CXXFLAGS
+ ./configure ${CFGHOST} --prefix="${PREFIX}" ${extraoptions} --enable-static --disable-shared
+ CFLAGS=${OLD_CFLAGS}
+ CXXFLAGS=${OLD_CXXFLAGS}
+ export CFLAGS CXXFLAGS
+ echo ======================
+ echo building ${module}
+ echo ======================
+ if [ $? -ne 0 ]; then
+ echo "Failed to configure ${module}."
+ exit
+ fi
+ $MAKE install
+ cd ..
+ done
+
+ # build mesa
+ echo "*** Building Mesa ***"
+ pushd Mesa-*
+ ./configure ${CFGHOST} --prefix=${PREFIX} --disable-driglx-direct --with-dri-drivers=swrast --with-driver=dri --disable-glut --without-demos
+ if [ $? -ne 0 ]; then
+ echo "Failed to configure Mesa."
+ exit
+ fi
+ $MAKE
+ $MAKE install
+ popd
+
+ popd
+
+ fi # XONLY
+
+ # build xserver
+ echo "*** Building xserver ***"
+ pushd xorg/xserver
+ autoreconf -fiv
+ XORGCFGFLAGS="--disable-dri --enable-dri2 --disable-composite --disable-xinerama --disable-xvfb --disable-xnest --disable-xorg --disable-dmx --disable-xwin --disable-xephyr --disable-kdrive --disable-config-dbus --disable-config-hal --disable-config-udev --with-sha1=libgcrypt SHA1_LIB=-lcrypto --disable-shared --enable-static ${XORGCFGFLAGS}"
+ ./configure ${CFGHOST} --prefix=${PREFIX} ${XORGCFGFLAGS}
+ if [ $? -ne 0 ]; then
+ echo "Failed to configure X server."
+ exit
+ fi
+ $MAKE TIGERVNC_SRCDIR=$SRCDIR install
+ popd
+}
+
+rebuild ()
+{
+ # Build VNC
+ echo "*** Building VNC ***"
+ $MAKE ${1+"$@"}
+
+ # build xserver
+ echo "*** Building xserver ***"
+ pushd xorg/xserver
+ $MAKE TIGERVNC_SRCDIR=$SRCDIR install ${1+"$@"}
+ popd
+}
+
+
+usage ()
+{
+ echo "Usage: $0 init [-version <7.4 | 7.5>]"
+ echo
+ echo " $0 build [-version <7.4 | 7.5>]"
+ echo " [additional CMake flags]"
+ echo
+ echo " $0 rebuild [additional make options]"
+ echo
+ echo " $0 update [-version <7.4 | 7.5>]"
+ echo
+ exit 1
+}
+
+if [ -x '/usr/bin/getconf' -a "$PARALLEL_MAKE" = "1" ]; then
+ MAKE_PARALLEL=`/usr/bin/getconf _NPROCESSORS_ONLN 2>&1`
+ [ "$MAKE_PARALLEL" -gt 1 ] && MAKE="$MAKE -j$MAKE_PARALLEL"
+fi
+
+while [ $# -gt 0 ]
+do
+ case "$1" in
+ init) MODE=init ;;
+ build) MODE=build ;;
+ xbuild) MODE=build; XONLY=1 ;;
+ rebuild) MODE=rebuild ;;
+ update) MODE=update ;;
+ -parallel) PARALLEL_MAKE=1; ;;
+ -srcdir) SRCDIR=$2; shift ;;
+ *) break ;;
+ esac
+ shift
+done
+
+pushd $SRCDIR
+SRCDIR=`pwd`
+echo "*** Using TigerVNC source tree at $SRCDIR ***"
+popd
+
+if [ "`pwd`" = "$SRCDIR/unix" ]; then
+ cd $SRCDIR
+fi
+
+if [ "$PREFIX" = "" ]; then
+ PREFIX=`pwd`/xorg.build
+fi
+
+if [ "$MODE" = "build" ]; then
+ if [ ! -d ./xorg.build/syslib ]; then
+ mkdir -p ./xorg.build/syslib
+ fi
+
+ for i in "$@"; do
+ case "$i" in
+ CC=*) CC=`echo $i | sed s/^CC=//g` ;;
+ CXX=*) CXX=`echo $i | sed s/^CXX=//g` ;;
+ CFLAGS=*) CFLAGS=`echo $i | sed s/^CFLAGS=//g` ;;
+ CXXFLAGS=*) CXXFLAGS=`echo $i | sed s/^CXXFLAGS=//g` ;;
+ LDFLAGS=*) LDFLAGS=`echo $i | sed s/^LDFLAGS=//g` ;;
+ esac
+ done
+ if [ "$CC" = "" ]; then
+ CC=gcc
+ fi
+ if [ "$CXX" = "" ]; then
+ CXX=g++
+ fi
+ if [ "$CFLAGS" = "" ]; then
+ CFLAGS=-O3
+ fi
+ if [ "$CXXFLAGS" = "" ]; then
+ CXXFLAGS=-O3
+ fi
+ CFLAGS="$CFLAGS -fPIC"
+ CXXFLAGS="$CXXFLAGS -fPIC"
+ LDFLAGS="$LDFLAGS -static-libgcc -L`pwd`/xorg.build/syslib"
+ echo CC = $CC
+ echo CXX = $CXX
+ echo CFLAGS = $CFLAGS
+ echo CXXFLAGS = $CXXFLAGS
+ echo LDFLAGS = $LDFLAGS
+ if [[ $CFLAGS = *-m32* ]]; then
+ CFGHOST="--host i686-pc-linux-gnu"
+ fi
+ STATICLIBS='libcrypto.a libz.a'
+ for lib in $STATICLIBS; do
+ if [ -f ./xorg.build/syslib/$lib ]; then
+ rm -f ./xorg.build/syslib/$lib
+ fi
+ done
+ IS64BIT=`echo -e "#ifdef __x86_64__\nis64bit_yes\n#else\nis64bit_no\n#endif" | $CC $CFLAGS -E - | grep is64bit`
+ STATICLIBDIR=
+ case $IS64BIT in
+ is64bit_yes)
+ if [ -d /usr/lib64 ]; then STATICLIBDIR=lib64;
+ else STATICLIBDIR=lib; fi
+ ;;
+ is64bit_no)
+ if [ -d /usr/lib32 ]; then STATICLIBDIR=lib32;
+ else STATICLIBDIR=lib; fi
+ ;;
+ *)
+ echo "Cannot determine whether compiler output is 64-bit or 32-bit. Are you using GCC?"
+ exit 1
+ ;;
+ esac
+ for lib in $STATICLIBS; do
+ if [ -f /usr/$STATICLIBDIR/$lib ]; then
+ ln -fs /usr/$STATICLIBDIR/$lib ./xorg.build/syslib
+ else
+ if [ -f /$STATICLIBDIR/$lib ]; then
+ ln -fs /$STATICLIBDIR/$lib ./xorg.build/syslib
+ else
+ DYLIB=`echo $lib | sed s/\\\.a/\\.so/g`
+ if [ -f /usr/$STATICLIBDIR/$DYLIB -o -f /$STATICLIBDIR/$DYLIB ]; then
+ echo WARNING: Cannot find suitable $lib. Xvnc will depend on $DYLIB.
+ fi
+ fi
+ fi
+ done
+fi
+
+export ACLOCAL="aclocal -I ${PREFIX}/share/aclocal"
+export PKG_CONFIG_PATH="${PREFIX}/lib/pkgconfig:${PREFIX}/share/pkgconfig"
+
+case "$MODE" in
+ init) init ;;
+ build)
+ export CFLAGS CXXFLAGS LDFLAGS
+ build ${1+"$@"};
+ ;;
+ rebuild) rebuild ${1+"$@"} ;;
+ update) update ;;
+ *) usage ;;
+esac
--- /dev/null
+#!/usr/bin/env python
+# -*-mode: python; coding: UTF-8 -*-
+
+import os
+import glob
+
+#INDI = "http://ftp.sunet.se/pub/X11/ftp.x.org/individual"
+INDI = "http://ftp.x.org/pub/individual/"
+PROTO = INDI + "proto/"
+LIB = INDI + "lib/"
+SERVER = INDI + "xserver/"
+UTIL = INDI + "util/"
+DATA = INDI + "data/"
+APP = INDI + "app/"
+
+packages = {
+ "damageproto": PROTO + "damageproto-1.2.0.tar.bz2",
+ "fixesproto": PROTO + "fixesproto-4.1.1.tar.bz2",
+ "resourceproto": PROTO + "resourceproto-1.1.0.tar.bz2",
+ "fontsproto": PROTO + "fontsproto-2.1.0.tar.bz2",
+ "bigreqsproto": PROTO + "bigreqsproto-1.1.0.tar.bz2",
+ "kbproto": PROTO + "kbproto-1.0.4.tar.bz2",
+ "inputproto": PROTO + "inputproto-2.0.tar.bz2",
+ "glproto": PROTO + "glproto-1.4.12.tar.bz2",
+ "xineramaproto": PROTO + "xineramaproto-1.2.tar.bz2",
+ "randrproto": PROTO + "randrproto-1.3.1.tar.bz2",
+ "scrnsaverproto": PROTO + "scrnsaverproto-1.2.0.tar.bz2",
+ "renderproto": PROTO + "renderproto-0.11.tar.bz2",
+ "xcmiscproto": PROTO + "xcmiscproto-1.2.0.tar.bz2",
+ "xextproto": PROTO + "xextproto-7.1.1.tar.bz2",
+ "xf86driproto": PROTO + "xf86driproto-2.1.0.tar.bz2",
+ "dri2proto": PROTO + "dri2proto-2.1.tar.bz2",
+ "compositeproto": PROTO + "compositeproto-0.4.1.tar.bz2",
+ "xf86vidmodeproto": PROTO + "xf86vidmodeproto-2.3.tar.bz2",
+ "videoproto": PROTO + "videoproto-2.3.0.tar.bz2",
+ "xproto": PROTO + "xproto-7.0.16.tar.bz2",
+
+ "libxkbfile": LIB + "libxkbfile-1.0.6.tar.bz2",
+ "libXxf86vm": LIB + "libXxf86vm-1.1.0.tar.bz2",
+ "libXext": LIB + "libXext-1.1.2.tar.bz2",
+ "libfontenc": LIB + "libfontenc-1.0.5.tar.bz2",
+ "libXau": LIB + "libXau-1.0.6.tar.bz2",
+ "libXfont": LIB + "libXfont-1.4.2.tar.bz2",
+ "libXfixes": LIB + "libXfixes-4.0.5.tar.bz2",
+ "libSM": LIB + "libSM-1.1.1.tar.bz2",
+ "libXi": LIB + "libXi-1.3.2.tar.bz2",
+ "libXmu": LIB + "libXmu-1.0.5.tar.bz2",
+ "libX11": LIB + "libX11-1.3.5.tar.bz2",
+ "libXdmcp": LIB + "libXdmcp-1.0.3.tar.bz2",
+ "xtrans": LIB + "xtrans-1.2.5.tar.bz2",
+ "libXt": LIB + "libXt-1.0.8.tar.bz2",
+ "libpciaccess": LIB + "libpciaccess-0.12.0.tar.bz2",
+ "libICE": LIB + "libICE-1.0.6.tar.bz2",
+ "pixman": LIB + "pixman-0.19.2.tar.bz2",
+ "libXdamage": LIB + "libXdamage-1.1.3.tar.bz2",
+
+ "util-macros": UTIL + "util-macros-1.10.0.tar.bz2",
+ "xorg-server": SERVER + "xorg-server-1.8.2.tar.bz2",
+
+ "libdrm": "http://dri.freedesktop.org/libdrm/libdrm-2.4.21.tar.bz2",
+ "Mesa": "ftp://ftp.freedesktop.org/pub/mesa/beta/MesaLib-7.8.3-rc1.tar.bz2",
+ "libpthread-stubs": "http://xcb.freedesktop.org/dist/libpthread-stubs-0.3.tar.bz2",
+ "freetype": "http://downloads.sourceforge.net/freetype/freetype-2.4.2.tar.bz2",
+ }
+
+
+
+def main():
+ dir = os.path.expanduser("~")+"/.tigervnc-xorg-7.5"
+ cwd = os.getcwd()
+ if not os.path.exists(dir):
+ os.mkdir(dir)
+ os.chdir(dir)
+
+ for pkg in packages.keys():
+ loc = packages[pkg]
+ if ".tar.bz2" in loc:
+ fname = pkg + ".tar.bz2"
+ else :
+ fname = pkg + ".tar.gz"
+ if not os.path.exists(fname):
+ assert 0 == os.spawnvp(os.P_WAIT, "wget", ["-N", "-c", "-O", fname, loc])
+
+ os.chdir(cwd)
+main()
--- /dev/null
+From 0acffdd6f443198378012405e7f814f5abf278b3 Mon Sep 17 00:00:00 2001
+From: Adam Tkac <atkac@redhat.com>
+Date: Wed, 15 Sep 2010 15:37:01 +0200
+Subject: [PATCH] Add -dridir parameter to specify DRI drivers directory from command line.
+
+Signed-off-by: Adam Tkac <atkac@redhat.com>
+---
+ glx/glxdri.c | 2 --
+ glx/glxdri2.c | 2 --
+ glx/glxdriswrast.c | 2 --
+ glx/glxext.c | 27 +++++++++++++++++++++++++++
+ glx/glxserver.h | 3 +++
+ os/utils.c | 9 +++++++++
+ 6 files changed, 39 insertions(+), 6 deletions(-)
+
+diff --git a/glx/glxdri.c b/glx/glxdri.c
+index 5b78cec..ce29ae2 100644
+--- a/glx/glxdri.c
++++ b/glx/glxdri.c
+@@ -860,8 +860,6 @@ static const __DRIextension *loader_extensions[] = {
+
+
+
+-static const char dri_driver_path[] = DRI_DRIVER_PATH;
+-
+ static Bool
+ glxDRIEnterVT (int index, int flags)
+ {
+diff --git a/glx/glxdri2.c b/glx/glxdri2.c
+index 2d6090c..49265ec 100644
+--- a/glx/glxdri2.c
++++ b/glx/glxdri2.c
+@@ -579,8 +579,6 @@ static const __DRIextension *loader_extensions[] = {
+ NULL
+ };
+
+-static const char dri_driver_path[] = DRI_DRIVER_PATH;
+-
+ static Bool
+ glxDRIEnterVT (int index, int flags)
+ {
+diff --git a/glx/glxdriswrast.c b/glx/glxdriswrast.c
+index 6a34393..37c1dce 100644
+--- a/glx/glxdriswrast.c
++++ b/glx/glxdriswrast.c
+@@ -438,8 +438,6 @@ initializeExtensions(__GLXDRIscreen *screen)
+ }
+ }
+
+-static const char dri_driver_path[] = DRI_DRIVER_PATH;
+-
+ static __GLXscreen *
+ __glXDRIscreenProbe(ScreenPtr pScreen)
+ {
+diff --git a/glx/glxext.c b/glx/glxext.c
+index 89e58b0..5e7cf23 100644
+--- a/glx/glxext.c
++++ b/glx/glxext.c
+@@ -608,3 +608,30 @@ static int __glXDispatch(ClientPtr client)
+
+ return retval;
+ }
++
++char *dri_driver_path = DRI_DRIVER_PATH;
++
++int GlxProcessArguments(int argc, char *argv[], int i)
++{
++ if (strncmp(argv[i], "-dridir", 7) == 0) {
++ if (++i < argc) {
++#if !defined(WIN32) && !defined(__CYGWIN__)
++ if (getuid() != geteuid()) {
++ LogMessage(X_WARNING, "-dridir is not available for setuid X servers\n");
++ return -1;
++ } else
++#endif
++ {
++ if (strlen(argv[i]) < PATH_MAX) {
++ dri_driver_path = argv[i];
++ return 2;
++ } else {
++ LogMessage(X_ERROR, "-dridir pathname too long\n");
++ return -1;
++ }
++ }
++ }
++ }
++
++ return 0;
++}
+diff --git a/glx/glxserver.h b/glx/glxserver.h
+index 1daf977..082ff82 100644
+--- a/glx/glxserver.h
++++ b/glx/glxserver.h
+@@ -251,4 +251,7 @@ extern unsigned glxMinorVersion;
+
+ extern int __glXEventBase;
+
++extern char *dri_driver_path;
++extern int GlxProcessArguments(int argc, char *argv[], int i);
++
+ #endif /* !__GLX_server_h__ */
+diff --git a/os/utils.c b/os/utils.c
+index 13d3b3f..ff97c86 100644
+--- a/os/utils.c
++++ b/os/utils.c
+@@ -141,6 +141,7 @@ Bool noDPMSExtension = FALSE;
+ #ifdef GLXEXT
+ Bool noGlxExtension = FALSE;
+ Bool noGlxVisualInit = FALSE;
++extern int GlxProcessArguments(int argc, char *argv[], int i);
+ #endif
+ #ifdef SCREENSAVER
+ Bool noScreenSaverExtension = FALSE;
+@@ -721,6 +722,14 @@ ProcessCommandLine(int argc, char *argv[])
+ i+= skip-1;
+ else UseMsg();
+ }
++#ifdef GLXEXT
++ else if ((skip = GlxProcessArguments(argc,argv,i)) != 0) {
++ if (skip > 0)
++ i += skip - 1;
++ else
++ UseMsg();
++ }
++#endif
+ #ifdef RLIMIT_DATA
+ else if ( strcmp( argv[i], "-ld") == 0)
+ {
+--
+1.7.3.2
+
--- /dev/null
+From 5e6e99eaef3ca346c78a3e520ed58ec8b8100b41 Mon Sep 17 00:00:00 2001
+From: Adam Tkac <atkac@redhat.com>
+Date: Thu, 2 Sep 2010 17:24:38 +0200
+Subject: [PATCH] Add -xkbcompdir parameter to modify "xkbcomp" path from commandline.
+
+Signed-off-by: Adam Tkac <atkac@redhat.com>
+---
+ xkb/xkbInit.c | 21 +++++++++++++++++++++
+ 1 files changed, 21 insertions(+), 0 deletions(-)
+
+diff --git a/xkb/xkbInit.c b/xkb/xkbInit.c
+index fbf8f14..29fb33e 100644
+--- a/xkb/xkbInit.c
++++ b/xkb/xkbInit.c
+@@ -742,7 +742,28 @@ XkbProcessArguments(int argc,char *argv[],int i)
+ }
+ }
+ return j;
++ } else if (strncmp(argv[i], "-xkbcompdir", 11)==0) {
++ if (++i < argc) {
++#if !defined(WIN32) && !defined(__CYGWIN__)
++ if (getuid() != geteuid()) {
++ LogMessage(X_WARNING, "-xkbdir is not available for setuid X servers\n");
++ return -1;
++ } else
++#endif
++ {
++ if (strlen(argv[i]) < PATH_MAX) {
++ XkbBinDirectory = argv[i];
++ return 2;
++ } else {
++ LogMessage(X_ERROR, "-xkbcompdir pathname too long\n");
++ return -1;
++ }
++ }
++ } else {
++ return -1;
++ }
+ }
++
+ if ((strcmp(argv[i], "-ardelay") == 0) ||
+ (strcmp (argv[i], "-ar1") == 0)) { /* -ardelay int */
+ if (++i >= argc) UseMsg ();
+--
+1.7.2.3
+
+++ /dev/null
-#!/bin/bash
-# -*- mode: shell-script; coding: UTF-8 -*-
-#
-# Build Xvnc with Xorg 7.4 or 7.5
-#
-
-set -e
-
-PREFIX=
-MAKE="make"
-PARALLEL_MAKE=0
-XORG_VERSION=7.5
-XONLY=0
-CFGHOST=
-SRCDIR=`dirname $0`/..
-
-modules="dri2proto \
- libpthread-stubs \
- glproto \
- xf86vidmodeproto \
- xextproto \
- xproto \
- kbproto \
- inputproto \
- xcmiscproto \
- bigreqsproto \
- fixesproto \
- damageproto \
- xf86driproto \
- randrproto \
- renderproto \
- scrnsaverproto \
- resourceproto \
- fontsproto \
- videoproto \
- compositeproto \
- xineramaproto \
- libdrm \
- libXau \
- xtrans \
- libXdmcp \
- libX11 \
- libXext \
- libXxf86vm \
- libICE \
- libSM \
- libXt \
- libXmu \
- libXfixes \
- libXdamage \
- libXi \
- libxkbfile \
- libfontenc \
- libXfont \
- libpciaccess \
- pixman"
-
-init()
-{
- update_modules
-
- pushd xorg
- tar jxf ~/.tigervnc-xorg-$XORG_VERSION/util-macros.tar.bz2
- pushd util-macros-*
- echo "Building macros"
- ./configure --prefix=${PREFIX}
- ($MAKE install)
- popd
-
- pushd xserver
-
- patch -p1 < $SRCDIR/unix/xserver18.patch
- for all in `find $SRCDIR/unix/xorg-$XORG_VERSION-patches/ -type f |grep '.*\.patch$'`; do
- echo Applying $all
- patch -p1 < $all
- done
-
- popd
- popd
-}
-
-
-update_modules()
-{
- if [ -d xorg ]; then rm -rf xorg; fi
- if [ -d xorg.build ]; then rm -rf xorg.build; fi
- mkdir xorg
- pushd xorg
- $SRCDIR/unix/download-xorg-$XORG_VERSION
- for module in ${modules}; do
- tar jxf ~/.tigervnc-xorg-$XORG_VERSION/${module}.tar.bz2
- done
-
- [ -r ~/.tigervnc-xorg-$XORG_VERSION/Mesa.tar.bz2 ] && \
- tar jxf ~/.tigervnc-xorg-$XORG_VERSION/Mesa.tar.bz2
- [ -r ~/.tigervnc-xorg-$XORG_VERSION/Mesa.tar.gz ] && \
- tar zxf ~/.tigervnc-xorg-$XORG_VERSION/Mesa.tar.gz
-
- tar jxf ~/.tigervnc-xorg-$XORG_VERSION/freetype.tar.bz2
- tar jxf ~/.tigervnc-xorg-$XORG_VERSION/xorg-server.tar.bz2
- cp -r $SRCDIR/unix/xserver xserver
- cp -r xorg-server-1.*/* xserver
- popd
-}
-
-
-build ()
-{
- if [ $XONLY -eq 0 ]; then
-
- # Build VNC
- echo "*** Building VNC ***"
- cmake -G"Unix Makefiles" ${1+"$@"} -DUSE_INCLUDED_ZLIB=1 -DBUILD_STATIC=1 $SRCDIR
- $MAKE
-
- # Build Xorg
- echo "*** Building Xorg ***"
- pushd xorg
-
- # build freetype
- echo "*** Building freetype ***"
- pushd freetype-*
- ./configure ${CFGHOST} --prefix=${PREFIX} --enable-static --disable-shared
- if [ $? -ne 0 ]; then
- echo "Failed to configure freetype."
- exit
- fi
- $MAKE install
- popd
-
- for module in ${modules}; do
- extraoptions=""
- cd ${module}-*
- echo ======================
- echo configuring ${module}
- echo ======================
- if [ "${module}" = "libX11" ]; then
- extraoptions="${extraoptions} --without-xcb --disable-specs"
- fi
- if [ "${module}" = "libSM" ]; then
- extraoptions="${extraoptions} --without-libuuid"
- fi
- if [ "${module}" = "pixman" ]; then
- extraoptions="${extraoptions} --disable-gtk"
- fi
- if [ "${module}" = "libXfont" ]; then
- extraoptions="${extraoptions} --with-freetype-config=${PREFIX}/bin/freetype-config"
- fi
- OLD_CFLAGS=${CFLAGS}
- OLD_CXXFLAGS=${CXXFLAGS}
- CFLAGS=${CFLAGS}' -fPIC'
- CXXFLAGS=${CXXFLAGS}' -fPIC'
- export CFLAGS CXXFLAGS
- ./configure ${CFGHOST} --prefix="${PREFIX}" ${extraoptions} --enable-static --disable-shared
- CFLAGS=${OLD_CFLAGS}
- CXXFLAGS=${OLD_CXXFLAGS}
- export CFLAGS CXXFLAGS
- echo ======================
- echo building ${module}
- echo ======================
- if [ $? -ne 0 ]; then
- echo "Failed to configure ${module}."
- exit
- fi
- $MAKE install
- cd ..
- done
-
- # build mesa
- echo "*** Building Mesa ***"
- pushd Mesa-*
- ./configure ${CFGHOST} --prefix=${PREFIX} --disable-driglx-direct --with-dri-drivers=swrast --with-driver=dri --disable-glut --without-demos
- if [ $? -ne 0 ]; then
- echo "Failed to configure Mesa."
- exit
- fi
- $MAKE
- $MAKE install
- popd
-
- popd
-
- fi # XONLY
-
- # build xserver
- echo "*** Building xserver ***"
- pushd xorg/xserver
- autoreconf -fiv
- XORGCFGFLAGS="--disable-dri --enable-dri2 --disable-composite --disable-xinerama --disable-xvfb --disable-xnest --disable-xorg --disable-dmx --disable-xwin --disable-xephyr --disable-kdrive --disable-config-dbus --disable-config-hal --disable-config-udev --with-sha1=libgcrypt SHA1_LIB=-lcrypto --disable-shared --enable-static ${XORGCFGFLAGS}"
- ./configure ${CFGHOST} --prefix=${PREFIX} ${XORGCFGFLAGS}
- if [ $? -ne 0 ]; then
- echo "Failed to configure X server."
- exit
- fi
- $MAKE TIGERVNC_SRCDIR=$SRCDIR install
- popd
-}
-
-rebuild ()
-{
- # Build VNC
- echo "*** Building VNC ***"
- $MAKE ${1+"$@"}
-
- # build xserver
- echo "*** Building xserver ***"
- pushd xorg/xserver
- $MAKE TIGERVNC_SRCDIR=$SRCDIR install ${1+"$@"}
- popd
-}
-
-
-usage ()
-{
- echo "Usage: $0 init [-version <7.4 | 7.5>]"
- echo
- echo " $0 build [-version <7.4 | 7.5>]"
- echo " [additional CMake flags]"
- echo
- echo " $0 rebuild [additional make options]"
- echo
- echo " $0 update [-version <7.4 | 7.5>]"
- echo
- exit 1
-}
-
-if [ -x '/usr/bin/getconf' -a "$PARALLEL_MAKE" = "1" ]; then
- MAKE_PARALLEL=`/usr/bin/getconf _NPROCESSORS_ONLN 2>&1`
- [ "$MAKE_PARALLEL" -gt 1 ] && MAKE="$MAKE -j$MAKE_PARALLEL"
-fi
-
-while [ $# -gt 0 ]
-do
- case "$1" in
- init) MODE=init ;;
- build) MODE=build ;;
- xbuild) MODE=build; XONLY=1 ;;
- rebuild) MODE=rebuild ;;
- update) MODE=update ;;
- -parallel) PARALLEL_MAKE=1; ;;
- -srcdir) SRCDIR=$2; shift ;;
- *) break ;;
- esac
- shift
-done
-
-pushd $SRCDIR
-SRCDIR=`pwd`
-echo "*** Using TigerVNC source tree at $SRCDIR ***"
-popd
-
-if [ "`pwd`" = "$SRCDIR/unix" ]; then
- cd $SRCDIR
-fi
-
-if [ "$PREFIX" = "" ]; then
- PREFIX=`pwd`/xorg.build
-fi
-
-if [ "$MODE" = "build" ]; then
- if [ ! -d ./xorg.build/syslib ]; then
- mkdir -p ./xorg.build/syslib
- fi
-
- for i in "$@"; do
- case "$i" in
- CC=*) CC=`echo $i | sed s/^CC=//g` ;;
- CXX=*) CXX=`echo $i | sed s/^CXX=//g` ;;
- CFLAGS=*) CFLAGS=`echo $i | sed s/^CFLAGS=//g` ;;
- CXXFLAGS=*) CXXFLAGS=`echo $i | sed s/^CXXFLAGS=//g` ;;
- LDFLAGS=*) LDFLAGS=`echo $i | sed s/^LDFLAGS=//g` ;;
- esac
- done
- if [ "$CC" = "" ]; then
- CC=gcc
- fi
- if [ "$CXX" = "" ]; then
- CXX=g++
- fi
- if [ "$CFLAGS" = "" ]; then
- CFLAGS=-O3
- fi
- if [ "$CXXFLAGS" = "" ]; then
- CXXFLAGS=-O3
- fi
- CFLAGS="$CFLAGS -fPIC"
- CXXFLAGS="$CXXFLAGS -fPIC"
- LDFLAGS="$LDFLAGS -static-libgcc -L`pwd`/xorg.build/syslib"
- echo CC = $CC
- echo CXX = $CXX
- echo CFLAGS = $CFLAGS
- echo CXXFLAGS = $CXXFLAGS
- echo LDFLAGS = $LDFLAGS
- if [[ $CFLAGS = *-m32* ]]; then
- CFGHOST="--host i686-pc-linux-gnu"
- fi
- STATICLIBS='libcrypto.a libz.a'
- for lib in $STATICLIBS; do
- if [ -f ./xorg.build/syslib/$lib ]; then
- rm -f ./xorg.build/syslib/$lib
- fi
- done
- IS64BIT=`echo -e "#ifdef __x86_64__\nis64bit_yes\n#else\nis64bit_no\n#endif" | $CC $CFLAGS -E - | grep is64bit`
- STATICLIBDIR=
- case $IS64BIT in
- is64bit_yes)
- if [ -d /usr/lib64 ]; then STATICLIBDIR=lib64;
- else STATICLIBDIR=lib; fi
- ;;
- is64bit_no)
- if [ -d /usr/lib32 ]; then STATICLIBDIR=lib32;
- else STATICLIBDIR=lib; fi
- ;;
- *)
- echo "Cannot determine whether compiler output is 64-bit or 32-bit. Are you using GCC?"
- exit 1
- ;;
- esac
- for lib in $STATICLIBS; do
- if [ -f /usr/$STATICLIBDIR/$lib ]; then
- ln -fs /usr/$STATICLIBDIR/$lib ./xorg.build/syslib
- else
- if [ -f /$STATICLIBDIR/$lib ]; then
- ln -fs /$STATICLIBDIR/$lib ./xorg.build/syslib
- else
- DYLIB=`echo $lib | sed s/\\\.a/\\.so/g`
- if [ -f /usr/$STATICLIBDIR/$DYLIB -o -f /$STATICLIBDIR/$DYLIB ]; then
- echo WARNING: Cannot find suitable $lib. Xvnc will depend on $DYLIB.
- fi
- fi
- fi
- done
-fi
-
-export ACLOCAL="aclocal -I ${PREFIX}/share/aclocal"
-export PKG_CONFIG_PATH="${PREFIX}/lib/pkgconfig:${PREFIX}/share/pkgconfig"
-
-case "$MODE" in
- init) init ;;
- build)
- export CFLAGS CXXFLAGS LDFLAGS
- build ${1+"$@"};
- ;;
- rebuild) rebuild ${1+"$@"} ;;
- update) update ;;
- *) usage ;;
-esac
+++ /dev/null
-#!/usr/bin/env python
-# -*-mode: python; coding: UTF-8 -*-
-
-import os
-import glob
-
-#INDI = "http://ftp.sunet.se/pub/X11/ftp.x.org/individual"
-INDI = "http://ftp.x.org/pub/individual/"
-PROTO = INDI + "proto/"
-LIB = INDI + "lib/"
-SERVER = INDI + "xserver/"
-UTIL = INDI + "util/"
-DATA = INDI + "data/"
-APP = INDI + "app/"
-
-packages = {
- "damageproto": PROTO + "damageproto-1.2.0.tar.bz2",
- "fixesproto": PROTO + "fixesproto-4.1.1.tar.bz2",
- "resourceproto": PROTO + "resourceproto-1.1.0.tar.bz2",
- "fontsproto": PROTO + "fontsproto-2.1.0.tar.bz2",
- "bigreqsproto": PROTO + "bigreqsproto-1.1.0.tar.bz2",
- "kbproto": PROTO + "kbproto-1.0.4.tar.bz2",
- "inputproto": PROTO + "inputproto-2.0.tar.bz2",
- "glproto": PROTO + "glproto-1.4.12.tar.bz2",
- "xineramaproto": PROTO + "xineramaproto-1.2.tar.bz2",
- "randrproto": PROTO + "randrproto-1.3.1.tar.bz2",
- "scrnsaverproto": PROTO + "scrnsaverproto-1.2.0.tar.bz2",
- "renderproto": PROTO + "renderproto-0.11.tar.bz2",
- "xcmiscproto": PROTO + "xcmiscproto-1.2.0.tar.bz2",
- "xextproto": PROTO + "xextproto-7.1.1.tar.bz2",
- "xf86driproto": PROTO + "xf86driproto-2.1.0.tar.bz2",
- "dri2proto": PROTO + "dri2proto-2.1.tar.bz2",
- "compositeproto": PROTO + "compositeproto-0.4.1.tar.bz2",
- "xf86vidmodeproto": PROTO + "xf86vidmodeproto-2.3.tar.bz2",
- "videoproto": PROTO + "videoproto-2.3.0.tar.bz2",
- "xproto": PROTO + "xproto-7.0.16.tar.bz2",
-
- "libxkbfile": LIB + "libxkbfile-1.0.6.tar.bz2",
- "libXxf86vm": LIB + "libXxf86vm-1.1.0.tar.bz2",
- "libXext": LIB + "libXext-1.1.2.tar.bz2",
- "libfontenc": LIB + "libfontenc-1.0.5.tar.bz2",
- "libXau": LIB + "libXau-1.0.6.tar.bz2",
- "libXfont": LIB + "libXfont-1.4.2.tar.bz2",
- "libXfixes": LIB + "libXfixes-4.0.5.tar.bz2",
- "libSM": LIB + "libSM-1.1.1.tar.bz2",
- "libXi": LIB + "libXi-1.3.2.tar.bz2",
- "libXmu": LIB + "libXmu-1.0.5.tar.bz2",
- "libX11": LIB + "libX11-1.3.5.tar.bz2",
- "libXdmcp": LIB + "libXdmcp-1.0.3.tar.bz2",
- "xtrans": LIB + "xtrans-1.2.5.tar.bz2",
- "libXt": LIB + "libXt-1.0.8.tar.bz2",
- "libpciaccess": LIB + "libpciaccess-0.12.0.tar.bz2",
- "libICE": LIB + "libICE-1.0.6.tar.bz2",
- "pixman": LIB + "pixman-0.19.2.tar.bz2",
- "libXdamage": LIB + "libXdamage-1.1.3.tar.bz2",
-
- "util-macros": UTIL + "util-macros-1.10.0.tar.bz2",
- "xorg-server": SERVER + "xorg-server-1.8.2.tar.bz2",
-
- "libdrm": "http://dri.freedesktop.org/libdrm/libdrm-2.4.21.tar.bz2",
- "Mesa": "ftp://ftp.freedesktop.org/pub/mesa/beta/MesaLib-7.8.3-rc1.tar.bz2",
- "libpthread-stubs": "http://xcb.freedesktop.org/dist/libpthread-stubs-0.3.tar.bz2",
- "freetype": "http://downloads.sourceforge.net/freetype/freetype-2.4.2.tar.bz2",
- }
-
-
-
-def main():
- dir = os.path.expanduser("~")+"/.tigervnc-xorg-7.5"
- cwd = os.getcwd()
- if not os.path.exists(dir):
- os.mkdir(dir)
- os.chdir(dir)
-
- for pkg in packages.keys():
- loc = packages[pkg]
- if ".tar.bz2" in loc:
- fname = pkg + ".tar.bz2"
- else :
- fname = pkg + ".tar.gz"
- if not os.path.exists(fname):
- assert 0 == os.spawnvp(os.P_WAIT, "wget", ["-N", "-c", "-O", fname, loc])
-
- os.chdir(cwd)
-main()
+++ /dev/null
-From 0acffdd6f443198378012405e7f814f5abf278b3 Mon Sep 17 00:00:00 2001
-From: Adam Tkac <atkac@redhat.com>
-Date: Wed, 15 Sep 2010 15:37:01 +0200
-Subject: [PATCH] Add -dridir parameter to specify DRI drivers directory from command line.
-
-Signed-off-by: Adam Tkac <atkac@redhat.com>
----
- glx/glxdri.c | 2 --
- glx/glxdri2.c | 2 --
- glx/glxdriswrast.c | 2 --
- glx/glxext.c | 27 +++++++++++++++++++++++++++
- glx/glxserver.h | 3 +++
- os/utils.c | 9 +++++++++
- 6 files changed, 39 insertions(+), 6 deletions(-)
-
-diff --git a/glx/glxdri.c b/glx/glxdri.c
-index 5b78cec..ce29ae2 100644
---- a/glx/glxdri.c
-+++ b/glx/glxdri.c
-@@ -860,8 +860,6 @@ static const __DRIextension *loader_extensions[] = {
-
-
-
--static const char dri_driver_path[] = DRI_DRIVER_PATH;
--
- static Bool
- glxDRIEnterVT (int index, int flags)
- {
-diff --git a/glx/glxdri2.c b/glx/glxdri2.c
-index 2d6090c..49265ec 100644
---- a/glx/glxdri2.c
-+++ b/glx/glxdri2.c
-@@ -579,8 +579,6 @@ static const __DRIextension *loader_extensions[] = {
- NULL
- };
-
--static const char dri_driver_path[] = DRI_DRIVER_PATH;
--
- static Bool
- glxDRIEnterVT (int index, int flags)
- {
-diff --git a/glx/glxdriswrast.c b/glx/glxdriswrast.c
-index 6a34393..37c1dce 100644
---- a/glx/glxdriswrast.c
-+++ b/glx/glxdriswrast.c
-@@ -438,8 +438,6 @@ initializeExtensions(__GLXDRIscreen *screen)
- }
- }
-
--static const char dri_driver_path[] = DRI_DRIVER_PATH;
--
- static __GLXscreen *
- __glXDRIscreenProbe(ScreenPtr pScreen)
- {
-diff --git a/glx/glxext.c b/glx/glxext.c
-index 89e58b0..5e7cf23 100644
---- a/glx/glxext.c
-+++ b/glx/glxext.c
-@@ -608,3 +608,30 @@ static int __glXDispatch(ClientPtr client)
-
- return retval;
- }
-+
-+char *dri_driver_path = DRI_DRIVER_PATH;
-+
-+int GlxProcessArguments(int argc, char *argv[], int i)
-+{
-+ if (strncmp(argv[i], "-dridir", 7) == 0) {
-+ if (++i < argc) {
-+#if !defined(WIN32) && !defined(__CYGWIN__)
-+ if (getuid() != geteuid()) {
-+ LogMessage(X_WARNING, "-dridir is not available for setuid X servers\n");
-+ return -1;
-+ } else
-+#endif
-+ {
-+ if (strlen(argv[i]) < PATH_MAX) {
-+ dri_driver_path = argv[i];
-+ return 2;
-+ } else {
-+ LogMessage(X_ERROR, "-dridir pathname too long\n");
-+ return -1;
-+ }
-+ }
-+ }
-+ }
-+
-+ return 0;
-+}
-diff --git a/glx/glxserver.h b/glx/glxserver.h
-index 1daf977..082ff82 100644
---- a/glx/glxserver.h
-+++ b/glx/glxserver.h
-@@ -251,4 +251,7 @@ extern unsigned glxMinorVersion;
-
- extern int __glXEventBase;
-
-+extern char *dri_driver_path;
-+extern int GlxProcessArguments(int argc, char *argv[], int i);
-+
- #endif /* !__GLX_server_h__ */
-diff --git a/os/utils.c b/os/utils.c
-index 13d3b3f..ff97c86 100644
---- a/os/utils.c
-+++ b/os/utils.c
-@@ -141,6 +141,7 @@ Bool noDPMSExtension = FALSE;
- #ifdef GLXEXT
- Bool noGlxExtension = FALSE;
- Bool noGlxVisualInit = FALSE;
-+extern int GlxProcessArguments(int argc, char *argv[], int i);
- #endif
- #ifdef SCREENSAVER
- Bool noScreenSaverExtension = FALSE;
-@@ -721,6 +722,14 @@ ProcessCommandLine(int argc, char *argv[])
- i+= skip-1;
- else UseMsg();
- }
-+#ifdef GLXEXT
-+ else if ((skip = GlxProcessArguments(argc,argv,i)) != 0) {
-+ if (skip > 0)
-+ i += skip - 1;
-+ else
-+ UseMsg();
-+ }
-+#endif
- #ifdef RLIMIT_DATA
- else if ( strcmp( argv[i], "-ld") == 0)
- {
---
-1.7.3.2
-
+++ /dev/null
-From 5e6e99eaef3ca346c78a3e520ed58ec8b8100b41 Mon Sep 17 00:00:00 2001
-From: Adam Tkac <atkac@redhat.com>
-Date: Thu, 2 Sep 2010 17:24:38 +0200
-Subject: [PATCH] Add -xkbcompdir parameter to modify "xkbcomp" path from commandline.
-
-Signed-off-by: Adam Tkac <atkac@redhat.com>
----
- xkb/xkbInit.c | 21 +++++++++++++++++++++
- 1 files changed, 21 insertions(+), 0 deletions(-)
-
-diff --git a/xkb/xkbInit.c b/xkb/xkbInit.c
-index fbf8f14..29fb33e 100644
---- a/xkb/xkbInit.c
-+++ b/xkb/xkbInit.c
-@@ -742,7 +742,28 @@ XkbProcessArguments(int argc,char *argv[],int i)
- }
- }
- return j;
-+ } else if (strncmp(argv[i], "-xkbcompdir", 11)==0) {
-+ if (++i < argc) {
-+#if !defined(WIN32) && !defined(__CYGWIN__)
-+ if (getuid() != geteuid()) {
-+ LogMessage(X_WARNING, "-xkbdir is not available for setuid X servers\n");
-+ return -1;
-+ } else
-+#endif
-+ {
-+ if (strlen(argv[i]) < PATH_MAX) {
-+ XkbBinDirectory = argv[i];
-+ return 2;
-+ } else {
-+ LogMessage(X_ERROR, "-xkbcompdir pathname too long\n");
-+ return -1;
-+ }
-+ }
-+ } else {
-+ return -1;
-+ }
- }
-+
- if ((strcmp(argv[i], "-ardelay") == 0) ||
- (strcmp (argv[i], "-ar1") == 0)) { /* -ardelay int */
- if (++i >= argc) UseMsg ();
---
-1.7.2.3
-