--- /dev/null
+diff -urN gtk-vnc-0.3.7.abs/bootstrap gtk-vnc-0.3.7.dan3/bootstrap
+--- gtk-vnc-0.3.7.abs/bootstrap 1970-01-01 01:00:00.000000000 +0100
++++ gtk-vnc-0.3.7.dan3/bootstrap 2008-10-09 15:23:00.000000000 +0100
+@@ -0,0 +1,89 @@
++#!/bin/sh
++# Run this after autogen.sh, to pull in all of the gnulib-related bits.
++# It's important to run *after* autogen.sh, since it updates some of
++# the same files autogen.sh does, yet those from gnulib are newer,
++# and match the tests. So if a gnulib bug has been fixed since the
++# snapshot taken for whatever gettext release you're using, yet you
++# run "make check" against the wrong version, the corresponding unit
++# test in gl-tests/ may well fail.
++
++usage() {
++ echo >&2 "\
++Usage: $0 [OPTION]...
++Bootstrap this package from the checked-out sources.
++
++Options:
++ --gnulib-srcdir=DIRNAME Specify the local directory where gnulib
++ sources reside. Use this if you already
++ have gnulib sources on your machine, and
++ do not want to waste your bandwidth downloading
++ them again.
++
++If the file bootstrap.conf exists in the current working directory, its
++contents are read as shell variables to configure the bootstrap.
++
++Running without arguments will suffice in most cases.
++"
++}
++
++for option
++do
++ case $option in
++ --help)
++ usage
++ exit;;
++ --gnulib-srcdir=*)
++ GNULIB_SRCDIR=`expr "$option" : '--gnulib-srcdir=\(.*\)'`;;
++ *)
++ echo >&2 "$0: $option: unknown option"
++ exit 1;;
++ esac
++done
++
++cleanup_gnulib() {
++ st=$?
++ rm -fr .gnulib
++ exit $st
++}
++
++case ${GNULIB_SRCDIR--} in
++-)
++ if [ ! -d .gnulib ]; then
++ echo "$0: getting gnulib files..."
++
++ trap cleanup_gnulib 1 2 13 15
++
++ git clone --depth 1 git://git.sv.gnu.org/gnulib .gnulib ||
++ cleanup_gnulib
++
++ trap - 1 2 13 15
++ fi
++ GNULIB_SRCDIR=.gnulib
++esac
++
++gnulib_tool=$GNULIB_SRCDIR/gnulib-tool
++<$gnulib_tool || exit
++
++modules='
++getaddrinfo
++socket
++recv
++send
++connect
++malloc
++vc-list-files
++'
++
++# Tell gnulib to:
++# require LGPLv2+
++# put *.m4 files in new gnulib/m4/ dir
++# put *.[ch] files in new gnulib/lib/ dir.
++
++$gnulib_tool \
++ --lgpl=2 \
++ --with-tests \
++ --m4-base=gnulib/m4 \
++ --source-base=gnulib/lib \
++ --tests-base=gnulib/tests \
++ --import $modules
++
+diff -urN gtk-vnc-0.3.7.abs/configure.ac gtk-vnc-0.3.7.dan3/configure.ac
+--- gtk-vnc-0.3.7.abs/configure.ac 2008-09-05 13:32:15.000000000 +0100
++++ gtk-vnc-0.3.7.dan3/configure.ac 2008-10-09 15:23:00.000000000 +0100
+@@ -23,15 +23,29 @@
+
+ AC_CONFIG_HEADERS([config.h:config.hin])
+
+-
+ AC_CANONICAL_TARGET
+
+ AM_INIT_AUTOMAKE(gtk-vnc, 0.3.7)
+
++
++dnl gl_INIT uses m4_foreach_w, yet that is not defined in autoconf-2.59.
++dnl In order to accommodate developers with such old tools, here's a
++dnl replacement definition.
++m4_ifndef([m4_foreach_w],
++ [m4_define([m4_foreach_w],
++ [m4_foreach([$1], m4_split(m4_normalize([$2]), [ ]), [$3])])])
++
++gl_EARLY
++gl_INIT
++
+ AC_PROG_CC_STDC
+ AM_PROG_CC_C_O
++AC_LIBTOOL_WIN32_DLL
++
+ AC_PROG_LIBTOOL
+
++AC_CHECK_HEADERS([pwd.h winsock2.h])
++
+ AC_ARG_WITH(python,
+ [ --with-python build python bindings],
+ [case "${withval}" in
+@@ -234,6 +248,8 @@
+
+ AC_CONFIG_FILES(
+ Makefile
++ gnulib/lib/Makefile
++ gnulib/tests/Makefile
+ src/Makefile
+ examples/Makefile
+ plugin/Makefile
+diff -urN gtk-vnc-0.3.7.abs/Makefile.am gtk-vnc-0.3.7.dan3/Makefile.am
+--- gtk-vnc-0.3.7.abs/Makefile.am 2008-09-05 13:32:15.000000000 +0100
++++ gtk-vnc-0.3.7.dan3/Makefile.am 2008-10-09 15:22:57.000000000 +0100
+@@ -1,5 +1,9 @@
+
+-SUBDIRS = src examples plugin
++SUBDIRS = gnulib/lib src examples plugin gnulib/tests
++
++ACLOCAL_AMFLAGS = -I gnulib/m4
++
++
+
+ pkgconfig_DATA = @PACKAGE@-1.0.pc
+ pkgconfigdir = $(libdir)/pkgconfig
+diff -urN gtk-vnc-0.3.7.abs/src/continuation.c gtk-vnc-0.3.7.dan3/src/continuation.c
+--- gtk-vnc-0.3.7.abs/src/continuation.c 2008-09-05 13:32:16.000000000 +0100
++++ gtk-vnc-0.3.7.dan3/src/continuation.c 2008-10-09 15:23:00.000000000 +0100
+@@ -8,6 +8,8 @@
+ * GTK VNC Widget
+ */
+
++#include <config.h>
++
+ #include "continuation.h"
+
+ /*
+diff -urN gtk-vnc-0.3.7.abs/src/coroutine_gthread.c gtk-vnc-0.3.7.dan3/src/coroutine_gthread.c
+--- gtk-vnc-0.3.7.abs/src/coroutine_gthread.c 2008-09-05 13:32:16.000000000 +0100
++++ gtk-vnc-0.3.7.dan3/src/coroutine_gthread.c 2008-10-09 15:23:00.000000000 +0100
+@@ -8,6 +8,8 @@
+ * GTK VNC Widget
+ */
+
++#include <config.h>
++
+ #include "coroutine.h"
+ #include <stdio.h>
+ #include <stdlib.h>
+@@ -17,13 +19,24 @@
+ static struct coroutine *current;
+ static struct coroutine leader;
+
++#if 0
++#define CO_DEBUG(OP) fprintf(stderr, "%s %p %s %d\n", OP, g_thread_self(), __FUNCTION__, __LINE__)
++#else
++#define CO_DEBUG(OP)
++#endif
++
+ static void coroutine_system_init(void)
+ {
+- if (!g_thread_supported())
++ if (!g_thread_supported()) {
++ CO_DEBUG("INIT");
+ g_thread_init(NULL);
++ }
++
+
+ run_cond = g_cond_new();
+ run_lock = g_mutex_new();
++ CO_DEBUG("LOCK");
++ g_mutex_lock(run_lock);
+
+ /* The thread that creates the first coroutine is the system coroutine
+ * so let's fill out a structure for it */
+@@ -42,17 +55,22 @@
+ static gpointer coroutine_thread(gpointer opaque)
+ {
+ struct coroutine *co = opaque;
+-
++ CO_DEBUG("LOCK");
+ g_mutex_lock(run_lock);
+- while (!co->runnable)
++ while (!co->runnable) {
++ CO_DEBUG("WAIT");
+ g_cond_wait(run_cond, run_lock);
++ }
+
++ CO_DEBUG("RUNNABLE");
+ current = co;
+ co->data = co->entry(co->data);
+ co->exited = 1;
+
+ co->caller->runnable = TRUE;
++ CO_DEBUG("BROADCAST");
+ g_cond_broadcast(run_cond);
++ CO_DEBUG("UNLOCK");
+ g_mutex_unlock(run_lock);
+
+ return NULL;
+@@ -62,7 +80,8 @@
+ {
+ if (run_cond == NULL)
+ coroutine_system_init();
+-
++
++ CO_DEBUG("NEW");
+ co->thread = g_thread_create_full(coroutine_thread, co, co->stack_size,
+ FALSE, TRUE,
+ G_THREAD_PRIORITY_NORMAL,
+@@ -88,15 +107,19 @@
+ to->runnable = TRUE;
+ to->data = arg;
+ to->caller = from;
++ CO_DEBUG("BROADCAST");
+ g_cond_broadcast(run_cond);
++ CO_DEBUG("UNLOCK");
+ g_mutex_unlock(run_lock);
+-
++ CO_DEBUG("LOCK");
+ g_mutex_lock(run_lock);
+- while (!from->runnable)
++ while (!from->runnable) {
++ CO_DEBUG("WAIT");
+ g_cond_wait(run_cond, run_lock);
+-
++ }
+ current = from;
+
++ CO_DEBUG("SWAPPED");
+ return from->data;
+ }
+
+@@ -111,6 +134,7 @@
+ fprintf(stderr, "Co-routine is re-entering itself\n");
+ abort();
+ }
++ CO_DEBUG("SWAP");
+ return coroutine_swap(coroutine_self(), to, arg);
+ }
+
+@@ -121,6 +145,8 @@
+ fprintf(stderr, "Co-routine is yielding to no one\n");
+ abort();
+ }
++
++ CO_DEBUG("SWAP");
+ coroutine_self()->caller = NULL;
+ return coroutine_swap(coroutine_self(), to, arg);
+ }
+diff -urN gtk-vnc-0.3.7.abs/src/coroutine_ucontext.c gtk-vnc-0.3.7.dan3/src/coroutine_ucontext.c
+--- gtk-vnc-0.3.7.abs/src/coroutine_ucontext.c 2008-09-05 13:32:16.000000000 +0100
++++ gtk-vnc-0.3.7.dan3/src/coroutine_ucontext.c 2008-10-09 15:23:00.000000000 +0100
+@@ -8,6 +8,8 @@
+ * GTK VNC Widget
+ */
+
++#include <config.h>
++
+ #include <sys/types.h>
+ #include <sys/mman.h>
+ #include <stdio.h>
+diff -urN gtk-vnc-0.3.7.abs/src/gvnc.c gtk-vnc-0.3.7.dan3/src/gvnc.c
+--- gtk-vnc-0.3.7.abs/src/gvnc.c 2008-09-05 13:32:16.000000000 +0100
++++ gtk-vnc-0.3.7.dan3/src/gvnc.c 2008-10-09 15:23:00.000000000 +0100
+@@ -8,13 +8,14 @@
+ * GTK VNC Widget
+ */
+
++#include <config.h>
++
+ #include "gvnc.h"
+
+ #include <sys/socket.h>
+ #include <netinet/in.h>
+ #include <arpa/inet.h>
+
+-#include <netdb.h>
+ #include <string.h>
+ #include <unistd.h>
+ #include <stdio.h>
+@@ -40,6 +41,14 @@
+ #include <gdk/gdkkeysyms.h>
+
+ #include "vnc_keycodes.h"
++#include "getaddrinfo.h"
++
++/* AI_ADDRCONFIG is missing on some systems and gnulib won't provide it
++ even if its emulated getaddrinfo() for us . */
++#ifndef AI_ADDRCONFIG
++# define AI_ADDRCONFIG 0
++#endif
++
+
+ struct wait_queue
+ {
+@@ -185,7 +194,6 @@
+
+ g_io_add_watch(channel, cond | G_IO_HUP | G_IO_ERR | G_IO_NVAL, g_io_wait_helper, coroutine_self());
+ ret = coroutine_yield(NULL);
+-
+ return *ret;
+ }
+
+@@ -344,7 +352,7 @@
+ size_t offset = 0;
+
+ if (gvnc->has_error) return -EINVAL;
+-
++
+ while (offset < len) {
+ size_t tmp;
+
+@@ -376,7 +384,7 @@
+
+ if (ret == -1) {
+ switch (errno) {
+- case EAGAIN:
++ case EWOULDBLOCK:
+ if (gvnc->wait_interruptable) {
+ if (!g_io_wait_interruptable(&gvnc->wait,
+ gvnc->channel, G_IO_IN))
+@@ -386,7 +394,7 @@
+ case EINTR:
+ continue;
+ default:
+- GVNC_DEBUG("Closing the connection: gvnc_read() - ret=-1\n");
++ GVNC_DEBUG("Closing the connection: gvnc_read() - errno=%d\n", errno);
+ gvnc->has_error = TRUE;
+ return -errno;
+ }
+@@ -436,12 +444,12 @@
+ gvnc->write_offset-offset);
+ if (ret == -1) {
+ switch (errno) {
+- case EAGAIN:
++ case EWOULDBLOCK:
+ g_io_wait(gvnc->channel, G_IO_OUT);
+ case EINTR:
+ continue;
+ default:
+- GVNC_DEBUG("Closing the connection: gvnc_flush\n");
++ GVNC_DEBUG("Closing the connection: gvnc_flush %d\n", errno);
+ gvnc->has_error = TRUE;
+ return;
+ }
+@@ -1341,12 +1349,12 @@
+ static int gvnc_read_zrle_rl(struct gvnc *gvnc)
+ {
+ int rl = 1;
+- uint8_t byte;
++ uint8_t b;
+
+ do {
+- byte = gvnc_read_u8(gvnc);
+- rl += byte;
+- } while (!gvnc_has_error(gvnc) && byte == 255);
++ b = gvnc_read_u8(gvnc);
++ rl += b;
++ } while (!gvnc_has_error(gvnc) && b == 255);
+
+ return rl;
+ }
+@@ -2802,12 +2810,12 @@
+ if (gvnc_has_error(gvnc))
+ return FALSE;
+
+- if (!gvnc->fmt.true_color_flag && gvnc->ops.get_preferred_pixel_format)
++ if (!gvnc->fmt.true_color_flag && gvnc->ops.get_preferred_pixel_format) {
+ if (gvnc->ops.get_preferred_pixel_format(gvnc->ops_data, &gvnc->fmt))
+ gvnc_set_pixel_format(gvnc, &gvnc->fmt);
+ else
+ goto fail;
+-
++ }
+ memset(&gvnc->strm, 0, sizeof(gvnc->strm));
+ /* FIXME what level? */
+ for (i = 0; i < 5; i++)
+@@ -2822,15 +2830,16 @@
+ return !gvnc_has_error(gvnc);
+ }
+
+-gboolean gvnc_open_fd(struct gvnc *gvnc, int fd)
++static gboolean gvnc_set_nonblock(int fd)
+ {
+- int flags;
+- if (gvnc_is_open(gvnc)) {
+- GVNC_DEBUG ("Error: already connected?\n");
++#ifdef __MINGW32__
++ unsigned long flags = 1;
++ if (ioctlsocket(fd, FIONBIO, &flags) < 0) {
++ GVNC_DEBUG ("Failed to set nonblocking flag\n");
+ return FALSE;
+ }
+-
+- GVNC_DEBUG("Connecting to FD %d\n", fd);
++#else
++ int flags;
+ if ((flags = fcntl(fd, F_GETFL)) < 0) {
+ GVNC_DEBUG ("Failed to fcntl()\n");
+ return FALSE;
+@@ -2840,6 +2849,21 @@
+ GVNC_DEBUG ("Failed to fcntl()\n");
+ return FALSE;
+ }
++#endif
++ return TRUE;
++}
++
++gboolean gvnc_open_fd(struct gvnc *gvnc, int fd)
++{
++ if (gvnc_is_open(gvnc)) {
++ GVNC_DEBUG ("Error: already connected?\n");
++ return FALSE;
++ }
++
++ GVNC_DEBUG("Connecting to FD %d\n", fd);
++
++ if (!gvnc_set_nonblock(fd))
++ return FALSE;
+
+ if (!(gvnc->channel = g_io_channel_unix_new(fd))) {
+ GVNC_DEBUG ("Failed to g_io_channel_unix_new()\n");
+@@ -2873,7 +2897,7 @@
+
+ runp = ai;
+ while (runp != NULL) {
+- int flags, fd;
++ int fd;
+ GIOChannel *chan;
+
+ if ((fd = socket(runp->ai_family, runp->ai_socktype,
+@@ -2883,17 +2907,8 @@
+ }
+
+ GVNC_DEBUG("Trying socket %d\n", fd);
+- if ((flags = fcntl(fd, F_GETFL)) < 0) {
+- close(fd);
+- GVNC_DEBUG ("Failed to fcntl()\n");
+- break;
+- }
+- flags |= O_NONBLOCK;
+- if (fcntl(fd, F_SETFL, flags) < 0) {
+- close(fd);
+- GVNC_DEBUG ("Failed to fcntl()\n");
+- break;
+- }
++ if (!gvnc_set_nonblock(fd))
++ break;
+
+ if (!(chan = g_io_channel_unix_new(fd))) {
+ close(fd);
+@@ -2904,14 +2919,15 @@
+ reconnect:
+ /* FIXME: Better handle EINPROGRESS/EISCONN return values,
+ as explained in connect(2) man page */
+- if ( (connect(fd, runp->ai_addr, runp->ai_addrlen) == 0) || errno == EISCONN) {
++ if ((connect(fd, runp->ai_addr, runp->ai_addrlen) == 0) ||
++ errno == EISCONN) {
+ gvnc->channel = chan;
+ gvnc->fd = fd;
+ freeaddrinfo(ai);
+ return !gvnc_has_error(gvnc);
+ }
+-
+- if (errno == EINPROGRESS) {
++ if (errno == EINPROGRESS ||
++ errno == EWOULDBLOCK) {
+ g_io_wait(chan, G_IO_OUT|G_IO_ERR|G_IO_HUP);
+ goto reconnect;
+ } else if (errno != ECONNREFUSED &&
+diff -urN gtk-vnc-0.3.7.abs/src/Makefile.am gtk-vnc-0.3.7.dan3/src/Makefile.am
+--- gtk-vnc-0.3.7.abs/src/Makefile.am 2008-09-05 13:32:15.000000000 +0100
++++ gtk-vnc-0.3.7.dan3/src/Makefile.am 2008-10-09 15:23:00.000000000 +0100
+@@ -4,13 +4,15 @@
+ lib_LTLIBRARIES = libgtk-vnc-1.0.la
+
+ libgtk_vnc_1_0_la_LIBADD = @GTK_LIBS@ @GTKGLEXT_LIBS@ @GNUTLS_LIBS@ \
+- @GTHREAD_LIBS@
++ @GTHREAD_LIBS@ \
++ ../gnulib/lib/libgnu.la
+ libgtk_vnc_1_0_la_CFLAGS = @GTK_CFLAGS@ @GTKGLEXT_CFLAGS@ @GNUTLS_CFLAGS@ \
+ @GTHREAD_CFLAGS@ @WARNING_CFLAGS@ \
+ -DSYSCONFDIR=\""$(sysconfdir)"\" \
+- -DG_LOG_DOMAIN=\"gtk-vnc\"
++ -DG_LOG_DOMAIN=\"gtk-vnc\" \
++ -I$(top_srcdir)gnulib/lib -I../gnulib/lib
+ libgtk_vnc_1_0_la_LDFLAGS = -Wl, @LD_VERSION_SCRIPT_SUPPORT@ \
+- -version-info 0:1:0
++ -version-info 0:1:0 -no-undefined
+
+ gtk_vnc_includedir = $(includedir)/gtk-vnc-1.0/
+ gtk_vnc_include_HEADERS = vncdisplay.h
+diff -urN gtk-vnc-0.3.7.abs/src/vncdisplay.c gtk-vnc-0.3.7.dan3/src/vncdisplay.c
+--- gtk-vnc-0.3.7.abs/src/vncdisplay.c 2008-10-09 15:21:21.000000000 +0100
++++ gtk-vnc-0.3.7.dan3/src/vncdisplay.c 2008-10-09 15:23:00.000000000 +0100
+@@ -8,6 +8,8 @@
+ * GTK VNC Widget
+ */
+
++#include <config.h>
++
+ #include "vncdisplay.h"
+ #include "coroutine.h"
+ #include "gvnc.h"
+@@ -24,7 +26,9 @@
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <unistd.h>
++#ifdef HAVE_PWD_H
+ #include <pwd.h>
++#endif
+
+ #if WITH_GTKGLEXT
+ #include <gtk/gtkgl.h>
+@@ -2191,33 +2195,44 @@
+
+ static int vnc_display_set_x509_credential(VncDisplay *obj, const char *name)
+ {
+- char sysdir[PATH_MAX], userdir[PATH_MAX];
+- struct passwd *pw;
+ char file[PATH_MAX];
++ char sysdir[PATH_MAX];
++#ifndef __MINGW32__
++ char userdir[PATH_MAX];
++ struct passwd *pw;
+ char *dirs[] = { sysdir, userdir };
++#else
++ char *dirs[] = { sysdir };
++#endif
+
+ strncpy(sysdir, SYSCONFDIR "/pki", PATH_MAX-1);
+ sysdir[PATH_MAX-1] = '\0';
+
++#ifndef __MINGW32__
+ if (!(pw = getpwuid(getuid())))
+ return TRUE;
+
+ snprintf(userdir, PATH_MAX-1, "%s/.pki", pw->pw_dir);
+ userdir[PATH_MAX-1] = '\0';
++#endif
+
+- if (vnc_display_best_path(file, PATH_MAX, "CA", "cacert.pem", dirs, 2) < 0)
++ if (vnc_display_best_path(file, PATH_MAX, "CA", "cacert.pem",
++ dirs, sizeof(dirs)/sizeof(dirs[0])) < 0)
+ return TRUE;
+ gvnc_set_credential_x509_cacert(obj->priv->gvnc, file);
+
+ /* Don't mind failures of CRL */
+- if (vnc_display_best_path(file, PATH_MAX, "CA", "cacrl.pem", dirs, 2) == 0)
++ if (vnc_display_best_path(file, PATH_MAX, "CA", "cacrl.pem",
++ dirs, sizeof(dirs)/sizeof(dirs[0])) == 0)
+ gvnc_set_credential_x509_cacert(obj->priv->gvnc, file);
+
+ /* Set client key & cert if we have them. Server will reject auth
+ * if it decides it requires them*/
+- if (vnc_display_best_path(file, PATH_MAX, name, "private/clientkey.pem", dirs, 2) == 0)
++ if (vnc_display_best_path(file, PATH_MAX, name, "private/clientkey.pem",
++ dirs, sizeof(dirs)/sizeof(dirs[0])) == 0)
+ gvnc_set_credential_x509_key(obj->priv->gvnc, file);
+- if (vnc_display_best_path(file, PATH_MAX, name, "clientcert.pem", dirs, 2) == 0)
++ if (vnc_display_best_path(file, PATH_MAX, name, "clientcert.pem",
++ dirs, sizeof(dirs)/sizeof(dirs[0])) == 0)
+ gvnc_set_credential_x509_cert(obj->priv->gvnc, file);
+
+ return FALSE;
+diff -urN gtk-vnc-0.3.7.abs/vc-list-files gtk-vnc-0.3.7.dan3/vc-list-files
+--- gtk-vnc-0.3.7.abs/vc-list-files 1970-01-01 01:00:00.000000000 +0100
++++ gtk-vnc-0.3.7.dan3/vc-list-files 2008-10-09 15:23:00.000000000 +0100
+@@ -0,0 +1,107 @@
++#!/bin/sh
++# List version-controlled file names.
++
++# Print a version string.
++scriptversion=2008-07-11.19
++
++# Copyright (C) 2006-2008 Free Software Foundation, Inc.
++
++# This program is free software: you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation, either version 3 of the License, or
++# (at your option) any later version.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program. If not, see <http://www.gnu.org/licenses/>.
++
++
++# List the specified version-controlled files.
++# With no argument, list them all. With a single DIRECTORY argument,
++# list the version-controlled files in that directory.
++
++# If there's an argument, it must be a single, "."-relative directory name.
++# cvsu is part of the cvsutils package: http://www.red-bean.com/cvsutils/
++
++postprocess=
++case $1 in
++ --help) cat <<EOF
++Usage: $0 [-C SRCDIR] [DIR]
++
++Output a list of version-controlled files in DIR (default .), relative to
++SRCDIR (default .). SRCDIR must be the top directory of a checkout.
++
++Options:
++ --help print this help, then exit
++ --version print version number, then exit
++ -C SRCDIR change directory to SRCDIR before generating list
++
++Report bugs and patches to <bug-gnulib@gnu.org>.
++EOF
++ exit ;;
++
++ --version)
++ year=`echo "$scriptversion" | sed 's/[^0-9].*//'`
++ cat <<EOF
++vc-list-files $scriptversion
++Copyright (C) $year Free Software Foundation, Inc,
++License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
++This is free software: you are free to change and redistribute it.
++There is NO WARRANTY, to the extent permitted by law.
++EOF
++ exit ;;
++
++ -C)
++ test "$2" = . || postprocess="| sed 's|^|$2/|'"
++ cd "$2" || exit 1
++ shift; shift ;;
++esac
++
++dir=
++case $# in
++ 0) ;;
++ 1) dir=$1 ;;
++ *) echo "$0: too many arguments" 1>&2
++ echo "Usage: $0 [-C srcdir] [DIR]" 1>&2; exit 1;;
++esac
++
++test "x$dir" = x && dir=.
++
++if test -d .git; then
++ eval exec git ls-files '"$dir"' $postprocess
++elif test -d .hg; then
++ eval exec hg locate '"$dir/*"' $postprocess
++elif test -d .bzr; then
++ test "$postprocess" = '' && postprocess="| sed 's|^\./||'"
++ eval exec bzr ls --versioned '"$dir"' $postprocess
++elif test -d CVS; then
++ test "$postprocess" = '' && postprocess="| sed 's|^\./||'"
++ if test -x build-aux/cvsu; then
++ eval build-aux/cvsu --find --types=AFGM '"$dir"' $postprocess
++ elif (cvsu --help) >/dev/null 2>&1; then
++ eval cvsu --find --types=AFGM '"$dir"' $postprocess
++ else
++ eval awk -F/ \''{ \
++ if (!$1 && $3 !~ /^-/) { \
++ f=FILENAME; \
++ if (f ~ /CVS\/Entries$/) \
++ f = substr(f, 0, length(f)-11); \
++ print f $2; \
++ }}'\'' \
++ `find "$dir" -name Entries -print` /dev/null' $postprocess
++ fi
++else
++ echo "$0: Failed to determine type of version control used in `pwd`" 1>&2
++ exit 1
++fi
++
++# Local variables:
++# eval: (add-hook 'write-file-hooks 'time-stamp)
++# time-stamp-start: "scriptversion="
++# time-stamp-format: "%:y-%02m-%02d.%02H"
++# time-stamp-end: "$"
++# End: